c't

c't-Projekte - Mailinglisten


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

Re: [ct-bot] neues Pfadplanungs-Verhalten nach der Map

Absender: Timo Sandmann
Datum: Mi, 02.05.2007 18:55:42
In-reply-to: <000001c78b5d$62de6570$fe78a8c0@mexpnew>
References: <000001c78b5d$62de6570$fe78a8c0@mexpnew>


Hallo,

Am 30.04.2007 um 21:25 schrieb Frank Menzel:
Hallo Allerseits,
lange hat's gedauert und nun ist's soweit: das neue
Pfadplanungs-Verhalten ! Grundsätzlich stimmt das bereits unten Gesagte,
jedoch gibt's keine dynamische Liste mehr. Die Pfadplanung erfolgt nur
auf der bereits vorhandenen Karte. Ganz ohne Zugriff auf die Sensoren
komme ich nun nicht mehr aus und einen eigenen Screen, von dem aus nur
die Routinen aufgerufen werden können (Tasten 3/4/6), habe ich auch
definiert. Um auf der vorhandenen Map operieren zu können, habe ich den
Wertebereich der online-Aktualisierung eingeschränkt, so dass der
hoechste Wert +127 für die Markierung der Pfadpunkte benutzt werden kann ohne durch die ständige Freiaktualisierung überschrieben zu werden. Und
die "nur" 2cm für das Hindernisumfeld habe ich auch erhöhen müssen,
damit Abstand gehalten wird. Die Pfadplanung und das Fahren
funktionieren auch bei hoher Auflösung. Auf dem echten bot klappt's auch
ganz passabel.
Als Anhang mal der Patch nach den geltenden Richtlinien zum
Selbstschauen und Staunen :-)
Hoffe nix übersehen zu haben...
Gruß, Frank Menzel

ich habe auch noch ein paar Anmerkungen:
Das Verhalten ist eine sehr interessante Sache und ein erster Test im Sim lieferte auch ein gutes Ergebnis! Dann habe ich mal folgendes probiert: Das Standard-Lab im Sim, solve_maze() ausgeführt, als der Bot links unten in der Ecke war, auf 3 gedrückt (Zielpunkt markieren), dann solve_maze() weiterlaufen lassen, bis der Bot in der oberen Lab-Hälfte ganz links an der Mauer ist, die die hellere von der dunkleren Hälfte trennt, dort maze gestoppt und 4 gedrückt. Nun fährt der Bot die nähere Umgebung um seinen Standort ab, kommt aber aus der Ecke nicht heraus und bleibt irgendwann einfach stehen, ziemlich in der Ecke, also weit vom per 3 definierten Zielpunkt entfernt. Muss man da vielleicht noch irgendwelche Parameter im Verhalten anpassen, oder was ist bei dem Vorgehen falsch / gibt es Randbedingungen, die ich nicht beachtet habe? Weiterhin hat mich interessiert, wie häufig auf die Map zugegriffen wird, weil diese auf dem realen Bot auf einer MMC liegen soll und Zugriffe auf verschiedene Map-(=Speicher-)Positionen dann Pagefaults auslösen können, deren Auflösung relativ viel Zeit kostet. Erstes Ergebnis (bei dem o.a. Szenario im Sim mit emulierter MMC gemessen):
Groesse des Caches:             2560 Byte
Auslastung des Caches:          100 %
Seitenzugriffe:                 59449077
Seiteneinlagerungen:            1765328
Seitenauslagerungen:            1765323
Seitenzugriffe / s:             265397
Seiteneinlagerungen / s:        7880
Seitenauslagerungen / s:        7880
Cache-Hit-Rate:                 97.030521 %

Das sieht sehr nach Seitenflattern aus und erscheint mir zu heftig zu sein für den realen Bot (wenn es denn repräsentativ ist), aber vielleicht lässt sich das noch optimieren, indem man mehr auf die Lokalität achtet beim Map-Zugriff.

Zum Code / Patch habe ich auch noch eine Frage:
Warum "#ifdef PC" bei
#ifdef PC
#define LOG_CTSIM_AVAILABLE /*!< Logging ueber das ct-Sim (PC und MCU) */
#endif
und
#ifdef PC
#define DISPLAY_REMOTE_AVAILABLE /*!< Sende LCD Anzeigedaten an den Simulator */
#endif
? Ist das von eigenen Testfällen aus Versehen übrig geblieben, oder Absicht?

Ein Hinweis noch, falls man das Verhalten oder die Map allgemein im Sim benutzt: In der derzeitigen Standard-Einstellung beträgt die Kantenlänge der Map 4 m, das reicht für das Standard-Lab im Sim nicht aus, es ist also empfehlenswert, die Map-Größe in include/map.h per "#define MAP_SIZE 12" auf 12 m zu setzen, dann ist man immer auf der sicheren Seite.

So weit von mir dazu, intensiver konnte ich mich mit dem Verhalten leider noch nicht beschäftigen, obwohl es das zweifellos verdient hätte. :-)

Viele Grüße,
Timo