Da die Festlegung einer geeigneten Zielposition in vielen Situationen schwierig sein kann, ist der folgende Ansatz auf der Grundlage von 2D-Belegungsgitterkarten möglicherweise erwägenswert. Es wird allgemein als "Wertiteration" bezeichnet und ergibt in Kombination mit Gradientenabstieg / -aufstieg einen einfachen und ziemlich effizienten (je nach Implementierung) Pfadplanungsalgorithmus. Aufgrund seiner Einfachheit ist es in der mobilen Robotik insbesondere für "einfache Roboter", die in Innenräumen navigieren, bekannt. Wie oben angedeutet, bietet dieser Ansatz ein Mittel, um einen Weg von einer Startposition zu finden, ohne eine Zielposition explizit wie folgt anzugeben. Beachten Sie, dass optional eine Zielposition angegeben werden kann, falls verfügbar. Außerdem stellt der Ansatz / Algorithmus eine Breitensuche dar,
Im binären Fall ist die 2D-Belegungsgitterkarte eins für belegte Gitterzellen und null an anderer Stelle. Beachten Sie, dass dieser Belegungswert im Bereich [0,1] auch stetig sein kann, ich komme darauf zurück. Der Wert einer gegebenen Gitterzelle g i ist V (g i ) .
Die Basisversion
- Angenommen, die Gitterzelle g 0 enthält die Startposition. Setze V (g 0 ) = 0 und setze g 0 in eine FIFO-Warteschlange.
- Nehmen Sie die nächste Gitterzelle g i aus der Warteschlange.
- Für alle Nachbarn g j von g i :
- Wenn g j nicht belegt ist und noch nicht besucht wurde:
- V (g j ) = V (g i ) +1
- Markiere g j als besucht.
- Fügen Sie der FIFO-Warteschlange g j hinzu .
- Wenn eine bestimmte Distanzschwelle noch nicht erreicht ist, fahren Sie mit (2.) fort, andernfalls fahren Sie mit (5.) fort.
- Der Weg ergibt sich aus dem steilsten Gefälle ab g 0 .
Hinweise zu Schritt 4.
- Wie oben angegeben, muss in Schritt (4.) die maximale zurückgelegte Strecke verfolgt werden, die in der obigen Beschreibung aus Gründen der Klarheit / Kürze weggelassen wurde.
- Wird eine Zielposition angegeben, wird die Iteration abgebrochen, sobald die Zielposition erreicht ist, dh im Rahmen von Schritt (3.) bearbeitet / besucht.
- Natürlich ist es auch möglich, einfach die gesamte Grid-Map zu verarbeiten, dh fortzufahren, bis alle (freien) Grid-Zellen verarbeitet / besucht wurden. Der begrenzende Faktor ist offensichtlich die Größe der Gitterkarte in Verbindung mit ihrer Auflösung.
Erweiterungen und weitere Kommentare
Das Update-Gleichung V (g j ) = V (g i ) +1 viel Raum lässt alle Arten von zusätzlichen Heuristiken entweder durch Herunterskalierung anzuwenden V (g j )oder die additive Komponente, um den Wert für bestimmte Pfadoptionen zu reduzieren. Die meisten, wenn nicht alle, dieser Modifikationen können einfach und allgemein unter Verwendung einer Grid-Map mit stetigen Werten von [0,1] aufgenommen werden, die effektiv einen Vorverarbeitungsschritt der anfänglichen binären Grid-Map darstellt. Das Hinzufügen eines Übergangs von 1 nach 0 entlang von Hindernisgrenzen bewirkt beispielsweise, dass der "Akteur" vorzugsweise frei von Hindernissen bleibt. Eine solche Gitterkarte kann beispielsweise aus der binären Version durch Unschärfe, gewichtete Dilatation oder ähnliches erzeugt werden. Wenn Sie die Bedrohungen und Feinde als Hindernisse mit großem Unschärferadius hinzufügen, werden Pfade, die diesen nahe kommen, bestraft. Auf der gesamten Grid-Map kann man auch einen Diffusionsprozess wie diesen anwenden:
V (g j ) = (1 / (N + 1)) × [V (g j ) + Summe (V (g i ))]
Dabei bezieht sich " Summe " auf die Summe aller benachbarten Gitterzellen. Anstatt beispielsweise eine binäre Karte zu erstellen, können die Anfangswerte (Ganzzahlen) proportional zur Größe der Bedrohungen sein, und Hindernisse stellen "kleine" Bedrohungen dar. Nach Anwendung des Diffusionsprozesses sollten / müssen die Gitterwerte auf [0,1] skaliert werden, und Zellen, die von Hindernissen, Bedrohungen und Feinden besetzt sind, sollten auf 1 gesetzt / gezwungen werden. Andernfalls kann die Skalierung in der Aktualisierungsgleichung erfolgen nicht wie gewünscht arbeiten.
Es gibt viele Variationen dieses allgemeinen Schemas / Ansatzes. Hindernisse usw. können kleine Werte haben, während freie Gitterzellen große Werte haben, die je nach Zielsetzung im letzten Schritt einen Gefälleabstieg erfordern können. Auf jeden Fall ist der Ansatz meiner Meinung nach überraschend vielseitig, ziemlich einfach zu implementieren und möglicherweise ziemlich schnell (abhängig von der Größe / Auflösung der Gitterkarte). Schließlich besteht, wie bei vielen Pfadplanungsalgorithmen, die keine bestimmte Zielposition einnehmen, das offensichtliche Risiko, in Sackgassen zu geraten. In gewissem Umfang ist es möglich, vor dem letzten Schritt dedizierte Nachbearbeitungsschritte anzuwenden, um dieses Risiko zu verringern.
Hier ist eine weitere kurze Beschreibung mit einer Illustration in Java-Script (?), Obwohl die Illustration mit meinem Browser nicht funktioniert hat :(
http://www.cs.ubc.ca/~poole/demos/mdp/vi.html
Weitere Informationen zur Planung finden Sie im folgenden Buch. Die Wertiteration wird speziell in Kapitel 2, Abschnitt 2.3.1 Optimale Pläne mit fester Länge erörtert.
http://planning.cs.uiuc.edu/
Hoffe das hilft, liebe Grüße, Derik.