S: Algorithmus für Weg von A nach B finden. "Autorouter"

Gast #3939041
Hallo,

für ein Roboterprojekt möchte ich den Weg von A nach B berechnen. Es ist 
jedoch nicht immer eine Gerade, denn zwischen A und B können auch 
Hindernisse sein. Flächen, die nicht überquert werden dürfen.

Diesen Weg würde ein PC System anhand einer Karte mit den 
eingezeichneten Hindernissen planen. Im Prinzip ein 2D Array. Also wie 
eine Bitmap Grafik mit ausgegrauten Flächen.

Ergebnis wäre also etwas in der Art: Fahre nicht direkt zu B, sondern 
erst zum Punkt C,D,E und dann nach B.

Da ich mit so was nicht der erste bin, suche ich Stichpunkte, nach was 
ich suchen kann.
#3939119
Neuhardt schrieb:
> die Graphentheorie ist dafür mathematischer Overkill,

also das musst du mir erklären - die graphentheorie ist ein 
themengebiet, das sich unter anderem mit dem finden von wegen 
beschäftigt (sofern die struktur in der sich wege befinden als graph 
modelliert ist bzw. modelliert werden kann). von daher ist der hinweis 
darauf sicher nicht unangebracht.

klar gibt es einfachere und kompliziertere wege das problem zu lösen - 
was du ja mit einem vorschlag gemacht hast...
Gast #3939123
Also die Grafik beim Wiki Eintrag zu A* ist eigentlich genau das, was 
ich suchte. Danke schön.

Auch an die anderen. Welchen ich dann nehme, muss ich noch prüfen. 
Prinzipiell habe ich jetzt aber gute Ansätze.
Gast #3939500
Omburg schrieb:
> Also die Grafik beim Wiki Eintrag zu A* ist eigentlich genau das, was
> ich suchte

Nein. Wenn Du ein festes Raster hast, wäre, wie jemand schon schrieb, 
der Lee Maze Router Algorithmus wohl eine gute Wahl. Den nahmen ja auch 
frühe PCB Autorouter, als man noch gerne feste Raster für Strukturen 
verwendet hatte. Das ist einfache Wave Propagation, bei

http://en.wikipedia.org/wiki/Lee_algorithm

steht zwar nicht viel, aber mit Google hatte ich vor langer Zeit doch 
einiges dazu gefunden.

Dijkstra wäre eher etwas, wenn man mit dem Auto irgend wohin fahren 
will, zu jeder Stadt die Entfernung zu einigen Nachbarstädten kennt, und 
den kürzesten Weg sucht. Auch einfach, bring dir aber keine Vorteile. 
Und A* -- nunja ähnlich wie Dijkstra wenn eine Richtung präferiert wird.
#3939705
Salewski schrieb:
> Omburg schrieb:
>> Also die Grafik beim Wiki Eintrag zu A* ist eigentlich genau das, was
>> ich suchte
>
> Nein. Wenn Du ein festes Raster hast, wäre, wie jemand schon schrieb,
> der Lee Maze Router Algorithmus wohl eine gute Wahl. Den nahmen ja auch
> frühe PCB Autorouter, als man noch gerne feste Raster für Strukturen
> verwendet hatte. Das ist einfache Wave Propagation, bei
>
> http://en.wikipedia.org/wiki/Lee_algorithm

Was auch nichts anderes als eine Form der Breitensuche ist und unter 
bestimmten Bedingungen ist Dijkstras Algorithmus ebenso eine 
Breitensuche und A* entspricht dem Dijkstra genau dann wenn die 
Heuristik immer h(n) = 0 liefert bzw. ist A* ein verallgemeinerter 
Dijkstra.

> Und A* -- nunja ähnlich wie Dijkstra wenn eine Richtung präferiert wird.

Ziemlich gute, interaktive Seite zum A* ist z.B.
http://www.redblobgames.com/pathfinding/a-star/introduction.html
#3940760
Daniel F. schrieb:
> Neuhardt schrieb:
>> die Graphentheorie ist dafür mathematischer Overkill,
>
> also das musst du mir erklären - die graphentheorie ist ein
> themengebiet, das sich unter anderem mit dem finden von wegen
> beschäftigt (sofern die struktur in der sich wege befinden als graph
> modelliert ist bzw. modelliert werden kann). von daher ist der hinweis
> darauf sicher nicht unangebracht.


Das Hauptproblem dürfte eher sein, dass du von deiner Wohnung keinen 
gerichteten Graphen hast, in dem dann auch noch umherliegende Schuhe als 
Knoten modelliert sind.

Genau das ist aber das Standardproblem von autonomen Robotern: den Weg 
von der Küche ins Bad zu finden, wobei die im Vorraum schlafende Katze 
zu umrunden ist.

Ich wuerde auch mit dem Lee Algo anfangen.
#3941202
Karl Heinz schrieb:
> Das Hauptproblem dürfte eher sein, dass du von deiner Wohnung keinen
> gerichteten Graphen hast, in dem dann auch noch umherliegende Schuhe als
> Knoten modelliert sind.
>
> Genau das ist aber das Standardproblem von autonomen Robotern: den Weg
> von der Küche ins Bad zu finden, wobei die im Vorraum schlafende Katze
> zu umrunden ist.

Darauf wären dann u.a D* oder D* Lite spezialisiert. Die grob gesagt A* 
für sich dynamisch verändernde Graphen sind.
Eingesetzt wurden die u.a. bei der Urban Challenge und beim Mars Rover.
Gast #3942038
Eine andere einfache Möglichkeit für bekannte "Terrains" wäre dynamische 
programmierung.
Du müsstest nur Gewichte für jede Kachel anlegen und dann einen Weg mit 
minimalem Wert auswählen.
Gast #3942192
RRT – http://en.wikipedia.org/wiki/Rapidly_exploring_random_tree
http://planning.cs.uiuc.edu/

Ansonsten gibt noch als Framework OMPL: http://ompl.kavrakilab.org/ (Was 
aber vermutlich für 2D Navigaten etwas zu viel ist)

Hier würde ich A* bzw. besser D* empfehlen. Alternativ eine Roadmap und 
per Graphensuche die grobe Richtung angehen (dann musst du dir ein 
entsprechendes Modell bauen – irgendwie).

Das wirkliche Problem ist meist ja auch: Zu Beginn des weges im 
Wohnzimmer kennt dein Roboter das Aussehen der Küche halt nicht. Also 
musst du eh umplanen, bei Bedarf.
#3943064
dasdasd schrieb:
> Du müsstest nur Gewichte für jede Kachel anlegen und dann einen Weg mit
> minimalem Wert auswählen.

Du bist ja ein ganz schlauer. Wenn dich jemand nach dem Weg zum Bäcker 
fragt, antwortest du dann auch: "Du musst jeder Straße eine Länge 
zuordnen, und dann einfach den kürzesten Weg nehmen."???

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.