Absender: Frank Menzel
Datum: Mi, 02.05.2007 20:31:38
In-reply-to:
<AC9ED9BF-8958-4285-8D79-907715197774@xxxxxxxxxxxxxxx>
Hallo Timo, wie heißt denn genau das Standard-Lab im Sim ? Die Potenzialfeldmethode hat grundsätzlich das Problem, in einem lokalen Minimum steckenzubleiben wegen der anziehenden und abstoßenden Potenziale (siehe Literatur). Ohne dynamische Liste ist dies so nicht zu lösen, die ich auch nicht zur Verfügung habe. Wenn dann noch die hohe Auflösung und 12m Breite da sind, ist dies Problem schon nicht mehr lösbar. Ich habe versucht, das Problem mit Auffüllen mit Hindernispotenziale zu lösen, was aber nicht immer funktioniert. Irgendwann bei einem bestimmten Maximum breche ich ab und der bot fährt dann die bereits markierten Pfadpunkte an, die aber irgendow enden und eigentlich nicht den richtigen Weg darstellen. Dann kommt auch oft noch dazu, besonders nach Hängenbleiben, dass der Bot denkt, er wäre schon ganz woanders und dann stimmt die Map überhaupt nicht mehr. Daher gibt's die Show_labmap, die genau die Hindernissituation der Map darstellt, auch mit den Potenzialwerten (geht nur sinnvol bei geringer MCU-Auflösung). Paremter zum Drehen gibt's viele, schon das Hindernisumfeld in der Map-Datei kann bei zu großem Wert kleine Durchgänge unmöglich machen oder Hänger bei zu kleinem Wert verursachen. Die ifdef's sind von meinen echten Botversuchen übriggeblieben. Habe versucht, möglichst viel anderes zu deaktivieren wegen dem Platz und die beiden Defs unten gingen irgendwie nicht einzeln zu deaktivieren-so gings jedenfalls. Wie gesagt, die besten Ergebnisse liefert die kleine MCU-Auflösung von 8, da braucht nicht mit Umkreisfeldern grechnet werden sondern direkt mit dem Nachbarfeld links/ rechts... Für die vielen anderen Fragen brauche ich erst mal ein bischen Zeit... Gruß, Frank Menzel -----Ursprüngliche Nachricht----- Von: ct-bot-entwickler-bounces@xxxxxxxxxxxxxxxxx [mailto:ct-bot-entwickler-bounces@xxxxxxxxxxxxxxxxx] Im Auftrag von Timo Sandmann Gesendet: Mittwoch, 2. Mai 2007 18:55 An: Entwicklung rund um den c't-bot Betreff: Re: [ct-bot] neues Pfadplanungs-Verhalten nach der Map 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 _______________________________________________ ct-bot-entwickler Mailingliste ct-bot-entwickler@xxxxxxxxxxxxxxxxx http://www.heise.de/bin/newsletter/listinfo/ct-bot-entwickler