Kalibrierung Distanzsensoren
Kalibrierung Distanzsensoren
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
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
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!
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!
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
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
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?
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?
Re: Kalibrierung Distanzsensoren
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.
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.
Re: Kalibrierung Distanzsensoren
Welche Fernbedienung benutzt du denn?
Und wenn sich dein Bot dauernd resettet, hast du die Modifkationen zur Spannungsstabilisierung eingebaut?
Und wenn sich dein Bot dauernd resettet, hast du die Modifkationen zur Spannungsstabilisierung eingebaut?
Re: Kalibrierung Distanzsensoren
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.
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.
Re: Kalibrierung Distanzsensoren
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
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