c't

c't-Projekte - Mailinglisten


[Voriger (Datum)] [Nächster (Datum)] [Voriger (Thread)] [Nächster (Thread)]
[Nach Datum][Nach Thread]

[ct-bot] Map-Umbau

Absender: Timo Sandmann
Datum: So, 20.04.2008 23:04:51


Hallo,

der Umbau des Map-Codes (im devel-Zweig) ist jetzt größtenteils abgeschlossen. Daher hier ein paar Infos dazu (Doku fehlt noch ein wenig):

1.) Das Map-Update läuft jetzt auf MCU und PC in einem eigenen Thread und beeinträchtigt somit die Bot-Verhalten nicht mehr.

2.) Die Bot-Position (x_pos, y_pos) wird als int16 gespeichert, die Einheit ist weiterhin mm. Einige Verhalten und Hilfsfunktionen sollten hier noch angepasst werden, so dass sie nicht unnötige float- Berechnungen durchführen.

3.) Die ganze Map-Geschichte wurde stark aufgeräumt und bietet nun ein deutlich schlankeres (und hoffentlich einfacheres) Interface nach außen: Zurzeit beschränkt es sich auf: map_get_average(), map_get_point() und map_way_free(), siehe auch include/map.h. Bei map_way_free() fehlt allerdings noch eine Schutzfunktion gegen Zugriffskonflikte.

4.) Das Eintragen von Daten sollte man vollständig dem Map-Update- Thread überlassen, der sich einem Cache bedient. Dieser wird vom Verhalten scan_on_the_fly() gefüllt. Welche Sensordaten wann eingetragen werden, lässt sich in include/bot-logic/behaviour_scan.h einstellen. Neben den #defines für die Auflösung, gibt es dort Funktionen, mit denen sich die Update-Modi ohne Bit-Rechnerei komfortabel einstellen lassen (auch zur Laufzeit). Nähere Infos und Erklärungen finden sich in der o.a. Datei. (Natürlich ist es trotzdem denkbar und möglich, dass weitere Verhalten schreibend auf die Map zugreifen - hier muss man dann aber ein paar Regel beachten, um nicht in Race Conditions oder Zugriffskonflikte zu laufen)

5.) Auf Grund der tiefgehenden Änderungen von Map-Code und Zugriffs- Strategie war es leider nötig, mit der alten API zu brechen. Das schlägt sich vor allem in den öffentlichen Zugriffsfunktionen nieder, siehe 3.). Es dürften daher einige Anpassungen in Verhalten nötig sein, die die Map benutzen wie map_go_destination(). Sorry für die fehlende Kompatibilität, das Ergebnis des Umbaus bietet aber die Möglichkeit, auch auf dem echten ct-Bot automatisch eine Umgebungskarte mit guter Genauigkeit erstellen zu lassen. Ich hoffe, das entschädigt für die vor allem aus Performance-Gründen nötigen Änderungen.

6.) Die Funktion zum Einlesen einer Map von MMC hat noch einen Bug, hier ist bei größeren Karten in der Ausgabe teilweise ein Block verschoben (die Daten stimmen aber sonst).



Da sich im Code sehr viel geändert hat, wäre es sehr schön, möglichst viel Feedback zu bekommen, vor allem von der Map-Erstellung auf echten Bots. Wer also einen Bot mit MMC-Erweiterung, Lust und Zeit zum Ausprobiere hat, darf seine Erfahrungen, Probleme und vielleicht Wünsche gern hier bekanntgeben! ;-)


Ich hoffe, ich habe nichts vergessen.

Viele Grüße,
Timo