Objekterkennung mit Ultraschall mit Matlab/Simulink und EV3

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen

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
Abbildung 1: Sensor Vorderansicht [2]
Abbildung 2: Sensor Rückansicht [3]


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.

Abbildung 3: SRF05 Zeitverlauf [4]
















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.

Abbildung 4: Zeitverlauf ohne Verzögerung















Signalvorverarbeitung

Auf der folgenden Abbildung 5 ist die Verbindung zwischen Arduino und dem Ultraschallsensor SRF05.

Anschluss Sensor an den Arduino UNO

Abbildung 5: Verbindung Ardunino-SRF05[5]


















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:

Abbildung 6: Aufbau EV3 Arduino I2C
Abbildung 7: Aufbau EV3 Arduino SRF05












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.

Abbildung 7: Aufbau EV3 Arduino SRF05









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.

Abbildung 8: PAP EV3 - Matlab






























Quellen

!!!Für SVN Ordner sind die entsprechenden Zugriffsrechte erforderlich!!!

→ zurück zum Hauptartikel: Signalverarbeitende Systeme SoSe2017