Projekt 70c: Labyrinth SLAM mit EV3: Unterschied zwischen den Versionen
(→=EV3) |
|||
Zeile 79: | Zeile 79: | ||
Um eine USB Verbindung aufzubauen benötigt man den folgenden Befehl: | Um eine USB Verbindung aufzubauen benötigt man den folgenden Befehl: | ||
b.connect('bt', 'serPort', '/dev/rfcomm0'); | b.connect('bt', 'serPort', '/dev/rfcomm0'); | ||
serPort muss der Serielle Port der Bluetoothverbindung angegeben werden. Diesen findet man in den Systemeinstellungen für den Bluetooth Adapter, der im Einsatz ist. | serPort muss der Serielle Port der Bluetoothverbindung angegeben werden. Diesen findet man in den Systemeinstellungen für den Bluetooth Adapter, der im Einsatz ist. | ||
Zeile 85: | Zeile 87: | ||
Für eine USB Verbindung: | Für eine USB Verbindung: | ||
b.connect('usb', 'beep', 'on', ) | b.connect('usb', 'beep', 'on', ) | ||
beep on sorgt für einen kurzen Ton wenn der EV3 verbunden ist. | beep on sorgt für einen kurzen Ton wenn der EV3 verbunden ist. | ||
Zeile 91: | Zeile 93: | ||
Mit playTone kann ein Ton über den Soundchip des EV3 abgespielt werden | Mit playTone kann ein Ton über den Soundchip des EV3 abgespielt werden | ||
myev3.playTone(10,1000,150) | myev3.playTone(10,1000,150) | ||
Der erste Parameter ist die Lautstärke von 0 bis 100% | Der erste Parameter ist die Lautstärke von 0 bis 100% | ||
Zeile 112: | Zeile 114: | ||
Der Befehl value übergibt den aktuellen Wert an Matlab. | Der Befehl value übergibt den aktuellen Wert an Matlab. | ||
lensor.sensor1.setProperties('mode', DeviceMode.UltraSonic.DistCM); | lensor.sensor1.setProperties('mode', DeviceMode.UltraSonic.DistCM); | ||
x = lsensor.value | x = lsensor.value | ||
Zeile 131: | Zeile 133: | ||
Der Inkrementalgeber kann zu jedem Zeitpunkt zurückgesetzt oder ausgelesen werden. | Der Inkrementalgeber kann zu jedem Zeitpunkt zurückgesetzt oder ausgelesen werden. | ||
X = l.tachoCount | X = l.tachoCount | ||
Hiermit wird der aktuelle Wert übergeben. | Hiermit wird der aktuelle Wert übergeben. | ||
Zeile 140: | Zeile 142: | ||
===== Motor Initialisierung===== | ===== Motor Initialisierung===== | ||
l = myev3.motorB; | l = myev3.motorB; | ||
Hiermit wird der Variable l der Motor an Port B übergeben. Der EV3 hat vier Ports für Motorsteuerung. | Hiermit wird der Variable l der Motor an Port B übergeben. Der EV3 hat vier Ports für Motorsteuerung. | ||
===== Motor Geschwindigkeit===== | ===== Motor Geschwindigkeit===== | ||
l.power = 20; | l.power = 20; | ||
Hiermit wird die Motorgeschwindigkeit festgelegt. Erwartet wird ein Wert von 0 bis 100. | Hiermit wird die Motorgeschwindigkeit festgelegt. Erwartet wird ein Wert von 0 bis 100. | ||
===== SyncedStart===== | ===== SyncedStart===== | ||
l.syncedStart(r); | l.syncedStart(r); | ||
Hiermit werden beide Motoren gleichzeitig gestartet. In der Klammer muss definiert werden, welche Motor mitlaufen soll. | Hiermit werden beide Motoren gleichzeitig gestartet. In der Klammer muss definiert werden, welche Motor mitlaufen soll. | ||
===== Stop===== | ===== Stop===== | ||
l.stop(); | l.stop(); | ||
Der Stop befehl stoppt den Motor. Falls er vorher synchron lief, wird er auch synchron gestoppt. | Der Stop befehl stoppt den Motor. Falls er vorher synchron lief, wird er auch synchron gestoppt. | ||
Zeile 162: | Zeile 164: | ||
Mit der RWTH Aachen Toolbox ist leider nur USB und Bluetooth möglich. Die Bluetooth Schnittstelle hat bei unseren beiden Notebooks leider keine Verbindung aufgebaut. Wir vermuten das nur bestimmte Bluetooth USB Adapter kompatibel mit der Toolbox sind, da die Bluetooth Schnittstelle mit der LEGO Software funktioniert hat. Für unseren Einsatz haben wir die USB Schnittstelle verwendet und das Kabel per Hand mitgeführt. Das dem EV3 Education Kit beigelegte Kabel hat eine ausreichende Länge für die Größe des Labyrinths. | Mit der RWTH Aachen Toolbox ist leider nur USB und Bluetooth möglich. Die Bluetooth Schnittstelle hat bei unseren beiden Notebooks leider keine Verbindung aufgebaut. Wir vermuten das nur bestimmte Bluetooth USB Adapter kompatibel mit der Toolbox sind, da die Bluetooth Schnittstelle mit der LEGO Software funktioniert hat. Für unseren Einsatz haben wir die USB Schnittstelle verwendet und das Kabel per Hand mitgeführt. Das dem EV3 Education Kit beigelegte Kabel hat eine ausreichende Länge für die Größe des Labyrinths. | ||
myev3 = EV3(); | myev3 = EV3(); | ||
myev3.connect('usb', 'beep', 'on'); % | myev3.connect('usb', 'beep', 'on'); % | ||
Die beiden Befehle erstellen das EV3 Objekt und verbinden es mit Matlab. Der Parameter beep = on lässt den EV3 bei Verbindung piepen. | Die beiden Befehle erstellen das EV3 Objekt und verbinden es mit Matlab. Der Parameter beep = on lässt den EV3 bei Verbindung piepen. |
Version vom 15. Januar 2019, 10:02 Uhr
Autoren: Sievers, Scharfenberg
Betreuer: Prof. Schneider
→ zurück zur Übersicht: WS 18/19: Angewandte Elektrotechnik (BSE)
Aufgabe
Ein EV3 Roboter soll den Ausgang aus einem Labyrinth finden
Erwartungen an die Projektlösung
- Aufbau des EV3 Roboters in Abstimmung mit Prof. Schneider
- Recherche SLAM
- Ortung und Navigation via US oder IR Sensor und Odometrie (SLAM)
- Inbetriebnahme mit Matlab/Simulink
- Realisierung der Flucht aus dem Labyrinth
- Stellen Sie die digitale Karte des Labyrinths dar.
- Machen Sie spektakuläre Videos, welche die Funktion visualisieren.
- Test und wiss. Dokumentation
- Live Vorführung während der Abschlusspräsentation
Einleitung
Projekt
Projektplan
Um einen Überblick über das Thema zu erhalten, wurde die Zeitphase des Praktikums genutzt. Dabei wurden sowohl die bestehenden Unterlagen zum Thema SLAM mit Lego EV3 von vorherigen Projektteams gesichtet, als auch eigene Unterlagen. Geplant war mit dem Beginn der eigentlichen Arbeitspakete nach Ende der Praktikumsversuche. Dabei geht es sowohl um den mechanischen Aufbau, als auch der Programmierung des Roboters. Anschließend ist eine Testphase geplant gewesen, bei die Anforderungen schrittweise abgeprüft, Fehler dokumentiert und anschließend beseitigt werden sollten. Anschließend war die eigentliche Dokumentation, die Ausstattung des Messestands sowie die Videodokumentation geplant. Im Anschluss an alle Arbeitspakete steht der Meilenstein der HSHL Hausmesse am 18.01.2018.
Momentaner Stand:
Praktikum 100%
Unterlagen sichten 100%
Lego Roboter und Labyrinth aufbauen 100%
Sensoren verbauen 100%
Software Strategie entwickeln 100%
Software Module schreiben 80%
Testphase 20%
Änderungen an Software 0%
Wiki Dokumentation schreiben 10%
Plakat entwerfen und Messestand 20%
Video drehen und hochladen 0%
Messe 0%
Projektdurchführung
Konstruktion
Grundaufbau Lego EV3
Umbau auf 3 Ultraschallsensoren
Optimierung Sensorpositionen
Aufbau variables Labyrinth
Umbau Labyrinth
System Design
Toolbox Schnittstelle EV3
Software Matlab/Simulink
Toolbox Matlab EV3
Begonnen wurde das Projekt mit der integrierten Toolbox von Matlab. Diese Toolbox enthält einfache Befehle zur Ansteuerung von Sensoren und Motoren. Nach einiger Zeit hat sich aber herausgestellt, dass die Updaterate, mit der der EV3 Messwerte an Matlab liefert, so geringt ist, dass keine vernünftige Regelung erstellt werden kann. Durch die Messung im Sekundentakt werden sehr häufig Werte überfahren. Dadurch kann nicht sichergestellt werden, dass der Roboter passend anhält, nicht zu weit dreht und nicht gegen die Wand fährt. Um dieses Problem zu beheben, wurde auf die RWTH EV3 Toolbox gewechselt.
Toolbox RWTH EV3
Die RWTH EV3 Toolbox wird nicht mehr über die offizielle RWTH Mindstorm Internetseite verteilt, sondern ist auf Github zu finden. Die Installation wird in der beiliegenden Dokumentation beschrieben und ist schnell gemacht. Die Toolbox erlaubt eine Vielzahl von Sensoren auszulesen, sowohl EV3 als auch NXT. Für die Motorsteuerung gibt es einige zusätzliche Befehle wie die synchrone Zusammenarbeit oder die integrierte Regelung auf Zeit oder Schritte.
EV3
Connect
Mit dem Befehl connect wird eine Verbindung zum EV3 hergestellt. Die RWTH Toolbox unterstützt USB und Bluetooth Verbindung, wobei die Bluetooth Verbindung nicht hergestellt wurde. Dies kann laut Dokumentation am geänderten Bluetooth Treiber für Win10 liegen.
Um eine USB Verbindung aufzubauen benötigt man den folgenden Befehl:
b.connect('bt', 'serPort', '/dev/rfcomm0');
serPort muss der Serielle Port der Bluetoothverbindung angegeben werden. Diesen findet man in den Systemeinstellungen für den Bluetooth Adapter, der im Einsatz ist.
Für eine USB Verbindung:
b.connect('usb', 'beep', 'on', )
beep on sorgt für einen kurzen Ton wenn der EV3 verbunden ist.
Playtone
Mit playTone kann ein Ton über den Soundchip des EV3 abgespielt werden
myev3.playTone(10,1000,150)
Der erste Parameter ist die Lautstärke von 0 bis 100%
Der zweite Parameter ist die Freuqenz in Hz
Der dritte ist die Dauer in ms
Ultraschallsensoren
setProperties
Um den Ultraschallsensor auslesen zu können muss er zunächst über setProperties intiialisiert werden.
Myev3.sensor1.setProperties('mode', DeviceMode.UltraSonic.DistCM);
Dieser Befehl setzt den Sensor an Port 1 in den Modus Ultraschall. Dieser Sensor gibt dann den Wert in cm aus. Der Sensor kann auch wenn gewünscht in Zoll ausgeben (DeviceMode.UltraSonic.DistIn)
Es können eine Vielzahl von Sensoren mit dieser Toolbox genutzt werden, auch NXT Sensoren.
value
Der Befehl value übergibt den aktuellen Wert an Matlab.
lensor.sensor1.setProperties('mode', DeviceMode.UltraSonic.DistCM); x = lsensor.value
Kalibrierung
Um zu ermitteln, wie groß der gemessene Wert vom wirklichen abweicht, wurde ein kleines Tool geschrieben, das den Roboter schrittweise fahren lässt und den Messwert mit der gefahrenen Distanz gegenüberstellt. Dies wurde für alle drei Sensoren durchgeführt:
Die Messungen wurden jede 3x widerholt. Dabei wurde festgestellt, das die Abweichungen im Bereich +- 0,3mm liegen. Dieser Wert ist deutlich genauer als benötigt. Deswegen wurden keine Kennlinien zum Ausgleich im Tool hinterlegt. Sollte eine hohe Genauigkeit der Messwerte erforderlich sein, können die aufgenommenen Werte als Kalibrierung verwendet werden.
Motoren
Der verwendete Roboter besitzt zwei Schrittmotoren, die einzeln oder synchron angesteuert werden können.
Inkrementalgeber
Der Motor besitzt einen Inkrementalgeber, der die Winkelveränderung vom Motor messen kann. Damit kann abgefragt werden, wie weit der Motor gefahren ist. Ein weiterer Vorteil ist dabei, dass auch bei erzwungener Bewegung der Weg genau erfasst werden kann. Dies kann der Fall sein, wenn der Roboter sich auf einer Schrägen Ebene bewegt und die Gewichtskraft Einfluss nimmt.
Der Inkrementalgeber kann zu jedem Zeitpunkt zurückgesetzt oder ausgelesen werden.
X = l.tachoCount
Hiermit wird der aktuelle Wert übergeben.
resetTachoCount(l);
Der Wert wird auf 0 zurückgesetzt.
Motor Initialisierung
l = myev3.motorB;
Hiermit wird der Variable l der Motor an Port B übergeben. Der EV3 hat vier Ports für Motorsteuerung.
Motor Geschwindigkeit
l.power = 20;
Hiermit wird die Motorgeschwindigkeit festgelegt. Erwartet wird ein Wert von 0 bis 100.
SyncedStart
l.syncedStart(r);
Hiermit werden beide Motoren gleichzeitig gestartet. In der Klammer muss definiert werden, welche Motor mitlaufen soll.
Stop
l.stop();
Der Stop befehl stoppt den Motor. Falls er vorher synchron lief, wird er auch synchron gestoppt.
Bluetooth, Wifi und USB Schnittstellen
Der EV3 besitzt eine USB Schnittstelle, eine Bluetooth Schnittstelle und mit einem zusätzlichen Adapter auch eine W-Lan Schnittstelle. Mit der alten Matlab Toolbox kam der folgende Adapter erfolgreich zum Einsatz:
EDIMAX EW-7811UN Wireless USB Adapter, 150 Mbit/s, IEEE802.11b/g/n
Mit der RWTH Aachen Toolbox ist leider nur USB und Bluetooth möglich. Die Bluetooth Schnittstelle hat bei unseren beiden Notebooks leider keine Verbindung aufgebaut. Wir vermuten das nur bestimmte Bluetooth USB Adapter kompatibel mit der Toolbox sind, da die Bluetooth Schnittstelle mit der LEGO Software funktioniert hat. Für unseren Einsatz haben wir die USB Schnittstelle verwendet und das Kabel per Hand mitgeführt. Das dem EV3 Education Kit beigelegte Kabel hat eine ausreichende Länge für die Größe des Labyrinths.
myev3 = EV3();
myev3.connect('usb', 'beep', 'on'); %
Die beiden Befehle erstellen das EV3 Objekt und verbinden es mit Matlab. Der Parameter beep = on lässt den EV3 bei Verbindung piepen.
Strategie
Strategie Labyrinth
Rechte Hand Regel
Optimierung mit Inselerkennung
Filter (Median, Kalman, Partikel)
Programmierung
Bewegung
Bewegung nach vorne
Drehung links und rechts
Kalibrierbewegung
Messung
Umgebungston
Karte zeichnen
Schreibe Messwert
Befehlsablauf
ALT
Aufbau des Lego EV3
Anschluss Ultraschall und Umbau auf 3 Sensoren
Theoretische Aufgabenlösung für Labyrinth
Unterteilung des Labyrinths in Quadrate
Start-Algorithmus
Logischer Aufbau mit 4 Ultraschallsensoren
-
Logischer Aufbau mit 3 Ultraschallsensoren
-
Unterteilung der möglichen Fahrmanöver des EV3
1 Schritt nach Vorne
Rechtsdrehung oder Linksdrehung
Ergebnis
Zusammenfassung
Lessons Learned
Fehler bei der Drehung
Fehler in Vorwärtsbewegung
Projektunterlagen
YouTube Video
Weblinks
Aufbauanleitung LEGO EV3 Education https://education.lego.com/de-de/support/mindstorms-ev3/building-instructions[1]
LEGO MINDSTORMS EV3 Support from MATLAB https://de.mathworks.com/hardware-support/lego-mindstorms-ev3-matlab.html[2]
Connect the Host Computer to an EV3 Brick Over a Wireless Network https://de.mathworks.com/help/supportpkg/legomindstormsev3io/ug/connect-to-an-ev3-brick-over-wifi.html[3]
Literatur
Zugehörige HSHL Wiki Artikel
Self Localization and Mapping (SLAM) mit Lidar- oder Kamera: http://193.175.248.52/wiki/index.php/Self_Localization_and_Mapping_(SLAM)_mit_Lidar-_oder_Kamera[4]
Einführung in SLAM – Simultaneous Localization and Mapping http://193.175.248.52/wiki/index.php/Einf%C3%BChrung_in_SLAM_%E2%80%93_Simultaneous_Localization_and_Mapping[5]
Lego Mindstorms EV3 http://193.175.248.52/wiki/index.php/Lego_Mindstorms_EV3[6]
Ultraschall mit Matlab/Simulink http://193.175.248.52/wiki/index.php/Ultraschall_mit_Matlab/Simulink[7]
Objekterkennung mit rotierenden Ultraschall mit Matlab/Simulink und EV3 http://193.175.248.52/wiki/index.php/Objekterkennung_mit_rotierenden_Ultraschall_mit_Matlab/Simulink_und_EV3[8]
--- → zurück zur Übersicht: WS 18/19: Angewandte Elektrotechnik (BSE)