heise online | · | c't | · | iX | · | Technology Review | · | Telepolis | · | mobil | · | Security | · | Netze | · | heise open | · | heise resale | · | Autos | · | c't-TV | · | Jobs | · | Kiosk

Aktuelles Heft #### Support Hotline & FAQ Tipps & Tricks Treiber & BIOS Firmenkontakte #### Download Software zu c't Software-Verzeichnis c't-Projekte Testbilder & Vorlagen #### Service Tipp-Datenbank c't-CD-Register Internettarife Telefontarife Virenschutz #### Magazin Heftarchiv c't specials English Pages Benchmarks Red. Stuff Leserforum c't-Bildmotive URLs aus c't Schlagseite #### Aktionen Browsercheck Krypto-Kampagne Schulen ans Netz Netz gegen Kinderporno TV/Radio-Termine #### Info Abo & Heft Veranstaltungen Mediadaten Kontakt Impressum Kleinanzeigen und Veranstaltungen
| c't Projekte - c't-Bot und c't-Sim - Mailinglisten ## c't-Bot und c't-Sim [Voriger (Datum)] [Nächster (Datum)] [Voriger (Thread)] [Nächster (Thread)] [Nach Datum][Nach Thread] ### [ct-bot] Kalibrierung der Distanzsensren mittels EEPROM-Tabelle Absender: Peter Jonas Datum: Fr, 07.04.2006 00:02:11
    Hallo zusammen,
    bevor ich in den Osterurlaub gehe, möchte ich noch einen Patch zur Verfügung
    stellen, der mittels einer EEPROM-Tabelle die Kalibrierung der
    Distanzsensoren durchführen kann.

    Die Kalibrierung wird über zwei defines in der Datei ctbot.h gesteuert:

    #define CALIBRATE_DIST_SENSOR:
    Wenn diese Zeile aktiviert ist, geht der Roboter in den Kalibrierungsmodus

    #define USE_SENSOR_TABLE:
    Wenn diese Zeile aktiviert ist, wird im normalen Roboterbetrieb eine im
    EEPROM abgelegte Tabelle für die Linearisierung der Distanzsensoren benutzt.

    Im Kalibriermodus sieht man auf dem Display zunächst ein Menü. Man wird
    aufgefordert, den Roboter auf eine Distanz von 5cm zur Wand zu stellen. Wenn
    man das gemacht hat, drückt man die Taste "2" auf der Fernbedienung. Es wird
    nun aus den folgenden 100 Meßwerte pro Sensor ein Mittelwert gebildet.
    Dieser Wert wird dann in den beiden Tabellen (links und rechts) im EEPROM
    abgelegt. Danach wird man aufgefordert, die Distanz 10cm einzustellen und
    der Vorgang beginnt von vorn.

    Mit der Distanz 80cm ist die Kalibrierung abgeschlossen. Die Sensorwerte für
    die Distanzen 5, 10, 50 ... 80 cm sind nun im EEPROM.

    Mit der Taste "0" kommt man in den normalen Roboterbetrieb zurück und kann
    die Kalibrierung gleich testen (USE_SENSOR_TABLE muss dafür definiert sein).

    Wenn die Sensoren Distanzen messen, die außerhalb des eingestellten
    Distanzbereiches liegen, werden die Werte 0 bzw. 999 ausgegeben.

    Bei den Kalibrierungsschritten kann es noch passieren, dass die Tasten
    prellen. Die "Entprellung", die bei der Standard-Tastaturabfrage bereits
    eingebaut ist, funktioniert hier nicht, da ich direkt auf die Funktion
    ir_read() zugreife. Der Workaround in meiner Routine unterdrückt zwar das
    Prellen, bewirkt aber auch, dass man manchmal beim Weiterschalten der zu
    messenden Distanz die Taste "2" erneut drücken muss.

    Im EEPROM werden für den Distanzbereich 5-80cm 16 Messwerte pro Sensor
    gespeichert. Da die Sensoren jedoch auch Werte für Distanzen zwischen den
    gemessenen Distanzen ausgeben, muß man zwischen den Stützwerten
    interpolieren, um für jeden Sensorwert einen cm-Wert liefern zu können.

    Dafür gibt es zwei Lösungsansätze:

    1. Die Interpolation findet schon vor der Speicherung der EEPROM-Tabellen
    statt. Nachteil: Die Tabellen werden sehr groß, und man muß evt. auf
    int16-Werte übergehen, um eine ausreichende Genauigkeit zu erzielen.

    2. Man speichert nur die gemessenen 16 Werte pro Sensor ab und interpoliert
    erst beim normalen Betrieb, wenn ein neuer Distanzwert benötigt wird.
    Vorteil: Die EEPROM-Tabellen sind sehr kurz. Nachteil: Die Interpolation muß
    im normalen Roboterbetrieb erfolgen. Für einen aktuellen Sensorwert muß die
    Tabelle durchsucht werden, festgestellt werden, zwsichen welchen zwei
    gespeicherten Stützstellen der Messwert liegt, und dann interpoliert werden.
    Bislang habe ich aber noch keine Probleme durch diese notwendigen
    Prozessoraufgaben feststellen können.

    Ich habe die 2. Methode verwendet, weil mir bei 1) die Tabellen zu groß
    wurden oder aber die Genauigkeit zu gering war.

    Wenn man die EEPROM-Tabelle geschrieben hat, muss man später beim Flashen
    mittels PonyProg aufpassen. Ein Write-All bügelt die gemessenen Werte wieder
    über. Die Messwerte liegen im Adreßbereich ab 0x8000.

    Gruß
    Peter Jonas

    --
    Echte DSL-Flatrate dauerhaft für 0,- Euro*!
    "Feel free" mit GMX DSL! http://www.gmx.net/de/go/dsl
Antworten: Re: [ct-bot] Kalibrierung der Distanzsensren mittels EEPROM-Tabelle From: Benjamin Benz Voriger (Datum): Re: [ct-bot] Patch fuer rc5-codes.h / Conrad FB, Tobias Lawrenz Nächster (Datum): [ct-bot] Kalibrierung der Distanzsensren mittels EEPROM-Tabelle, Peter Jonas Voriger (Thread): Re: AW: [ct-bot] Auswählen von Screens ohne Farb-Tasten auf der FB, Benjamin Benz Nächster (Thread): Re: [ct-bot] Kalibrierung der Distanzsensren mittels EEPROM-Tabelle, Benjamin Benz Indizes: Datum Thread |

Copyright © 2007 Heise Zeitschriften Verlag | Kritik, Anregungen bitte an c't-WWW | Datenschutzhinweis Impressum