![]() |
Smart Minotaur
|
Der Belegtheitsgitter Ansatz wurde in dem Package minotaur_map realisiert. In diesem Ansatz wurde die Karte des Labyrinths mithilfe eines Belegtheitsgitters aufgezeichnet. Wie in jeder Anwendung läuft auf dem Beagle Bone die RobotControl Node. Außerdem läuft auf dem Beagle Bone die ROS-Node Movebase. Diese realisiert die grundlegende Kommunikation des ROS-Navigation Stack. Dadurch kann Movebase eine globale Zielkoordinate für den Roboter übergeben werden und Movebase navigiert den Roboter an diese Koordinate. Während seiner Navigation wird über Ultraschallsensoren die Umgebungskarte angefertigt.
Aufgrund sehr schlechter Odometrie und der daraus resultierenden unbenutzbaren Karte, gibt es hierfür keine fertig implementierten Navigationsalgorithmen. Das Belegtheitsgitter kann jedoch mit dem Tool map_monitor benutzt und ausprobiert werden. Mehr findet sich dazu auf der Seite GUI Tools.
Wie bereits erwähnt gibt es in diesem Ansatz keine fertiggestellten Navigationsalgorithmen. Jedoch sind bereits Templates für einen Bug 0 und Pledge-Algorithmus vorhanden. Der grundlegende Gedanke war, dass der Roboter sich mithilfe der Karte und des ROS Navigation Stack durch das Labyrinth navigiert.
Das folgende Diagramm zeigt die interne Funktionsweise des Histogramm Ansatz. Diese Funktionsweise wird in den darauffolgenden Abschnitten näher erläutert.
In einem eigenen Thread wird das Belegtheitsgitter parallel zur Navigation aufgezeichnet. Dabei wird jedesmal, sobald eine neue Messung eintrifft, anhand der aktuellen Position ein Eintrag in dem Belegtheitsgitter gemacht (Zellenwert erhöht). Über ein internes ID Mapping wird unterschieden, zu welchem Sensor die eingehende Messung gehört, sodass auch dessen Ausrichtung berücksichtigt werden kann. Über die aktuelle Position des Roboters und mithilfe der Ausrichtung des Sensors wird ermittelt, in welcher Zelle des Belegtheitsgitters der Wert erhöht werden muss. Zusätzlich wird den Messungen noch ein Fächer hinzugefügt, sodass der Wert aller Zellen erhöht wird, die auf der Kreisbahn des entsprechenden Kreisabschnitts liegen.
In einem seperaten Thread findet die Navigation statt. Anhand der aufgezeichneten Karte legt ein Navigationsalgorithmus die nächste Zielkoordinate fest, an die sich der Roboter bewegen soll. Diese Koordinate wird an den ROS Navigation Stack (MoveBase) übergeben, sodass dieser den Roboter dorthin navigiert. Da das Belegtheitsgitter nicht in den ROS Navigation Stack integriert ist, werden Hindernisse in der Karte von dem ROS Navigation Stack nicht berücksichtigt. Daher muss der eigene Navigationsalgorithmus darauf achtgeben nur Zielkoordinaten zu übergeben, die nicht durch ein Hindernis blockiert werden.
Wie schon oben erwähnt wurde dieser ganze Ansatz jedoch verworfen, da die Odometriedaten des Roboters so schlecht waren, dass der Roboter bereits nach kurzer Fahrt komplett die Orientierung verloren hat. Zur Verbesserung der Odometrie sollten eigentlich die Maussensoren genutzt werden. Zu diesem Teil des Projektes finden sich mehr Informationen auf der Seite Maussensoren.