Objekterkennung mit Infrarotsensor mit Matlab/Simulink und EV3

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen

Autor: Christopher Brömse Betreuer: Prof. Schneider

Aufgabenstellung

In dem Fach Signalverarbeitende Systeme ist den Studierenden jeweils eine Aufgabe zugeteilt. Diese besteht darin, einen Lego EV3 Roboter mittels eines Sensors ca. 5 cm vor einen Karton stoppen zu lassen. Die Programmierung ist mit Matlab/ Simulink durchzuführen. In dieser Aufgabe ist ein Sharp GP2 Distanzsensor zu verwenden.

Sensor

Bei dem Sensor handelt es sich um einen Distanzsensor von Sharp, der aus drei Hauptelementen besteht. Zum einen aus einem optischen Positionssensor, einer Infrarotdiode und einer Signalverarbeitungsschaltung.

Dabei hat der Sensor folgende Spezifikationen:

  • Erkennungsbereich von 10 bis 80 cm
  • Analoges Ausgangssignal
  • Stromaufnahme von 30 mA
  • Versorgungsspannung von 4,5 bis 5,5 V
Abbildung 1: Abbildung des Sensors

Einer der Vorteile des Sharp GP2 ist, dass dieser gut mit unterschiedlichen Oberflächen funktioniert, unempfindlich gegen Temperaturänderungen sowie für den Dauereinsatz geeignet ist. Der Grund liegt in der Messmethode der Triangulation.








Funktionsweise

Wie bereits beschrieben verwendet der Sharp GP2 das Triangulationsprinzip zur Distanzmessung. Dazu wird ein schmaler Infrarot-Lichtstrahl ausgesendet. Dieser wird mittels einer Infrarotdiode und einer davor platzierten Linse erzeugt. Befindet sich nun ein Objekt in Reichweite, so wird das Licht von diesem reflektiert. Eine zweite Linse fängt dieses Licht ein und leitet es zu einem optischen Positionssensor (engl. PSD) weiter. Der optische Positionssensor gibt nun je nach Position des Lichtstrahls eine unterschiedlich hohe Spannung aus. Das Messprinzip ist gut in Abbildung 2 zu erkennen.[1]

Abbildung 2: Das Triangulationsprinzip



















Ausgangssignal

Das Ausgangssignal des Sharp GP2 ist analog. Das heißt, es wird je nach gemessener Distanz eine unterschiedlich hohe Spannung ausgegeben. Des Weiteren ist das Signal anti-proportional. Darunter versteht man, dass die Spannung abnimmt desto weiter die gemessene Distanz ist. Die Kennlinie der Ausgangsspannung des GP2 ist in Abbildung 3 zu erkennen. Diese verdeutlicht auch, dass das Ausgangssignal unabhängig von der Farbe der gemessenen Oberfläche ist. Die Kurve für eine weiße Oberfläche ist deckungsgleich mit der einer grauen.

Die Taktung des Ausgangssignales ist in Abbildung 4 zu finden. Gemessen wird immer in Abständen von 38,3 ms ± 9,6 ms. Durch die Verarbeitung kann eine maximale Verspätung von 5 ms zwischen Messung und Ausgangssignal entstehen.[2]

Abbildung 3: Ausgangssignal des Sharp GP2
Abbildung 4: Taktung Ausgangssignal
















Signalverarbeitung

Im folgenden wird die Signalverarbeitung vorgestellt. Dabei wird der Signalfluss vom Sensor bis zum EV3 erläutert.

Abbildung 5: Signalkette von Sharp GP2 zu EV3












Verbindung Arduino mit Sensor

Abbildung 6: Verschaltung Arduino mit Sharp GP2

Wie in der Abbildung 6 zu erkennen ist, wird der Sharp GP2 mittels drei Verbindungen an den Arduino UNO angeschlossen. Dabei handelt es sich um die Stromversorgung (VCC), die Masse (GND) und das Ausgangssignal (Vout). Da es sich bei dem Ausgangssignal um ein analoges und antiproportionales Signal handelt wird dieses mit dem Arduino verarbeitet. Eingelesen wird das analoge Signal des Sensors mit einem 10 Bit analog digital Konverter. Dabei handelt es sich um einen Wandler der die sukzessive Approximation zur Realisierung anwendet. Hierdurch werden analoge Eingangssignale mit den Werten zwischen 0 und 5 V in integer Werte von 0 und 1023 abgebildet. Hierdrüber lässt sich auch die Auflösung bestimmen. 5 Volt dividiert durch 1024 Einheiten ergibt eine Auflösung von 4,9 mV pro Einheit. Abgetastet wird hierbei jeweils 10.000-mal die Sekunde.[3]

Nach dem Einlesen des Signales muss dieses noch in einen Abstand umgerechnet werden. Auch dieses wird mit dem Arduino und dem darauf befindlichen Programm durchgeführt. Dazu wird eine Funktion verwendet die aus dem Graphen in Abbildung 3 erstellt wurde. Diese ist wie folgt definiert:
Abstand = ( 6787 / (analoger Wert - 3)) – 3.

Das Programm für den Arduino ist in SVN unter folgenden Link zu finden: https://svn.hshl.de/svn/BSE_SigSys/trunk/User/Kohorte_04_SoSe17/Christopher_Broemse/Programm Arduino/



Verbindung Arduino PC/ PC EV3

Zunächst wurde versucht eine Verbindung zwischen Arduino und EV3 direkt über I2C zu realisieren. Hierzu wurde mittels des Arduino eine I2C-Schnittstelle aufgebaut und die Abstandsdaten an den EV3 übermittelt. Hierbei konnte allerdings nur mit der Lego EV3 Software ein geeigneter Baustein zum Auslesen der I2C Schnittstelle implementiert werden. Hilfreich war hierfür der Wiki-Eintrag „Projekt 32: Komplexer Sensor für Lego Mindstorms EV3“[4]. Die Abstandswerte konnten somit auf dem EV3 ausgegeben werden. Allerdings ist eine Vorgabe dieses Projekts, dass die Abstandswerte nicht mit der Lego EV3 Software verarbeitet werden sollen sondern mit Matlab/ Simulink. Die Schwierigkeit hierbei besteht darin, dass es zwar ein Support Package für Matlab/ Simulink und den EV3 gibt, aber keine Bausteine für eine I2C Verbindung.

Trotz intensiver Recherchen und Programmieransätzen ist es allerdings nicht möglich eine I2C Schnittstelle mit Matlab/ Simulink für den EV3 zu programmieren.

Aus diesem Grund wird eine Verbindung mittels USB zwischen Arduino, PC und EV3 verwendet (Abbildung 5). Dabei werden mit dem PC und dem drauf laufenden Matlab Programm die Abstandswerte von dem Arduino ausgelesen und mit Vorgabewerten verglichen. Auch das Ansteuern des EV3 wird mit dem Programm durchgeführt. Ein Programmablaufplan ist in nachfolgender Abbildung zu erkennen.

Abbildung 7: PAP Matlabprogramm EV3

Das Matlab-Programm ist in SVN unter folgenden Link zu finden: https://svn.hshl.de/svn/BSE_SigSys/trunk/User/Kohorte_04_SoSe17/Christopher_Broemse/Programm Matlab/

Analog-Digital-Umsetzer

Wie bereits bei der Signalverarbeitung beschrieben, verwendet der Arduino einen sukzessiven approximator als Analog-Digital-Wandler. Dabei basiert dieser auf dem Vergleich der analogen Eingangsspannung mit einer Referenzspannung und kann auch als Wägeverfahren bezeichnet werden. Der Vergleich erfolgt hierbei schrittweise und sich immer wiederholend. Dabei wird die Referenzspannung so geändert, dass sie sich immer näher an die Eingangsspannung annähert. Dabei ist der sukzessive approximator wie folgt aufgebaut:

Abbildung 8: Blockschaltbild des sukzessiv approximator










Ist der erste Vergleich durch den Komparator durchgeführt, wird die Referenzspannung in einem größeren Digitalschritt an die Spannung des Analogsignals angepasst. Im zweiten Schritt wird dann die Referenzspannung verringert. In dem darauf folgenden Vergleich wird wiederum die Referenzspannung verringert usw. Für jeden Vergleich ist demnach ein Taktzyklus erforderlich. Im Falle des Arduino mit 10 Bit, sind somit 10 Taktzyklen erforderlich.

Abbildung 9: Funktionsprinzip des sukzessiv approximator













Im Beispiel der Abbildung 9 ist die Eingangsspannung niedriger als die Vergleichsspannung des A/D-Wandlers und somit wird das Most Significat Bit (MSB) auf den Lo-Wert (0) gesetzt. Bei höherer Eingangsspannung dann auf den Hi-Wert (1). Im nächsten Schritt wird die Vergleichsspannung halbiert. Dadurch ist diese niedriger als die Eingangsspannung und das folgende Bit wird auf „1“ gesetzt. Daraufhin wird die Referenzspannung erneut halbiert und wiederum verglichen. Dies wird so lange durchgeführt, bis alle Bits gesetzt sind bis zum Least Significant Bit (LSB). Die Auflösung wird dabei durch die Anzahl der gesetzten Bits bestimmt[5].


Darstellung der Ergebnisse

Wie in dem YouTube-Video zu erkennen ist, stoppt der Roboter ca. 10 cm vor dem Objekt. In der Aufgabenstellung ist allerdings ein Abstand von 5 cm vorgegeben. Dieser kann jedoch nicht eingehalten werden, da der Sensor nur bis zu einem Entfernungsbereich von 10 cm verwendet werden kann (siehe Sensordaten). Abgesehen von dieser Differenz ist die Aufgabenstellung dennoch als erfüllt zu bewerten.

Messunsicherheit des Sensors

Wie bei jeder Messung treten auch bei der Abstandsmessung Abweichungen zwischen gemessenen Wert und realen Wert auf. Um diese Abweichungen bewerten zu können wurde dafür eine Messreihe von 15 Messungen durchgeführt. Diese ist in folgender Tabelle zu finden.

Tabelle 1: Messabweichungen über verschiedene Abstände.

Messung Nr. Entfernung [cm] Entfernung gemessen [cm] Absoluter Fehler [cm] Relativer Fehler [%]
1 10 11 1 -9,09
2 15 14 -1 7,14
3 20 20 0 0
4 25 26 -1 -3,85
5 30 32 2 -6,25
6 35 33 -2 6,06
7 40 41 1 -2,44
8 45 47 2 -4,26
9 50 50 0 0
10 55 57 2 -3,51
11 60 59 -1 1,69
12 65 66 1 -1,52
13 70 72 2 -2,78
14 75 78 2 -3,85
15 80 81 -1 -1,23 Ø Absoluter Fehler[cm] 0,47 Ø Relativer Fehler[%] -1,65

Auch hier ist wieder der Messbereich des Sharp GP2 zu berücksichtigen, der nur in einem Bereich von 10-80 cm liegt.


Abbildung 10: Messabweichungen

Wie in der Abbildung 10 zu erkennen ist, gibt es Abweichungen in positiver als auch in negativer Richtung. Darüber hinaus sind diese relativ gering. Im Durchschnitt beträgt die Messabweichung 0,47 cm bei einem durchschnittlichen relativen Fehler von -1,65 cm. Des Weiteren sind keine Trends in Form von steigenden Abweichungen mit zunehmenden Abständen zu erkennen. Der Grund für das Vorhandensein von Abweichungen lässt sich nicht genau identifizieren. Hierzu müsste die gesamte Signalübertragung analysiert werden. Ein Grund für die Abweichungen ist beispielsweise die Umrechnung der analogen Werte des Sensors in die jeweiligen Abstände.





















Projektplan

Um eine möglichst strukturierte Vorgehensweise zu garantieren ist nachfolgend ein Projektplan aufgeführt. Dieser ist mit Visio erstellt worden.

Abbildung 11: Projektplan

YouTube-Video

Das Ergebnis ist in einem Youtube-Video festgehalten und unter folgenden Link zu finden[1]

Quellen

  1. Infrarot-Entfernungsmesser [Robotic & Microcontroller Educational Knowledgepage - Network of Excellence]. URL http://home.roboticlab.eu/de/examples/sensor/ir_distance. – Aktualisierungsdatum: 2013-03-26 – Überprüfungsdatum 2017-06-09
  2. Datenblatt Sharp GP2 Datei:DS GP2Y0A21YK0F.pdf
  3. Arduino - AnalogRead. URL https://www.arduino.cc/en/Reference/AnalogRead – Überprüfungsdatum 2017-06-21
  4. http://193.175.248.52/wiki/index.php/Projekt_32:_Komplexer_Sensor_f%C3%BCr_Lego_Mindstorms_EV3, Abgerufen am 5.05.2017
  5. SAR (successive approximation register) :: SAR-Verfahren :: ITWissen.info. URL http://www.itwissen.info/SAR-successive-approximation-register-SAR-Verfahren.html – Überprüfungsdatum 2017-06-26