Asus Xtion Pro Tiefenkamera mit Matlab/Simulink: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
|||
(16 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
---- | -------- | ||
→ zurück zum Hauptartikel: [[SigSys SoSe2018]] | → zurück zum Hauptartikel: [[SigSys SoSe2018]] | ||
---- | ---- | ||
'''Autoren:''' [[Benutzer:Maximilian_Harrer| Maximilian Harrer]]<br/> | '''Autoren:''' [[Benutzer:Maximilian_Harrer| Maximilian Harrer]]<br/> | ||
'''Betreuer:''' [[Benutzer:Ulrich_Schneider| Prof. Schneider]] | '''Betreuer:''' [[Benutzer:Ulrich_Schneider| Prof. Dr. Ulrich Schneider]] | ||
[[Datei:AsusXtionProLive.JPG|thumb||550px|right|Abbildung 1: Asus Xtion Pro Live]] | [[Datei:AsusXtionProLive.JPG|thumb||550px|right|Abbildung 1: Asus Xtion Pro Live]] | ||
== Einleitung == | == Einleitung == | ||
Im Rahmen der semesterbegleitenden Prüfung der Veranstaltung „Signalverarbeitende Systeme“ im Sommersemester 2018 des Masterstudiengangs „Business and Systems Engineering“ sind die | Im Rahmen der semesterbegleitenden Prüfung der Veranstaltung „Signalverarbeitende Systeme“ im Sommersemester 2018 des Masterstudiengangs „Business and Systems Engineering“ sind die Studiereinden zur Bearbeitung eines Projekts angehalten. Dabei handelt es sich um die Auslesung eines Sensors mittels MATLAB/Simulink sowie der Beschreibung, Untersuchung und dem Verstehen der Signalverarbeitungskette. | ||
== | == Asus Xtion Pro Live == | ||
[[Datei:Xtion_Pro_Live_mit_OpenNI2_NIViewer_(3).JPG|thumb|| | [[Datei:Xtion_Pro_Live_mit_OpenNI2_NIViewer_(3).JPG|thumb||300px|middle|Abbildung 2: Xtion Pro Live mit OpenNI2 NIViewer]] | ||
Der taiwanische Hersteller von Computer-Hardware Asus hat 2012 die Xtion Pro Live offiziell vorgestellt. Dabei handelt es sich um ein Eingabegerät für bewegungsgesteuerte Spiele, Natural User Interfaces, wie dem Nutzer eine direkte Interaktion mit der Bedienoberfläche durch Wischen, Tippen, Berühren, Gesten oder Sprache ermöglichen, und Computer Vision Research, der computergestützte Lösung von Aufgabenstellungen, die sich an den Fähigkeiten des menschlichen visuellen Systems orientieren | Der taiwanische Hersteller von Computer-Hardware Asus hat 2012 die Xtion Pro Live offiziell vorgestellt. Dabei handelt es sich um ein Eingabegerät für bewegungsgesteuerte Spiele, Natural User Interfaces, wie dem Nutzer eine direkte Interaktion mit der Bedienoberfläche durch Wischen, Tippen, Berühren, Gesten oder Sprache ermöglichen, und Computer Vision Research, der computergestützte Lösung von Aufgabenstellungen, die sich an den Fähigkeiten des menschlichen visuellen Systems orientieren <ref>JOSEPH HOWSE, STEVEN PUTTEMANS, QUAN HUA, UTKARSH SINHA: "OpenCV 3 Blueprints", Birgmingham 2013</ref>. Die Kamera verwendet eine SD-Speicherkarte, auf der das Linux basierte Betriebssystem Dabian installiert ist. Dies ermöglicht eine einfache Konfiguration der Asus Xtion Pro Live mittels OpenNi Library und PrimeSense Sensor Treiber. | ||
[[Datei: Aufbau_Xtion_Pro_Live.JPG|thumb||280px|middle|Abbildung 3: Aufbau der Xtion Pro Live <ref> PrimeSense: "PrimeSense 3D Sensors", auf http://www.i3du.gr/pdf/primesense.pdf, letzte Informationsabfrage am 03.07.2018</ref>]] | |||
Tabelle 1: Technische Daten der Asus Xtion Pro Live <ref> https://www.asus.com/de/3D-Sensor/Xtion_PRO_LIVE/specifications/, letzte Informationsabfrage am 16.06.2018</ref> | Tabelle 1: Technische Daten der Asus Xtion Pro Live <ref> https://www.asus.com/de/3D-Sensor/Xtion_PRO_LIVE/specifications/, letzte Informationsabfrage am 16.06.2018</ref> | ||
{| class="wikitable" | {| class="wikitable" | ||
Zeile 53: | Zeile 51: | ||
|} | |} | ||
== | == Primärsensor & Signalvorverarbeitung == | ||
Für die Tiefenwahrnehmung der Xtion Pro Live spielen, neben dem PrimeSense Carmine 1.09 Sensor, zwei Elemente eine entscheidende Rolle. Dabei handelt es sich einerseits um einen Infrarot-Projektor und andererseits eine Infrarot-Kamera. | [[Datei: pattern.JPG|thumb||200px|left|Abbildung 4: Strukturiertes Infrarot-Lichtmuster eines Infrarotprojektors <ref name=PZr> PIETRO ZANUTTIGH: „Time-of-Flight and Structured Light Depth Cameras“, Springer 2016</ref>]] Für die Tiefenwahrnehmung der Xtion Pro Live spielen, neben dem PrimeSense Carmine 1.09 Sensor, zwei Elemente eine entscheidende Rolle. Dabei handelt es sich einerseits um einen Infrarot-Projektor und andererseits eine Infrarot-Kamera. | ||
Der Projektor projiziert ein Punktmuster auf in Reichweite befindliche Objekte, welche jedoch vom menschlichen Auge nicht wahrgenommen werden können. Die Infrarot-Kamera ist jedoch in der Lage diese aufzunehmen, da die aufgenommen Bilder der Kamera im Infrarot-Farbbereich liegen. Durch die unterschiedliche Entfernung der Objekte zum Projektor ergeben sich | Der Projektor projiziert ein Punktmuster auf in Reichweite befindliche Objekte, welche jedoch vom menschlichen Auge nicht wahrgenommen werden können. Die Infrarot-Kamera ist jedoch in der Lage diese aufzunehmen, da die aufgenommen Bilder der Kamera im Infrarot-Farbbereich liegen. Durch die unterschiedliche Entfernung der Objekte zum Projektor ergeben sich verschiedene Ausprägungen der Infrarot-Punkte. Die Größe der Punkte steigt umso weiter ein Objekt von der Kamera entfernt ist. Dies lässt sich mit dem Lichtkegel einer handelsüblichen Taschenlampe vergleichen. Umso näher man diese an eine Wand hält, umso kleiner und konzentrierter wird der Lichtkegel. [[Datei: KennlinieMH.JPG|thumb||190px|right|Abbildung 5: Kennlinie eines ADU <ref name= ELVr> ELV journal 2/07: „Einführung in die digitale Signalverarbeitung“</ref>]] | ||
Die Kamera sendet anschließend die Rohsignale an einen PrimeSense Tiefensensor, welcher aus der | Die Kamera sendet anschließend die analogen Rohsignale an einen PrimeSense Carmine 1.09 Tiefensensor, welcher aus der Größe der Punkte die Entfernung berechnet. Die Rechenleistung übernimmt dabei der PrimeSense SoC (System-on-a-Chip). Mithilfe eines Analog/Digital-Wandlers werden die analogen in digitale Daten umgewandelt. Durch die vorhandene Auflösung von 640x480 ergibt sich für jeden der 307200 Pixel ein Wert in Millimeter, woraus eine Tiefenkarte erstellt wird <ref>MATHEW FISHER: „Kinect“ auf http://graphics.stanford.edu/~mdfisher/Kinect.html, letzte Informationsabfrage am 24.06.2018</ref>. Die Asus Xtion Pro Live überträgt somit vorverarbeitete Daten an das angeschlossene System. Zur Umwandlung der analogen Eingangswerte der Tiefenkamera in digitale Ausgangswerte wird eine Kennlinie eingesetzt. Abbildung 5 zeigt exemplarisch, wie eine solche Kennlinie aussehen könnte. Die in der Asus Xtion Pro Live eingesetzte Kennlinie konnte indes nicht ermittelt werden. Signale in einem bestimmten mV-Bereich werden durch den Wandler in digitale Zahlenwerte umgewandelt. Für die Xtion Pro Live würde dies bedeuten, dass ein bestimmter Bereich der Ausprägung der projizierten Infrarotpunkte einem digitalen Ausgangswert entsprechen. Die genaue Kalibrierung der Kennlinie konnte jedoch nicht ermittelt werden <ref name=ELVr/>. | ||
== | == Analog-Digital-Umsetzung == | ||
[[Datei: Successive_Approximation_ADC.JPG|thumb||170px|middle|Abbildung 6: Prinzip der sukzessiven Approximation <ref>http://www.vias.org/mikroelektronik/img/adcsukap.png</ref>]] | |||
Welcher Analog-Digital Umsetzer (ADU) in der Asus Xtion Pro Live zum Einsatz kommt lässt sich nicht ermitteln. Für die Wahl eines sinnvollen Analog-Digital-Wandlers müssen die Abtastrate, Auflösung, der Stromverbrauch und die Größe des Wandlers berücksichtigt werden. Da die Sensoren bereits viel Platz einnehmen, würde ein ADU mit großem Flächenbedarf den Chip unnötig Groß machen. Für den Stromverbrauch muss bedacht werden, dass durch eine hohe Anzahl an Komparatoren die Verlustleistung exponentiell ansteigt und dies zur Folge hätte, dass zusätzliche Supplypads eingefügt werden müssten um den Stromverbrauch zu decken, was den Chip möglicherweise ebenfalls vergrößern würde <ref> CONOR POWER: „Spezifikationen für Wandler – Auswahlkriterien für A/D-Wandler“ auf https://www.elektronikpraxis.vogel.de/auswahlkriterien-fuer-a-d-wandler-a-151736/, letzte Informationsabfrage am 25.06.2018</ref>. | |||
Eine sinnvolle Wahl für die Xtion Pro Live wäre ein Wandler auf Basis der suxessiven Approximation, da diese sich leicht in ein CMOS integrieren lässt, eine Auflösung von 12-16 Bit und eine Abtastrate von 20 kHz bis 5 mHz erreicht und mit einem Stromverbrauch von lediglich 100-400mW gerechnet werden kann. Alternativ wäre auch die Nutzung einer Delta-Sigma-Modulation denkbar <ref>ROLAND KÜNG: „Elektrotechnik 2 – A/D- und D/A- Wandler“ auf https://home.zhaw.ch/kunr/Elektronik2/Skript/AD_Wandler_v3.pdf, letzte Informationsabfrage am 25.06.2018</ref> <ref name=USr>PROF. DR. ULRICH SCHNEIDER: „Skript Signalverarbeitende Systeme 2018“</ref>. | |||
== | == Datenübertragung == | ||
[[Datei: | [[Datei: Symmetrische_Datenuebertragung.JPG|thumb||170px|middle|Abbildung 7: Prinzip der symmetrischen Datenübertragung]] | ||
Der Steckerplatz für die Tiefenkamera verfügt über 32 Leitungen. Bei der Datenübertragung in Kameras wird meist auf die symmetrische Datenübertragung zurückgegriffen, mit welcher für jeweils ein Bit zwei Leitungen genutzt werden (Plus und Minus). Diese Art der Datenübertragung wird dazu verwendet um Fehler durch äußere Faktoren erkennen zu können und dadurch die Richtigkeit der zu übertragenden Daten zu gewährleisten. Dies wird ermöglicht, da die Beeinflussung des Nutzsignals auf dem Übertragungsweg durch Einkopplungen auf beiden Leitern fast gleichartig ist, sodass beim Bilden der Differenz beider Leiterpotenziale die Störung nahezu aufgehoben ist (Abbildung 7) <ref> KUNBUS: „Praxiswissen“ auf https://www.kunbus.de/symmetrische-signaluebertragung.html, letzte Informationsabfrage am 01.07.2018</ref>. Geht man für die Xtion Pro Live davon aus, dass dadurch jeweils 2 Leitungen für Spannung/Masse, I²C und Clock genutzt werden, bleiben zur Datenübertragung 26 Leitungen übrig. Daraus lässt sich ableiten, dass es sich aller Voraussicht nach um eine serielle Übertragung der Daten handelt, da eine parallele Datenübertragung mit mehr als 4 Leitungen unüblich ist. | |||
== | == Implementierung der Messdaten in MATLAB/Simulink == | ||
Zur Implementierung der vom Tiefensensor ausgegebenen Tiefenwerte in Matlab wurde die Toolbox „Kinect Matlab“ von Dirk-Jan Kroon in der Version 1.9 genutzt und zur Erlangung der nötigen Daten bearbeitet. Zur Nutzung der Toolbox musste zusätzliche Software auf dem Rechner installiert werden. Dabei handelt es sich um das OpenNI Framework (Version 1.5.2.23), die Sensor DDK (Version 5.1.0.41) und PrimeSense Nite (Version 3.1.3.1). Die Toolbox unterstützt jedoch nicht jede Matlab-Version, weshalb zur Ansteuerung des Sensors auf die Version R2010a zurückgegriffen werden musste <ref>https://de.mathworks.com/matlabcentral/fileexchange/30242-kinect-matlab</ref>. Um die nötigen Mex-Files kompilieren zu können, musste zudem Visual Studio Express 2010 C++ installiert und mit VS2010MEXSupport<ref> https://de.mathworks.com/matlabcentral/answers/uploaded_files/1211/VS2010MEXSupport.zip </ref> ergänzt werden, da die Toolbox nur diese Version unterstützt. Durch das Starten der Datei „compile_cpp_files.m“ erstellt die Toolbox die zum Ansteuern des Sensors nötigen Rahmenbedingungen. Der folgend gezeigte Code erzeugt eine Matlab-Tabelle mit den Tiefenwerten in mm für jeden Pixel. Erwähnt werden muss jedoch, dass bei jeder Messung die ersten 7x480 Pixel als „0“ deklariert werden, woraus sich eine Auflösung von lediglich 633x480 Pixeln ergibt. | |||
<div style="width:700px; height:200px; overflow:auto; border: 2px solid #088"> | |||
Zur Implementierung der vom Tiefensensor ausgegebenen Tiefenwerte in Matlab wurde die Toolbox „Kinect Matlab“ von Dirk-Jan Kroon in der Version 1.9 genutzt und zur Erlangung der nötigen Daten bearbeitet. Zur Nutzung der Toolbox musste zusätzliche Software auf dem Rechner installiert werden. Dabei handelt es sich um das OpenNI Framework (Version 1.5.2.23), die Sensor DDK (Version 5.1.0.41) und PrimeSense Nite (Version 3.1.3.1). Die Toolbox unterstützt jedoch nicht jede Matlab-Version, weshalb zur Ansteuerung des Sensors auf die Version R2010a zurückgegriffen werden musste<ref>https://de.mathworks.com/matlabcentral/fileexchange/30242-kinect-matlab</ref>. Um die nötigen Mex-Files kompilieren zu können, musste zudem Visual Studio Express 2010 C++ installiert und mit VS2010MEXSupport | |||
<div style="width: | |||
<source lang=matlab> | <source lang=matlab> | ||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |||
% Implementierung der Sensordaten des % | |||
% Tiefensensors der Asus Xtion Pro Live % | |||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |||
% Mex-Dateien hinzufügen | |||
addpath('Mex') | |||
% SamplesConfig als Variable anlegen | |||
SAMPLE_XML_PATH='SamplesConfig.xml'; | |||
% Daten der Xtion nutzen | |||
KinectHandles=mxNiCreateContext(SAMPLE_XML_PATH); | |||
% Erstellt ein Bild aus Tiefeninformationen | |||
D=mxNiDepth(KinectHandles); D=permute(D,[2 1]); %Generiert Matrix aus Sensordaten | |||
d=D % Erstellt Kopie von Matrix 'D' | |||
d=d(d~=0) % Entfernt Fehlerhafte Messungen (Wert=0) aus Matrix | |||
s=sum(d) %Summe aller Elemente in d | |||
a=numel(d) %Summe aller ELemente in d | |||
p=s./a %Mittelwert der Elemente in d | |||
% Tiefenbild und RGB-Bild des Versuchsaufbaus | |||
figure; | |||
I=mxNiPhoto(KinectHandles); I=permute(I,[3 2 1]); %Generiert Array aus Kameradaten | |||
subplot(1,2,1),h1=imshow(I); | |||
subplot(1,2,2),h2=imshow(D); colormap('Jet'); %Anzeige des Tiefenbildes | |||
</source> | </source> | ||
</div> | </div> | ||
== Digitale Signalverarbeitung == | == Digitale Signalverarbeitung == | ||
Die digitale Signalverarbeitung wird intern durch die Rechenleistung des SoC durchgeführt, über einen USB-Port an den Rechner weitergeleitet und dort mit Matlab verarbeitet. | |||
=== Filter === | === Filter === | ||
Welche Filter zur Reduktion von Fehler bei der Tiefenmessung in der Asus Xtion Pro Live eingesetzt werden kann nicht ermittelt werden. Wahrscheinlich ist jedoch, dass Filter verwendet werden, welche die aus unterschiedlichsten Ursachen auftretenden Fehler in der Tiefenkarte verringern sollen (siehe Tabelle zu den möglichen Fehlern in der Signalverarbeitung). Diese Fehlerquellen können Löcher oder Rauschen in der Tiefenkarte hervorrufen. Kanten werden dabei aus dem Farbbild bestimmt, während Löcher den fehlerhaften Werten der Tiefenmessung entsprechen. Daraus resultieren vier Fehlergruppen (non-hole/non-edge, non-hole/edge, hole/non-edge, und hole/edge). Zur Behebung können Joint Trilateral Filter (non-hole/non-edge), Directional Joint Bilateral Filter (non-hole/edge und hole/edge), Partial Directional Joint Bilateral Filter (hole/non-edge) verwendet werden <ref> ANH VU LE, SEUNG-WONG JUNG, CHEE SUN WON: "Directional Joint Bilateral Filter for Depth Images", 2014</ref>. | |||
=== Tiefenauflösung und Empfindlichkeit === | === Tiefenauflösung und Empfindlichkeit === | ||
[[Datei: Tiefenaufloesung.JPG|thumb||170px|middle|Abbildung 8: Tiefenauflösung der Asus Xtion Pro Live in Abhängigkeit der Tiefe (f = 640 Pixel, b = 59 mm und d =1 Pixel)]] | |||
Da strukturierte Lichttiefenkameras auf Triangulation basieren, haben sie das gleiche Tiefenauflösungsmodell wie das von Standard-Stereo-Systemen. Ihre Tiefenauflösung kann daher als <math>\Delta z = \frac{z^2}{bf} \cdot \Delta d</math> berechnet werden. Dabei ist z die Tiefe (in Millimeter), b die horizontale Grundlinie zwischen Beamer und Kamera (in Millimeter), f die Brennweite der Kamera (in Pixel) und die Disparität (in Pixel). Die Disparitätsauflösung (d) ist im Falle der Xtion Pro Live 1, da eine Pixelauflösung vorliegt <ref> KURT KONOLIGE, PATRICK MIHELICH: "Technical description of Kinect calibartion" auf http://wiki.ros.org/kinect_calibration/technical, letzte Informationsabfrage am 01.07.2018</ref> <ref> DANIEL BACHFELD, DR. VOLKER ZOTA, PETER KÖNIG: " Kopieren in 3D - Räumlich scannen mit Digitalkamera, Kinect oder Laser-Scanner" auf https://www.heise.de/ct/ausgabe/2012-11-Raeumlich-scannen-mit-Digitalkamera-Kinect-oder-Laser-Scanner-2346188.html, letzte Informationsabfrage am 03.07.2018</ref> <ref name=PZr/>. Die Empfindlichkeit der Asus Xtion Pro Live liegt bei einem Millimeter, da kleinere Werte nicht ermittelt werden. | |||
=== Messunsicherheit und Vertrauensintervall === | === Messunsicherheit und Vertrauensintervall === | ||
Zur Berechnung der Messunsicherheit und des Vertrauensintervalls wurden 3 unterschiedliche Versuchsaufbauten in den Räumlichkeiten der HSHL vorgenommen (Abbildungen 9, 10 und 11). | |||
==== Versuchsaufbau "Weiße Wand" ==== | |||
[[Datei: Versuch_Weiße_Wand_Wiki.JPG|thumb||290px|right|Abbildung 9: Versuchsaufbau Weiße Wand]] | |||
Durch die Implementierung in Matlab konnten so nach Abzug der bereits erwähnten Fehlerwerte (Wert=0) Werte für 303840 Pixel (Array D) ermittelt werden. Zur Weiterverarbeitung wurde daraus ein Mittelwert der Messung errechnet (Wert d). Die „d“-Werte der 15 Messungen werden folgend in Array dg dargestellt. Durch die folgenden, in Matlab durchgeführten, Berechnungen konnte für die absolute Messunsicherheit ein Wert von u = 0.18454mm, für die relative Messunsicherheit ein Wert von u_rel = 0.013268% und ein Vertrauensintervall von [1390.4652mm ; 1391.2568mm] ermittelt werden. Für das Vertrauensintervall wurde eine statistische Sicherheit von 95% für 15 Messwerte bei t-Verteilung angenommen <ref name=USr/> | |||
<div style="width:600px; height:200px; overflow:auto; border: 2px solid #088"> | |||
<source lang=matlab> | |||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |||
% Berechnung der Messunsicherheit und des Vertrauensintervalls des % | |||
% Tiefensensors der Asus Xtion Pro Live % | |||
% Versuch: Weiße Wand % | |||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |||
% Mittelwerte der Messreihen | |||
dg = [1391.079874 1391.253893 1390.972558 1391.335167 1391.181862 1390.936519 1390.755022 1390.857484 1390.386526 1389.728838 1389.727643 1390.253186 1390.850885 1390.882695 1392.713231]; | |||
% Anzahl Messungen | |||
m = length(dg); | |||
% Gesamtmittelwert | |||
xgg = mean(dg); % Mittelwert der Messmittelwerte | |||
% Empirische Standardabweichung | |||
s = std(dg); | |||
% Messunsicherheit | |||
u = s/sqrt(m); % | |||
% Relative Messunsicherheit | |||
u_rel = (u/abs(xgg))*100; % in % | |||
% Vertrauensbereich (t-Student Verteilung) | |||
% Vertrauensniveau: P=95% | |||
vn = 0.95;% Vertrauensniveau | |||
fg = m-1; % Freiheitsgrade | |||
% Obere Grenze | |||
vo = xgg+(tinv((1+vn)/2,fg)*u); | |||
% Untere Grenze | |||
vu = xgg-(tinv((1+vn)/2,fg)*u); | |||
</source> | |||
</div> | |||
==== Versuchsaufbau "Kaffeebecher & Hülle" ==== | |||
[[Datei: Versuch_KaffeebecherHuelle_Wiki.JPG|thumb||180px|right|Abbildung 10: Versuchsaufbau Kaffeebecher & Hülle]] | |||
[[Datei: Versuch_Rucksack_(generiert).JPG|thumb||290px|right|Abbildung 11: Generierte Abbildung der RGB-Kamera der Xtion Pro Live des Versuchsaufbaus Rucksack]] | |||
In den Versuchsaufbauten "Kaffebecher & Hülle" und "Rucksack" mussste die vorgehensweise im Vergleich zum Versuchsaufbau "Weiße Wand" etwas abgewandelt werden, da fehlerhafte Werte aufgrund der erhöten Komplexität auch innerhalb der verbliebenen 633x480 Pixel auftraten. Daher wurde die je Messreihe in Matlab erstellte Tiefenkarte manuell in Excel überführt und dort ein erster Mittelwert der 633x480 güligen Pixel errechnet. Der Wert je Messreihe wurde anschließend wieder in Matlab in den Array dg überführt. | |||
{| class="wikitable" | |||
|- | |||
| Versuchsaufbau || Kaffeebecher & Hülle | |||
|- | |||
| Messreihen || 5 | |||
|- | |||
| Absolute Messunsicherheit || 0.1933mm | |||
|- | |||
| Relative Messunsicherheit || 0.0203% | |||
|- | |||
| Vertrauensintervall || [949.8086mm ; 950.8818mm] | |||
|} | |||
==== Versuchsaufbau "Rucksack" ==== | |||
{| class="wikitable" | |||
|- | |||
| Versuchsaufbau || Rucksack | |||
|- | |||
| Messreihen || 10 | |||
|- | |||
| Absolute Messunsicherheit || 2.1360mm | |||
|- | |||
| Relative Messunsicherheit || 0.2915% | |||
|- | |||
| Vertrauensintervall || [727.9873mm ; 737.6512mm] | |||
|} | |||
Aus den Versuchen ist zu entnehmen, dass die Messunsicherheit bei Objekten im Vergleich zu konstanten Oberflächen zunimmt. Zudem sinkt die Messsicherheit mit der Größe der Objekte im Sensorbereich. | |||
== Mögliche Fehler in den Verarbeitungsschritten == | == Mögliche Fehler in den Verarbeitungsschritten == | ||
{| class="wikitable" | |||
|- | |||
| Messung || Analog-Digital-Umsetzung <ref name=USr/> || Matlab-Implementierung | |||
|- | |||
| Oberflächeneigenschaften || Amplitudenfehler || Rundungsdifferenzen | |||
|- | |||
| Schnelle Bewegungen || Linearitätsfehler || Codierungsfehler | |||
|- | |||
| Kantenrauschen || Phasenfehler || | |||
|- | |||
| Fehlerhafter Versuchsaufbau || Quantisierungsfehler || | |||
|- | |||
| Lichteinfluss || Quantisierungsrauschen || | |||
|- | |||
| Sensorentfernung || || | |||
|} | |||
== Youtube Video == | |||
Unter folgendem Link ist das Video zum Projekt zu finden: | |||
https://youtu.be/h_Lw6dRoJns | |||
== Literaturverzeichnis == | == Literaturverzeichnis == |
Aktuelle Version vom 3. Juli 2018, 21:17 Uhr
→ zurück zum Hauptartikel: SigSys SoSe2018
Autoren: Maximilian Harrer
Betreuer: Prof. Dr. Ulrich Schneider
Einleitung
Im Rahmen der semesterbegleitenden Prüfung der Veranstaltung „Signalverarbeitende Systeme“ im Sommersemester 2018 des Masterstudiengangs „Business and Systems Engineering“ sind die Studiereinden zur Bearbeitung eines Projekts angehalten. Dabei handelt es sich um die Auslesung eines Sensors mittels MATLAB/Simulink sowie der Beschreibung, Untersuchung und dem Verstehen der Signalverarbeitungskette.
Asus Xtion Pro Live
Der taiwanische Hersteller von Computer-Hardware Asus hat 2012 die Xtion Pro Live offiziell vorgestellt. Dabei handelt es sich um ein Eingabegerät für bewegungsgesteuerte Spiele, Natural User Interfaces, wie dem Nutzer eine direkte Interaktion mit der Bedienoberfläche durch Wischen, Tippen, Berühren, Gesten oder Sprache ermöglichen, und Computer Vision Research, der computergestützte Lösung von Aufgabenstellungen, die sich an den Fähigkeiten des menschlichen visuellen Systems orientieren [1]. Die Kamera verwendet eine SD-Speicherkarte, auf der das Linux basierte Betriebssystem Dabian installiert ist. Dies ermöglicht eine einfache Konfiguration der Asus Xtion Pro Live mittels OpenNi Library und PrimeSense Sensor Treiber.
Tabelle 1: Technische Daten der Asus Xtion Pro Live [3]
Sensoren | RGB-Sensor, Tiefensensor, Mikrofon (2x) |
Auflösung Tiefenkamera | VGA (640x480), QVGA (320x240) |
Bildrate Tiefenkamera | VGA 30 fps, QVGA 60 fps |
Auflösung | SXGA (1280x1024) |
Sichtfeld horizontal | 58° |
Sichtfeld vertikal | 45° |
Sichtfeld diagonal | 70° |
Distanz des Tiefensensors | 0.8m bis 3.5m |
Stromverbrauch | 2.5W |
Schnittstelle | USB2.0/3.0 |
Plattform | Intel X86, AMD |
Betriebssysteme | Windows, Linux, Android |
Software | OpenNI |
Programmiersprache | C++/C (Windows), C++(Linux), JAVA |
Nutzungsfeld | Innen |
Abmessungen | 18x3.5x5cm |
Primärsensor & Signalvorverarbeitung
Für die Tiefenwahrnehmung der Xtion Pro Live spielen, neben dem PrimeSense Carmine 1.09 Sensor, zwei Elemente eine entscheidende Rolle. Dabei handelt es sich einerseits um einen Infrarot-Projektor und andererseits eine Infrarot-Kamera. Der Projektor projiziert ein Punktmuster auf in Reichweite befindliche Objekte, welche jedoch vom menschlichen Auge nicht wahrgenommen werden können. Die Infrarot-Kamera ist jedoch in der Lage diese aufzunehmen, da die aufgenommen Bilder der Kamera im Infrarot-Farbbereich liegen. Durch die unterschiedliche Entfernung der Objekte zum Projektor ergeben sich verschiedene Ausprägungen der Infrarot-Punkte. Die Größe der Punkte steigt umso weiter ein Objekt von der Kamera entfernt ist. Dies lässt sich mit dem Lichtkegel einer handelsüblichen Taschenlampe vergleichen. Umso näher man diese an eine Wand hält, umso kleiner und konzentrierter wird der Lichtkegel.
Die Kamera sendet anschließend die analogen Rohsignale an einen PrimeSense Carmine 1.09 Tiefensensor, welcher aus der Größe der Punkte die Entfernung berechnet. Die Rechenleistung übernimmt dabei der PrimeSense SoC (System-on-a-Chip). Mithilfe eines Analog/Digital-Wandlers werden die analogen in digitale Daten umgewandelt. Durch die vorhandene Auflösung von 640x480 ergibt sich für jeden der 307200 Pixel ein Wert in Millimeter, woraus eine Tiefenkarte erstellt wird [6]. Die Asus Xtion Pro Live überträgt somit vorverarbeitete Daten an das angeschlossene System. Zur Umwandlung der analogen Eingangswerte der Tiefenkamera in digitale Ausgangswerte wird eine Kennlinie eingesetzt. Abbildung 5 zeigt exemplarisch, wie eine solche Kennlinie aussehen könnte. Die in der Asus Xtion Pro Live eingesetzte Kennlinie konnte indes nicht ermittelt werden. Signale in einem bestimmten mV-Bereich werden durch den Wandler in digitale Zahlenwerte umgewandelt. Für die Xtion Pro Live würde dies bedeuten, dass ein bestimmter Bereich der Ausprägung der projizierten Infrarotpunkte einem digitalen Ausgangswert entsprechen. Die genaue Kalibrierung der Kennlinie konnte jedoch nicht ermittelt werden [5].
Analog-Digital-Umsetzung
Welcher Analog-Digital Umsetzer (ADU) in der Asus Xtion Pro Live zum Einsatz kommt lässt sich nicht ermitteln. Für die Wahl eines sinnvollen Analog-Digital-Wandlers müssen die Abtastrate, Auflösung, der Stromverbrauch und die Größe des Wandlers berücksichtigt werden. Da die Sensoren bereits viel Platz einnehmen, würde ein ADU mit großem Flächenbedarf den Chip unnötig Groß machen. Für den Stromverbrauch muss bedacht werden, dass durch eine hohe Anzahl an Komparatoren die Verlustleistung exponentiell ansteigt und dies zur Folge hätte, dass zusätzliche Supplypads eingefügt werden müssten um den Stromverbrauch zu decken, was den Chip möglicherweise ebenfalls vergrößern würde [8]. Eine sinnvolle Wahl für die Xtion Pro Live wäre ein Wandler auf Basis der suxessiven Approximation, da diese sich leicht in ein CMOS integrieren lässt, eine Auflösung von 12-16 Bit und eine Abtastrate von 20 kHz bis 5 mHz erreicht und mit einem Stromverbrauch von lediglich 100-400mW gerechnet werden kann. Alternativ wäre auch die Nutzung einer Delta-Sigma-Modulation denkbar [9] [10].
Datenübertragung
Der Steckerplatz für die Tiefenkamera verfügt über 32 Leitungen. Bei der Datenübertragung in Kameras wird meist auf die symmetrische Datenübertragung zurückgegriffen, mit welcher für jeweils ein Bit zwei Leitungen genutzt werden (Plus und Minus). Diese Art der Datenübertragung wird dazu verwendet um Fehler durch äußere Faktoren erkennen zu können und dadurch die Richtigkeit der zu übertragenden Daten zu gewährleisten. Dies wird ermöglicht, da die Beeinflussung des Nutzsignals auf dem Übertragungsweg durch Einkopplungen auf beiden Leitern fast gleichartig ist, sodass beim Bilden der Differenz beider Leiterpotenziale die Störung nahezu aufgehoben ist (Abbildung 7) [11]. Geht man für die Xtion Pro Live davon aus, dass dadurch jeweils 2 Leitungen für Spannung/Masse, I²C und Clock genutzt werden, bleiben zur Datenübertragung 26 Leitungen übrig. Daraus lässt sich ableiten, dass es sich aller Voraussicht nach um eine serielle Übertragung der Daten handelt, da eine parallele Datenübertragung mit mehr als 4 Leitungen unüblich ist.
Implementierung der Messdaten in MATLAB/Simulink
Zur Implementierung der vom Tiefensensor ausgegebenen Tiefenwerte in Matlab wurde die Toolbox „Kinect Matlab“ von Dirk-Jan Kroon in der Version 1.9 genutzt und zur Erlangung der nötigen Daten bearbeitet. Zur Nutzung der Toolbox musste zusätzliche Software auf dem Rechner installiert werden. Dabei handelt es sich um das OpenNI Framework (Version 1.5.2.23), die Sensor DDK (Version 5.1.0.41) und PrimeSense Nite (Version 3.1.3.1). Die Toolbox unterstützt jedoch nicht jede Matlab-Version, weshalb zur Ansteuerung des Sensors auf die Version R2010a zurückgegriffen werden musste [12]. Um die nötigen Mex-Files kompilieren zu können, musste zudem Visual Studio Express 2010 C++ installiert und mit VS2010MEXSupport[13] ergänzt werden, da die Toolbox nur diese Version unterstützt. Durch das Starten der Datei „compile_cpp_files.m“ erstellt die Toolbox die zum Ansteuern des Sensors nötigen Rahmenbedingungen. Der folgend gezeigte Code erzeugt eine Matlab-Tabelle mit den Tiefenwerten in mm für jeden Pixel. Erwähnt werden muss jedoch, dass bei jeder Messung die ersten 7x480 Pixel als „0“ deklariert werden, woraus sich eine Auflösung von lediglich 633x480 Pixeln ergibt.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Implementierung der Sensordaten des %
% Tiefensensors der Asus Xtion Pro Live %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Mex-Dateien hinzufügen
addpath('Mex')
% SamplesConfig als Variable anlegen
SAMPLE_XML_PATH='SamplesConfig.xml';
% Daten der Xtion nutzen
KinectHandles=mxNiCreateContext(SAMPLE_XML_PATH);
% Erstellt ein Bild aus Tiefeninformationen
D=mxNiDepth(KinectHandles); D=permute(D,[2 1]); %Generiert Matrix aus Sensordaten
d=D % Erstellt Kopie von Matrix 'D'
d=d(d~=0) % Entfernt Fehlerhafte Messungen (Wert=0) aus Matrix
s=sum(d) %Summe aller Elemente in d
a=numel(d) %Summe aller ELemente in d
p=s./a %Mittelwert der Elemente in d
% Tiefenbild und RGB-Bild des Versuchsaufbaus
figure;
I=mxNiPhoto(KinectHandles); I=permute(I,[3 2 1]); %Generiert Array aus Kameradaten
subplot(1,2,1),h1=imshow(I);
subplot(1,2,2),h2=imshow(D); colormap('Jet'); %Anzeige des Tiefenbildes
Digitale Signalverarbeitung
Die digitale Signalverarbeitung wird intern durch die Rechenleistung des SoC durchgeführt, über einen USB-Port an den Rechner weitergeleitet und dort mit Matlab verarbeitet.
Filter
Welche Filter zur Reduktion von Fehler bei der Tiefenmessung in der Asus Xtion Pro Live eingesetzt werden kann nicht ermittelt werden. Wahrscheinlich ist jedoch, dass Filter verwendet werden, welche die aus unterschiedlichsten Ursachen auftretenden Fehler in der Tiefenkarte verringern sollen (siehe Tabelle zu den möglichen Fehlern in der Signalverarbeitung). Diese Fehlerquellen können Löcher oder Rauschen in der Tiefenkarte hervorrufen. Kanten werden dabei aus dem Farbbild bestimmt, während Löcher den fehlerhaften Werten der Tiefenmessung entsprechen. Daraus resultieren vier Fehlergruppen (non-hole/non-edge, non-hole/edge, hole/non-edge, und hole/edge). Zur Behebung können Joint Trilateral Filter (non-hole/non-edge), Directional Joint Bilateral Filter (non-hole/edge und hole/edge), Partial Directional Joint Bilateral Filter (hole/non-edge) verwendet werden [14].
Tiefenauflösung und Empfindlichkeit
Da strukturierte Lichttiefenkameras auf Triangulation basieren, haben sie das gleiche Tiefenauflösungsmodell wie das von Standard-Stereo-Systemen. Ihre Tiefenauflösung kann daher als berechnet werden. Dabei ist z die Tiefe (in Millimeter), b die horizontale Grundlinie zwischen Beamer und Kamera (in Millimeter), f die Brennweite der Kamera (in Pixel) und die Disparität (in Pixel). Die Disparitätsauflösung (d) ist im Falle der Xtion Pro Live 1, da eine Pixelauflösung vorliegt [15] [16] [4]. Die Empfindlichkeit der Asus Xtion Pro Live liegt bei einem Millimeter, da kleinere Werte nicht ermittelt werden.
Messunsicherheit und Vertrauensintervall
Zur Berechnung der Messunsicherheit und des Vertrauensintervalls wurden 3 unterschiedliche Versuchsaufbauten in den Räumlichkeiten der HSHL vorgenommen (Abbildungen 9, 10 und 11).
Versuchsaufbau "Weiße Wand"
Durch die Implementierung in Matlab konnten so nach Abzug der bereits erwähnten Fehlerwerte (Wert=0) Werte für 303840 Pixel (Array D) ermittelt werden. Zur Weiterverarbeitung wurde daraus ein Mittelwert der Messung errechnet (Wert d). Die „d“-Werte der 15 Messungen werden folgend in Array dg dargestellt. Durch die folgenden, in Matlab durchgeführten, Berechnungen konnte für die absolute Messunsicherheit ein Wert von u = 0.18454mm, für die relative Messunsicherheit ein Wert von u_rel = 0.013268% und ein Vertrauensintervall von [1390.4652mm ; 1391.2568mm] ermittelt werden. Für das Vertrauensintervall wurde eine statistische Sicherheit von 95% für 15 Messwerte bei t-Verteilung angenommen [10]
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Berechnung der Messunsicherheit und des Vertrauensintervalls des %
% Tiefensensors der Asus Xtion Pro Live %
% Versuch: Weiße Wand %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Mittelwerte der Messreihen
dg = [1391.079874 1391.253893 1390.972558 1391.335167 1391.181862 1390.936519 1390.755022 1390.857484 1390.386526 1389.728838 1389.727643 1390.253186 1390.850885 1390.882695 1392.713231];
% Anzahl Messungen
m = length(dg);
% Gesamtmittelwert
xgg = mean(dg); % Mittelwert der Messmittelwerte
% Empirische Standardabweichung
s = std(dg);
% Messunsicherheit
u = s/sqrt(m); %
% Relative Messunsicherheit
u_rel = (u/abs(xgg))*100; % in %
% Vertrauensbereich (t-Student Verteilung)
% Vertrauensniveau: P=95%
vn = 0.95;% Vertrauensniveau
fg = m-1; % Freiheitsgrade
% Obere Grenze
vo = xgg+(tinv((1+vn)/2,fg)*u);
% Untere Grenze
vu = xgg-(tinv((1+vn)/2,fg)*u);
Versuchsaufbau "Kaffeebecher & Hülle"
In den Versuchsaufbauten "Kaffebecher & Hülle" und "Rucksack" mussste die vorgehensweise im Vergleich zum Versuchsaufbau "Weiße Wand" etwas abgewandelt werden, da fehlerhafte Werte aufgrund der erhöten Komplexität auch innerhalb der verbliebenen 633x480 Pixel auftraten. Daher wurde die je Messreihe in Matlab erstellte Tiefenkarte manuell in Excel überführt und dort ein erster Mittelwert der 633x480 güligen Pixel errechnet. Der Wert je Messreihe wurde anschließend wieder in Matlab in den Array dg überführt.
Versuchsaufbau | Kaffeebecher & Hülle |
Messreihen | 5 |
Absolute Messunsicherheit | 0.1933mm |
Relative Messunsicherheit | 0.0203% |
Vertrauensintervall | [949.8086mm ; 950.8818mm] |
Versuchsaufbau "Rucksack"
Versuchsaufbau | Rucksack |
Messreihen | 10 |
Absolute Messunsicherheit | 2.1360mm |
Relative Messunsicherheit | 0.2915% |
Vertrauensintervall | [727.9873mm ; 737.6512mm] |
Aus den Versuchen ist zu entnehmen, dass die Messunsicherheit bei Objekten im Vergleich zu konstanten Oberflächen zunimmt. Zudem sinkt die Messsicherheit mit der Größe der Objekte im Sensorbereich.
Mögliche Fehler in den Verarbeitungsschritten
Messung | Analog-Digital-Umsetzung [10] | Matlab-Implementierung |
Oberflächeneigenschaften | Amplitudenfehler | Rundungsdifferenzen |
Schnelle Bewegungen | Linearitätsfehler | Codierungsfehler |
Kantenrauschen | Phasenfehler | |
Fehlerhafter Versuchsaufbau | Quantisierungsfehler | |
Lichteinfluss | Quantisierungsrauschen | |
Sensorentfernung |
Youtube Video
Unter folgendem Link ist das Video zum Projekt zu finden: https://youtu.be/h_Lw6dRoJns
Literaturverzeichnis
- ↑ JOSEPH HOWSE, STEVEN PUTTEMANS, QUAN HUA, UTKARSH SINHA: "OpenCV 3 Blueprints", Birgmingham 2013
- ↑ PrimeSense: "PrimeSense 3D Sensors", auf http://www.i3du.gr/pdf/primesense.pdf, letzte Informationsabfrage am 03.07.2018
- ↑ https://www.asus.com/de/3D-Sensor/Xtion_PRO_LIVE/specifications/, letzte Informationsabfrage am 16.06.2018
- ↑ 4,0 4,1 PIETRO ZANUTTIGH: „Time-of-Flight and Structured Light Depth Cameras“, Springer 2016
- ↑ 5,0 5,1 ELV journal 2/07: „Einführung in die digitale Signalverarbeitung“
- ↑ MATHEW FISHER: „Kinect“ auf http://graphics.stanford.edu/~mdfisher/Kinect.html, letzte Informationsabfrage am 24.06.2018
- ↑ http://www.vias.org/mikroelektronik/img/adcsukap.png
- ↑ CONOR POWER: „Spezifikationen für Wandler – Auswahlkriterien für A/D-Wandler“ auf https://www.elektronikpraxis.vogel.de/auswahlkriterien-fuer-a-d-wandler-a-151736/, letzte Informationsabfrage am 25.06.2018
- ↑ ROLAND KÜNG: „Elektrotechnik 2 – A/D- und D/A- Wandler“ auf https://home.zhaw.ch/kunr/Elektronik2/Skript/AD_Wandler_v3.pdf, letzte Informationsabfrage am 25.06.2018
- ↑ 10,0 10,1 10,2 PROF. DR. ULRICH SCHNEIDER: „Skript Signalverarbeitende Systeme 2018“
- ↑ KUNBUS: „Praxiswissen“ auf https://www.kunbus.de/symmetrische-signaluebertragung.html, letzte Informationsabfrage am 01.07.2018
- ↑ https://de.mathworks.com/matlabcentral/fileexchange/30242-kinect-matlab
- ↑ https://de.mathworks.com/matlabcentral/answers/uploaded_files/1211/VS2010MEXSupport.zip
- ↑ ANH VU LE, SEUNG-WONG JUNG, CHEE SUN WON: "Directional Joint Bilateral Filter for Depth Images", 2014
- ↑ KURT KONOLIGE, PATRICK MIHELICH: "Technical description of Kinect calibartion" auf http://wiki.ros.org/kinect_calibration/technical, letzte Informationsabfrage am 01.07.2018
- ↑ DANIEL BACHFELD, DR. VOLKER ZOTA, PETER KÖNIG: " Kopieren in 3D - Räumlich scannen mit Digitalkamera, Kinect oder Laser-Scanner" auf https://www.heise.de/ct/ausgabe/2012-11-Raeumlich-scannen-mit-Digitalkamera-Kinect-oder-Laser-Scanner-2346188.html, letzte Informationsabfrage am 03.07.2018
→ zurück zum Hauptartikel: SigSys SoSe2018