AEP Gruppe B5 - SoSe18
Autor: Darius Wude
Einleitung
Das Ziel des Praktikums besteht darin einen LEGO - Roboter zu konstruieren und zu programmieren, der selbstständig eine Parklücke erkennt und schnellstmöglich in diese einparkt.
Teammitglieder
In diesem Abschnitt werden kurz die Teammitglieder, die an diesem Projekt beteiligt waren, und ihre Tätigkeiten vorgestellt.
- Alexander Thumann
- Bau des Roboters (Version 1.0)
- Überarbeitung des Roberters
- Entwicklung einer Strategie
- Implementierung der Spielstrategie in Matlab und Simulink
- Darius Wude
- Bau des Roboters (Version 1.0)
- Entwicklung einer Strategie
- Implementierung der Strategie in Matlab
- Erstellung des HSHL - Wiki - Artikels
- Leon Brölemann
- Bau des Roboters (Version 1.0)
- Überarbeitung des Roberters
- Entwicklung eines Konzepts/einer Spielstrategie
- Implementierung der Strategie in Matlab und Simulink
- Nachbau des Roboters als LEGO - Modell mit dem LEGO - Designer
Die Parksituation
Zunächst fährt der Roboter an den möglichen Parkplätzen vorbei, bis er eine Parklücke findet, die groß genug zum erfolgreichem Einparken ist.
Dann soll er so schnell wie möglich in dieser freien Parklücke einparken.
Regelwerk
Wie auch im echten Leben soll hier auf die STVO Rücksicht genommen werden. Das vollständige Regelwerk und andere Informationen bezüglich des Praktikums finden Sie hier [2].
Hardware
Als Hardware wurde ein LEGO – Mindstorms - Set [3] benutzt. In diesem Set sind ein NXT-Brick [4], welcher unter anderem einen Microcontroller beinhaltet, der sich programmieren lässt, 3 Servomotoren, ein Ultraschallsensor, zwei Tastsensoren, ein Lichtsensor und ein Geräuschesensor enthalten.
Der Lichtsensor und der Geräuschesensor, sowie die Tastsensoren werden in unserem Projekt nicht verwendet, da es für diese Sensoren keinerlei sinnvolle Anwendung für ein erfolgreiches Einparken gibt.
Der Ultraschallsensor wird zum erkennen der Parklücke verwendet. Zudem wird mit Hilfe der Anzahl der Umdrehungen des Motors und dem Ultraschallsensor die größe der Parklücke ausgerechnet.
Damit der Roboter nun bei der Suche der Parklücke auch wirklich geradeaus fährt, benötigt es einen zusätzlichen Sensor, der in dem LEGO – Mindstorms – Set nicht enthalten ist. Das wäre der Gyrosensor [5]. Dieser Sensor wird von der Firma HiTechnic [6] hergestellt. Die Servomotoren sowie der Ultraschallsensor werden im Folgenden noch kurz vorgestellt.
Servomotoren
Der NXT benutzt Servomotoren, die je nach Belieben nach Zeit, Geschwindigkeit, Strecke und Winkel angesteuert werden können. Mit den eingebauten Rotationssensoren lassen sich die Umdrehungszahlen in Grad speichern und über verschiedene Befehle rotieren, vor und zurück fahren oder bremsen. Der NXT-Brick bietet 3 Möglichkeiten, um die Servomotoren anzuschließen.
Ultraschallsensor
Der Ultraschallsensor funktioniert, wie der Name schon sagt mit Hilfe von Ultraschallwellen um Abstände zu bestimmen. Hier für muss der Sensor sowohl Ultraschallwellen aussenden können, als auch diese empfangen können.
Der Ultraschallsensor kann dann mit Hilfe der verstrichenen Zeit die Entfernung in 'cm' ausrechnen.
Allerdings nur bis zu 255 cm.
Bilder des Roboters
Mit dem LEGO Digital Designer [10] haben wir den Roboter in einem 3D-Modell nachgebaut. Eine Bauanleitung, um den Roboter nachzubauen befindet sich in unserem SVN-Ordner.
Strategie
Zur Entwicklung einer Strategie für das Programm wird zunächst ein Programmablaufplan mit dem Programm „PaP-Designer“ [11] erstellt. Bei unserer Srategie benutzen wir drei Unterfunktionen:Parklücke Suchen, Parklücke Messen und Einparken. Diese drei Unterfunktionen werden dann in einem Multitaskingprogramm in einer Zustandsmaschine im Hauptprogramm zusammengeführt.
Hauptprogramm
Hauptprogramm
Beim Start des Hauptprogramms werden zunächst alle Sensoren auf ihre jeweiligen Ports initialisiert. Danach wird der aktuelle Zustand abgefragt.
Solange man nicht richtig eingeparkt hat werden dann die einzelnen Unterprogramme (je nach aktuellem Zustand) aufgerufen.
Parklücke Suchen
Solange der Abstand zur Wand zu gering ist soll der Nxt geregelt geradeaus fahren. Falls die Parklücke breit genug ist, ist die nächste Phase des Einparkens erreicht.
Parklücke Messen
Der Roboter fährt parallel zur Parklücke bis der Abstand zur Wand wieder schrumpft.
Mit Hilfe der Umdrehungen des Motors seit Parklückenbeginn und dem Durchmesser der Reifen kann die Länge der Lücke errechnet werden.
Falls die Parklücke lang genug ist wird der Zustand auf 3 gesetzt (eine passende Parklücke wurde gefunden) sonst wieder auf 1 (eine neue Parklücke muss gesucht werden).
Einparken
Wenn eine Parklücke gefunden wurde, in die der Roboter passt, beginnt der Nxt mit dem Einparken.
Umsetzung der Strategie
Zur Realisierung der Spielstrategie und Implementierung der Unterprogramme und des Hauptprogramms wurde Matlab[12] und später das Unterprogramm Simulink [13] verwendet.
Da an dieser Stelle eine vollständige Präsentation des Spielprogramms nicht vorgesehen ist, werden „nur“ die Befehle zur Ansteuerung der Motoren sowie Sensoren vorgestellt:
Motoren
Antrieb = NXTMotor('A', 'Power', 80);
Dieser Befehl initialisiert einen Motor als Antrieb. Als Parameter werden dafür der Port des Motors (A) und die Geschwindigkeit (80) übergeben.
Antrieb.SendToNXT();
Dieser Befehl schickt dem NXT den im Antrieb gespeicherten Befehl, sodass der NXT weiß was zutun ist.
Antrieb.Stop('break');
Mit diesem Befehl werden die Motoren an den Ausgängen A und C gestoppt.
Antrieb.Stop('Off');
Dieser Befehl bremst wie der Befehl Antrieb.Stop('break'), jedoch wird hier einfach die Stromzufuhr zu den Motoren abgeschnitten, was ein Ausrollen der Motoren zu Folge hat.
OnFwdReg(OUT_AC, 75, mode);
Sensoren
- Tastsensor
SetSensorTouch(IN_1);
Der Befehl initialisiert den Tastsensor an Port 1.
x = SENSOR_1;
Gibt den Zustand des Tastsensors zurück und schreibt ihn in die Variable x.
- Infrarotsensor
SetSensorLowspeed(IN_3);
Initialisert den Infrarotsensor an Port 3.
ReadSensorHTIRSeeker2AC(IN_3, richtung, s1, s3, s5, s7, s9);
Gibt in richtung zurück, in welchem Bereich des Infrarotsensors sich eine Infrarotquelle befindet. In s1 bis s9 wird die Stärke der Quelle in den einzelnen Bereichen zur Positionsbestimmung gespeichert.
- Kompasssensor
SetSensorLowspeed(IN_4);
Initialisiert den Kompasssensor an Port 4.
x = SensorHTCompass(IN_4);
Gibt den Wert des Kompass an Port 4 aus und speichert ihn in der Variablen x.
Weitere nützliche Befehle, Beispiele und Erläuterungen lassen sich hier [14] und
in dem Buch „Roboter programmieren mit NXC für LEGO Mindstorms NXT“ [15] von Daniel Braun finden, welches auch von uns genutzt wurde.
YouTube - Video
Zur bildlichen Veranschaulichung wurde ein YouTube - Video erstellt, welches hier [16] zu finden ist.
Lernerfolg
Bei diesem Projekt können sowohl erste Erfahrungen in der C-Programmierung, als auch in der Konstruktionstechnik, beim Bauen des Roboters, gesammelt werden. Dabei lernt man verschieden Sensoren und deren Funktionsweise und Programmierung kennen. Außerdem lernt man, zunächst ein Konzept zu entwickeln, welches man anschließend mit einer angemessenen Dokumentation in die Tat umsetzt. Es gilt dabei Probleme im Team zu lösen und sich untereinander abzusprechen.
Projektunterlagen
Alle Projektunterlagen lassen sich hier(nur mit Zugangsberechtigung) [17] finden.
Literaturverzeichnis
- ↑ Selbsterstellter Screenshot
- ↑ Informationen - http://193.175.248.52/wiki/index.php/Autonomes_Fahren_SoSe18
- ↑ LEGO – Mindstorms - Set - https://de.wikipedia.org/wiki/Lego_Mindstorms_NXT
- ↑ NXT-Brick - https://shop.lego.com/en-PL/NXT-Intelligent-Brick-9841
- ↑ Infos zum Gyrosensor - https://de.wikipedia.org/wiki/Drehratensensor/
- ↑ Homepage HiTechnic - http://www.hitechnic.com/# HiTechnic
- ↑ Eigenes Foto
- ↑ Eigenes Foto
- ↑ Eigenes Foto
- ↑ LEGO Digital Designer - http://ldd.lego.com/de-de
- ↑ Pap-Designer http://friedrich-folkmann.de/papdesigner/Hauptseite.html
- ↑ Matlab - https://de.wikipedia.org/wiki/Matlab
- ↑ Simulink - https://de.wikipedia.org/wiki/Simulink
- ↑ NXC-Befehle - https://gym-leibnitz.lima-city.de/robotik/wp-content/uploads/2016/01/NXC_Tutorial_DE.pdf
- ↑ Buch "Roboter programmieren mit NXC für LEGO Mindstorms NXT" - https://www.daniel-braun.com/buch/roboter-programmieren-mit-nxc/
- ↑ YouTube-Video - https://youtu.be/lV7StqwQr4c
- ↑ Projektunterlagen - https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Gruppen/Gruppen_WS1718/C2/Projektunterlagen/
→ zurück zum Hauptartikel: Informatikpraktikum WS 17/18