AEP Gruppe B5 - SoSe18: Unterschied zwischen den Versionen
Zeile 66: | Zeile 66: | ||
=== Parklücke Suchen === | === Parklücke Suchen === | ||
[[Datei:Parklücke suchen.png| | [[Datei:Parklücke suchen.png|250px|none|Parklücke Suchen]] | ||
Solange der Tastsensor nicht gedrückt ist, soll der Ball gesucht werden und sich die Fangmotorik drehen. | Solange der Tastsensor nicht gedrückt ist, soll der Ball gesucht werden und sich die Fangmotorik drehen. | ||
Zur Ballsuche werden die Werte des Infrarotsensors eingelesen. Mit 5 if-Verzweigungen werden die 5 Richtungen unterschieden und die Motoren dann jeweils angesteuert. | Zur Ballsuche werden die Werte des Infrarotsensors eingelesen. Mit 5 if-Verzweigungen werden die 5 Richtungen unterschieden und die Motoren dann jeweils angesteuert. |
Version vom 3. Juli 2018, 11:52 Uhr
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
- Entwicklung eines Konzepts/einer Spielstrategie
- Implementierung der Spielstrategie in Matlab (bzw Simulink)
- Pflege des SVN
- Darius Wude
- Bau des Roboters
- Entwicklung einer Spielstrategie
- Implementierung der Spielstrategie in Matlab
- Erstellung des HSHL - Wiki - Artikels
- Leon Brölemann
- Bau des Roboters
- Entwicklung eines Konzepts/einer Spielstrategie
- Implementierung der Spielstrategie in Matlab (bzw 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 dazu ist hier [1] zu finden.
Hardware
Als Hardware wurde ein LEGO – Mindstorms - Set [2] benutzt. In diesem Set sind ein NXT-Brick [3], 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. Dieser Sensor wird von der Firma HiTechnic [4] hergestellt. Die Servomotoren sowie der Tastsensor 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.
Tastsensor
Der Tastsensor funktioniert im Grunde wie ein normaler Lichtschalter und besitzt entweder die Position 1 (gedrückt) oder 0 (nicht gedrückt).
Durch das Drücken des Tasters gegen einen leichten mechanischen Federwiderstand wird der Sensorstromkreis geschlossen und somit der elektrische Impuls mit einer ungefähren Stromstärke von 2,2 mA abgesetzt. Wird der Taster losgelassen, so wird der Stromkreis wieder durch die meachanische Feder unterbrochen.
Bilder des Roboters
Mit dem LEGO Digital Designer [9] haben wir den Roboter in einem 3D-Modell nachgebaut. Eine Bauanleitung, um den Roboter nachzubauen befindet sich hier: Datei:Bauanleitung Roboninho.pdf
Spielstrategie
Zur Entwicklung einer Spielstrategie für das Spielprogramm wird zunächst ein Programmablaufplan mit dem Programm „PaP-Designer“ [10] erstellt. Bei unserer Spielstrategie benutzen wir drei Unterfunktionen: Die Ballsuche und den Ballfang, das Ausrichten zum Tor und den Ballschuss. Diese drei Unterfunktionen werden dann in einem Multitaskingprogramm als Dauerschleife im Hauptprogramm zusammengeführt.
Hauptprogramm
Beim Start des Hauptprogramms werden zunächst alle Sensoren auf ihre jeweiligen Ports initialisiert. Danach wird der aktuelle Zustand abgefragt. Solange man nun nicht richtig eingeparkt ist werden dann die einzelnen Unterprogramme (je nach aktuellen Zustand) aufgerufen.
Parklücke Suchen
Solange der Tastsensor nicht gedrückt ist, soll der Ball gesucht werden und sich die Fangmotorik drehen. Zur Ballsuche werden die Werte des Infrarotsensors eingelesen. Mit 5 if-Verzweigungen werden die 5 Richtungen unterschieden und die Motoren dann jeweils angesteuert.
Parklücke Messen
Wenn der Tastsensor gedrückt wurde/ist, wird die aktuelle Richtung des Kompassensors eingelesen und die Differenz zur Richtung des Tors berechnet. Danach werden die "Fahrmotoren" so angesteuert, dass sich der Roboter zum Tor bewegt. Sobald die Differenz, mit einer kleinen Abweichung, der Richtung des Tors entspricht, werden die "Fahrmotoren" gestoppt.
Einparken
Der Schussmotor soll den Ball mit voller Leistung ins Tor schießen.
Umsetzung der Spielstrategie
Zur Realisierung der Spielstrategie und Implementierung der Unterprogramme und des Hauptprogramms wurde das Bricx Command Center [11] (kurz: BricxCC) verwendet. Dieses benutzt die Programmiersprache NXC [12] (Not eXactly C).
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
OnFwd(OUT_AC, 75);
Dieser Befehl lässt den Roboter geradeaus fahren. Als Parameter werden dafür die Motoren an den Ausgängen A und C und die Geschwindigkeit (75) übergeben.
OnRev(OUT_AC, 75);
Diese Anweisung funktioniert genauso wie OnFwd(), lässt die Motoren diesmal nur rückwärts drehen, sodass der Roboter rückwärts fährt.
Off(OUT_AC);
Mit diesem Befehl werden die Motoren an den Ausgängen A und C gestoppt.
Float(OUT_AC);
Dieser Befehl bremst wie der Befehl Off(), jedoch wird hier einfach die Stromzufuhr zu den Motoren abgeschnitten, was ein Ausrollen der Motoren zu Folge hat.
OnFwdSync(OUT_AC, 75, 50);
Mit dieser Anweisung lassen sich Bögen mit dem Roboter fahren. Der letzte Parameter gibt dabei den Radius des Bogens an.
Bei 0 würde der Roboter ganz normal vorwärts fahren. Bei immer größer werdenden Werten, fährt der Roboter immer Stärker zur Seite. Der Wert 50 dreht nur einen der beiden Motoren, sodass der Roboter praktisch in einem Winkel von 90° fährt. Ein Wert von 127 lässt die beiden Motoren entgegengesetzt drehen, der Roboter dreht sich also auf der Stelle.
OnFwdReg(OUT_AC, 75, mode);
Dieser Befehl reguliert die Motoransteuerung. Die ersten beiden Parameter dieser Anweisung stehen wieder für die Ausgänge der Motoren und die Geschwindigkeit. Für den letzten Parameter gibt es jedoch drei verschiedene Modi.
- OUT_REGMODE_IDLE Bei diesem Modus findet keine Synchronisation der Motoren statt.
- OUT_REGMODE_SPEED Synchronisation durch Anpassung der Geschwindigkeit. Unterschiede werden dabei durch Schneller- bzw. Langsamer- Drehen der Motoren ausgeglichen.
- OUT_REMODE_SYNC Synchronisierung der Rotationen. Unterschiede werden bei diesem Modus durch Pausieren eines Motors ausgeglichen.
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 [13] und
in dem Buch „Roboter programmieren mit NXC für LEGO Mindstorms NXT“ [14] von Daniel Braun finden, welches auch von uns genutzt wurde.
Werbeplakat
Damit jeder auf den ersten Blick sehen kann, wie unser Roboter aussieht und was seine Hauptmerkmale sind, haben wir ein Werbeplakat erstellt und den Roboter auf den Namen "Roboninho" getauft.
YouTube - Video
Zur bildlichen Veranschaulichung wurde ein YouTube - Video erstellt, welches hier [15] 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) [16] finden.
Literaturverzeichnis
- ↑ Regelwerk - http://193.175.248.52/wiki/index.php/Regelwerk_RoboSoccer
- ↑ LEGO – Mindstorms - Set - https://de.wikipedia.org/wiki/Lego_Mindstorms_NXT
- ↑ NXT-Brick - https://shop.lego.com/en-PL/NXT-Intelligent-Brick-9841
- ↑ Homepage HiTechnic - http://www.hitechnic.com/# HiTechnic
- ↑ Eigenes Foto
- ↑ Eigenes Foto
- ↑ Eigenes Foto
- ↑ Selbsterstellter Screenshot
- ↑ LEGO Digital Designer - http://ldd.lego.com/de-de
- ↑ Pap-Designer http://friedrich-folkmann.de/papdesigner/Hauptseite.html
- ↑ Bricx Command Center - http://bricxcc.sourceforge.net/
- ↑ NXC - https://de.wikipedia.org/wiki/Not_eXactly_C
- ↑ 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://www.youtube.com/watch?v=VQPF9ObOaXU
- ↑ Projektunterlagen - https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Gruppen/Gruppen_WS1718/C2/Projektunterlagen/
→ zurück zum Hauptartikel: Informatikpraktikum WS 17/18