Autonome NXT Roboter

Im Rahmen des Studiums habe ich mit wieder einmal mit NXT Robotersystemen von Lego beschäftigt. Aufgabe war es ein Autonomes System zu entwerfen welches folgende Fähigkeiten besitzt:

Der Roboter soll ohne Führungslinie um eine fiktive Baustelle fahren. Diese Baustelle wird in Form eines 70x70x20 cm großen Pappkartons simuliert. Der Roboter hat bei zwei Haltepunkten zu stoppen, welche einen simulierten Ent- oder Beladevorgang darstellen. Die Fahrt soll automatisch fortgesetzt werden und er darf dabei nicht mit Begrenzungen kollidieren. Es ist möglich die Navigation kartenbasiert oder odometrisch zu implementieren. Bei Bedarf kann um die fiktive Baustelle eine maximal 4×4 Meter große Außenbegrenzung für den Fahrbereich des Roboters errichtet werden.
Der Programmcode kann HIER herunter geladen werden.

_MG_3115

Analyse

Um die Aufgabenstellung zu lösen ist vorher zu klären, mit welchen verfügbaren Sensoren der NXT Roboter ausgestattet werden kann. In 0.1 sind einige Sensortypen und deren Verfügbarkeit für die Belegarbeit aufgezeigt. Daraus folgt, dass die Lösung mittels Lichtsensoren, Farbsensoren, IR-Sensoren, Tastsensoren, Ultraschallsensoren oder Tonsensoren zu realisieren ist, da nur diese Sensoren im Bestand der HTW sind.
Die Positionsbestimmung kann auf verschiedene Weisen erfolgen. Mit Ultraschallsensoren lassen sich Entfernungen auf Zentimeterbasis bestimmen. Tastsensoren geben bei Kollision oder Berührung ein Feedback. IR-Sensoren können mit Hilfe von IR-Sendern agieren. Farb- und Lichtsensoren detektieren Farb- oder Helligkeitsunterschiede und können so einen Standort zuordnen. Außerdem ist es möglich Informationen zur Position anhand der Räderstellung, durch ein Auslesen der NXT Motoren, zu erlangen. Selbst ein Tonsensor kann bis zu einem gewissen Grad die Entfernung zu einer Tonquelle bestimmen.
Sensortyp

 

Relevanz (1-6)

 

Verfügbarkeit(Anzahl)

 

GPS Sensor

 

1

 

0

 

RFID-Sensor

 

1

 

0

 

Kompasssensor

 

2

 

0

 

Digital Oszilloskop

 

6

 

0

 

Lichtsensor

 

2

 

4

 

Farbsensor

 

2

 

(2)

 

Beschleunigungssensor

 

5

 

0

 

Rotationssensor

 

4

 

0

 

Barometrischer Sensor

 

5

 

0

 

IR-Sensor

 

5

 

1

 

Tastsensor

 

2

 

4

 

Ultraschallsensor

 

2

 

2

 

Tonsensor

 

5

 

4

 

Temperatursensor

 

6

 

0

 

Videosensor

 

2

 

0

 

Magnetfeldsensor

 

5

 

0

 

Table 0.1: Sensortypen

Die Aufgabenstellung verlangt eine autonome Umfahrung der Baustelle mit zwei Haltepunkten (siehe Problemskitze). Da keine Linienführung auf den Boden erlaubt ist, musst die Orientierung im Raum mittels der verfügbaren Sensoren erfolgen. Hierfür sind die Ultraschallsensoren gut geeignet, da diese eine zentimetergenaue Abstandsmessung zu einem Objekt ermöglichen. Die Haltepunkte können durch den Einsatz von einem Farbsensor erkannt werden. Dieser kann nicht nur Hell und Dunkel unterscheiden und ist somit in der Lage auch mehr als zwei unterschiedliche Haltepunkte zu erkennen.
schema

Problemskitze

Entwurf

Um die Aufgabenstellung zu lösen, soll ein NXT Prototyp gebaut werden, der den Abstand zur Baustelle mittels Ultraschall erkennt und sich dann anhand dieser Messung ausrichtet. Nach Ausrichtung und begonnener Fahrt soll durch den Ultraschallsensor das erreichen einer Ecke erkannt und mit einer Kurvenfahrt reagiert werden. Haltepunkte sollen anhand von zwei farblichen Bodenmarkierungen mittels Farbsensor detektierbar sein.
Zusätzlich soll eine beliebige Startposition implementiert werden. Dabei wird der Prototyp in einer beliebig gedrehten Position in der Nähe der Baustellenwand abgestellt. Die Verortung und Ausrichtung im richtigen Abstand, parallel zur Wand soll über die Ultraschallsensoren und den Drucktaster geschehen.

NXT Roboter Prototyp

Als Basis für den Prototyp soll der Bauvorschlag „Domabot – Classroom Robot“ verwendet und angepasst werden. Anstatt den Ultraschallsensor nach vorn auszurichten, soll dieser nach rechts in Fahrtrichtung angebracht sein. Zusätzlich zu dem an der Front vorhandenen Ultraschallsensor kommt ein weiterer im Heck zum Einsatz. Der Lichtsensor an der Front wird durch einen Farbsensor ersetzt. Außerdem wird zur Kollisionserkennung ein Drucksensor an der Front verbaut. Das Modell wird mit Verstrebungen stabilisiert, da der ursprüngliche Bauvorschlag durch das Mehrgewicht nicht stabil genug ist.

 

Abb. Prototyp zeigt den endgültigen Prototyp für diese Belegarbeit.
Prototyp

Prototyp

Implementierung

Für die Implementierung wurde LeJOS anstatt der Mindstorms Entwicklungsumgebung gewählt. Diese hat Vorteile im Auslesen der Sensoren, da hier weitaus genauere Werte abgefragt werden können. Außerdem wird die Logik nicht grafisch sondern in Java implementiert.
Als Basis für die Implementierung dient das vom LeJOS Team angebotene Tutorial für die Behavior Programmierung. Die Klassen aus dem Tutorial werden für die Aufgabenstellung der Belegarbeit angepasst und erweitert.

Haltemarken

Es sind zwei Haltemarken festzulegen. Diese werden nach Start des Programms durch aufsetzten des Roboters (Farbsensor) bestimmt (Marken haben andere Farbe als der Boden). Zu beachten ist, dass der Farbsensor des NXT Systems sehr empfindlich reagiert. Er unterscheidet, ob die Farbmarkierung in einem hellen oder dunklen Bereich des Aufbaus liegt. Das heißt, zwei identische Farbmarkierungen werde in einem Aufbau, der nur geringfügig beschattet ist, unterschiedlich vom Farbsensor interpretiert. So reicht es nicht aus, bei zwei gleichfarbigen Farbmarkierungen, nur einen davon zweimal zu scannen. Außerdem hat sich bei Tests herausgestellt, dass matte Farbmarkierungen besser erkannt werden als glänzende.

 

Ein weiterer Vorteil dieses Vorgehens ist, dass die Farbwerte der Haltemarken in jeder Umgebung automatisch neu bestimmt werden und nicht fest im Code verankert sind. Dieses macht den Prototyp flexibel einsetzbar und weniger Fehleranfällig.

Automatische Startposition

Die automatische Positionierung zur Wand wird durch den in setStartPos dargestellten Pseudocode sichergestellt. Eine automatische Positionierung ist möglich, wenn das am dichtesten gelegene Objekt die Wand ist und der Prototyp nicht an einer Ecke des Aufbaus steht.
setStartPos{
rotate(360) and ultrasonicsensor(find nearest echo);
rotate(to nearest echo);
align parallel to wall(ultrasonicsensors);
rotate(90);
forward(until touchsensor hit wall);
backward(5cm);
rotate(-90);
align parallel to wall(ultrasonicsensors);
}
setStartPos

Fahrt um den Aufbau

Nach erfolgreicher Ausrichtung zur Wand startet der Programmteil zum Umfahren des Aufbaus. Hierbei werden 5 Zustände unterschieden:

  1. Forward: Der Roboter befindet sich in der endlos Vorwärtsbewegung solange kein anderer Zustand eintritt.
  2. Hit Wall: Der Drucksensor des Roboters hat eine Kollision erkannt. Die Vorwärtsfahrt wird unterbrochen und ein Fehler ausgegeben.
  3. Found Mark: Der Farbsensor hat eine Farbmarkierung am Boden erkannt, die einer der zum Programmstart gescannten Farben( + Toleranz) entspricht. Die Vorwärtsbewegung wird unterbrochen, der Roboter wird ausgerichtet und kann jetzt je nach erkannter Farbmarkierung unterschiedliche Aktionen durchführen.
  4. Found Edge: Die Ultraschallsensoren haben eine Ecke erkannt. Das Programm springt in die Methode zur Eckumfahrung.
  5. Drift: Der vordere Ultraschallsensor hat eine Abweichung vom Normabstand festgestellt. Die Ausrichtung des Roboters wird korrigiert.

Die Struktur dieses Programmteils wird in Programmstruktur dargestellt.

 

Programmstruktur

Programmstruktur

 

 Ergebnis, Verbesserungsmöglichkeiten und Fazit

Ein Testlauf, mit einem 60×40 cm großen und rechteckigen Karton, der die Baustelle darstellt, lief 20 Minuten ohne Fehler bzw. Kollisionen. In dieser Zeit wurden insgesamt 15 Umfahrungen des Kartons erfolgreich geschafft und anschließend aus Zeitgründen abgebrochen. Der Aufbau wurde auf einem Parkettboden bei guten Lichtverhältnissen durchgeführt. Bei einem weiteren Test im Laborbereich des C Gebäudes der HTW Berlin kamen, wahrscheinlich durch die Bodenstruktur des Raumes, Probleme auf. Mit dem dunkel gemusterten Boden zeigten sich die Grenzen des Farbsensors und des Algorithmus. Farbmarkierungen wurden nicht oder an falscher Stelle erkannt. Das Problem konnte durch die Verwendung von Haltemarkierungen, die sehr matt und mit maximalem Kontrast zur Bodentextur waren, eingedämmt werden.Eine weitere Optimierung benötigt die „Driftkorrektur“. Ist der Aufbau nicht rechteckig, sondern ein Parallelogramm oder Trapez, ist der eingesetzte Algorithmus nicht effektiv genug um die von 90 Grad abweichenden Kurven zuverlässig zu umfahren. Außerdem wäre es gut den Algorithmus zur Bestimmung der Startposition soweit zu erweitern, dass verifiziert werden kann, ob das nach der 360 Grad Drehung erkannte Objekt wirklich die Wand des Aufbaus ist.Diese Belegarbeit hat aufgezeigt, dass eine autonom agierender Roboter gut mit LeJOS umzusetzen ist. In Anbetracht dessen, dass es sich hierbei um ein Lego Spielzeug handelt, konnte die Aufgabenstellung, gemäß den Anforderungen, zufriedenstellend gelöst werden. Mehr Möglichkeiten würden Roboter aus dem professionellen Bereich bieten, da das Lego NXT System nicht leistungsfähig genug sind.
_MG_3115 _MG_3116