|
c't Projekte - c't-Bot und c't-Sim -
Mailinglisten
[Voriger (Datum)]
[Nächster (Datum)]
[Voriger (Thread)]
[Nächster (Thread)]
[Nach Datum][Nach Thread]
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
|
|