Laserscanner Objektbildung: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
 
(35 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 34: Zeile 34:
== Inbetriebnahme des Sensors ==
== Inbetriebnahme des Sensors ==


Mit der Stellung der Aufgabe wurde eine Demosoftware übergeben, welche es ermöglicht, die Daten des Lidarsensors auszulesen.
Mit der Stellung der Aufgabe wurde eine Demosoftware vom Professor übergeben, welche es ermöglicht, die Daten des Lidarsensors auszulesen.
Diese Beispielscripte wurden analysiert und dienten als Fundament der anschließenden Aufgabe.
Diese Beispielscripte wurden analysiert und dienten als Fundament der anschließenden Aufgabe.


[[Datei:CodeDatenaufzeichnung.png]]
[[Datei:CodeDatenaufzeichnung.png|Quellcode1: Code zur Aufzeichnung der Messdaten]]
<br />
<br />


Zeile 44: Zeile 44:




Zunächst wurden einige Test gemacht, wozu folgendes Szenario aufgebaut wurde.
Zunächst wurden einige Tests gemacht, wozu folgendes Szenario aufgebaut wurde.


<gallery mode=packed>
<gallery mode=packed>
Datei: Aufbau1.jpg|''Bild2: erste Tests mit dem Laserscanner''
Datei: Aufbau1.jpg|''Bild2: erste Tests mit dem Laserscanner''
</gallery>
</gallery>
Ein Pappkarton wurde über den Sensor gestülpt, und anschließend eine Messung gestartet.
Ein Pappkarton wurde über den Sensor gestülpt und anschließend eine Messung gestartet.
Durch den Plot Befehl kann man sich die vorher Umgewandelten Polarkoordinaten visualisieren und man erhält Beispielsweise folgendes Ergebniss.
Durch den Plot Befehl kann man sich die vorher umgewandelten Polarkoordinaten visualisieren lassen, und man erhält Beispielsweise folgendes Ergebnis.


[[Datei: Messung1.jpg|1200px|''erste Messung mit Laserscanner(Doppelklick zum vergrößern)'']]
[[Datei: Messung1.jpg|1200px|''Messung1: erste Messung mit Laserscanner(Doppelklick zum vergrößern)'']]


Man kann hier bereits die Umrisse des Kartons erahnen, sieht aber auch, das die Messpunkte nicht perfekt auf einer Linie sind.
Man kann hier bereits die Umrisse des Kartons erahnen, sieht aber auch, dass die Messpunkte nicht perfekt auf einer Linie sind.
Dies liegt zum einen an den Toleranzen zwischen den Messungen, und zum anderen an der welligen Oberfläche der Kartonage.
Dies liegt zum einen an den Toleranzen zwischen den Messungen, und zum anderen an der welligen Oberfläche der Kartonage.


== Berechnung der wichtigsten Kenngrößen ==
== Berechnung der wichtigsten Kenngrößen ==


Wie jeder Sensor hat er auch dieser einen speziellen Bereich in dem gearbeitet werden kann.
Wie jeder Sensor hat auch dieser einen speziellen Arbeitsbereich.
Laut Datenblatt ist der Hokuyo URG-04LX-UG01 in der Lage in einem Radius von bis 4m zu arbeiten, und hat einen Sichtradius von 240°.
Laut Datenblatt ist der Hokuyo URG-04LX-UG01 in der Lage in einem Radius von bis 4m zu arbeiten, und hat einen Sichtradius von 240°.
Desweiteren werden Laserstrahlen im Abstand von 0.36° ausgesendet.
Desweiteren werden Laserstrahlen im Abstand von 0.36° ausgesendet.
Zeile 68: Zeile 68:
===Sichtradius===
===Sichtradius===
Zunächst wurde der Sichtradius analysiert.Dazu wurde der Messaufbau aus Bild 2 verwendet.
Zunächst wurde der Sichtradius analysiert.Dazu wurde der Messaufbau aus Bild 2 verwendet.
Mit dem folgenden Script wurde das Bild in zwei Bereiche unterteil (re/li).
Mit dem folgenden Script wurde das Bild in zwei Bereiche unterteilt (re/li).
Anschließend wurden die kleinsten Y-Werte, der beiden Bereiche, ermittelt.
Anschließend wurden die kleinsten Y-Werte, der beiden Bereiche, ermittelt.
Durch dieses Verfahren wird der erste, sowie der letzte Messpunkt errechnet, wodurch man dann in der Lage ist, den Sichtradius zu bestimmen.  
Durch dieses Verfahren wird der erste, sowie der letzte Messpunkt errechnet, wodurch man dann in der Lage ist, den Sichtradius zu bestimmen.
 
[[Datei: CodeSichtbereich.png|links|''Quellcode2: Code zur Berechnung des Sichtbereichs'']]
 
 
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>


[[Datei: Sichtbereich.png|''Sichtbereich Darstellung in Matlab'']]


Anhand von 10 Messungen wurde ein Durchschnitts Sichtbereich von 239.96° errechnet. Laut Datenblatt ist ein genauer Winkel von 239.765625° angegeben, wodurch der errechnete Wert vollkommen im Rahmen liegt.
Anhand von 10 Messungen wurde ein Durchschnitts Sichtbereich von 239.96° errechnet. Laut Datenblatt ist ein genauer Winkel von 239.765625° angegeben, wodurch der errechnete Wert vollkommen im Rahmen liegt.


Die Berechnungen wurden mit folgendem Script erstellt.
Hier wurde das Ergebnis dargestellt.
[[Datei: CodeSichtbereich.png|links|''Quellcode zur Berechnung des Sichtbereichs'']]
 
<br />
[[Datei: Sichtbereich.png|''Messung2: Sichtbereich Darstellung in Matlab'']]
<br />
 
<br />
===Winkel zwischen den einzelnen Messpunkten===
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />


===Abstand der einzelnen Messungen===


Zur Messung des Winkels zwischen den Einzelnen Laserstrahlen, wurde die vorherige Messung verwendet.
Zur Messung des Winkels zwischen den einzelnen Laserstrahlen, wurde die vorherige Messung verwendet.
Der Versuchsaufbau sorgt dafür, dass auch jeder Strahl ein Objekt, bzw. die Kante des Kartons erkennt.
Der Versuchsaufbau sorgt dafür, dass auch jeder Strahl ein Objekt, bzw. die Kante des Kartons erkennt.
Wäre dies nicht der Fall, würde es die Messung verfälchen.
Wäre dies nicht der Fall, würde es die Messung verfälschen.


Zur Berechnung wurde folgender Code verwendet.
Zur Berechnung wurde folgender Code verwendet.
[[Datei: CodeEinzelwinkel.png|''Quellcode zur Berechnung des Durchschnittswinkels zwischen den einzelnen Laserstrahlen'']]
[[Datei: CodeEinzelwinkel.png|''Quellcode3: Code zur Berechnung des Durchschnittswinkels zwischen den einzelnen Laserstrahlen'']]


Der berechnete Durchschnittswinkel lag mit diesem Messaufbau bei einem Wert von 0.3524 ° und Entspricht somit den Vorgaben des Datenblattes.
Der berechnete Durchschnittswinkel lag mit diesem Messaufbau bei einem Wert von 0.3524 ° und entspricht somit den Vorgaben des Datenblattes.


===Entfenungsmessung===
===Entfenungsmessung===
Zeile 124: Zeile 130:


<gallery mode=packed>
<gallery mode=packed>
Datei: Aufbau2.jpg|''Bild2: Messaufbau 2''
Datei: Aufbau2.jpg|''Bild3: Messaufbau 2''
</gallery>
</gallery>


Zeile 130: Zeile 136:
Die Daten der Scannung führen zu folgendem Ergebnis.
Die Daten der Scannung führen zu folgendem Ergebnis.


[[Datei:Entfernungsmessung.png|''Lidarmessung von Szenario 2 '']]
[[Datei:Entfernungsmessung.png|''Messung3: Lidarmessung von Szenario 2 '']]


Wie zu sehen ist, wird nur die Kante des vorletzten Kartons, mit einer Entfernung von 5,2m, erkannt.
Wie zu sehen ist, wird nur die Kante des vorletzten Kartons, mit einer Entfernung von 5,2m, erkannt.
Dieses Ergebnis liegt 1m über den Angaben im Datenblatt und ist somit ein spitzen Ergebis.
Dieses Ergebnis liegt 1m über den Angaben im Datenblatt und ist somit ein spitzen Ergebnis.
Des Weiteren liegt der gemessene Wert um 1,2cm unter dem realen Wert, was wieder ein gutes Ergebnis ist, da diese Abweichung unter 1% liegt.
Des Weiteren liegt der gemessene Wert um 1,2cm unter dem realen Wert, was wieder ein gutes Ergebnis ist, da diese Abweichung unter 1% liegt.
Das Objekt wurde in 5,08 m detektiert, die genaue Entfernung zur rechten Kante des Objektes,mit Einbezug des Laserwinkels, betrug 5,1 m.
Das Objekt wurde in 5,08 m detektiert, die genaue Entfernung zur rechten Kante des Objektes, mit Einbezug des Laserwinkels, betrug 5,1 m.


Bei genauem Vergleich von Messaufbau und Scannergebnis fällt auf, dass der rechte schmale Karton nicht detektiert wurde.
Bei genauem Vergleich von Messaufbau und Scannerergebnis fällt auf, dass der rechte schmale Karton nicht detektiert wurde.
Dies liegt daran, dass bei größeren Entfernungen, aufgrund des festen Abtastwinkels, kleinere Objekte durch das Raster fallen und nicht erkannt werden.   
Dies liegt daran, dass bei größeren Entfernungen, aufgrund des festen Abtastwinkels, kleinere Objekte durch das Raster fallen und nicht erkannt werden.   


Zeile 144: Zeile 150:




[[Datei:CodeEntfernungsmessung.png|''Code zur Mackierung der weit Entferntesten Punkte'']]
[[Datei:CodeEntfernungsmessung.png|''Quellcode4: Code zur Mackierung der weit Entferntesten Punkte'']]


==Umwandlung von Polarkoordinaten in Kartesische Koordinaten==
==Umwandlung von Polarkoordinaten in Kartesische Koordinaten==


Da der Laserscanner nur Polarkoordinaten ausgibt, ist es notwenig, diese in Kartesische Koordinaten zu tranformieren.
Da der Laserscanner nur Polarkoordinaten ausgibt, ist es notwendig, diese in Kartesische Koordinaten zu tranformieren.
Dies geschieht mit dem folgendem Quellcode:  
Dies geschieht mit dem folgendem Quellcode:  


[[Datei:Umwandlung pol kar.png]]
[[Datei:Umwandlung pol kar.png|Quellcode5: Code zur transformation der Polarkoordinaten in Kartesische  Koordinaten]]


==Methoden zur Segmentierung von Laserscannerdaten. ==
==Methoden zur Segmentierung von Laserscannerdaten. ==
Zeile 158: Zeile 164:
Nachfolgend werden Beispiele mit einer kurzen Erklärung genannt.
Nachfolgend werden Beispiele mit einer kurzen Erklärung genannt.


'''Laplace und Gaus:'''
'''Laplace und Gauß:'''


Auch als Mexikanischer Hut(Mexican Hat) bekannt. Bildet die zweite Ableitung eines Bildes und detektiert aus diesem Grund Orte mit großen Veränderungen,
Auch als mexikanischer Hut(Mexican Hat) bekannt. Bildet die zweite Ableitung eines Bildes und detektiert aus diesem Grund Orte mit großen Veränderungen,
wie z.B die Veränderung von Schwarz(0) auf Weiß(1).<br>Dieser Filter wird zur Kantenerkennung genutzt.
wie z.B die Veränderung von Schwarz(0) auf Weiß(1).<br>Dieser Filter wird zur Kantenerkennung genutzt.


Zeile 168: Zeile 174:
Der Canny-Algorithmus arbeitet in mehreren Phasen:
Der Canny-Algorithmus arbeitet in mehreren Phasen:


1.) Glättung mit Gaussfilter
1.) Glättung mit Gaußfilter


2.) Kantenerkennung durch Dicke und Richtung
2.) Kantenerkennung durch Dicke und Richtung
Zeile 174: Zeile 180:
3/4.) Unterdrückung von uninteressanten Kanten.Es werden nur lokale Maxima als Kante zugelassen.
3/4.) Unterdrückung von uninteressanten Kanten.Es werden nur lokale Maxima als Kante zugelassen.
Außerdem werden irrelevante Kanten durch ein Zwei-Schwellenwerteverfahren eliminiert.
Außerdem werden irrelevante Kanten durch ein Zwei-Schwellenwerteverfahren eliminiert.


'''Template Matching'''
'''Template Matching'''


Es wird eine Form vorgegeben(feste Vorgabe der Form), nach welcher explizit gesucht wird. Dies könnte eine gerade Linie für die frontale Aufnahme eines Kartons sein, oder ein L Form mit variablem Winkel für die seitliche Aufnahme.  
Es wird eine Form vorgegeben(feste Vorgabe der Form), nach welcher explizit gesucht wird. Dies könnte eine gerade Linie für die frontale Aufnahme eines Kartons sein, oder eine L Form mit variablem Winkel für die seitliche Aufnahme.  
 


''' Veränderbare Templates / Deformable Templates'''
''' Veränderbare Templates / Deformable Templates'''
Zeile 187: Zeile 195:


<gallery mode=packed>
<gallery mode=packed>
Datei: Aufbau3.jpg|''Bild3: Messaufbau 3''
Datei: Aufbau3.jpg|''Bild4: Messaufbau 3''
</gallery>
</gallery>


anschließend wurde der folgende Quellcode genutzt,
anschließend wurde der folgende Quellcode genutzt,


[[Datei:CodeObjektfindung.png|''Code zur Segmentierung/Objektfindung'']]
[[Datei:CodeObjektfindung.png|''Quellcode6: Code zur Segmentierung/Objektfindung'']]


Kurzerklärung:
'''Kurzerklärung:'''


Zunächst werden die vorhandenen X und Y Koordinaten in ein schwarz/weiß Bild umgewandelt.
Zunächst werden die vorhandenen X und Y Koordinaten in ein schwarz/weiß Bild umgewandelt.
Das bedeutet es wird eine Matrix mit  Nullen aufgespannt, was einem schwarzen Bild entsprechen würde.
Das bedeutet es wird eine Matrix mit  Nullen aufgespannt, was einem schwarzen Bild entsprechen würde.
Anschließen wird an die ermittelten Koordinaten eine 1 gespeichert, was ein weißes Pixel erzeugt.
Anschließen wird an die ermittelten Koordinaten eine Eins gespeichert, was ein weißes Pixel erzeugt.
Nun beginnt die Objektfindung, in dem mit Laplace und Gauß die Kanten verstärkt werden, und anschließend ein Floodfill folgt, um eine vollständige Linie zu erzeugen.
Nun beginnt die Objektfindung, in dem mit Laplace und Gauß die Kanten verstärkt werden, und anschließend ein Floodfill(Flutung von eingeschlossenen Bereichen mit weißen Pixeln)folgt, um eine vollständige Linie zu erzeugen.




Da die Raumwände in der Messung detektiert wurden und uns diese nicht Interessieren, wurde die Randfläche invertiert und mit dem OriginalBild multipliziert.
Da die Raumwände in der Messung detektiert wurden und uns diese nicht Interessieren, wurde die Randfläche invertiert und mit dem Originalbild multipliziert.
Dieser Rand ist allerdings so gering, sodass die Laptoptasche im nachfolgenden Bild noch mit erkannt wird.
Dieser Rand ist allerdings so gering, sodass die Laptoptasche im nachfolgenden Bild noch mit erkannt wird.


Ergebnis:
Ergebnis:


[[Datei:ErgebnisObjekterkennung.png|''Code zur Segmentierung/Objektfindung'']]
[[Datei:ErgebnisObjekterkennung.png|''Messung4:Ergebnis nach Anwendung von LoG, Floodfill, Labeling'']]


Die drei Kartons wurden ohne Probleme erkannt.Des Weiteren wurde die Säule sowie eine Laptoptasche am Rand detektiert.
Die drei Kartons wurden ohne Probleme erkannt.Des Weiteren wurde die Säule sowie eine Laptoptasche am Rand detektiert.
Außerdem wurden die Objekte an den Seitenränder (z.B Zimmerwände) durch Bestimmung der "Region of Interesst" entfernt.
Außerdem wurden die Objekte an den Seitenränder (z.B Zimmerwände) durch Bestimmung der "Region of Interesst" entfernt.
== Video ==
Das Video des Funktionsnachweises findet sich auf [http://www.youtube.com/watch?v=JBWhgwx5Yh4&list=PLoyKJifb3ROe_sKfT3y3paswSyiQ8xqm1&feature=share&index=4 YouTube].


==Abschluss/Lesson Learned ==
==Abschluss/Lesson Learned ==


Es war sehr spannend für mich mit dem Lidarsensor zu arbeiten.
Es war sehr spannend für mich mit dem Lidarsensor zu arbeiten.
Ich konnte Methoden und neu gewonnenes Wissen aus der Vorlesung anwenden und hatte viel Spaß bei der durchführung des Projektes.  
Ich konnte Methoden und neu gewonnenes Wissen aus der Vorlesung anwenden und hatte viel Spaß bei der durchführung des Projektes.
 
 
== Siehe auch ==


== Weblinks ==
== Weblinks ==

Aktuelle Version vom 2. Juli 2014, 16:13 Uhr

Autor: Benjamin Brüne
Betreuer: Prof. Schneider

Motivation

Die Datenmenge eines Hokuyo Laserscanners ist sehr hoch und es bedarf einer sinnvollen Zusammenfassung der Datensätze zu Objekten.

Ziel

Segmentieren Sie die Daten des Hokuyo URG 04LX in sinvolle Objekte, die der Realität entsprechen. Prüfen Sie die Angaben im Datenblatt mit realen Messungen. Sind diese plausibel?

Aufgabe

  1. Nehmen Sie den Hokuyo URG 04LX mit Matlab in Betrieb. Eine Demosoftware ist hierfür vorhanden.
  2. Berechnen Sie die wichtigsten Kenngrößen des Sensors und vergleichen Sie diese mit dem Datenblatt.
  3. Transformieren Sie die Polarkoordinaten in ein kartesisches KOS.
  4. Recherchieren Sie Methoden zur Segmentierung von Laserscannerdaten.
  5. Segmentieren Sie die Daten sinnvoll (z.B. Successive Edge Following-Algorithmus)
  6. Bestimmen Sie alle Objekte gemäß Schnittstellendokumentation


Lösung

Einleitung

Ein Laserscanner(auch Lidar-Sensor genannt) ist ein Gerät, dass Laserstrahlen aussendet, welche dann von einem Objekt reflektiert werden. Durch die Laufzeit des Strahls, lässt sich ermitteln, in welcher Entfernung sich ein Objekt befindet. In diesem Fall arbeitet ein rotierender Körper auf einer Kuppel, und sendet in gewissen Abständen das Laserlicht aus.

Im weiteren Verlauf des Artikels, wird die Lösung der Aufgabenstellung dokumentiert.

Die Aufgabe wurde im Rahmen des sechsten Semesters, im Mechatronik Studiengang mit der Fachrichtung "System Design Engineering" gestellt und gelöst.

Inbetriebnahme des Sensors

Mit der Stellung der Aufgabe wurde eine Demosoftware vom Professor übergeben, welche es ermöglicht, die Daten des Lidarsensors auszulesen. Diese Beispielscripte wurden analysiert und dienten als Fundament der anschließenden Aufgabe.

Quellcode1: Code zur Aufzeichnung der Messdaten

Durch diesen Ausschnitt des Scripts, ist man in der Lage, die Daten , welche der Laserscanner liefert, auszulesen und weiter zu verarbeiten oder zu speichern.
Anfallende Daten wären z.B: die Polarkoordinaten, an der ein Objekt, bzw. ein reflektierender Gegenstand erkannt worden ist.


Zunächst wurden einige Tests gemacht, wozu folgendes Szenario aufgebaut wurde.

Ein Pappkarton wurde über den Sensor gestülpt und anschließend eine Messung gestartet. Durch den Plot Befehl kann man sich die vorher umgewandelten Polarkoordinaten visualisieren lassen, und man erhält Beispielsweise folgendes Ergebnis.

Messung1: erste Messung mit Laserscanner(Doppelklick zum vergrößern)

Man kann hier bereits die Umrisse des Kartons erahnen, sieht aber auch, dass die Messpunkte nicht perfekt auf einer Linie sind. Dies liegt zum einen an den Toleranzen zwischen den Messungen, und zum anderen an der welligen Oberfläche der Kartonage.

Berechnung der wichtigsten Kenngrößen

Wie jeder Sensor hat auch dieser einen speziellen Arbeitsbereich. Laut Datenblatt ist der Hokuyo URG-04LX-UG01 in der Lage in einem Radius von bis 4m zu arbeiten, und hat einen Sichtradius von 240°. Desweiteren werden Laserstrahlen im Abstand von 0.36° ausgesendet.

Weitere Kenngrößen wären die Unsicherheit die beim Messen entstehen. So ist angegeben, dass der Sensor maximal eine Abweichung von 1% aufweist.( Bei 2m ==> max. 2cm)

Sichtradius

Zunächst wurde der Sichtradius analysiert.Dazu wurde der Messaufbau aus Bild 2 verwendet. Mit dem folgenden Script wurde das Bild in zwei Bereiche unterteilt (re/li). Anschließend wurden die kleinsten Y-Werte, der beiden Bereiche, ermittelt. Durch dieses Verfahren wird der erste, sowie der letzte Messpunkt errechnet, wodurch man dann in der Lage ist, den Sichtradius zu bestimmen.

Quellcode2: Code zur Berechnung des Sichtbereichs
Quellcode2: Code zur Berechnung des Sichtbereichs

































Anhand von 10 Messungen wurde ein Durchschnitts Sichtbereich von 239.96° errechnet. Laut Datenblatt ist ein genauer Winkel von 239.765625° angegeben, wodurch der errechnete Wert vollkommen im Rahmen liegt.

Hier wurde das Ergebnis dargestellt.

Messung2: Sichtbereich Darstellung in Matlab

Winkel zwischen den einzelnen Messpunkten

Zur Messung des Winkels zwischen den einzelnen Laserstrahlen, wurde die vorherige Messung verwendet. Der Versuchsaufbau sorgt dafür, dass auch jeder Strahl ein Objekt, bzw. die Kante des Kartons erkennt. Wäre dies nicht der Fall, würde es die Messung verfälschen.

Zur Berechnung wurde folgender Code verwendet. Quellcode3: Code zur Berechnung des Durchschnittswinkels zwischen den einzelnen Laserstrahlen

Der berechnete Durchschnittswinkel lag mit diesem Messaufbau bei einem Wert von 0.3524 ° und entspricht somit den Vorgaben des Datenblattes.

Entfenungsmessung

Für die Messung der Entfernungsgenauigkeit wurde folgendes Szenario aufgebaut.

Der Abstand zum entferntesten Karton beträgt 5,5m.Die Kante des vorletzten Kartons ist 5,2m entfernt. Die Daten der Scannung führen zu folgendem Ergebnis.

Messung3: Lidarmessung von Szenario 2

Wie zu sehen ist, wird nur die Kante des vorletzten Kartons, mit einer Entfernung von 5,2m, erkannt. Dieses Ergebnis liegt 1m über den Angaben im Datenblatt und ist somit ein spitzen Ergebnis. Des Weiteren liegt der gemessene Wert um 1,2cm unter dem realen Wert, was wieder ein gutes Ergebnis ist, da diese Abweichung unter 1% liegt. Das Objekt wurde in 5,08 m detektiert, die genaue Entfernung zur rechten Kante des Objektes, mit Einbezug des Laserwinkels, betrug 5,1 m.

Bei genauem Vergleich von Messaufbau und Scannerergebnis fällt auf, dass der rechte schmale Karton nicht detektiert wurde. Dies liegt daran, dass bei größeren Entfernungen, aufgrund des festen Abtastwinkels, kleinere Objekte durch das Raster fallen und nicht erkannt werden.

Das Resultat wurde mit folgendem Script erstellt.


Quellcode4: Code zur Mackierung der weit Entferntesten Punkte

Umwandlung von Polarkoordinaten in Kartesische Koordinaten

Da der Laserscanner nur Polarkoordinaten ausgibt, ist es notwendig, diese in Kartesische Koordinaten zu tranformieren. Dies geschieht mit dem folgendem Quellcode:

Quellcode5: Code zur transformation der Polarkoordinaten in Kartesische Koordinaten

Methoden zur Segmentierung von Laserscannerdaten.

Es gibt viele verschiedene Methoden um Bilder zu Segmentieren. Nachfolgend werden Beispiele mit einer kurzen Erklärung genannt.

Laplace und Gauß:

Auch als mexikanischer Hut(Mexican Hat) bekannt. Bildet die zweite Ableitung eines Bildes und detektiert aus diesem Grund Orte mit großen Veränderungen, wie z.B die Veränderung von Schwarz(0) auf Weiß(1).
Dieser Filter wird zur Kantenerkennung genutzt.


Canny-Algorithus:

Der Canny-Algorithmus arbeitet in mehreren Phasen:

1.) Glättung mit Gaußfilter

2.) Kantenerkennung durch Dicke und Richtung

3/4.) Unterdrückung von uninteressanten Kanten.Es werden nur lokale Maxima als Kante zugelassen. Außerdem werden irrelevante Kanten durch ein Zwei-Schwellenwerteverfahren eliminiert.


Template Matching

Es wird eine Form vorgegeben(feste Vorgabe der Form), nach welcher explizit gesucht wird. Dies könnte eine gerade Linie für die frontale Aufnahme eines Kartons sein, oder eine L Form mit variablem Winkel für die seitliche Aufnahme.


Veränderbare Templates / Deformable Templates

Wie beim Template Matchig wird ein Form vorgegeben, welche sich allerdings in Größe(stauchung/streckung) verändern kann.

Segmentierung/Objekterkennung

Für die Segmentierung wurde folgendes Szenario aufgebaut,

anschließend wurde der folgende Quellcode genutzt,

Quellcode6: Code zur Segmentierung/Objektfindung

Kurzerklärung:

Zunächst werden die vorhandenen X und Y Koordinaten in ein schwarz/weiß Bild umgewandelt. Das bedeutet es wird eine Matrix mit Nullen aufgespannt, was einem schwarzen Bild entsprechen würde. Anschließen wird an die ermittelten Koordinaten eine Eins gespeichert, was ein weißes Pixel erzeugt. Nun beginnt die Objektfindung, in dem mit Laplace und Gauß die Kanten verstärkt werden, und anschließend ein Floodfill(Flutung von eingeschlossenen Bereichen mit weißen Pixeln)folgt, um eine vollständige Linie zu erzeugen.


Da die Raumwände in der Messung detektiert wurden und uns diese nicht Interessieren, wurde die Randfläche invertiert und mit dem Originalbild multipliziert. Dieser Rand ist allerdings so gering, sodass die Laptoptasche im nachfolgenden Bild noch mit erkannt wird.

Ergebnis:

Messung4:Ergebnis nach Anwendung von LoG, Floodfill, Labeling

Die drei Kartons wurden ohne Probleme erkannt.Des Weiteren wurde die Säule sowie eine Laptoptasche am Rand detektiert. Außerdem wurden die Objekte an den Seitenränder (z.B Zimmerwände) durch Bestimmung der "Region of Interesst" entfernt.

Video

Das Video des Funktionsnachweises findet sich auf YouTube.

Abschluss/Lesson Learned

Es war sehr spannend für mich mit dem Lidarsensor zu arbeiten. Ich konnte Methoden und neu gewonnenes Wissen aus der Vorlesung anwenden und hatte viel Spaß bei der durchführung des Projektes.

Weblinks



→ zurück zum Hauptartikel: Digitale Signal- und Bildverarbeitung SoSe2014