Objekterkennung mit HiTechnics EOPD mit Matlab/Simulink und EV3
Autorin: Lena Gödeke
Betreuer: Prof. Dr.-Ing. Ulrich Schneider
In diesem Projekt wird ein fahrbarer und lenkbarer Roboter, der einen EOPD (Electro Optical Proximity Detector)- Sensor enthält, mit Lego Mindstorms EV3 gebaut. Der Roboter soll mit Hilfe des Sensors ein Hindernis erkennen, das Signal verarbeiten und daraufhin automatisch abbremsen, sodass das Fahrzeug 5 cm vor dem Hindernis zum Stehen kommt.
Auswahl eines Primärsensors
Der Primärsensor ist ein EOPD Sensor, der im vorderen Bereich des EV3 Robotors angebracht wurde.
Funktionsweise
Der EOPD Sensor ist ein Näherungssensor, der eine interne Lichtquelle (rote LED) und ein sensitives Element nutzt, um eine Distanz zu einem Hindernis indirekt zu messen. Der Sensor wirft über die rote LED(Sender) einen kegelförmigen Lichtstrahl aus. Trifft dieser auf einen Gegenstand wird der Lichtkegel reflektiert. Ein Teil des reflektierten Lichts gelangt wieder zurück zum Sensor. Das zurückkommende Licht wird vom Sensor über das sensitive Element, eine Photodiode (Empfänger), gemessen (vgl. Abbildung Reflexionsmodell). Daraus wird die Differenz aus dem ausgeworfenen Licht und dem reflektiertem Licht gemessen. Da das reflektierte Licht von der Beschaffenheit des Zielgegenstandes und der Distanz zum Hindernis abhängt, ist dieser gemessene Wert proportional zur Distanz zum Hindernis und zur Beschaffenheit des Hindernisses. Um nun die Distanz messen zu können, muss die Beschaffenheit der Zieloberfläche bekannt sein und der Sensor vor der Messung darauf kalibriert werden. Auf diese Weise können Ziele, die zwischen 0 und 20 cm entfernt sind, vom EOPD Sensor erkannt werden. Der Unterschied zu anderen Lichtsensoren ist, dass der Sensor das Licht gepulst auswirft. Durch das gepulste Licht ist das Signal nicht von den äußeren Verhältnissen abhängig, da die gepulsten Signale deutlich von den äußeren Lichtverhältnissen zu unterscheiden sind. [1] Der Sensor kann in zwei verschiedenen Modi genutzt werden. Zum einen im Nah-Modus und zum anderen im Fern-Modus. Der EOPD Sensor liefert eine analoge Spannung.
Physikalische Grundlagen
Das Wirkprinzip des Sensors beruht auf der Lichtreflexion. Gegenstände werfen je nach Material und Oberfläche einen Teil des auf sie fallende Licht zurück. Dabei findet eine partielle Reflexion statt, was bedeutet, dass sich ein Anteil des Lichtes im Gegenstand ausbreitet (Transmission). Der Anteil ist besonders von der Farbe, aber auch von der Oberflächenbeschaffenheit des Gegenstandes abhängig. Nachfolgend sind verschiedene Reflexionsgrade aufgeführt.
Farbe | Reflexionsgrad |
---|---|
mattweiß | 85-93% |
seidenglanzweiß | 75-80% |
mattgelb | 70-80% |
An der Tabelle ist zu erkennen, dass sich der Reflexionsgrad bei kleineren Änderungen der Farbe schon stark unterscheiden kann. Daher ist es wichtig den Sensor auf einen bestimmten Gegenstand zu kalibrieren, da er sonst die Entfernung, aufgrund der veränderten Reflexion, falsch wahrnimmt. Außerdem ist die Reflexion des Lichtes stark von äußeren Einflüssen abhängig, daher sind hier auch nur Bereichswerte genannt. Diese großen Schwankungen sind auch an der Messabweichung der unten angeführten Messwerte zu erkennen.
Elektrotechnische Grundlagen
Der Sensor enthält eine Photodiode über die das reflektierte Licht gemessen wird. Die Firma Hitechnic konnte leider keine genauen Auskünfte über die Diode geben. Prinzipiell gibt es drei verschiedene Schaltungen, die bei Photodioden verwendet werden.
- Photospannungsbetrieb
- Konstantstromquelle mit Arbeitswiderstand
- Konstantstromquelle mit Transimpedanzverstärker
Photodioden funktionieren im Allgemeinen so, dass sich die Spannung verändert, wenn die Stärke des Lichtes, welches auf sie strahlt, verändert wird. So kann Licht in eine elektrische Größe umgewandelt werden, die dann weiterverarbeitet werden kann. Zur Lichtmessung werden sie in Sperrrichtung betrieben. [2]
Photospannungsbetrieb
In diesem Fall arbeitet die Diode als Solarzelle. Die Ausgangsspannung ist logarithmisch von der einfallenden Intensität des Lichtes abhängig und entspricht der umgedrehten Diodenkennlinie (≈0,7V). Allerdings ist diese Kennlinie auch sehr temperaturabhängig.
Konstantstromquelle mit Arbeitswiderstand
Das ist die einfachste Schaltung zur Auswertung einer Photodiode. Über einen Spannungsteiler mit einem relativ hochohmigen Widerstand kann eine lichtabhängige Spannung über dem Arbeitswiderstand abgegriffen werden. Die Ausgangsspannung ist linear proportional zur Lichtleistung.
Konstantstromquelle mit Transimpedanzverstärker
Hier wird die Photodiode nahezu im Kurzschluss als lichtabhängige Stromquelle betrieben. Der Kurzschluss sorgt dafür, dass die Sperrschichtkapazität nicht umgeladen werden muss, das macht die Schaltung sehr schnell.
Rohsignale des Sensors
Der Sensor liefert eine analoge Spannung. Dieser Wert nimmt mit steigendem Abstand zum Hindernis ab. Beim EV3 werden die Daten über ein sechsadriges Kabel übertragen. Auch die Spannungsversorgung läuft über dieses Kabel. Die genaue Pinbelegung des Steckers ist in der unten dargestellten Tabelle zu sehen. Der analoge Wert wird vom EV3 Roboter mit einem Analaog- Digital- Wandler eingelesen. Der Tabelle ist zu entnehmen, dass der EOPD Sensor über Pin1 und Pin6 analoge Daten übertragen kann.
Leitung | Funktion | Ausgang(Motor) | Eingang (Sensor) |
---|---|---|---|
1 (weiß) | Analoge Datenleitung | PWM 0 | ANALOG |
2 (schwarz) | Analoge Datenleitung | PWM1 | GND |
3 (rot) | Masseleitung | GND | GND |
4 (grün) | Versorgungsspannung | VDD | VDD |
5 (gelb) | Digitale Datenleitung | I2 C 0 | I2 C (SCL) 0 |
6 (blau) | Digitale Datenleitung | I2 C / 1 | I2 C (SDA) 1 / Analog geg. Pin 3 |
In der Abbildung der Rohsignale sind die digitalen Rohsignale auf der y- Achse und die Distanz auf der x-Achse abgetragen. An dem Verlauf der Funktion ist zu erkennen, dass die Zuordnung antiproportional verläuft. Das bedeutet je Größer die wirkliche Distanz ist, desto kleiner sind die Rohdaten. Durch dem hyperbelförmigen Verlauf kann desweiteren geschlussfolgert werden, dass die Abnahme der Rohwerte quadratisch erfolgt. Somit kann die Funktion, die die Zuordnung zwischen Rohdaten und Distanz beschreibt, wie folgt zusammengefasst werden.
Nach der Distanz aufgelöst, ergibt sich daraus die nachfolgende Gleichung.
Um die Konstante ermitteln zu können, müssen die Werte linearisiert werden. Für die Linearisierung wird die Funktion auf die Form gebracht, so dass über der Steigung der Geraden die Abhängigkeit zwischen Distanz und abgelesen werden kann. Dieser Proportionalitätsfaktor entspricht der Konstanten. Die Konstante ist mit einem Wert von 1095 angenommen worden, dieser Wert konnte aus den Messergebnissen ermittelt werden.
Fehlerermittlung
Weiterhin zu beachten ist, dass systematische Fehler bei der Messung auftreten können. Da nun die Formel zur Berechnung der Daten gegeben ist, kann überprüft werden ob und wie viel sie von der tatsächlichen Distanz abweichen. Aus der Abweichung wird der Mittelwert gebildet, der dann als Fehler in die oben angeführte Gleichung mit eingerechnet wird.
Messabweichungen
Entfernung [mm] | gemessener Rohwert | errechneter Wert in mm | Abweichung gemessener und tatsächlicher Wert [mm] | relative Messabweichung [%] |
10 | 973 | 35,1 | 25,1 | |
20 | 975 | 35,07 | 15,07 | 75 |
30 | 668 | 42,36 | 12,36 | 41 |
40 | 447 | 51,79 | 11,79 | 28 |
50 | 319 | 61,31 | 11,31 | 22 |
60 | 235 | 71 | 11 | 18 |
70 | 181 | 81 | 11 | 16 |
80 | 143 | 91,57 | 11,57 | 14 |
90 | 114 | 102,55 | 12,55 | 14 |
100 | 95 | 112,34 | 12,34 | 12 |
Der erste Messwert ist ein Außreißer und kann bei der weiteren Betrachtung ausgeschlossen werden. Aus den restlichen Abweichungen kann jetzt ein durchschnittlicher Fehler ermittelt werden.
Dies ist der Fehler, der von den errechneten Werten abgezogen werden muss.
Signalvorverarbeitung
Das Signal wird vom Sensor an den EV3 als analoge Daten übergeben. Bevor die Daten zur weiteren Verarbeitung an den Analog-Digital-Wandler übergeben werden, wird das Signal über eine Sample and Hold Schaltung vor verarbeitet.
Sample & Hold Schaltung
Bei der Sample and Hold Schaltung wird das Signal abgetastet. Durch die Abtastung des wert- und zeitkontinuierlichen Signals wird ein wertkontinuierliches und zeitdiskretes Signal erzeugt. Die Schaltung hält das Eingangssignal während der Umsetzzeit des Analog-Digital-Wandlers konstant. Sie ist dem Analog-Digital-Umsetzer vorgelagert, weil es zu einem Amplitudenfehler kommen kann, wenn sich das Eingangssignal während der Umsetzung des analogen Signals zu einem digitalen Signal ändert.
Analog-Digital-Umsetzer
Der Analog-Digital-Wandler liest die Spannung ein und wandelt sie zur weiteren Verarbeitung in ein digitales Signal um. Die Spannung steht als Signal mit einem Wertebereich von 0−1023 innerhalb des NXT-Bausteins zur Verfügung. Dies bedeutet, dass die Spannung zwischen 0 und 5 Volt auf 1024 Zustände abgebildet wird. Somit liegt die Auflösung bei 4,9 mV
Ein Analog zu Digital Wandler (ADC) bildet die Größen des unendlichen Wertebereichs (analog) auf einen endlichen Wertebereich (digital) ab. Es wird eine physikalische Größe in einen binären Zahlenwert umgewandelt. Grund dafür sind viele Vorteile analoger Daten wie z.B. die geringere Anzahl an Ablesefehlern oder auch die Möglichkeit analoge Daten direkt von Computern weiterverarbeiten zu können. Es gibt verschiedene Arten von ADC. Der EV3 nutzt einen ADC, der mit der sukzessiven Approximation arbeitet (SAR).
Sukzessive Approximation
Bei der sukzessiven Approximation wird die Eingangsspannung mit einer veränderbaren Referenzspannung verglichen. Dieser Vergleich erfolgt schrittweise und wiederholt sich ständig. Die Referenzspannung wird nach einem Vergleich so geändert, dass sie sich immer mehr der Eingangsspannung annähert. Über die angenäherte Referenzspannung kann über Schaltungen eine binär Zahl der angelegten Spannung ermittelt werden. Das schematische Schaltbild eines SAR- Wandlers zeigt, dass dem ADC eine Sample and Hold Schaltung, wie sie im vorherigen Abschnitt beschrieben wurde, vorgelagert ist. Bestandteile des SAR- Wandlers sind der Komparator, das Steuerwerk, der SAR- Converter und der DA Wandler. Im EV3 Brick ist der ADS7957 der Firma Texas Instrument verbaut.
ADS7957 Texas Instruments
Der im EV3 Brick verwendete Analog-Digital-Umsetzer ist ein sukzessiver Approximierer der Firma Texas Instruments mit folgenden Eigenschaften:
- 10 Bit Dualcode
- 1024 Wägestufen
- Uref = 2,5V
- Ulsb = 2,4mV
Liegt eine Eingangsspannung von 1,5V an, wird diese Spannung mit 10 Takten der Referenzspannung verglichen. Diese Takte teilen sich nach auf, womit sich folgende Tabelle ergibt:
t1 | 1,25V |
t2 | 625mV |
t3 | 313mV |
t4 | 156mV |
t5 | 78mV |
t6 | 39mV |
t7 | 20mV |
t8 | 10mV |
t9 | 5mV |
t10 | 2,5mV |
Bei 1,5 V Eingangsspannung würde der Vergleich für das MSB (Most Significant Bit) so aussehen, dass 1,5V größer als 1,25V und somit das Bit gleich 1 gesetzt wird. Für das nachfolgende Bit gilt 1,5V größer als 1,875V, daher Bit2=0. Nach dem Vergleich der Spannungen würden die Bits der Takte 1,4,5,8 und 9 gesetzt werden. [7]
Bussystem
Der Analog-Digital-Wandler ist über das Serial Peripheral Interface Bussystem(SPI) mit der CPU verbunden. Das Bussystem wurde in den 80er Jahren von Motorola entwickelt. Es besteht aus folgenden drei Leitungen, worüber die serielle synchrone Datenübertragung verläuft.
- MOSI (Master Out -> Slave In)
- MISO (Master In -> Slave Out)
- SCK (Serial Clock)
Wie in der Abbildung zu sehen ist, ist der Bus ein Master Slave System. Dabei geht die Kommunikation immer vom Master aus, da dieser die SCK Leitung verwaltet, ohne die der Slave keine Daten übertragen kann. Die Übertragung verläuft über eine gleichzeitigen Austausch von Bits zwischen Master und Slave und Slave und Master. [8]
Digitale Signalverarbeitung
Die digitale Signalverarbeitung findet wie der Analog-Digital-Umsetzer nicht am Sensor selbst statt, da der Sensor nur analoge Daten überträgt. Die digitale Signalverarbeitung findet erst im Brick des EV3 statt.
Darstellung der Ergebnisse
Problematik
Wie oben bereits erwähnt übergibt der Sensor analoge Signale, diese können über Pin 1 des Steckers übergeben werden. Allerdings fehlen dem Brick des EV3s Treiber um analoge Daten auszulesen, da offizielle Sensoren des EV3s nur über UART oder I2C kommunizieren. Um dieses Problem zu lösen, wurden verschiedene Ansätze bearbeitet.
1.Ansatz: EV3 mit eigener Betriebssoftware
Wird der EOPD- Sensor an den EV3 angeschlossen erkennt der Brick den Sensor nicht. In der Portview wird angezeigt, dass kein Sensor verbunden ist. Detektiert der Sensor dann einen Abstand zu einem Objekt wird ein Port Error angezeigt. Daraus lässt sich schließen, dass der Brick eine Veränderung der Daten erkennt. Als Lösung dieses Problems wurde versucht einen Treiber für den EOPD Sensor im Matlab zu implementieren, allerdings bin ich hier erneut auf einen Fehler gestoßen. Die Analogen Spannungsdaten konnten nicht ausgelesen werden. Allerdings wurde ein Simulinkmodell erstellt, welches die oben beschriebene Signalverarbeitung enthält. Dieses Simulinkmodell kann verwendet werden sobald der Matlabfehler behoben wurde.
2.Ansatz: EV3 mit anderer Betriebssoftware
-
Abbildung a: Device Broser
-
Abbildung b: Input port
-
Abbildung c: Set Device
Der zweite Ansatz das Problem zu lösen ist dem Brick über eine MicroSD eine neue Betriebssoftware(EV3dev) aufzuspielen. Diese Software enthält bestimmte Treiber, die analoge Daten auslesen können. Zunächst wurde auf der Seite http://docs.ev3dev.org/projects/lego-linux-drivers/en/ev3dev-jessie/sensors.html überprüft ob das Betriebssystem EV3dev den HiTechnics EOPD Sensor unterstützt. Nun konnte das neue Betriebssystem installiert werden, indem nach "Getting Started" (http://www.ev3dev.org/docs/getting-started/) vorgegangen wurde. Nach der Installation ist ein neues Menü zu sehen. Unter "Device Browser" können "Ports", "Sensors" und "Motors" ausgewählt werden. Unter "Ports" wurde dann der Port, an dem der EOPD Sensor angeschlossen ist, ausgewählt. Nun wird das in der Abbildung zu sehende Menü dargestellt. In diesem Menü können unter "Set device" und "Set mode" Angaben zum verwendeten Sensor gemacht werden. Unter Device kann der EOPD Sensor und unter mode sein Übertragungsmodus, also nxt-Analog ausgewählt werden. Nun ist der Sensor verbunden und über "Sensors" können die Rohwerte des Sensors ausgelesen werden. Mit diesen Werten konnte dann die oben beschriebene Kennlinie ermittelt werden. Problematik bei diesem Ansatz ist allerdings, dass der Brick nun nicht mehr über Matlab angesprochen werden kann, da dieses Betriebssystem nicht kompatibel mit der Toolbox füt Matlab/Simulink ist (vgl.https://github.com/ev3dev/ev3dev/issues/298).
Messdaten EV3dev
3.Ansatz: Daten über Arduino auslesen
Dafür wurde der EOPD Sensor an einen Analog Eingang des Arduinos angeschlossen (vgl. Schaltplan Arduino und EOPD). Aus der Pinbelegung des RJ-11 Steckers waren die Leitungen bekannt, die verwendet werden müssen, um Daten auzulesen. Desweiteren wurde ein Code für den Arduino geschrieben, um analoge Daten auszulesen.
int analogPin = 0;
int val=0;
void setup() {
Serial.begin(9600);
}
void loop() {
val = analogRead(analogPin);
Serial.println(val);
}
So konnten über den seriellen Monitor Daten ausgelesen werden, allerdings entsprachen diese Daten nicht den erwarteten. Aus der Dokumentation des Herstellers ist zu entnehmen, dass die Werte mit steigendem Abstand abnehmen. Dies war bei diesem Ansatz allerdings nicht so. Die Werte waren sehr hoch wenn der Sensor weit weg von einem Objekt war und wurden kleiner wenn der Sensor sich dem Objekt annähert. Diese analogen Werte müssten dann über einen Analog-Digital-Wandler in digitale Daten umgewandelt werden, um dann die oben angeführten Rohdaten heraus zu bekommen.
4.Alternativlösung LEGO Ultraschallsensor
Der Ultraschallsensor von LEGO funktioniert über einen UART- Bus und kann direkt an den EV3 angeschlossen werden. Der EV3 erkennt den Sensor, da die Treiber für den Ultraschallsensor in der Betriebssoftware hinterlegt sind. Um das Roboter erfolgreich zum automatischen Bremsen zu bringen wurde zu dieser Alternative gegriffen, da der EOPD aufgrund eines Fehlers nicht erkannt wurde. Für die Umsetzung des Alternativkonzept wurde ein Simulinkmodell erstellt, welches an den Brick Übertragen werden kann.
Projektplan
Nachfolgend ist der Projektplan zu sehen.
Einzelnachweise
- ↑ https://www.hitechnic.com/cgi-bin/commerce.cgi?preadd=action&key=NEO1048
- ↑ https://www.mikrocontroller.net/articles/Lichtsensor_/_Helligkeitssensor
- ↑ https://www.mikrocontroller.net/articles/Lichtsensor_/_Helligkeitssensor
- ↑ Berns, D. K.; · S. K.; · Schmidt: Programmierung mit LEGO MINDSTORMS NXT - Robotersysteme, Entwurfsmethodik, Algorithmen. Springer Verlag, 2010. ISBN 978-3- 642-05469-3 6, 11, 13
- ↑ http://www.hitechnic.com/blog/eopd-sensor/eopd-how-to-measure-distance/
- ↑ http://www.hitechnic.com/blog/eopd-sensor/eopd-how-to-measure-distance/
- ↑ Prof. Dr. Schneider,Ulrich:Signalverarbeitende Systeme Analog-Digital-Umsetzer (ADU). In: Fachhochschule Hamm-Lippstadt.
- ↑ https://e2e.ti.com/blogs_/b/analogwire/archive/2015/02/13/extending-spi-with-differential-signaling-technology