Absender: Peter König
Datum: Fr, 17.03.2006 17:23:02
Hallo zusammen, im Lauf der Nacht gehen wieder neue Versionen des Codes für c't-Botund c't-Sim online, im CVS sind sie bereits jetzt enthalten. Das neue Verhalten des Bots wird in c't 7/06 beschrieben, die am Montag, den 20.3. am Kiosk erhältlich ist.
Was ist neu? c't-Bot: c’t-Bots trainieren jetzt Slalomfahrten – ganz ohne vorher wissen zu müssen, wie der Kurs sich drehen und wenden wird. Am Beispiel dieser Aufgabe zeigt der neue Code für den c't-Bot, wie sich komplexes Verhalten in Anlehnung an das Subsumptionsprinzip des Robotik-Pioniers Rodney Brooks realisieren lässt. Der Sourcecode steht wie immer im CVS und als ZIP-Verzeichnis zum Download bereit. Das implementierte komplexe Verhalten stellt dabei keine Patentlösung eines praktischen Problems dar, sondern soll in erster Linie als Anregung und Beispiel für eigene Programmierungen dienen -- vielleicht will man seinen Bot ja lieber die dunklen Ecken erforschen lassen als ihn im Slalom zwischen Fackeln hindurchzujagen. An vielen Stellen und Parametern lässt sich noch herumschrauben, um das Verhalten weiter auszufeilen, zu modifizieren und an den eigenen echten c't-Bot anzupassen. In den Kommentaren zum Code finden sich an einigen Stellen Hinweise darauf, wo es sich anbietet, Verhaltensweisen zu erweitern und zu verbessern. Wie jede Simulation idealisiert (und vereinfacht) der c't-Sim die reale Welt. In keinem nachgebauten Parcours wird sich der Roboter exakt so verhalten wie im Simulator, für den der aktuelle Code im CVS ausgelegt ist; genausowenig wird sich der gleiche c't-Bot in zwei verschiedenen Slalomstrecken identisch benehmen -- schon kleine Unterschiede in Material und Farbe der Hindernisse können unterschiedliche Sensormesswerte zur Folge haben. Solche Differenzen zwischen Welt und Modell zu erkennen und durch eigene Experimente und entsprechende Code-Modifikationen zu überwinden (sowohl auf Seiten des Roboters wie im Simulator), macht aber gerade den besonderen Reiz eines Roboter-Selbstbau-Projekts mit Simulationsumgebung aus. Wer allerdings erwartet, dass der fertige Code von der Stange sofort 1:1 auf dem eigenen c't-Bot funktioniert wie im Simulator, wird vielleicht im ersten Moment enttäuscht sein. Ein konkretes Beispiel: In der Simulation leuchten nur die Lampen selbst, Streulicht erreicht die modellierten Sensoren gar nicht. Deshalb darf der virtuelle Bot auch auf das kleinste Leuchten anspringen (seine Lichtempfindlichkeit definiert in bot-logik.c ein Schwellwert in der Funktion check_for_light()). Lässt man diese Lichtsuche aus der Codebasis unmodifiziert auf dem echten Bot laufen, verwirrt ihn bereits das geringste Streulicht -- sogar jenes, das von den eigenen LED ausgeht. Hier muss man entweder die LED abschirmen, außer Betrieb nehmen oder man reduziert die Lichtempfindlichkeit über die Software. Die passende Einstellung für den eigenen Roboter (und die Lichtquellen im selbstgebauten Parcours) findet man über eigene Experimente in der realen Umgebung. Denn echte c't-Bots lassen sich nicht alle über einen Kamm scheren -- je nach Kalibrierung der Distanzsensoren kann auch der Mindestabstand zur Wand (COL_CLOSEST in bot-local.h) mit den vordefinierten 10 cm schon zu gering sein, um noch realistische Messwerte zu bekommen. Testen kann man dies beispielsweise, indem man den Bot in ausgemessenem Abstand vor einem Hindernis aufbockt und die Daten der Entfernungssensoren auf dem Display mit der echten Distanz vergleicht. (Korrekturen an der Kennlinie der Sensoren sind auch über die Datei sensor_correction.h möglich.) Das Material der Hindernisse beeinflusst die Messdaten der Lichtsensoren übrigens ebenfalls: weiße Wände oder gar Kacheln gaukeln dem Bot Lampen vor, wo keine sind, das Streulicht macht den Helligkeitssensoren die gezielte Fahrt hin zur Lichtquelle schwer. Die Distanzsensoren wiederum erkennen selbstleuchtende Körper (wie bestimmte Tischlampen aus Mattglas) unter Umständen gar nicht als Hindernis. c't-Sim: Der Simulator hat sich in einigen wichtigen Details verändert, er liegt jetzt in Version 0.3 vor und ist für den Einsatz der neuen USB-2-Bot-Verbindung (Artikel dazu in c't 7/06) gerüstet. Weitere Änderungen betreffen die innere Struktur des Simulators und die Modellierung des Bot: So arbeiteten die vorigen Versionen des c't-Sim versehentlich mit der Zahl von 40 Encoder-Markierungen pro Radumdrehung (in der Realität sind es dagegen 30 helle und 30 dunkle Felder, also 60 Wechsel pro Rotation). Nach wie vor freuen wir uns über eingesandte Code-Patches, welche die Möglichkeiten des Simulators erweitern und ihn stückweise näher an die Realität rücken. WICHTIG: Der c't-Sim verwendet jetzt Konstrukte aus dem Java-Standard 5.0 -- Voraussetzung für den Betrieb ist also ein JDK, das diese Java-Version unterstützt. In der Entwicklungsumgebung Eclipse muss zusätzlich im Menü Window/Preferences unter Java/Compiler/JDK Compliance die Standardeinstellung 1.4 auf 5.0 umgeschaltet werden. Viel Spaß beim Experimentieren! Peter König c't - Magazin für Computertechnik http://www.heise.de/ct/ Heise Zeitschriften Verlag GmbH & Co.KG phone: 0511-5352-300 Helstorfer Str. 7 fax: 0511-5352-417 D-30625 Hannover, Germany eMail: pek@xxxxxxxxxxxx