c't

c't-Projekte - Mailinglisten


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

Re: [ct-bot] Pfadplanungsverhalten...

Absender: Timo Sandmann
Datum: Mo, 13.10.2008 23:42:54
In-reply-to: <000001c9232b$04ef0930$0200a8c0@mexpnew>
References: <000001c9232b$04ef0930$0200a8c0@mexpnew>


Hallo,

das Pfadplanungsverhalten ist jetzt im SVN. Außerdem hat sich der Positionsstack zum Positionsspeicher gewandelt, im Wesentlichen besteht die Neuerung in einer effizienten FIFO-Implementierung. Im Pfadplanungsverhalten habe ich noch ein paar TODOs eingefügt (siehe Code) zu den Dingen, die mir so beim ersten Durchschauen aufgefallen sind.

Was mir noch nicht so ganz klar geworden ist: Wird jede Zelle auf dem Weg zum Ziel in der FIFO einzeln vermerkt? Wenn z.B. zehn aufeinanderfolgende Zellen auf einer Geraden liegen, bräuchte man ja nur Start- und Zielzelle eintragen, um Speicher zu sparen und außerdem ein flüssiges Fahrverhalten zu erreichen.

Mit Maussensor funktioniert das Verhalten (im Sim) sehr gut (wenn die Umgebung in der Karte eingetragen ist - logisch).

Ein Problem ist allerdings, dass Hindernisse, die nicht in der Karte vermerkt sind, nicht erkannt werden und der Bot dann crasht. Es ist schon klar warum, schön wäre es natürlich, wenn vom Distanzsensor zur Fahrtzeit erkannte Hindernisse auch berücksichtigt würden oder es in diesem Fall eine neue Planung gäbe auf der Grundlage der dann aktuelleren Map. Hier sind wir dann aber schnell wieder beim ungelösten Thema mit den Notfallverhalten bzw. deren Interaktion mit anderen Verhalten.

Grüße,
Timo

Am 30.09.2008 um 20:33 schrieb Frank Menzel:
Hallo,
anbei mal mein Vorschlag für ein Pfadplanungsverhalten, welches hier ja
schon grundsätzlich beschrieben wurde:
http://www.heise.de/ct/projekte/machmit/ctbot/wiki/NeueVerhalten

Das Handling ist folgendes:
Man fährt den Bot rum und lässt ihn die Welt entdecken. Auf dem eigenen
Screen kann man an beliebiger Stelle die Taste 5 drücken und er sollte
dann den Weg zum Startpunkt finden und anfahren. Um einen anderen
Zielpunkt auf der Karte zu definieren, kann das Ziel neu festgelegt
werden durch die Taste 8 und somit gilt die aktuelle Botposition als
anzufahrendes Ziel.
Im Sim funktioniert es bei mir recht gut und findet die meisten Pfade.
Ach so, hier ist die Stackerweiterung mit bei, die im Mailverkehr
besprochen wurde, nur leider eben noch als Array-Version (was der Sache
erst mal keinen Abbruch tut). Auch gilt hier erst einmal „nur“ die
4er-Nachbarschaft, d.h. er fährt nur gerade Wege und keine Schrägen.



Als technischen Hintergrund habe ich in der der behaviour_pathplaning.c
folgendes eingetragen:

* @brief Wave-Pfadplanungsverhalten; eine niedrigaufloesende Map wird
ueber die hochaufloesende gelegt und
* auf dieser folgende Schritte ausgefuehrt:
* -Innerhalb des wirklich benutzten Mappenbereiches wird jede Zelle
durchlaufen und falls der Durchschnittswert
* der Hochaufloesenden Map < 0 ist (Hinderniswert) hier eingetragen mit
Wert 1
* -anzufahrende Zielposition erhaelt Mapwert 2
* -ausgehend von Zielposition laeuft eine Welle los bis zum
Bot-Ausgangspunkt, d.h. von 2 beginnend erhaelt jede Nachbarzelle
* den naechst hoeheren Zellenwert
* -wird als ein Nachbar die Botposition erreicht, wird der Pfad
zurueckverfolgt und immer die Zelle mit kleinerem Wert gewaehlt;
* die Zellenkoordinaten werden als Weltkoordinaten auf den Stack gelegt
und kann nun abgefahren werden

Happy Pfadplanen :-)

Gruß, Frank
<pathplaning.txt>_______________________________________________
ct-bot-entwickler Mailingliste
ct-bot-entwickler@xxxxxxxxxxxxxxxxx
http://www.heise.de/bin/newsletter/listinfo/ct-bot-entwickler