Absender: Menzel, Frank IT-OO4
Datum: Di, 14.10.2008 07:52:00
In-reply-to:
<57B6C479-EB3F-4745-BD3E-1CA2A1141D35@xxxxxxxxxxxxxxx>
References:
<000001c9232b$04ef0930$0200a8c0@mexpnew> <57B6C479-EB3F-4745-BD3E-1CA2A1141D35@xxxxxxxxxxxxxxx>
Hallo, sehr gut, werde ich bei Gelegenheit mal angucken und testen, frühestens Ende der Woche. Das Verhalten habe ich wegen Verständlichkeit auch erst einmal ohne weitergehende Spezialitäten gebaut. Eine Verbesserungen wäre, wie unten angesprochen, die zuletzt gemerkte Koordinate anzusehen und bei gleicher X- oder Y-Koordinate die letzte zu verwerfen und diese auf den Stack zu legen. Das nächste wäre, diese Pfadplanung in das area-Verhalten einzubauen. Angesprochen hatte ich einer der letzten Mail auch eine notwendige Änderung des Area-Verhaltens, auch wie unten angesprochen, falls ein Pfadpunkt eben doch ein Hindernis ist die Pfadplanung neu anzustoßen bzw. zu beenden. Auch möglich via dem Notfallverhalten. So weit erst einmal... Gruß, Frank -----Original Message----- From: ct-bot-entwickler-bounces@xxxxxxxxxxxxxxxxx [mailto:ct-bot-entwickler-bounces@xxxxxxxxxxxxxxxxx] On Behalf Of Timo Sandmann Sent: Monday, October 13, 2008 11:43 PM To: Entwicklung rund um den c't-bot Subject: Re: [ct-bot] Pfadplanungsverhalten... 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 _______________________________________________ ct-bot-entwickler Mailingliste ct-bot-entwickler@xxxxxxxxxxxxxxxxx http://www.heise.de/bin/newsletter/listinfo/ct-bot-entwickler