Ich arbeite an einem Projekt mit einem Roboter, der seinen Weg zu einem Objekt finden muss und einige Hindernisse vermeiden muss, wenn er zu dem Objekt geht, das er aufnehmen muss.A * Pathfinder Hindernis Kollision Problem
Das Problem liegt darin, dass der Roboter und das Objekt, das der Roboter aufnehmen muss, beide ein Pixel breit im Pfadfinder sind. In Wirklichkeit sind sie viel größer. Oft wählt der A * -Pfadfinder die Route entlang der Kanten der Hindernisse, manchmal kollidiert er mit ihnen, was wir nicht tun möchten.
Ich habe versucht, den Hindernissen einige nicht begehbare Felder hinzuzufügen, aber es funktioniert nicht immer sehr gut. Es kollidiert immer noch mit den Hindernissen und fügt auch zu viele Punkte hinzu, an denen es nicht laufen darf, was dazu führt, dass es keinen Pfad gibt, auf dem es laufen kann.
Haben Sie Vorschläge, was Sie bei diesem Problem unternehmen können?
Edit:
Also habe ich als Justin L durch Zugabe einer Menge Kosten rund um die Hindernisse vorgeschlagen, die in der Folling Ergebnisse: Grid with no path http://sogaard.us/uploades/1_grid_no_path.png
Hier können Sie die Kosten rund um die Hindernisse sehen, zunächst die Mitte zwei Hindernisse sollen wie die, die in den Ecken aussehen, aber nach unseren pathfinder laufen scheint es, wie die Kosten außer Kraft gesetzt:
Grid with path http://sogaard.us/uploades/1_map_grid.png
Picture that shows things found on the picture http://sogaard.us/uploades/2_complete_map.png
Bild oben zeigt, was auf dem Bild zu finden ist.
Path found http://sogaard.us/uploades/3_path.png
Dies ist der Weg auch vor dem Hindernis umarmt wurde, die als unser Problem gefunden.
The grid from before with the path on http://sogaard.us/uploades/4_mg_path.png
Und noch ein Bild mit den Kosten der Karte mit dem Weg auf.
Also was ich seltsam finde ist, warum der A * Pathfinder diese Feldkosten, die sehr hoch sind, überschreibt.
Wäre es, wenn es die Knoten innerhalb der offenen Liste mit dem aktuellen Feld evaluiert, um zu sehen, ob der aktuelle Feldpfad kürzer als der in der offenen Liste ist?
Und hier ist der Code, den ich für den Pathfinder bin mit:
Pathfinder.cs: http://pastebin.org/343774
Field.cs und Grid.cs: http://pastebin.org/343775
Nur um zu klären, ist das ein physikalischer Roboter? Und Sie haben eine Karte des physikalischen Feldes, in der sich der Roboter befindet, und Sie möchten A * durch die Software-Karte auf eine Weise führen, die es Ihrem physischen Roboter auch erlaubt, sich durch die physische Karte mit denselben Richtungen zu bewegen? –
Ja, das ist richtig, wir haben eine Webcam über dem Roboter, wir fügen dann das Bild, das das Bild auf eine Karte von weckbar und nicht weckbar übersetzen, dann füttern wir diese Karte zu unserem A * zusammen mit einem Anfang und Ende kordinieren. Derzeit fügen wir ekstra keine begehbaren Felder um die Hindernisse hinzu, aber das ist sehr langsam. – Androme
Ja, wie DoomStone sagte, wir haben eine Webcam auf einem Stativ über dem Kurs, wo die Hindernisse, Objekte und Roboter sind. Wir machen Fotos von diesem Kurs, parsen ihn, damit wir die Objekte und Hindernisse und den Roboter finden und dann versuchen, einen Weg vom Roboter zum Objekt zu machen, das er aufnehmen muss. Also gibt der A * -Algorithmus jedes Pixel zurück, auf dem wir laufen können, was, wie gesagt, oft die Hindernisse umarmt, wenn sich das Objekt zum Beispiel auf der gegenüberliegenden Seite des Roboters befindet. – Cheesebaron