3D Time-of-Flight Sensor Evaluation Module mit Matlab/Simulink: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Zeile 266: Zeile 266:


[1] Winner, Hermann (Hrsg.): ''Handbuch Fahrerassistenzsysteme''. 3. Auflage. Wiesbaden: Springer Vieweg. 2015.
[1] Winner, Hermann (Hrsg.): ''Handbuch Fahrerassistenzsysteme''. 3. Auflage. Wiesbaden: Springer Vieweg. 2015.
[2] Hüning, Felix: ''The fundamentals of electrical engineering : For mechatronics''. Oldenbourg, Boston : De Gruyter. 2014.  
[2] Hüning, Felix: ''The fundamentals of electrical engineering : For mechatronics''. Oldenbourg, Boston : De Gruyter. 2014.  


----
----
→ zurück zum Hauptartikel: [[SigSys_SoSe2018| Signalverarbeitende Systeme]]
→ zurück zum Hauptartikel: [[SigSys_SoSe2018| Signalverarbeitende Systeme]]

Version vom 5. Juli 2018, 23:20 Uhr

Sensor: TI Evaluation Module: OPT8241-CDK-EVM

Autor: Asaad Al-Suleihi

Bei dem betrachteten Sensor handelt es sich um ein Kamerasystem, das mit Hilfe des Time-of-Flight-Verfahrens ein 3D-Bild seiner Umgebung erstellen kann, kurz 3D ToF. Bei diesem wird ein Lichtstrahl pulsiert in eine Umgebung geworfen und die reflektierten Strahlen von einem Sensor aufgenommen. Anhand der Phasenverschiebung der gesendeten und aufgenommenen Strahlen lässt sich pro Bildpunkt die Entfernung zu einem Objekt berechnen und somit ein 3D-Bild der Umgebung erstellen. Der Bildsensor in einem ToF-System wird auch als Photonic Mixer Device, kurz PMD, bezeichnet [1. S. 336].

Beschreibung des Sensors

Aufbau der Evaluations-Kit OPT8241 CDK

Das Sensorsystem besteht aus drei Komponenten. Die Optik besteht aus einer Platine mit einer Lichtquelle. Genauer sind hier vier Laserdioden eingebaut. In der Abbildung 1 ist diese Komponente grün umrandet. Die zweite Komponente, die Steuerungs- und Auswerteelektronik, steuert zum einem die Lichtquelle und bestimmt somit die Lichtimpulse. Zum anderen enthält sie den eigentlichen Lichtsensor samt seiner Optik. Sie wertet die nimmt die von Objekten in der Umgebung zurückreflektierten Lichtstrahlen auf und berechnet daraus die Tiefeninformationen der jeweiligen Pixel. Diese Komponente ist im Bild 1 rot umrandet. Unterstützt wird das System durch die dritte Komponente, die z.B. Arbeitsspeicher, Konfigurations- und Kalibrierspeicher, USB-Schnittstelle, Power-Management usw. bereitstellt. Im Bild ist diese blau umrandet.

Funktionsweise des Sensors

Ein 3D ToF-Sensor besteht hauptsächlich aus zwei Komponenten: ein Lichtsensor, z.B. ein CMOS-Lichtsensormatrix, und eine modulierte Lichtquelle, meist eine Laserdiode. (CITE) Die Umgebung wird von der Quelle mit Lichtpulsen angestrahlt. Diese Lichtstrahlen werden von Objekten in der Umgebung zurückreflektiert und vom Sensor erfasst. Durch die Berechnung der Phasenverschiebung zwischen abgestrahlten und aufgenommenen Lichtstrahl kann die Entfernung zum Reflektionspunkt ermittelt werden. Es wird also über die Flugdauer zum Objekt die Distanz ermittelt. Daher stammt der Name Time-of-Flight. Die Abbildung 2 soll diesen Zusammenhang darstellen.

Die Lichtquelle sendet ein Lichtpuls der Breite aus. Am Sensor werden dabei über zwei Zeitfenster und , die Phasenverschoben sind, die Menge der auftretenden Lichtenergie gemessen und aufaddiert. Diese wird im Sensorinneren durch freigesetzte Elektronen erfasst. Durch das Aufaddieren von Elektronenaufkommen wird die Ladung über die Zeitfenster und ermittelt. Diese werden respektive und bezeichnet. Daraus lässt sich mit der Formel

die Entfernung vom Reflektionspunkt zu Bildpixel im Sensor berechnen.(CITE) Die Abbildung 3 verdeutlicht das Funktionsprinzip.

Der Sensorkern stellt ein CMOS-Bildsensor dar. Hier werden die eintreffenden Photonen in einem elektrischen Signal umgewandelt. Um diesen Kern herum existiert eine Reihe von anderen Bausteinen. Unter anderem ein Analog-Digital-Umwandler, Timing-Generator, der das zeitliche Abstimmen der Lichtausstrahlung und Bildaufnahme koordiniert, ein Modulationsblock, der die Modulation der Lichtimpulse regelt und ein Ausgabeblock für die Ausgabe der Sensordaten zur weiteren Bearbeitung. Der schematische Aufbau des Sensors ist in der Abbildung 4 dargestellt.

Technische Daten (CITE)

  • Sensorauflösung: 320 x 240 Pixel
  • Bildrate: 30 Bilder / Sekunde
  • Entfernungsgenauigkeit: < 0,01%
  • Wellenlänge der emittierten Lichtstrahlen: 850 nm
  • Sensorreichweite: bis zu 5 m
  • Sichtfeld: Horizontal: 74,4 °; Vertikal: 59,3°


Die Messkette

Ausgangssignale des Sensors

Der Sensor liefert als Rohsignale sogenannte Phase Correlation Data. Diese geben einen Vergleich der gesendeten Lichtimpulse mit den empfangenen Strahlen in Hinblick auf die zeitliche Verschiebung an. Die Korrelationsdaten werden in einer Auflösung von 12 Bit weitergegeben. Des Weiteren werden noch Common Mode Data ausgegeben. Das sind Gleichtaktsignale die nicht aufgrund des gesendeten Lichtstrahls vom Sensor erfasst wurden und können als Störung durch die Umgebung oder Hintergrundstrahlung verstanden werden. Diese leitet der Sensor in 4 Bit Auflösung weiter.

Neben diese Rohdaten werden durch den auf der Sensorplatine integrierten Verarbeitungschip, den Depth Engine OPTA9221, noch zwei weitere Datenarten geliefert: Tiefenbild und Punktwolke.

Ein Tiefenbild, englisch Depth Image, bezeichnet ein Pixel-Map, in der jedes Pixel eine Tiefeninformation trägt. Das heißt, der Wert des Pixels stellt die Entfernung dieses Bildpunktes zum Sensor dar. Die Abbildung 5 zeigt ein Tiefenbild einer flachen Fläche. Zu sehen ist, dass die Entfernung eines Pixels aufsteigt, je weiter man sich radial vom Bildmittelpunkt entfernt. Dies lässt sich trivial mit einem rechtwinkligen Dreieck erklären, dessen Hypotenuse länger wird, je länger die Gegenkathete wird.

Die zweite Art der Daten ist die Punktwolke, zu Englisch Point Cloud. Sie berührt auf sogenannten Voxel statt Pixel. Ein Voxel bezeichnet einen Gitterpunkt. Es wird durch die Angaben x-, y-, und z-Koordinaten beschrieben und stellt sozusagen ein Punkt im Raum. Eine Punkwolke ist somit ein Vektor aus Voxel. Die Abbildung 6 zeigt eine Punktwolke einer Szene, in welcher ein Stuhl und Rollcontainter als Punktwolke abgebildet sind. Im Vergleich zu einem Tiefenbild, wie in Abbildung 7, lassen sich aus einer Punktwolke einfacher z.B. Objekte konstruieren, da die Punkte einzeln in einem Vektor vorliegen und nicht erst vorher aus einem Pixel-Map herausgerechnet werden müssen.

Signalvorverarbeitung

Das Blockschaltbild in der Abbildung 4 des Sensors zeigt einen Verarbeitungsblock, den Analog-Processing-Block. Daraus lässt sich schließen, dass die Rohsignale zunächst vorverarbeitet werden bevor die Umsetzung in digitale Daten erfolgt. Leider gibt das Datenblatt keinerlei Informationen darüber, was in diesem Schritt passiert. Da es sich hier jedoch um einen CMOS-Sensor handelt, sind folgende Varianten vorstellbar:

  • Verstärkung der Messsignale
  • Rauschunterdrückung

Diese lassen sich im analogen Bereich durch Operationsverstärker und analoge Filter respektive umsetzen. Es ist auch denkbar, dass an dieser Stelle die Trennung der Korrelationssignale von Gleichtaktsignale stattfindet.

Analog-Digital-Umsetzung

Nach dem vorverarbeiten der analogen Signalen werden diese in digitale Daten umgesetzt. Hierzu wird ein Analog-Digital-Umsetzer genutzt. Nach diesem Schritt stehen die Korrelationsdaten in 12-Bit- und die Gleichtaktdaten in 4-Bit-Auflösung bereit. Die Art des ADU ist aus dem Datenblatt sowie verschiedene White-Paper des Herstellers nicht zu entnehmen.

Übertragung der Daten zum Mikrocontroller

Der Sensor besitzt eine CMOS-Data-Interface-Schnittstelle. Bei dieser handelt es sich um ein paralleles Bussystem, das vorwiegend in Bereich der CMOS-Bildsensoren eingesetzt wird. Für die Übertragung der Daten stehen 16-Bit zur Verfügung. Diese sind in der Abbildung 8 mit CMOS[15..0] gekennzeichnet. Des Weiteren existiert noch ein Systemtaktsignal, CLKOUT, das die Ausgabe jedes parallelen Datum signalisiert, sowie zwei weitere Taktsignale, VD und HD, die respektive die Übertragung eines ganzen Bild sowie einer Sensorzeile signalisieren. Bei jedem Taktsignal werden 16 Bit gleichzeitig ausgegeben.

Bei der Übertragung wird als erstes Datum eine Frame-ID übertragen. In dieser stehen die Quadraturnummer, also der Sensorabschnitt aus dem die Daten heraus gelesen werden, sowie eine Sub-Framenummer. Danach werden Zellenweise pro Zeile die digitalen Sensordaten ausgegeben. Der Aublauf der Kommunikation ist in der Abbildung 8 dargestellt.

Berechnung der Entfernungsdaten

Bei der Bewertung der Messdaten wurde eine Diskrepanz zur Realität festgestellt. Als Maßnahme bietet sich eine Umrechnungsfunktion. Zum Ermitteln der Umrechnungsfunktion wurden eine Versuchsreihe durchgeführt. Dazu wurde das Sensorsystem vor eine ebenen Fläche gestellt. Bei sechs verschiedenen Abständen wurden jeweils zehn Messwerte aufgenommen und ausgewertet. Da die Messwerte des Sensors ein gewisses Rauschen aufweisen wurde zunächst das Mittelwert jeder Messreihe ermittelt. Die Abbildung 9 zeigt die Darstellung der Mittelwert der Messwerte über die wahre Entfernung. Zu sehen ist, dass der Zusammenhang linear ist. Somit lässt sich eine lineare Umrechnungsfunktion, eine Gerade, ermitteln. Diese Funktion lautet:

Die Abbildung 10 zeigt die in Entfernung umgerechneten Messwerte nach der oben genannten Formel. Aus dem Diagramm ist ersichtlich, dass die umgerechnete Entfernung mit der gemessenen übereinstimmt. Allerdings ist zu beachten, dass die Referenzmessungen mit einem Messband durchgeführt wurde und nicht zuverlässig ist. Nichtsdestotrotz ist diese für eine erste Betrachtung ausreichend.

Fehlermöglichkeiten

Auswertung der Messergebnisse

Im folgenden wird das Mittelwert, die Standardabweichung, Messunsicherheit sowie der Vertrauensberich für das Sensorsystem ermittelt. Wie im Vorherigen beschrieben wurde bei sechs verschiedenen Abständen jeweils zehn Messwerte aufgenommen und diese analysiert. Für den Vertrauensbereich wurde ein Vertrauensniveau von 68,3% da es sich hier um eine vermessungstechnische Aufgabe handelt. In der folgenden Tabelle sind die Ergebnisse dargestellt:

Wahre Entfernung / m Gemessene Entfernung / m Mittelwert / m Standardabweichung / m Messunsicherheit / m Vertrauensbereich für Erwartungswert / m
1 2 3 4 5 6 7 8 9 10
0,50 0,4966 0,4966 0,4918 0,4918 0,4918 0,5014 0,4966 0,5014 0,4966 0,4918 0,4956 0,0038 0,0013 0,4956 ± 0,0013
0,75 0,7491 0,7515 0,7515 0,7491 0,7515 0,7515 0,7419 0,7467 0,7467 0,7491 0,7481 0,0038 0,0013 0,7481 ± 0,0013
100 1,0040 0,9992 1,0112 1,0061 1,0061 1,0088 1,0088 1,0064 1,0112 1,0136 1,0066 0,0049 0,0016 1,0066 ± 0,0016
1,25 1,2468 1,2565 1,2565 1,2541 1,2613 1,2613 1,2492 1,2613 1,2541 1,2468 1,2548 0,0057 0,0019 1,2548 ± 0,0019
1,5 1,5186 1,4945 1,5041 1,5017 1,4993 1,4921 1,4945 1,4993 1,5017 1,5017 1,5008 0,0074 0,0025 1,5008 ± 0,0025
1,57 1,7470 1,7542 1,7470 1,7470 1,7494 1,7422 1,7302 1,7662 1,7422 1,7422 1,7468 0,0093 0,0031 1,7468 ± 0,0031

Aus der Tabelle kann entnommen werden, dass bei steigendem Abstand die Messunsicherheit zunimmt.

Inbetriebnahme des Sensors

Der betrachtete Sensor wird nicht von MATLAB unterstützt. Eine Verbindung mit MATLAB ist daher mit Verwendung der verfügbaren Support-Packages nicht möglich. Lediglich eine C++-SDK existiert, die Voxel SDK (LINK), mit deren Hilfe der Sensor in einem C++-Programm abgefragt werden kann. Unter diese Voraussetzung stehen folgende Alternativen, den Sensor in MATLAB auszulesen:

  • C++-S-Function in MATLAB implementieren,
  • Sensordaten aus MATLAB über eine lokale Client/Server-Architektur (TCP oder UDP) vom C++-Programm zu MATLAB übertragen und
  • Übertragung der Sensordaten aus dem C++-Programm über den MATLAB-Engine.

Die erste Variante wurde aufgrund des asynchronen Aufbaus des Voxel-APIs nicht verfolgt, da dies nicht in Rahmen einer S-Function realisierbar ist. Die zweite Variante wurde getestet aber wegen nicht akzeptabel hohen Übertragungszeiten verworfen.

Für die Betrachtung in Rahmen dieser Arbeit wurde letzteres aufgegriffen. Für die Lösung wurde ein C++-Programm auf Basis eines Beispiels aus der Voxel-SDK implementiert und darin eine Verbindung zu MATLAB über den MATLAB-Engine aufgebaut. Zur Ausführung müssen folgende Schritte durchlaufen werden:

  • MATLAB starten und dort das Skript "matlab_engine.m" aus der hierzugehörigen SVN-Repository ausführen. Alternativ genügt folgenden Befehl im Command Window einzugeben: "matlab.engine.shareEngine".
  • C++-Programm starten und Modus und Anzahl der gewünschten Frames eingeben.

Die aufgenommenen Daten werden daraufhin bei jedem Frame nach MATLAB übertragen und erscheinen dort im Workspace. Es ist möglich, Skripte einzubinden, die bei jedem Frame ausgeführt werden, um z.B. Berechnungen durchzuführen oder Daten zu visualisieren. Dabei ist zu beachten, dass diese in ihre Gesamtheit nur einen Zyklusdurchlauf darstellen sollten, da sie wie erwähnt bei jedem Frame erneut aufgerufen werden. Als Beispiel dienen die Skripte "processDepthData.m" und "processPointCloud.m", die bei jedem Durchlauf die Daten in einem geeigneten Plot ausgeben.

Systemanforderungen

  • Voxel SDK
  • Point Cloud Library PCL
  • MATLAB Computer Vision System Toolbox
  • Von MATLAB Engine unterstütztes Compiler

Beschreibung der Software

YouTube-Video

Eine Live-Aufnahme des Sensorbetriebs ist auf YouTube unter folgendem Link ersichtlich:

https://www.youtube.com/watch?v=zcfETX4N8Xc

Herausgeber: Asaad Al-Suleihi.
Beschreibung der Veranstaltung: Semesterbegleitendes Projekt in der Lehrveranstaltung "Signalverarbeitende Systeme".
Ziel: Inbetriebnahme eines 3D ToF Sensor (Texas Instruments OPT8241) und auslesen der Daten in MATLAB in Echtzeit.
Ergebnis: Sensordaten über Voxel-SDK und MATLAB-Engine in Echtzeit aufgenommen und zu MATLAB übertragen. Bei jedem Frame wird ein Skript 
getriggert, der die Daten verarbeiten kann. Hier im Video werden die Frame-Daten geplottet.
Studiengang: Business and System Engineering 1. Fachsemester.
Hochschule: Hochschule Hamm-Lippstadt.
Betreuender Professor: Prof. Dr.-Ing. Ulrich Schneider.
Beschreibungstext: 3D Time-of-Flight Sensor Evaluation Module mit Matlab/Simulink.

Literatur

[1] Winner, Hermann (Hrsg.): Handbuch Fahrerassistenzsysteme. 3. Auflage. Wiesbaden: Springer Vieweg. 2015.

[2] Hüning, Felix: The fundamentals of electrical engineering : For mechatronics. Oldenbourg, Boston : De Gruyter. 2014.


→ zurück zum Hauptartikel: Signalverarbeitende Systeme