Absender: Benjamin Benz
Datum: Mo, 06.11.2006 13:18:24
Hallo, längere Zeit war es ruhig um das c't-Bot-CVS, jetzt gibt es mal wieder ein größeres Update. Neben einigen kleineren Bugfixes und integrierten Patches betrifft es folgende größere Änderungen: I. Verhaltensframework Wir haben die monolithische und mittlerweile riesige bot-logik.c zerteilt. Es gibt nun ein neues Verzeichnis "bot-logic" Darin hat jedes Verhalten sein eigenes .c-File. Auch im Include-Verzeichnis gibt es das korrespondierende Unterverzeichnis. Da nun jedes Verhalten in einer eigenen Datei liegt, kann man ganz einfach nicht benutzte Verhalten deaktivieren und so den Footprint des Codes im Flash verkleinern. Die neue Datei available_behaviours.h enthält die dazu nötigen Schalter. Wer ein eigenes Verhalten schreiben will, sollte: 1. Es in eine eigene .c-Datei packen, die dem Namensschema behaviour_xxx.c folgt 2. Eine dazu passende .h-Datei erstellen 3. in available_behaviours.h die Header-Datei, einen #define-Schalter und eventuelle abhängigkeiten eintragen 4. in bot-logik.c die Init-Routine erweitern. Das Verwenden der anderen Verhalten ist ganz einfach und funktioniert wie bisher. Man muss nur die Datei bot-logik.h einbinden, alle anderen .h-Files kommen dann automatisch mit dazu. Am Framework hat sich nichts geändert, so dass alle Verhalten weiter funktionieren wie gehabt und auch das Verhaltenstutorial aus c't 10/06 (http://www.heise.de/ct/06/10/236/) gilt weiterhin. Insgesamt denken wir, dass durch den Umbau das Framework deutlich übersichtlicher wird und sich schlankerer Code erzeugen lässt. II. Kartographie Wir haben eine Referenzimplementation des in c't 19/06 (http://www.heise.de/ct/06/19/198/) vorgestellten Kartographiealgoritmus mit in den Code eingefügt. Auf dem realen Bot begrenzt der Speicher die Auflösung sehr stark, aber im Simulator lassen sich hübsche Karten erzeugen. hat man MAP_AVAILABLE aktiviert und lässt den Bot eine Weile herumfahren, so liefert ein Druck auf die Taste "3" der Fernbedienung eine PGM-Datei (map.pgm) mit einem Bild der Karte. Der Bot legt die Datei im aktuellen Arbeitsverzeichnis ab. (d.h. startet man den Bot aus dem Sim heraus, ist dies das Heimatverzeichnis des Sim). Der reale Bot kennt noch keine Möglichkeit die Karte wieder auszugeben. Details zur Karte finden sich im Kommentar in map.c. Wer mit der Auflösung der Karte, oder der Gewichtung der einzelnen Messwerte experimentieren will, findet eine Reihe von Konstanten in der Datei map.c. Insbesondere dürften folgende Werte interessant sein: #define MAP_STEP_FREE 2 /*!< Um diesen Wert wird ein Feld inkrementiert, wenn es als frei erkannt wird */ #define MAP_STEP_OCCUPIED 10 /*!< Um diesen Wert wird ein Feld dekrementiert, wenn es als belegt erkannt wird */ #define MAP_RADIUS 10 /*!< Umkreis einen Messpunkt, der als Besetzt aktualisiert wird (Streukreis) [mm]*/ III. Timer und delays Timo Sandmann hat sich der Timer und Delayfunktionen angenommen und sie überarbeitet. MfG Benjamin Benz Wie üblich auch nochmal ein Auszug aus dem Changelog: 2006-11-06 Benjamin Benz [bbe@xxxxxxxx]: map.c kommentiert und etwas geschliffen 2006-11-03 Timo Sandmann [mail@xxxxxxxxxxxxxxx]: Zwei warnings beseitigt und zwei unnoetige volatiles in bot-logik.c entfernt 2006-11-03 Benjamin Benz [bbe@xxxxxxxx]: Verhalten aus bot-logik.c auf Einzelfunktionen aufgeteilt und in available_behaviours Schalter zur Auswahl eingefuehrt 2006-11-01 Timo Sandmann [mail@xxxxxxxxxxxxxxx]: Timer auf tickCounts [176 us] umgestellt (bevorzugt TIMER_GET_TICKCOUNT_16 oder 32 verwenden; MS_TO_TICKS() rechnet dazu ms in Ticks um) 2006-11-01 Benjamin Benz [bbe@xxxxxxxx]: Karten funktionieren jetzt schon mal auf dem PC 2006-10-29 Timo Sandmann [mail@xxxxxxxxxxxxxxx]: Bug in command.c behoben (Code compilierte nicht ohne LOG_AVAILABLE) 2006-10-26 Benjamin Benz (bbe@xxxxxxxx) Karten (nur PC) eingefuehrt, Kommunikation angepasst -- Benjamin Benz Heise Zeitschriften Verlag Redaktion c't eMail: bbe@xxxxxxxx WWW : http://www.heise.de