Objekterkennung mit Ultraschall mit Matlab/Simulink und EV3: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
Zeile 249: | Zeile 249: | ||
Es folgt der Programmablaufplan zur besseren Übersicht über die Programmstruktur. In das EV3 – Matlab Programm wurde zusätzlich noch ein gleitender Mittelwertfilter „eingebaut“, damit der EV3 Roboter nicht durch zufällige starke Messabweichungen vorzeitig stoppt. | Es folgt der Programmablaufplan zur besseren Übersicht über die Programmstruktur. In das EV3 – Matlab Programm wurde zusätzlich noch ein gleitender Mittelwertfilter „eingebaut“, damit der EV3 Roboter nicht durch zufällige starke Messabweichungen vorzeitig stoppt. | ||
[[Datei:EV3 - Matlab.png| | [[Datei:EV3 - Matlab.png|200px|thumb|links|Abbildung 7: Aufbau EV3 - Matlab]] | ||
<br/> | |||
<br/> | |||
<br/> | |||
<br/> | |||
<br/> | |||
<br/> | |||
<br/> | |||
<br/> | |||
='''Quellen'''= | ='''Quellen'''= |
Version vom 17. Juni 2017, 11:24 Uhr
Autor: Mike Westhoff
Betreuer: Prof. Schneider
→ zurück zum Hauptartikel: Signalverarbeitende Systeme SoSe2017
Aufgabenstellung
Im Fach Signalverarbeitende Systeme soll, als Semesterbegleitende Aufgabe, ein Lego Mindstorms Roboter konstruiert werden, der bei Objekterkennung innerhalb eines kritischen Bereichs eine Vollbremsung vollzieht. Bei dem Roboter handelt es sich um einen Lego Mindstorms EV3. Die Objekterkennung wird mittels eines Ultraschallsensors (SRF 05) umgesetzt. Der EV3-Roboter soll solange geradeaus fahren, bis dieser ein Objekt erkennt und vor diesem im Abstand von 5 cm anhalten (Vollbremsung). Als Software darf Matlab oder Simulink verwendet werden. Die Dokumentation der Vorgehensweise und Ergebnisse erfolgt im vorliegenden Wiki-Artikel. Zusätzlich ist ein Video zu erstellen, welches die Funktionsweise darstellt.
Primärsensor
Vorstellung des Sensors
Technische Daten
Tabelle 1: Technische Daten SRF05 [1]
Betriebsspannung | 5 V |
Betriebsmode | Auslöse-Pin und Echo-Pin |
Stromaufnahme | nur 4 mA |
Ultraschallfrequenz | 40 kHz |
Maximale Reichweite | 4 m |
Minimale Reichweite | 1 cm |
Größe | 43 mm x 20 mm x 17 mm |
Auf der Abbildung 1 ist in der Vorderansicht links der Sender und rechts der Empfänger des SRF05 zu sehen. Die Abbildung 2 zeigt die möglichen Anschlüsse bzw. Pins zur Kontaktierung.
Funktionsweise Sensor
Der Ultraschallsensor ist so konzipiert, dass dieser die Entfernung zu einem Objekt mittels Schall misst. Der ausgesendete Schall benötigt zwischen dem Aussenden und der Reflexion des Signals eine bestimmte Zeit. Aus der Zeitdifferenz wird mittels einer Umrechnung ein Distanzwert in cm berechnet (Digitale Vorverarbeitung). Der Distanzwert gibt die Entfernung zwischen dem Sensor und dem Objekt an. Der Ultraschallsensor SRF05 von Devantech besteht aus zwei Grundbausteinen, dem Sender und Empfänger. Der Sender arbeitet dabei vergleichsweise wie ein Lautsprecher und der Empfänger wie ein Mikrophon. Dementsprechend besitzen beide Bauteile jeweils eine Membran zum Senden, als auch zum Empfangen von Signalen. Es ist weiter anzunehmen, dass der Ultraschallsensor mit dem piezoelektrischen Effekt arbeitet, jedoch konnte dies nicht von dem Sensor – Hersteller bestätigt werden. Insgesamt besitzt der Ultraschallsensor wie in Abb. zu sehen vier Anschlüsse. Neben der Spannungsversorgung (5V) und dem Masseanschluss (GND), gibt es einen Trigger-Pin und einen Echo-Pin. Zu Beginn sorgt ein Auslöseimpuls dafür, dass der Trigger-Pin auf „high“ gesetzt wird. Der Ultraschallsensor generiert nach dem Auslösesignal eine Ultraschallwelle. Diese Schallwelle hat eine Frequenz von 40kHz und acht Perioden. Nach der Aussendung des Signals wird der Echo-Pin solange auf „high“ gesetzt bis der erste reflektierte Ultraschallimpuls empfangen wird. Das Echo-Signal gibt demnach an, wie viel Zeit der Ultraschall benötigt, um das vor ihm liegende Objekt zu erreichen und durch Reflexion wieder zum Sensor zurück zu gelangen. Der Echo-Pin wird nach dem Empfang wieder auf „low“ gesetzt. Die Dauer zwischen dem Aussenden und Empfangen kann bei Objekterkennung zwischen 100µs und 25ms betragen.
Warum wird eine Ultraschallfrequenz mit 40kHz verwendet?
Hersteller: „40 khz is an optimum point of range and sensitivity, the receiver is 40khz resonant so other frequencies won't pass into the circuit, so no need for band pass filtering.” Die Ultraschallfrequenz mit 40kHz ist ein optimaler Punkt bzgl. Reichweite und Empfindlichkeit. Bei dieser Resonanzfrequenz hat der Empfänger ebenfalls kein Problem mit Hintergrundgeräuschen bzw. anderen Frequenzen, die zu Störungen führen könnten. Somit gibt es keine Notwendigkeit für entsprechende Filter.
Wie wird mit dem Arduino die Zeit gemessen?
pulseIn() Mit dem “pulse” Befehl können sowohl “high” als auch “low” Signale an einem Pin eingelesen werden. Mit dem Trigger Impuls von 10 μs wird die Entfernungsmessung gestartet. Nach der Aussendung der Ultraschallwelle, wird der pulseIn() Pin (Echo_Pin) auf High gesetzt. Die Zeitmessung startet und dauert solange an, bis der Sensor ein reflektiertes Echo erkennt. Der pulseIn() wird wieder auf low gesetzt und die Zeitmessung stoppt. Die Ausgabe der Zeitmessung erfolgt in Mikrosekunden.
Warum sind auf dem SRF05 Zeit Diagramm Leerlaufzeiten eingezeichnet?
Hersteller: „[…] there is also a slight delay for slower controllers (from some years back) to start there timing following the trigger pulse.” Nach heutigen Standards (bzw. leistungsfähigen Mikrocontrollern) ist daher auch die nachfolgende Darstellung zulässig.
Signalvorverarbeitung
Auf der folgenden Abbildung 5 ist die Verbindung zwischen Arduino und dem Ultraschallsensor SRF05.
Anschluss Sensor an den Arduino UNO
Umrechnung Zeit in Abstandswert
In dem Arduino Programm muss der gemessene Zeitwert zwischen dem ausgesendeten und empfangenen Ultraschallsignal zur weiteren Verarbeitung in einen Abstandswert umgerechnet werden. In dem Arduino Quellcode wird dazu die Impulsdauer am Ausgang (Echo) durch den Umrechnungsfaktor 29 µs/cm und 2 geteilt. Die nachfolgende Berechnung zeigt, wie der Umrechnungsfaktor (siehe Datenblatt) aus der Geschwindigkeit für Ultraschall (343 m/s bei 20 °C) berechnet wird. Der Entfernungswert ist zusätzlich noch zu halbieren, da nur eine Distanz für die Entfernungsmessung bzw. Abstandskontrolle des EV3 Roboters benötigt wird. Der unten berechnete Umrechnungsfaktor gilt aber nur für 20 °C bei trockener Luft. Bei abweichender Temperatur ändert sich der Wert für die Schallgeschwindigkeit und dementsprechend auch der Umrechnungsfaktor.
Berücksichtigung der Temperatur
Für die Berechnung des Umrechnungsfaktors (siehe „Umrechnung Zeit in Abstandswert“) ist die Temperatur zur Bestimmung der Schallgeschwindigkeit von Bedeutung. Schall bzw. Ultraschall hat ausschließlich bei 20 °C eine Ausbreitungsgeschwindigkeit von 343 m/s. Daher muss zu Beginn jeder Abstandsmessung mit dem EV3 die Temperatur aufgenommen werden, um so die aktuelle Schallgeschwindigkeit zu berechnen. Die nachfolgenden Testläufe zur Bestimmung der Genauigkeit des Sensors fanden bei 20 °C statt. Es folgt die Berechnung für die Schallgeschwindigkeit bei 20°C. Die Werte für die spezifische Gaskonstante und dem Isentropenexponent sind der Literatur entnommen (Quelle: Formeln und Tabellen Maschinenbau). Aus der Schallgeschwindigkeit muss im Anschluss der Umrechnungsfaktor (Zeit – Abstandswert) gebildet werden.
κ=Isentropenexponent
R=Spezifische Gaskonstante von Luft
T=Temperatur in Kelvin
Berechnung der Schallgeschwindigkeit
Analog-Digital Umsetzer
Für die Messung der Zeitdifferenz zwischen dem gesendeten und empfangenen Schall wird kein Analog-Digital Umwandler benötigt.
Verbindung / Bussystem
Realisierung
Diese Kapitel beschreibt welche Hard- und Software zur Bewältigung dieser Aufgabe zum Einsatz kamen. Zusätzlich werden die verschiedenen Aufbauten näher beschrieben, die für die Umsetzung von Bedeutung sind.
Verwendete Hardware
• Lego Mindstorms EV3 Brick
• Arduino UNO
• Ultraschallsensor SRF 05 (Devantech)
• Laptop ASUS X70IO (4 GB RAM, Intel Core 2)
• USB Adapter ASUS Bluetooth 4.0
Verwendete Software
• Microsoft Windows 7
• Matlab R2017a
• QUT toolkit: https://wiki.qut.edu.au/display/cyphy/QUT+EV3+MATLAB+toolkit
• MATLAB Support Package for LEGO MINDSTORMS EV3
• Arduino Software (IDE) Version 1.8.3
Anzeige der Abstandswerte auf EV3 Display
Bei dem Aufbau wurde in mehreren Etappen vorgegangen, um die Aufgabe schrittweise zu lösen. Zunächst konnte mit Hilfe des HSHL Wiki - Eintrags „Projekt 32: Komplexer Sensor für Lego Mindstorms EV3“ eine Verbindung zwischen Ultraschallsensor, dem Arduino und EV3 hergestellt werden. Nachfolgend soll aber nur auf die Unterschiede zu dem „Projekt 32: Komplexer Sensor für Lego Mindstorms EV3“ eingegangen werden, da lediglich der SHARP Infrarotsensor vom Typ GP2Y0D21YK0F gegen den Ultraschallsensor SRF05 ausgetauscht werden muss. Zusätzlich ist die Arduino Software zu ändern, damit eine Kommunikation zwischen Sensor und Arduino stattfinden kann. Für die Programmierung des EV3 wird die Lego Mindstorms Software verwendet. Die Kommunikation zwischen EV3 und Arduino findet über das I2C Protokoll statt. Hierbei dient der EV3 Brick als Master und der Arduino als Slave. Der Ultraschallsensor (SRF05) wird über den Arduino angesteuert.
Link für das Arduino Programm:
Link für das Lego Mindstorms Programm:
Schnittstelle: EV3 – Arduino – Ultraschallsensor
Die Verbindung zwischen dem Ultraschallsensor und dem Arduino kann über die Pins mittels Drahtbrücken erfolgen. Für die Verbindung zwischen EV3 und Arduino wird ein sechs adriges RJ12 Verbindungskabel verwendet, welches standardmäßig mit dem Lego Mindstorms EV3 und dem Lego Mindstorms NXT für sämtliche Motoren und Sensoren mitgeliefert wird. Dieses ist direkt kompatibel zu den Anschlüssen am EV3. Das andere Ende Abb. muss entsprechend den Anschlüssen am Arduino angepasst werden. In dem dargestellten Aufbau Abb.6 wird zusätzlich ein Breadboard eingesetzt um die einzelnen Kabel besser mit dem Arduino verbinden zu können. Die einzelnen Kabel vom RJ12 sind dazu mit Drahtbrücken verlötet worden. Die I2C Verbindung zu dem Arduino wird über den Analogen Pin 5 und Pin 6 realisiert. Die beiden Signalleitungen SCL - Signal Clock (Pin 5) und SDA - Signal Data (Pin 6) sind zusätzlich über zwei Pull-up Widerstände (47k Ohm) an die externe Versorgungsspannung vom EV3 Brick angeschlossen. Diese ziehen den I2C Bus auf 4,7 V. Der Arduino benötigt keine zusätzliche Spannungsquelle, da dieser über VIN und GND (Abb.7) mit dem EV3 verbunden ist.
Nachdem kompilieren der Programme sowohl auf dem Arduino, als auch auf dem EV3, werden die Werte der Abstandsmessung auf dem Display des EV3 ausgegeben. Eine gleichzeitige Verarbeitung der Messdaten zur Ansteuerung des EV3 ließ sich nicht realisieren.
Abstandskontrolle des EV3
In der nachfolgenden Beschreibung werden die zuvor ausgelesenen bzw. berechneten Abstandswerte für die Abstandskontrolle des fahrbaren EV3 Roboters verarbeitet. Die Herangehensweise unterscheidet sich jedoch dahingehend, das nun anstelle der Mindstorms Software, Matlab verwendet wird. Zusätzlich findet keine Kommunikation mehr über I2C statt. Bei diesem System sendet der Arduino die Abstandswerte über die USB Schnittstelle an den PC. Mit dem Programm in Matlab können die Abstandswerte ausgelesen und bezüglich der Abstandskontrolle verarbeitet werden. Die Fahr- und Stoppbefehle werden über das Programm Matlab per Bluetooth an den EV3 Brick gesendet. Der Ultraschallsensor ist wie bereits beschrieben mit dem Arduino verbunden. Der Arduino Uno ist nun mit dem Laptop über ein USB Kabel verbunden. Der EV3 ist wiederum über eine Bluetooth Verbindung mit dem Laptop verbunden. Auf das RJ12 Kabel kann an dieser Stelle verzichtet werden.
Das zugehörige Arduino Programm zur Verarbeitung der Sensorsignale befindet sich im SVN Projektordner:
Das Matlab Programm zum Auslesen der Abstandswerte vom Arduino zur weiteren Verarbeitung und Ansteuerung des EV3 befindet sich ebenfalls im SVN Projektordner:
Es folgt der Programmablaufplan zur besseren Übersicht über die Programmstruktur. In das EV3 – Matlab Programm wurde zusätzlich noch ein gleitender Mittelwertfilter „eingebaut“, damit der EV3 Roboter nicht durch zufällige starke Messabweichungen vorzeitig stoppt.
Quellen
!!!Für SVN Ordner sind die entsprechenden Zugriffsrechte erforderlich!!!
- ↑ http://www.embedded.arch.ethz.ch/uploads/Examples/ExampleSensorboardSupersonic2/SRF05Datasheet.pdf
- ↑ Von Evan-Amos - Eigenes Werk, Gemeinfrei, https://commons.wikimedia.org/w/index.php?curid=33217678, Abgerufen am 09.05.2017
- ↑ https://www.robot-electronics.co.uk/images/srf05p2.jpg]]
- ↑ https://www.robot-electronics.co.uk/htm/srf05tech.htm]]
- ↑ https://creativecoding.uni-bayreuth.de/assets/Bauteile/srf05arduino.png
→ zurück zum Hauptartikel: Signalverarbeitende Systeme SoSe2017