Kalibrierung Distanzsensoren

Die Programmierung des c't-Bot
Antworten
PaSam

Kalibrierung Distanzsensoren

Beitrag von PaSam » 03 Okt 2007, 18:42

Hallo alle zusammen,

ich habe mir das devel projekt aus dem svn ausgecheckt und habe unter BEHAVIOUR_AVAILABLE.H die Kommentarzeichen von "#define BEHAVIOUR_CALIBRATE_SHARPS_AVAILABLE" entfernt um meine Distanzsensoren zu kalibrieren.
Mit der Taste 6 komme ich zwar in das Menü rein, doch leider springt es mit der Taste MUTE nicht weiter.

Kann mir da jemand helfen

mfg

Stef_One

Beitrag von Stef_One » 03 Okt 2007, 20:12

Guuk mal ob du in der /include/rc5-codes.h auch den richtigen code für die mute taste drin hast!

PaSam

Beitrag von PaSam » 04 Okt 2007, 09:41

Hi,

ich danke dir für die schnelle Antwort. Ich habe dort den Standard Fernbedienung drin und habe nichts weiteres verändert:

Ausgewählte Fernbedienung:

#define RC_HAVE_HQ_RC_UNIVERS29_334

Muss ich dort etwas genaueres ändern.

mfg

PaSam

Beitrag von PaSam » 04 Okt 2007, 11:30

Hi,

danke ich habe das Problem gelöst in dem ich die Mute-taste mit der taste 4 ausgetauscht habe im CODE.

mfg

foobar0815

Beitrag von foobar0815 » 16 Okt 2008, 20:16

ich hab noch eine allgemeine frage und will kein eigenes thema aufmachen, das passt hier ganz gut.

und zwar kalibriere ich mit der stable version meine bots (habe vier, die sollen sich alle gleich verhalten, vorallem die abstandssensoren!).

meine fernbedienung wird richtig erkannt, ich kann in den kalibriermodus schalten und auch dort mich durch die abstaende klicken (10-80cm). dann bekomme ich:
"fertig :)"

schaut gut aus, ich starte den bot neu und schau was mir das programm ausgibt. ueberaschung:

nur mist, auch wenn nichts in sichtweite ist, flackern die leds wie wie wild rum, die werte springen dauernd hin und her, egal ob ich die sharps zuhalte oder nicht.

aktiviert in der ctbot.h habe ich:
#define LED_AVAILABLE
#define DISPLAY_AVAILABLE
#define ADC_AVAILABLE
#define ENA_AVAILABLE
#define SHIFT_AVAILABLE
#define IR_AVAILABLE
#define RC5_AVAILABLE
#define BEHAVIOUR_AVAILABLE
#define BEHAVIOUR_CALIBRATE_SHARPS_AVAILABLE

muss ich irgendwo aktivieren dass er die eepromtabelle benutzt?

irgendwas macht er mit dem eeprom, wenn ich es auslese bekomme ich dateien mit 2.4KB die sich mittendrin auch bischen unterscheiden.

wie kann ich die wertepaare aus dem eeprom auslesen? dann koennte ich in der sensor_correction mit einer #define-weiche den bot auswaehlen. oder werden die werte in der sensor_correction blos benutzt, wenn im eeprom noch nichts drinsteht?

weiterhin verstehe ich den einsatz von sensor_correction.h noch nicht, da ich vier verschiedene bots habe, die alle unterschiedliche sensoren (also die fertigungsabweichung, typ is gleich) besitzen jedoch mit den gleichen programmen gefuettert werden. d.h. die sensor_correction stimmt evtl fuer bot1, bei den andern drei ist sie wieder daneben. ich wuerd mich gern absolut auf die eepromwerte verlassen, die mess ich einmal rein, schreib die eeprom-protect-fuse und dann ist gut.

hoffe es hat jemand eine idee, und nein, ich kann nicht auf devel wechseln.

danke bereits im vorraus!

eax
Friends of Robby
Friends of Robby
Beiträge: 755
Registriert: 18 Jan 2006, 16:16
Wohnort: Karlsruhe

Beitrag von eax » 20 Okt 2008, 13:41

Hi,

also die Umrechnung der Sensormesswerte in Entfernungen erfolg IMMER über die Daten im EEPROM. Um die dort nötigen Werte zu hinterlegen, führst du einmal pro Bot das Kalibrierungsverhalten aus (wie beschrieben), anschließend stehen und bleiben die Daten im EEPROM.
In der Datei sensor_correction.h kann man diese Werte ebenfalls eintragen, der Compiler schreibt sie dann in die ct-Bot.eep (nicht in ct-Bot.hex, die ins Flash kommt). Das hat den Vorteil, das man erstens bei einem ganz neuen Bot erstmal schon Default-Werte drin hat, um zu sehen, ob die Distanzsensoren überhaupt funktionieren (kleinerer Abstand -> kleinere Werte; größerer Abstand -> größere Werte; mehr sagt das dann natürlich noch nicht aus) und ermöglicht es zweitens, nach einem Prozessortausch die für den Bot speziellen Daten wieder ins EEPROM schreiben zu können, ohne das Kalibrierungsverhalten starten zu müssen. Außerdem kann sich die Zuordnung der Daten im EEPROM ändern, wenn man neue EEPROM-Variablen im Code hinzufügt, in diesem Fall muss man die eep-Datei auch erneut übertragen. Stehen in sensor_correction.h die Werte, die das Kalibrierungsverhalten per LOG ausgegeben hat, spart man sich die anschließende Kalibrierung.
Wenn du sensor_correction.h nicht verwenden bzw. mit deinen Daten aktualisieren willst, kannst du auch problemlos darauf verzichten, mit den o.a. Nachteilen halt.

Wenn die Kalibrierung bei dir nicht funktioniert, könnten dafür zwei Fehler verantwortlich sein:
1.) Die Distanzsensoren liefern keine korrekten Daten - dann ist natürlich auch die Kalibrierung nicht sinnvoll möglich --> Rohdaten der Sensoren überprüfen.
2.) Du hast eine inkompatible Version der avr-libc. In einer Version kam da jemand auf die Idee, bei eeprom_write_block() die Reihenfolge der Parameter zu vertauschen - dadurch funktioniert natürlich das Kalibrierungsverhalten nicht mehr. Inzwischen haben die Entwickler die alte Reihenfolge wiederhergestellt. Die inkompatible Version wurde mit irgendeinem WinAVR ausgeliefert, ich weiß jetzt nicht mehr genau mit welchem. Bei Linux kommt es drauf an, welche Version die Paketverwaltung benutzt, wenn man die avr-libc selbst übersetzt, verwendet man am besten die neueste Version aus dem CVS.
Im devel-Zweig ist das Problem mit der avr-libc Version bereits umgangen, wann das zu stable wird, weiß ich jetzt nicht. Es ist kein einfacher Bugfix gewesen, sondern eine komplett überarbeitete Lösung um das EEPROM anzusprechen.
Details zu diesem Problem stehen unter http://www.heise.de/ct/projekte/machmit ... ticket/173.

Grüße,
Timo

foobar0815

Beitrag von foobar0815 » 21 Okt 2008, 21:38

danke schonmal fuer dein post, sehr informativ. was es nicht alles gibt, drehn die einfach die args um.

wie ueberpruefe ich am einfachsten die rohdaten der sensoren?

ich glaube aber sie funktionieren im prinzip, aber wissen ist besser.

und gibts ein fertiges behavior oder so um die daten aus dem eeprom auszulesen und am display auszugeben? evtl per FB durchschalten oder so?


//edit: ich weiss nun dass es an dem offset vom eeprom liegt. in meiner modifizierten ctbot umgebung liest er mal 24 mal 67 aus, im ctstable zweig ist es aber 0. ueberschreib ich den wert per hand mit 0 geht es. wo muss ich da ansetzen? die definitionen sind die gleichen. verschiebt sich was im eeprom?

Zitronenfalter

Re: Kalibrierung Distanzsensoren

Beitrag von Zitronenfalter » 01 Nov 2011, 18:37

So, ich grab das hier noch mal aus.
Ich versuche seit zwei Wochenenden, die Sensoren zu kalibrieren.
Fernbedienung ist richtig eingestellt.
Auch #define BEHAVIOUR_CALIBRATE_SHARPS_AVAILABLE ist nicht mehr auskommentiert. Wenn der Bot läuft und ich die 6 drücke, kommt auch der erste Screen von dem Kalibrierungsdings. Aber wenn ich Mute drücke, gehts nicht weiter. Wenn ich im behaviour_calibrate_sharps.c eine andere taste einstelle, das Prog neu flashe und dann 6 drücke, kommt wieder der erste screen, nach drücken der geänderten Taste passiert wieder
Allerdings resettet sich mein Bot immer mal, etwa 3 bis 20 mal in 5 Minuten, egal ob ich die Kalibrierung für die Distanzsensoren aktiviere oder nicht.
Gibt es da einen Zusammenhang? Und wie komme ich endlich zu dem nächsten Screen, damit ich die Sensoren endlich kalibrieren kann?

So, hat grad gemerkt, dass wenn ich BEHAVIOUR_CALIBRATE_PID_AVAILABLE aktiviere, der Bot überhaupt nicht auf die Taste 6 der Fernbedienung reagiert. Auch der Teil in rc5.c bleibt grau.

tobi

Re: Kalibrierung Distanzsensoren

Beitrag von tobi » 04 Nov 2011, 15:23

Welche Fernbedienung benutzt du denn?

Und wenn sich dein Bot dauernd resettet, hast du die Modifkationen zur Spannungsstabilisierung eingebaut?

Zitronenfalter

Re: Kalibrierung Distanzsensoren

Beitrag von Zitronenfalter » 05 Nov 2011, 16:52

Ich hab die vivanco UR 2. Hab auch in rc5-codes.h die Fernbedienung hinzugefügt und alle notwendigen Tastencodes reingeschrieben. Die Fernbedienung funktioniert ja auch (fast) immer, trotz einiger fehlender Tasten, die man durch andere ersetzen kann. Ich probiere aber auch mal die normale Fernsehfernbedienung

Außer Maussensor tieferlegen hab ich zusätzlich zum Grundaufbau nur noch das Display angebaut, die Mods zur Stabilisierung der Spannung und auch der Sharps hab ich noch nicht gemacht, ich wollte erst einmal, das der Bot überhaupt funktioniert und ein paar Verhalten macht. Ich werds demnächst mal probieren, aber ich fürchte, dass das leider das Fernbedienungsproblem nicht lösen wird.

eax
Friends of Robby
Friends of Robby
Beiträge: 755
Registriert: 18 Jan 2006, 16:16
Wohnort: Karlsruhe

Re: Kalibrierung Distanzsensoren

Beitrag von eax » 09 Nov 2011, 17:36

Hi,

hast du den USB-2-Bot-Adapter (oder alternativ das WLAN-Modul)? Dann kannst du Fernbedienungskommandos auch vom Sim aus absenden (vorher in rc5-codes.h auf die Standard-FB umstellen) und testen, ob es damit funktioniert, um den Fehler einzugrenzen.
Ansonsten würde ich ein paar Debug-Ausgaben z.B. über die LEDs hinzufügen (LED_on(LED_ROT); nach der Tastenauswertung oder so).

BEHAVIOUR_CALIBRATE_SHARPS_AVAILABLE und BEHAVIOUR_CALIBRATE_PID_AVAILABLE benutzen Taste 6 gemeinsam, d.h. es ist eigentlich so gedacht, zuerst das eine und dann das andere zu aktivieren. Alternativ kannst du beide Verhalten aber auch gleichzeitig aktivieren und über das lokale RemoteCall-Display starten.

Gruß,
Timo
Timo -- Meine Beiträge sind unter CC-BY-SA freigegeben

Antworten