Title der Thesis - Benjamin Weißer

Werbung
Hochschule RheinMain
Robotik
Pfadfindung mit Simple Paths
Dokumentation
Benjamin Weißer
Studiengang:
Informatik, Master of Science
Dozent:
Prof. Dr. Richter
Semester:
WS 2014/15
Datum:
17.01.2015
Inhaltsverzeichnis
1 Einleitung
1
2 Wegfindung
2.1 Dijkstra - Algorithmus . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2 A* - Algorithmus . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3 Spline-Interpolation . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
2
3
4
3 Simple Paths
3.1 Architektur . . . . . . . . . . . . . . . . .
3.2 Benutzeroberfläche . . . . . . . . . . . . .
3.3 Beschreibung der Algorithmen . . . . . . .
3.3.1 Methoden zur Stützpunkterstellung
3.3.2 Methode zur Graphenerstellung . .
3.3.3 Methoden zur Wegfindung . . . . .
3.3.4 Methoden zur Spline-Interpolation
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
6
6
7
12
12
12
13
13
4 Evaluation
14
4.1 Vergleich der Methoden zur Stützpunkterstellung . . . . . . . . . . . 14
4.2 Vergleich der Methoden zur Spline-Interpolation . . . . . . . . . . . . 16
5 Fazit
6 Abbildungsverzeichnis
7 Literatur- und Quellenverzeichnis
17
I
II
1 Einleitung
Ein wichtiges Gebiet der Informatik umfasst den Bereich der algorithmengestützten
Weg- oder Pfadfindung (engl. Pathfinding). Als Ausgangspunkt sind dabei ein Startund ein Zielpunkt in einer - teilweisen unbekannten - Umgebung vorhanden. So werden diese Wegfindungsalgorithmen zur Routenplanung nicht nur in den klassischen
Navigationsgeräten eingesetzt, sondern auch in Computerspielen für die Fortbewegung von KI1 -unterstützten NPCs2 . Im Hinblick auf die populär werdenden Drohnen
bzw. Multicopter und die Entwicklung hin zu deren autonomen Bewegung spielt die
Wegfindung eine immer größer werdende Rolle.
Das Ziel aller Wegfindungsalgorithmen liegt in der Berechnung der kostengünstigsten oder kürzesten Route. Dabei werden die Kosten, um die Strecke
zwischen zwei Punkten zurückzulegen, meist nicht nur durch die reine Distanzermittlung zwischen zwei Punkten bestimmt, sondern sind noch von weiteren Faktoren abhängig. Neben dem wohl bekanntesten und am weit verbreitesten A* Algorithmus, der eine Karte als Graph interpretiert und zur Berechnung Heuristiken
verwendet, existieren noch weitere komplexere oder aber auch einfachere Algorithmen, wie etwa der Dijkstra-Algorithmus.
In der vorliegenden Dokumentation wird nach einem einführenden Kapitel über
die Grundlagen verschiedener Ansätze zur Wegfindung deren Umsetzung in der
Anwendung Simple Paths erläutert. Dabei werden insbesondere die Interaktionsmöglichkeiten über die Benutzeroberfläche erörtert und mittels zahlreicher Darstellungen beleuchtet. In einem abschließendem Kapitel werden die verschiedenen
Lösungsansätze zur Wegfindung miteinander verglichen und bewertet.
1
2
Künstliche Intelligenz
non-player character, dt. Nicht-Spieler-Charakter
1
2 Wegfindung
Die Wegfindung gehört in der Informatik zu der algorithmengestützten Suche nach
dem optimalen Weg von einem Punkt A zu einem Punkt B. Dabei ist der Begriff
optimal abhängig von dem Anwendungsgebiet der Pfadsuche. Zwar wird meist nach
dem kürzesten und kostengünstigsten Pfad gesucht, allerdings gibt es beim Beispiel
der Routenplanung mit Hilfe eines Navigationsgerätes noch weitere Faktoren, die alle
den Begriff des Optimums beeinflussen. Darunter fallen zum Beispiel die Fahrzeit,
der Benzinverbrauch und die benutzten Straßen.
Ausgangspunkt für diese Wegfindungsalgorithmen ist jeweils ein Graph mit unterschiedlichen Kantengewichten, die in seltenen Fällen sogar negative Gewichte
besitzen können. Die nun im Folgenden vorgestellten Algorithmen hingegen terminieren nicht bei negativen Kantengewichten, so dass stets positive Kantengewichte
vorausgesetzt werden. Eine weitere Vorgabe für die Wegfindung besteht darin, dass
ein Graph zusammenhängend sein muss, damit ein Startpunkt S und ein Zielpunkt
Z sich nicht in zwei unterschiedlichen Teilgraphen befinden.
2.1 Dijkstra - Algorithmus
Bei dem Dijkstra-Algorithmus handelt es sich im Gegensatz zu dem im nächsten
Abschnitt vorgestellten A* -Algorithmus um einen einfachen Suchalgorithmen anhand von Graphen. Er wurde nach seinem Erfinder E. W. Dijkstra benannt und
gehört zu der Klasse der Greedy-Algorithmen, da er grundsätzlich versucht immer
der Kante mit dem geringsten Kantengewicht zu folgen [1]. Der Algorithmus findet
damit stets den kürzesten Weg zwischen einem Startpunkt S und einem Zielpunkt
Z in einem kantengewichteten Graphen. Die Knoten in diesem Graphen, der auch
den Startpunkt und den Zielpunkt enthält, werden in zwei verschiedene Klassen
eingeteilt:
• die Menge der unbesuchten Knoten
• die Menge der besuchten Knoten
Funktionsweise
Innerhalb eines Initialisierungsschrittes werden allen Knoten in einem Graph die beiden Eigenschaften Vorgängerknoten und Distanz zugewiesen, wobei die Distanz in S
auf 0 und in allen anderen Knoten auf unendlich gesetzt wird. Ausgehend von einem
2
2 Wegfindung
Knoten K1 werden dessen unbesuchte Nachfolgeknoten besucht, bei denen jeweils
ein neuer Distanzwert berechnet wird, der sich aus dem entsprechenden Kantengewicht und dem Distanzwert von K1 zusammensetzt. Sofern dieser neue Wert für
einen Nachfolgeknoten kleiner als der ihm zugewiesene Distanzwert ist, wird der Distanzwert mit dem berechneten Wert aktualisiert und der Vorgänger auf K1 gesetzt.
Der Knoten K1 wird anschließend in der Menge der besuchten Knoten gespeichert
und aus der Menge der unbesuchten Knoten entfernt. Diese Schritte werden solange
wiederholt, bis keine unbesuchten Knoten mehr vorhanden sind oder der aktuelle
Knoten der gesuchte Knoten Z ist [2].
2.2 A* - Algorithmus
Der wohl wichtigste Vertreter der informierten (heuristischen) Suchalgorithmen ist
der A* -Algorithmus, der erstmals im Jahr 1968 von P. Hart, N. J. Nilsson und
B. Raphael beschrieben wurde [3] [4]. Der A* -Algorithmus findet aufgrund einer
Heuristik zielgerichtet und optimal den Weg von einem Startpunkt S zu einem Zielpunkt Z in einem kantengewichteten Graphen. Die Knoten in diesem Graphen, der
auch den Startpunkt und den Zielpunkt enthält, werden in drei verschiedene Klassen
eingeteilt:
• Die Menge der unbekannten Knoten beinhaltet die Knoten, die während der
Wegsuche noch nicht besucht worden sind. Zu Beginn enthält diese Menge alle
Knoten bis auf den Startpunkt.
• Die Menge der bekannten Knoten enthält alle bereits besuchten Knoten inklusive dem jeweiligen Vorgängerknoten und einem Funktionswert f, der die
reale Distanz zwischen Vorgängerknoten zum Startpunkt und geschätzter Distanz zum Zielpunkt Z darstellt. Diese Menge wird als Open List bezeichnet.
Nach jedem Berechnungsschritt wird der nächste vielversprechendste Knoten
mit dem geringsten f -Wert für die weitere Wegsuche benutzt.
• Die Menge der abschließend untersuchten Knoten ist auch unter dem Namen
Closed List bekannt und enthält alle Knoten, zu denen bereits der kürzeste
Weg gefunden worden ist, um eine Mehrfachauswahl bereits besuchter Knoten
zu vermeiden. Alle Knoten in dieser Menge beinhalten wie in der Open List
einen Zeiger auf ihren Vorgängerknoten.
Funktionsweise
Ausgehend von einem Knoten K1 werden dessen Nachfolgeknoten besucht. Jeder Nachfolgeknoten Kx von K1 bekommt dabei neben einem Zeiger auf seinen
Vorgängerknoten K1 den Funktionswert f zugewiesen, der sich aus der Summe der
3
2 Wegfindung
beiden Funktionswerte g und h zusammensetzt. Die Summe der realen Distanzen
zwischen Kx und seinen entsprechenden Vorgängerknoten (inklusive K1 ) wird dabei
in g gespeichert und h beinhaltet die geschätzte, heuristische Distanz von Kx zu
dem Zielpunkt Z. Diese Nachfolgeknoten werden, sofern sie nicht in der Closed List
stehen, in die Open List eingetragen, während K1 damit nun als abschließend untersucht gilt und der Closed List hinzugefügt wird. Sollte dabei ein Nachfolgeknoten
bereits in der Open List vorhanden sein, wird der Knoten nur mit dem neuen f -Wert
und dem Zeiger auf den neuen Vorgängerknoten aktualisiert, wenn der neue Weg
dorthin kürzer ist als der bisherige.
Im nächsten Schritt werden die Knoten der Open List aufsteigend nach ihrem f Wert weitergehend abgearbeitet, in dem deren Nachfolgeknoten und deren f -Werte
ermittelt werden. Somit fangen die beschriebenen Schritte von vorne an.
Sobald Z abschließend untersucht worden ist und damit in der Closed List steht,
terminiert der Algorithmus und der Weg von S zu Z wird über die entsprechenden
Referenzen der Vorgängerknoten rekonstruiert. Aus diesem Grund muss der Weg
rückwärts ausgegeben werden. Falls die Open List allerdings nach einem Berechnungsschritt leer sein sollte, bevor Z abschließend untersucht worden ist, terminiert
der Algorithmus ebenfalls, da kein entsprechender Weg von S nach Z gefunden werden konnte [5].
2.3 Spline-Interpolation
Eng verzahnt mit der reinen Wegsuche ist die Spline-Interpolation, da in den meisten
Anwendungsfällen in der Robotik (nicht die Routenplanung mit Navigationsgeräten
für Autos) ein geglätteter Pfad für die Fortbewegung erwünscht ist. Aus diesem
Grund befindet sich in diesem Kapitel zur Wegfindung noch ein übersichtlicher Abschnitt über Spline-Interpolation, der die Grundidee erklären wird.
Als Vorbild diente die Straklatte (engl. Spline) der Schiffsbauer, die entlang vorgegebener Punkte fixiert wird und diese dann anschließend miteinander durch geringste
Krümmungen und minimalster Biegeenergie verbindet. Ausgangspunkt für Splines
sind demnach also einzelne Punkte, die in diesem Zusammenhang als Stützstellen
oder wie in der Wegfindung ebenfalls als Knoten bezeichnet werden [6].
Eine Interpolation zwischen mehreren Knoten könnte auch direkt mit sogenannten Interpolationspolynomen geschehen, allerdings erhöht sich mit jedem weiteren
Knoten, durch den interpoliert werden soll, der Grad des Polynoms [7]. Ab einer gewissen Größe ist es nicht mehr möglich ausreichend genau mit Hilfe eines einzelnen
Interpolationspolynoms zu approximieren. Abhilfe schafft die Spline-Interpolation,
bei der zwischen diesen Knoten stückweise stetige Polynome berechnet werden, die
anschließend für die Interpolation dienen. Einschränkend müssen die Stetigkeit und
4
2 Wegfindung
die Differenzierbarkeit an den Knoten zwischen den jeweiligen Polynomen eingehalten werden, da ansonsten kein glatter Verlauf der Interpolationskurve entstehen
würde [6]. Als Beispiel muss zwingend gelten, dass in einem Punk K1 , der Endpunkt des stückweisen Polynoms P1 und gleichzeitig Startpunkt für das stückweise
Polynom P2 darstellt, die Steigung exakt die selbe ist.
Je nach Art der Spline-Interpolation müssen noch weitere Einschränkungen und
Regeln für die Interpolation eingehalten werden.
5
3 Simple Paths
Das folgende Kapitel widmet sich der Beschreibung und Darstellung des Programms
Simple Paths, das im Rahmen der Veranstaltung Robotik an der Hochschule RheinMain entstanden ist.
Ziel des Projekts war die Implementierung des Dijkstra-Algorithmus und weiteren
Funktionen zur erfolgreichen Wegfindung eines Roboters durch eine bekannte Umgebung oder Wohnung inklusive Hindernissen oder Gegenständen. Der Benutzer des
Programms sollte dabei neben der Festlegung der Startposition S, der Größe des Roboters und der Zielposition Z auch die Möglichkeit besitzen, die Umgebung bzw. die
Wohnung den Wünschen entsprechend manuell zu erstellen. Weiterhin bestand die
Anforderung, dass ein gefundener Weg mittels Interpolation - vorzugsweise mit Hilfe
von Catmull-Rom-Splines - interpoliert und geglättet werden sollte. Mittels einer visuellen Animation des Roboters, der entlang des gefundenen Wegs fährt, erhält der
Benutzer zudem eine Darstellung und versteht gleichzeitig auch den Nutzen dieser
Interpolation.
3.1 Architektur
Simple Paths ist eine mit Python [8] programmierte Anwendung, die mittels der
Benutzeroberflächen-Klassenbibliothek Qt [9] umgesetzt ist. Für einzelne Algorithmen werden zusätzlich die Python-Module NumPy [10], SciPy [11] und die
Bildverarbeitungs-Bibliothek OpenCV [12] verwendet.
Das Programm besitzt neben dem Hauptmodul (siehe Abbildung 3.1), in dem die
Benutzeroberfläche mit den zahlreichen GUI1 -Elementen programmiert ist und der
Mainloop von Qt läuft, weitere Module, die für die Ausführung der Algorithmenberechnungen zuständig sind.
Um eine reaktive Anwendung zu erhalten, werden diese Berechnungen über einen
separaten Thread gestartet und die Zwischenergebnisse sowie den gefundenen Pfad
mittels des Signal- and Slot-Systems von Qt an das Hauptmodul übermittelt. Die
Vorberechnungen zur Stützpunkt- und letztendlich zur Grapherstellung finden in
einem separaten Modul statt und werden von diesem Thread aufgerufen. Sobald
das Ergebnis - ein ungerichteter Graph - vollständig erstellt wurde, überträgt der
Thread diesen Graph an das entsprechende Modul, das den Wegfindungsalgorithmus
enthält. Dieses Modul liefert als Rückgabewert eine Liste von Stützpunkten, die auf
1
graphical user interface, dt. grafische Benutzeroberfläche
6
3 Simple Paths
Abbildung 3.1: Klassenübersicht des Programms
dem Weg von der Startposition zur Zielposition den kürzesten Weg ergeben.
3.2 Benutzeroberfläche
Simple Paths bietet eine übersichtliche Oberfläche (siehe Abbildung 3.2) mit zwei
Hauptbereichen und einer zusätzlichen Menüleiste.
Abbildung 3.2: Benutzeroberfläche von Simple Paths
Eine Ansicht zum Zeichnen und Platzieren von verschiedenen Objekten, Hindernissen oder der Start- bzw. der Roboterposition und der Zielposition, befindet
sich im linken Bereich des Programms und wird im weiteren Verlauf mit Grafikszene bezeichnet. Auf der rechten Seite sind hingegen die entsprechenden Funktionen zum Erstellen dieser Objekte vorhanden. Außerdem existieren zahlreiche Auswahlmöglichkeiten zur Wegfindung, sowie optionale Einstellungsmöglichkeiten, die
7
3 Simple Paths
die Vorgehensweise der Algorithmen anhand Zeichnungen in der Grafikszene verdeutlichen. Die folgenden Abschnitte befassen sich ausführlich mit diesen Auswahlund Einstellungsmöglichkeiten.
Menüleiste
Die Menüleiste beherbergt die drei Menüpunkte File“, Simulation“ und
”
”
About“ (siehe Abbildung 3.3). Entsprechend der Namensgebung werden über den
”
Menüpunkt File“ Standardaktionen wie das Öffnen“ und Speichern“ von erstell”
”
”
ten Umgebungen angeboten.
(a) Datei-Menü
(b) Simulations-Menü (c) Informations-Menü
Abbildung 3.3: Menüpunkte der Menüleiste
Bei gespeicherten Umgebungen handelt es sich um Textdateien, die pro Zeile die
Koordinaten und den Typ eines Objektes beinhalten. Bei der Speicherung erfolgt
eine Umwandlung der Datenstruktur eines Objekts in eine Zeichenkette, die beim
Öffnen direkt wieder als die entsprechende Datenstruktur interpretiert werden kann.
Der Menüpunkt Simulation“ in der Menüleiste bietet zwei Funktionen zum Star”
ten der Wegfindung und der Simulation. Diese beiden Aktionen können auch über
die entsprechenden GUI-Elemente in Abbildung 3.11 angesprochen werden.
Über den Menüpunkt About“ können detailierte Informationen über das Pro”
gramm abgerufen werden.
Objekte zeichnen und platzieren
Dem Benutzer stehen für die Gestaltung der Umgebung bzw. der Wohnung zwei Zeichenoperationen zur Verfügung, mit denen er schematisch Objekte bzw. Hindernisse
in die Grafikszene des Programms zeichnen kann.
(a) Rechteck zeichnen
(b) Polygon zeichnen
Abbildung 3.4: Objekte zeichnen Teil I
8
3 Simple Paths
Für die Ausführung der einzelnen Zeichenoperationen muss jeweils der entsprechende Knopf mit der Maustaste gedrückt werden (siehe Abbildung 3.4 und Abbildung 3.5).
(a) Roboterposition
(b) Robotergröße
(c) Zielposition
Abbildung 3.5: Objekte zeichnen Teil II
Rechtecke werden dann anschließend in die Grafikszene, wie in Abbildung 3.6 dargestellt, mittels gedrückter Maustaste von einen Start- zu einem Endpunkt gezeichnet und dabei entlang eines unsichtbaren Rasters in 10 Pixel Schritten ausgerichtet.
(a) Schritt 1
(b) Schritt 2
Abbildung 3.6: Rechtecke zeichnen
Für das Zeichnen von Polygonen (siehe Abbildung 3.7) genügt ein einzelner
Mausklick für das Hinzufügen eines weiteren Eckpunkts. Durch das Hinzufügen eines gewünschten Eckpunkts per Doppelklick wird das Polygon zusätzlich geschlossen
und das Polygonzeichnen beendet.
(a) Schritt 1
(b) Schritt 2
(c) Schritt 3
Abbildung 3.7: Polygone zeichnen
Für das Platzieren von Roboterposition und Zielposition wird hingegen wiederum nur ein einzelner Mausklick benötigt. Beide Positionen können allerdings
9
3 Simple Paths
nachträglich neu gesetzt und mittels gedrücker Maustaste verschoben werden.
Zusätzlich kann die Größe des Roboters über eine Einstellungsmöglichkeit (siehe
Abbildung 3.5 (b)) festgelegt werden.
Stützpunkterstellung
Insgesamt stehen dem Benutzer drei verschiedene Methoden zur
Stützpunkterstellung zur Auswahl (siehe Abbildung 3.8). Die standardmäßig
aktivierte modellbasierte Stützpunkterstellung verteilt die Stützpunkte abhängig
von den Konturen der benachbarten Geometrie. Damit verteilt diese Methode die
Stützpunkte intelligenter als der rasterbasierte bzw. der stochastische Ansatz und
es existiert keine Möglichkeit, die Anzahl der Stützpunkte zu kontrollieren.
Abhängig von der ausgewählten Erstellungsmethode wird eine Einstellungsmöglichkeit de- bzw. aktiviert, mit der die Anzahl der zu erstellenden
Stützpunkte beim rasterbasierten Ansatz beeinflusst und beim stochastischen Ansatz direkt festgelegt werden kann.
(a) Auswahlbox zu
(b) Auswahlbox offen (c) Anzahl der zu erstellenden Stützpunkte
Abbildung 3.8: Auswahl- und Einstellungsmöglichkeiten zur Stützpunkterstellung
Wegfindung
Simple Paths beinhaltet neben dem standardmäßig aktivierten Dijkstra-Algorithmus
zusätzlich eine A* -Implementierung zur Wegfindung. Beide können über die entsprechende Auswahlbox (siehe Abbildung 3.9) ausgewählt werden.
(a) Auswahlbox zu
(b) Auswahlbox offen
Abbildung 3.9: Auswahlmöglichkeiten zur Pfadsuche
10
3 Simple Paths
Spline-Interpolation
Dem Benutzer stehen drei verschiedene Arten der Spline-Interpolation eines gefundenen Pfades zur Verfügung. Die standardmäßig ausgewählte Catmull-Rom Interpolation interpoliert zwischen den Stützpunkten und verhindert vergleichsweise gut
das Aufschwingen der Spline. Sowohl die kubische Interpolation, als auch die quadratische Interpolation neigen zum Aufschwingen der interpolierten Spline, allerdings
steigt die Intensität des Aufschwingens in ihrer genannten Reihenfolge. Dafür bietet
die quadratische Interpolation den glättesten Verlauf von allen drei Interpolationstypen. Um den gefundenen Pfad in einer diskreten Pixelansicht entsprechend zu
glätten, existiert ein einstellbarer Glättungsparameter (siehe Abbildung 3.10).
(a) Auswahlbox zu
(b) Auswahlbox offen
(c) Glättungsparameter der Spline
Abbildung 3.10: Auswahl- und Einstellungsmöglichkeiten zur Spline-Interpolation
Simulation
Nachdem der Benutzer die gewünschten Einstellungen vorgenommen und einen Wegfindungsalgorithmus ausgewählt hat, wird die Berechnung des kürzesten Wegs über
den entsprechenden Knopf (siehe Abbildung 3.11 (a)) gestartet. Diese Berechnungen werden im Hintergrund über einen Thread ausgeführt, so dass der Rest des
Programms reaktiv bleibt. Sobald alle Berechnungen abgeschlossen sind, wird der
interpolierte kürzeste Pfad in der Grafikszene eingezeichnet. Zudem besteht die
Möglichkeit eine Animation zu starten, in der der Roboter von seiner Startposition entlang des eingezeichneten Pfades zur Zielposition und anschließend wieder
zurück fährt. Die Zeit in Sekunden, die der Roboter für diese Animation benötigen
soll, lässt sich über einen entsprechenden Parameter einstellen (siehe Abbildung 3.11
(b) und (c)).
(a) Pfad berechnen
(b) Simulation starten (c) Simulationsgeschwindigkeit in Sekunden
Abbildung 3.11: Einstellungsmöglichkeiten zur Simulation
11
3 Simple Paths
3.3 Beschreibung der Algorithmen
Dieses Kapitel skizziert die Funktionsweise der verwendeten Methoden zur
Stützpunkt- und zur Graphenerstellung. Die Funktionsweisen der Wegfindungsalgorithmen wurden bereits ausführlich in Kapitel 2 dargestellt.
3.3.1 Methoden zur Stützpunkterstellung
Modellbasierte Stützpunkterstellung
Bei der modellbasierten Stützpunkterstellung werden die Konturlinien von den Objekten im Bild analysiert und entsprechende Stützlinien von jedem Ende der Konturlinie bis hin zur Bildgrenze verlängert. Schneiden diese Stützlinien eine Konturlinie, bevor sie die Bildgrenze treffen, wird der Schnittpunkt als neues Ende
dieser Stützlinie gespeichert. Im nächsten Schritt dienen die mittleren Distanzen
zwischen jeweils zwei Punkten, die eine Stützlinie bilden, als Stützpunktposition.
Diese intelligente Stützpunkerstellung erfolgt somit abhängig von der umliegenden
Objektgeometrie und es werden keine unnötigen Stützpunkte generiert, um zusammenhängende Graphen mit recht wenigen Stützpunkten in einem nachfolgenden
Schritt zu generieren.
Rasterbasierte Stützpunkterstellung
Der naive Ansatz der rasterbasierten Stützpunkterstellung erstellt Stützpunkte in
einem festen Abstand zueinander. Dabei werden Stützpunkte, die auf Objekten im
Bild liegen würden, aussortiert. Sobald allerdings die Distanzen zwischen Objekten kleiner sind als der eingestellte Abstand, führt dieses Verfahren oft zu nichtzusammenhängenden Graphen und es kann kein Weg von der Startposition zur Zielposition gefunden werden.
Stochastische Stützpunkterstellung
Bei diesem Verfahren werden solange zufällig Stützpunkte generiert, bis eine feste
Anzahl erreicht worden ist. Ähnlich wie bei der rasterbasierten Stützpunkterstellung
werden Stützpunkte, die auf Objekten im Bild liegen würden, aussortiert. Wird die
Anzahl der zu generierenden Stützpunkte zu niedrig gewählt, werden bei entsprechender Umgebung oft nicht-zusammenhängende Graphen generiert und die Wegfindung von der Startposition zur Zielposition bleibt erfolglos.
3.3.2 Methode zur Graphenerstellung
Innerhalb eines vorverarbeitenden Schritts werden alle möglichen Kanten zwischen
allen Stützpunkten untereinander ermittelt. Während diesem Vorgang überprüft eine Routine, ob diese Kante unter Berücksichtigung der Umgebungshindernisse und
12
3 Simple Paths
der Robotergröße existieren darf, so dass keine Kollisionen auftreten. Die resultierenden Kanten werden als Tupel, bestehend aus Start- und Endpunkt, in einer Liste
gespeichert.
Mittels dieser Kanten und der bereits bestehenden Stützpunkte wird anschließend
eine Datenstruktur erstellt, deren Einträge aus einem Index mit dem Wert eines
Stützpunktes und einer Liste, die seine Nachbarstützpunkte enthält, bestehen.
3.3.3 Methoden zur Wegfindung
Die zwei unterschiedlichen Wegfindungsalgorithmen wurden bereits in Kapitel 2 vorgestellt, so dass in diesem Abschnitt nur noch einige allgemeine Informationen zur
Implementierungsvorgehensweise genannt werden. Der Rückgabewert beider Algorithmus ist jeweils eine Liste, die die Knoten des gefundenen Pfads in der richtigen
Reihenfolge enthält.
Dijkstra - Algorithmus
Der Algorithmus ermittelt anhand der erstellten Datenstruktur des Graphen, einem Startpunkt S und einem Zielpunkt Z über eine Rekursion den kürzesten Weg
zwischen S und Z. Als weitere Parameter benötigt die Implementierung eine Liste
für die bereits besuchten Knoten. Die Knoteneigenschaften Distanz und Vorgänger
werden in separaten Datenstrukturen gespeichert, deren Einträge jeweils mit dem
entsprechenden Knoten verknüpft sind.
A* - Algorithmus
Die Implementierung des A* -Algorithmus ermittelt anhand der erstellten Datenstruktur des Graphen, einem Startpunkt S und einem Zielpunkt Z innerhalb einer
Schleife den kürzesten Weg zwischen S und Z. Jeder Punkt bzw. Knoten ist dabei
als Instanz einer Klasse angelegt, die die Attribute für g, h und parent (entspricht
dem Vorgängerknoten) enthält. Innerhalb des Algorithmus werden die zusätzlich
benötigten Mengen Open List und Closed List als spezielle Listen, sogenannten
Sets, angelegt.
3.3.4 Methoden zur Spline-Interpolation
Alle Spline-Interpolationsmethoden werden über eine Interpolationsmethode aufgerufen, die als Parameter eine Zeichenkette für den entsprechenden Interpolationstyp erwartet. Zusätzlich muss durch einen Glättungsparameter die Diskretisierungsschritte zwischen zwei Knoten für die Interpolation festgelegt werden. Dabei ist zu
beachten, dass die X- und die Y-Koordinaten der Knoten grundsätzlich unabhängig
voneinander interpoliert werden.
13
4 Evaluation
Das Spannende an den verschiedenen Ansätzen zur Vor- und Nachbereitung zur
Wegfindung liegt nicht zwangsläufig in ihrer Vorgehensweise, sondern welche Ergebnisse letztendlich daraus resultieren und welches Wissen der Benutzer daraus
ziehen kann. Dieses Kapitel befasst sich aus diesem Grund mit den Ergebnissen der
Algorithmen und versucht diese zu vergleichen und zu bewerten.
Die Bewertung der Wegfindungsalgorithmensoll an dieser Stelle hier ausgeklammert werden, da sowohl der Dijkstra- als auch der A* -Algorithmus den kürzesten
bzw. optimalsten Pfad finden und sich in ihrer Vorgehensweise nur minimal unterscheiden. Generell wird der A* -Algorithmus oft als Weiterentwicklung des DijkstraAlgorithmus angesehen, da dieser den Dijkstra-Algorithmus um die Schätzfunktion
mit Hilfe der Heuristiken erweitert und somit die Laufzeit für die Wegfindung durch
eine zielgerichtetere Suche verringert.
4.1 Vergleich der Methoden zur Stützpunkterstellung
Aufgrund der Tatsache, dass hinter dem modellbasierten Ansatz eine gewisse Analyse der Umgebung und der darin enthaltenen Hindernisse vorhanden ist und
abhängig von der Objektdichte bzw. deren Konturen letztendlich die Stützpunkte
verteilt werden, möchte ich diesen Ansatz als den intelligentesten von den hier implementierten Stützpunkterstellungsmethoden bezeichnen. Obwohl bei diesem Ansatz kein zusätzlicher Parameter zum Beeinflussen der Stützpunktanzahl angegeben werden muss, wird immer ein Weg von einem Startpunkt S zu einem Zielpunkt Z gefunden (siehe Abbildung 4.1). Die folgenden Abbildungen sind Ausschnitte aus der kompletten Grafikszene, die jedoch genügen, um die Unterschiede der
Stützpunkterstellungsmethoden zu verdeutlichen.
Abbildung 4.1: Modellbasiertes Stützpunkterstellungsergebnis
14
4 Evaluation
Sowohl der rasterbasierte als auch der stochastische Ansatz gehen in ihrer
Stützpunkterstellung eher naiv vor und haben mit entsprechenden Problemen zu
kämpfen. Zudem benötigen beide Ansätze eine Überprüfung, ob sich ein erstellter
Stützpunkt innerhalb eines Hindernisses befindet, um diesen gegebenenfalls wieder
zu entfernen. Beide verfügen über einen Parameter, mit dem direkt (stochastisch)
oder indirekt (rasterbasiert) die Anzahl der Stützpunkte kontrolliert und eingestellt
wird.
(a) 75 Pixel Abstand
(b) 50 Pixel Abstand
Abbildung 4.2: Vergleich der rasterbasierten Stützpunkterstellungsergebnisse
Bei dem rasterbasierten Ansatz bestimmt dieser Parameter die Schrittweite bzw.
den Abstand zwischen zwei Stützpunkten, die innerhalb eines festen Gitters horizontal und vertikal angeordnet werden. Sobald dieser Abstand größer als der Abstand zwischen zwei Konturen von Objekten ist, besteht die Möglichkeit, dass kein
Stützpunkt zwischen diesen beiden Konturen erstellt wird. Aufgrund dessen wird
der durch diese Konturen begrenzte Bereich nicht im Graph angebunden und letztendlich unerreichbar (siehe Abbildung 4.2).
(a) 50 Stützpunkte
(b) 100 Stützpunkte
(c) 100 Stützpunkte
Abbildung 4.3: Vergleich der stochastischen Stützpunkterstellungsergebnisse
Wie die Bezeichnung des stochastischen Ansatzes vermuten lässt, birgt die
zufällige Positionsgenerierung bei der Stützpunkterstellung die Gefahr, dass selbst
bei einer hohen Anzahl von zu erstellenden Stützpunkten keine zusammenhängenden
Graphen erstellt werden können. Bei der Benutzung dieses Ansatzes tritt dieses Problem ab einer entsprechend hohen Anzahl in der Praxis nicht mehr auf, allerdings
15
4 Evaluation
kann die Punktdichte dann an zufälligen Stellen in der Umgebung unnötig hoch sein
(siehe Abbildung 4.3).
4.2 Vergleich der Methoden zur Spline-Interpolation
Catmull-Rom-Splines verhindern das Aufschwingen besser als die beiden alternativen Interpolationsmethoden. Während die kubische Interpolationsmethode zu teilweise starkem Aufschwingen neigt, tendiert die quadratische Spline-Interpolation
oft zu größerem Überschwingen“. Für die Routenplanung innerhalb von begrenz”
ten Umgebungen wie z.B. einer Wohnung mit teilweise engen Durchgängen zwischen
Hindernissen oder Objekten eignen sich deswegen Catmull-Rom-Splines für die Interpolation am besten. Ein visueller Vergleich findet sich in der folgenden Abbildung 4.4.
(a) Catmull-Rom
(b) Kubisch
(c) Quadratisch
Abbildung 4.4: Vergleich der Spline-Interpolationsmethoden
16
5 Fazit
Das Gebiet der Wegfindung in der Informatik umfasst einen spannenden Bereich,
da nicht nur eine Vielzahl von verschiedenen Wegfindungs-Algorithmen existieren,
sondern auch diverse Ansätze für die Vor- und auch die Nachbereitung. Mit Python
lassen sich zudem in überschaubarer Zeit umfangreiche Algorithmen fertigstellen,
was dazu geführt hat, sich näher mit dem Gebiet der Wegfindung auseinander zu
setzen.
Aus diesem Blickwinkel betrachtet ist es rückblickend nicht verwunderlich, dass
das Projekt Simple Paths noch während seiner Entwicklung um diverse Funktionen
ergänzt und der ursprünglich formulierte Projektumfang erweitert wurde.
Geplanter
Projektumfang
Aktueller
Projektumfang
Stützpunkterstellung
Modellbasiert
Modellbasiert
Rasterbasiert
Stochastisch
Wegfindungsalgorithmen
Dijkstra
Dijkstra
A*
Spline
Interpolation
Catmull-Rom
Catmull-Rom
Quadratisch
Kubisch
Tabelle 5.1: Projektumfang
Die Erweiterungen betreffen allerdings nicht nur den Bereich der Algorithmen,
sondern sind auch in der Benutzeroberfläche zu finden. So wurden architekturelle Überlegungen in Betracht gezogen und letztendlich auch umgesetzt, um somit
eine schnelle Anwendung mittels Qt zu realisieren. Nützliche Funktionen wie das
zusätzliche Ein- und Ausblenden von Stützpunkten oder dem Graphen fanden dadurch auch ihren Weg in die Implementierung von Simple Paths.
17
6 Abbildungsverzeichnis
3.1
3.2
3.3
3.4
3.5
3.6
3.7
3.8
3.9
3.10
3.11
Klassenübersicht des Programms . . . . . . . . . . . . . . . . . .
Benutzeroberfläche von Simple Paths . . . . . . . . . . . . . . . .
Menüpunkte der Menüleiste . . . . . . . . . . . . . . . . . . . . .
Objekte zeichnen Teil I . . . . . . . . . . . . . . . . . . . . . . . .
Objekte zeichnen Teil II . . . . . . . . . . . . . . . . . . . . . . .
Rechtecke zeichnen . . . . . . . . . . . . . . . . . . . . . . . . . .
Polygone zeichnen . . . . . . . . . . . . . . . . . . . . . . . . . . .
Auswahl- und Einstellungsmöglichkeiten zur Stützpunkterstellung
Auswahlmöglichkeiten zur Pfadsuche . . . . . . . . . . . . . . . .
Auswahl- und Einstellungsmöglichkeiten zur Spline-Interpolation .
Einstellungsmöglichkeiten zur Simulation . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
7
7
8
8
9
9
9
10
10
11
11
4.1
4.2
4.3
4.4
Modellbasiertes Stützpunkterstellungsergebnis . . . . . . . .
Vergleich der rasterbasierten Stützpunkterstellungsergebnisse
Vergleich der stochastischen Stützpunkterstellungsergebnisse
Vergleich der Spline-Interpolationsmethoden . . . . . . . . .
.
.
.
.
.
.
.
.
14
15
15
16
I
.
.
.
.
.
.
.
.
.
.
.
.
7 Literatur- und Quellenverzeichnis
[1] Edsger W Dijkstra. A note on two problems in connexion with graphs. Numerische mathematik, 1(1):269–271, 1959.
[2] Thomas H Cormen, Charles E Leiserson, Ronald L Rivest, Clifford Stein, et al.
Introduction to algorithms, volume 2. MIT press Cambridge, 2001.
[3] Peter E Hart, Nils J Nilsson, and Bertram Raphael. A formal basis for the heuristic determination of minimum cost paths. Systems Science and Cybernetics,
IEEE Transactions on, 4(2):100–107, 1968.
[4] Peter E Hart, Nils J Nilsson, and Bertram Raphael. Correction to a formal
basis for the heuristic determination of minimum cost paths. ACM SIGART
Bulletin, (37):28–29, 1972.
[5] Stuart Russell and Peter Norvig. Künstliche Intelligenz. Ein moderner Ansatz,
München, 2004.
[6] Josef Stoer and Roland Bulirsch. Numerische Mathematik, volume 8. Springer,
1989.
[7] Britta Nestler.
Approximation durch Polynome.
http://www.iaf.
hs-karlsruhe.de/ice/ice/nestler/fileadmin/files/ModSim/Notes/
ModSim-Skript2.pdf, 2011. Online, Stand: 15. Januar 2015.
[8] Python Software Foundation. Python. https://www.python.org/. Online,
Stand: 15. Januar 2015.
[9] Qt Project. Qt. http://qt-project.org/. Online, Stand: 15. Januar 2015.
[10] NumPy Org. NumPy. http://www.numpy.org/. Online, Stand: 15. Januar
2015.
[11] SciPy Org. SciPy. http://www.scipy.org/. Online, Stand: 15. Januar 2015.
[12] OpenCV Org. OpenCV. http://opencv.org/. Online, Stand: 15. Januar 2015.
II
Herunterladen