Hokuyo Lidar Objekterkennung mit Matlab/Simulink: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
 
(49 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
[[Kategorie:Objekterkennung mit LiDAR]]
Sensor: [https://www.robotshop.com/media/files/pdf/hokuyo-urg-04lx-ug01-specifications.pdf Hokuyo URG-04]
Sensor: [https://www.robotshop.com/media/files/pdf/hokuyo-urg-04lx-ug01-specifications.pdf Hokuyo URG-04]


Zeile 12: Zeile 13:


== Vorstellung des Sensors ==
== Vorstellung des Sensors ==
[[Datei:TechnischeDatenURG04LX.JPG|thumb|500px|right|Abbildung 1: Technische Daten des URG-04LX]]
[[Datei:TechnischeDatenURG04LX.JPG|thumb|500px|right|Abbildung 2: Technische Daten des URG-04LX]]
Der URG-04LX ist ein klassischer Lidar mit einem Laser zum Scannen seines Umfelds. Dazu Verwendet dieser einen Infrarot-Laser mit einer Wellenlänge von 785 nm derLaser Klasse 1. Der Scanner deckt einen Bereich von 240° bei einem maximalen Radius von 4 m ab. Dabei löst der Sensor in 0,36 ° auf. Betrieben wird der Sensor mit einer Gleichspannung von 5 Volt und kann über USB oder Sub-D Stecker mit einer Auswerteeinheit verbunden werden. Angesprochen wird der Sensor über das serielle RS232-Protokoll. Die genannten technischen Daten sind in Abbildung 1 dargestellt. <br /><br />
Der URG-04LX, dargestell in Abbildung 1, ist ein klassischer Lidar mit einem Laser zum Scannen seines Umfelds. Dazu Verwendet dieser einen Infrarot-Laser mit einer Wellenlänge von 785 nm derLaser Klasse 1. Der Scanner deckt einen Bereich von 240° bei einem maximalen Radius von 4 m ab. Dabei löst der Sensor in 0,36 ° auf. Betrieben wird der Sensor mit einer Gleichspannung von 5 Volt und kann über USB oder Sub-D Stecker mit einer Auswerteeinheit verbunden werden. Angesprochen wird der Sensor über das serielle RS232-Protokoll. Die genannten technischen Daten sind in Abbildung 2 dargestellt. <br /><br />


Der URG-04LX nutzt für die Entfernungsmessung das Verfahren der Phasendifferenz, da damit eine stabile Messung möglich ist, ohne große Einflüsse der Farbe oder der Reflexion eines Objektes. Der Sensor ist nach dem IEC60947-5-2 Standard entwickelt und entspricht demnach dem Standard für industrielle Anwendungen.
Der URG-04LX nutzt für die Entfernungsmessung das Verfahren der Phasendifferenz, da damit eine stabile Messung möglich ist, ohne große Einflüsse der Farbe oder der Reflexion eines Objektes. Der Sensor ist nach dem IEC60947-5-2 Standard entwickelt und entspricht demnach dem Standard für industrielle Anwendungen.
Zeile 25: Zeile 26:
<br /><br />
<br /><br />
===Spezifikationsübersicht des URG-04LX===
===Spezifikationsübersicht des URG-04LX===
{| class="mw-datatable"
{| class="wikitable"
|-
|-
! style="font-weight: bold;" | Name des Produkts
! style="font-weight: bold;" | Name des Produkts
Zeile 35: Zeile 36:
! style="font-weight: bold;" | Versorgungsspannung
! style="font-weight: bold;" | Versorgungsspannung
| 5VDC
| 5VDC
|-
! style="font-weight: bold;" | Maximale Reichweite
| 0,002 m bis 5,6 m
|-
|-
! style="font-weight: bold;" | Messbereich
! style="font-weight: bold;" | Messbereich
Zeile 42: Zeile 46:
| 0,001 m
| 0,001 m
|-
|-
! style="font-weight: bold;" | Scanwinkel
! style="font-weight: bold;" | Genauigkeit (20mm - 1000mm)
| ± 0,03 m
|-
! style="font-weight: bold;" | Genauigkeit (1000mm - 4000mm)
| ± 3 %
|-
! style="font-weight: bold;" | Horizontaler Scanwinkel
| 240°
| 240°
|-
|-
! style="font-weight: bold;" | Winkelauflösung
! style="font-weight: bold;" | Winkelauflösung
| 0,36°
| 0,36°
|-
! style="font-weight: bold;" | Anzahl Scanschritte
| 683
|-
|-
! style="font-weight: bold;" | Scangeschwindigkeit
! style="font-weight: bold;" | Scangeschwindigkeit
Zeile 59: Zeile 72:


==Analog-Digital-Umsetzung==
==Analog-Digital-Umsetzung==
[[Datei:Phasendifferenzverfahren.PNG|thumb|800px|right|Abbildung 2: Phasendifferenzverfahren]]
[[Datei:Phasendifferenzverfahren.PNG|thumb|800px|right|Abbildung 3: Phasendifferenzverfahren]]
Für die Analog-Digital-Umsetzung kann für einen Lidar grundsätzlich ein Zeit-Digital-Umsetzer oder ein Analog-Digital-Umsetzer verwendet werden. Die Auswahl des Systems ist dabei abhängig von dem Messprinzip des Lidar-Sensors. Die Entfernungsmessung findet dabei entweder über eine Lichtlaufzeitmessung oder eine Phasendifferenzmessung statt.Davon abhängig kann für die Analog-Digital-Umsetzung entweder ein klassischer Analog-Digital-Umsetzer oder ein Zeit-Digital-Umsetzer verwendet werden <ref name="tiLidar"> Analog Applications Journal: How to build a LIDAR system with a time-to-digital converter. - letzter Aufruf: 05.07.2018 http://www.ti.com/lit/an/slyt706/slyt706.pdf </ref>. Beide Optionen werden nachfolgend beschrieben.<br /><br />
Für die Analog-Digital-Umsetzung kann für einen Lidar grundsätzlich ein Zeit-Digital-Umsetzer oder ein Analog-Digital-Umsetzer verwendet werden. Die Auswahl des Systems ist dabei abhängig von dem Messprinzip des Lidar-Sensors. Die Entfernungsmessung findet dabei entweder über eine Lichtlaufzeitmessung oder eine Phasendifferenzmessung statt<ref name="tiLidar"> Analog Applications Journal: How to build a LIDAR system with a time-to-digital converter. - letzter Aufruf: 05.07.2018 http://www.ti.com/lit/an/slyt706/slyt706.pdf </ref>. <br /><br />
Bei der Laufzeitmessung wird die sogenannte Pulslaufzeit gemessen, die misst, wie lange ein ausgesendeter Lichpuls benötigt um zurück zur Quelle reflektiert zu werden. Durch das Messen dieser Pulslaufzeit kann anhand der Lichgeschwindigkeit die Distanz zwischen Lichtquelle und Objekt bestimmt werden. Dadurch ermöglicht das Verfahren eine geringe Reaktionszeit. Nachteilig ist, dass die Messung in sehr kurzen Zeitabständen im Nano- bis Picosekundenbereich erfolgt und so eine Messung im Nahbereich sehr fehlerbehaftet ist.<br />
Die Phasendifferenzmessung, die auch im vorliegenden Hokuyo Lidar verwendet wird, arbeitet mit einer kontinuierlichen Laserlichtwelle im Infrarotbereich. Diese Laserlichtwelle ist das Trägersignal und wird mit Sinussignalen unterschiedlicher Frequenz moduliert. Das Prinzip der Phasendifferenzmessung ist in Abbildung 3 dargestellt <ref name="ADEV"> AnalogDialgue: Which ADC Architecture Is Right for Your Application? - letzter Aufruf: 05.07.2018 http://www.analog.com/en/analog-dialogue/articles/the-right-adc-architecture.html </ref>.<br />
Abhängig vom Messverfahren kann für die Analog-Digital-Umsetzung entweder ein klassischer Analog-Digital-Umsetzer oder ein Zeit-Digital-Umsetzer verwendet werden. Beide Optionen werden nachfolgend beschrieben.<br /><br />
 
=== Lösung 1: Zeit-Digital-Umsetzer===
=== Lösung 1: Zeit-Digital-Umsetzer===
Anders als bei der klassischen Analog-Digital-Umsetzung, bei welcher eine SPannung in einen Digitalwert umgewandelt wird, wählt man bie einer Zeit-Digital-Wandlung die physikalische Größe Zeit als Wandelgröße. Wie auch bei der Spannungswandlung, kann die Differenz von Zeit verwendet werden, um einen Digitalwert zu generieren. Wie bei der Spannungswandlung, ist auch bei der Zeitwandlung die Auflösung der wichtigste Faktor des Wandlers. Das bedeutet im Fall des Zeit-Digital-Wandlers wird eine hohe Zeitauflösung benötigt, um genaue Werte liefern zu können. Das Messprinzip ergibt aus aus einem Vergleich von gemessenen Zeitdifferenzen und durch Gatter festgelegte Laufzeiten. Es wird erfasst, wie viele Gatterlaufzeiten der Zeitdifferenz entsprechen. Die zu messende Zeitdifferenz wird durch STart- und Stoppsignale fixiert und aus der Anzahl der Gatterlaufzeiten wird das Digitalsignal abgeleitet. Zeit-Digital-Wandler auf dem Markt erreichen Zeotauflösungen im Picosekunden Bereich <ref name="ITWissenTDC"> IT-Wissen: Zeit-Digital-Wandler. - letzter Aufruf: 05.07.2018 https://www.itwissen.info/Zeit-Digital-Wandler-time-to-digital-converter-TDC.html </ref>. Ein Beispiel dafür ist der [http://www.ti.com/product/TDC7201?keyMatch=tdc7201&tisearch=Search-EN-Everything TDC7201] von Texas Instruments mit einer Auflösung von 55 ps.<br /><br />
Anders als bei der klassischen Analog-Digital-Umsetzung, bei welcher eine Spannung in einen Digitalwert umgewandelt wird, wählt man bie einer Zeit-Digital-Wandlung die physikalische Größe Zeit als Wandelgröße. Wie auch bei der Spannungswandlung, kann die Differenz von Zeit verwendet werden, um einen Digitalwert zu generieren. Wie bei der Spannungswandlung, ist auch bei der Zeitwandlung die Auflösung der wichtigste Faktor des Wandlers. Das bedeutet im Fall des Zeit-Digital-Wandlers wird eine hohe Zeitauflösung benötigt, um genaue Werte liefern zu können. Das Messprinzip ergibt aus aus einem Vergleich von gemessenen Zeitdifferenzen und durch Gatter festgelegte Laufzeiten. Es wird erfasst, wie viele Gatterlaufzeiten der Zeitdifferenz entsprechen. Die zu messende Zeitdifferenz wird durch STart- und Stoppsignale fixiert und aus der Anzahl der Gatterlaufzeiten wird das Digitalsignal abgeleitet. Zeit-Digital-Wandler auf dem Markt erreichen Zeotauflösungen im Picosekunden Bereich <ref name="ITWissenTDC"> IT-Wissen: Zeit-Digital-Wandler. - letzter Aufruf: 05.07.2018 https://www.itwissen.info/Zeit-Digital-Wandler-time-to-digital-converter-TDC.html </ref>. Ein Beispiel dafür ist der [http://www.ti.com/product/TDC7201?keyMatch=tdc7201&tisearch=Search-EN-Everything TDC7201] von Texas Instruments mit einer Auflösung von 55 ps.
Die Phasendifferenzmessung die auch im Hokuyo Lidar verwendet wird arbeitet mit einer kontinuierlichen Laserlichtwelle im Infrarotbereich. Diese Laserlichtwelle ist das Trägersignal und wird mit Sinussignalen unterschiedlicher Frequenz moduliert. Das Prinzip der Phasendifferenzmessung ist in Abbildung 2 dargestellt <ref name="ADEV"> AnalogDialgue: Which ADC Architecture Is Right for Your Application? - letzter Aufruf: 05.07.2018 http://www.analog.com/en/analog-dialogue/articles/the-right-adc-architecture.html </ref>.
<br /><br />
<br /><br />
=== Lösung 2: Analog-Digital-Umsetzer===
=== Lösung 2: Analog-Digital-Umsetzer===
Ein Beispiel für einen Analog-Digital-Umsetzer, der die Anforderungen für eine LiDAR-Anwendung erfüllt ist der [http://www.analog.com/en/products/analog-to-digital-converters/standard-adc/high-speed-ad-10msps/ad9645.html#product-overview AD9645] von Analog Devices.
Auch für die klassische Umwandlung einer gemessenen Spannung in ein Digitales Signal ist bei einem Lidar eine sehr hohe Verarbeitungsgeschwindigkeit wichtig. Diese liefert vor allem ein Flash-Wandler, welcher mit dem Parallelverfahren arbeitet. Dieser enthält für jede Spannungsstufe einen Komparator, welcher jeweils die Eingangsspannung mir seiner Spannungsstufe vergleicht und ensprechend des Vergleichsergebnisses seinen Ausgang beschaltet. Für eine 10-Bit Auflösung benötigt ein Flash-Umsetzer dementsprechend 1023 Komparatoren, wodurch der Preis eines solchen Wandlers schnell sehr hoch wird <ref name="Swisseduc"> Digitaltechnik: Analog-Digital-Wandler. - letzter Aufruf: 06.07.2018 https://www.swisseduc.ch/informatik/hardware/analog_digital_wandler/docs/script.pdf </ref>.
Der beschriebene Flash-Umsetzer reicht allerdings je nach Genauigkeitsanforderung an den Lidar nicht immer aus, soadass dieses sogenannte einstufige Parallelverfahren der Flash-Umsetzer zu einem mehrstufigen Parallelverfahren modifiziert wird. Diese Pipeline-Umsetzer können eine höhere Auflösung bei bis zu 250 MS/s erreichen und liegen preislich dabei unter dem Niveau eines Flash-Umsetzers, durch die Verwendung weniger Komparatoren. Ein Beispiel für einen Pipeline-Umsetzer, der die Anforderungen für eine Lidar-Anwendung erfüllt ist der [http://www.analog.com/en/products/analog-to-digital-converters/standard-adc/high-speed-ad-10msps/ad9645.html#product-overview AD9645] von Analog Devices.
<br /><br />
<br /><br />


==Kommunikation mit dem Hokuyo URG-04LX==
==Kommunikation mit dem Hokuyo URG-04LX==
[[Datei:Encode-Decode.PNG|thumb|400px|right|Abbildung 3: Zwei-Zeichen-Codierung]]
[[Datei:Encode-Decode.PNG|thumb|400px|right|Abbildung 4: Zwei-Zeichen-Codierung]]
Damit der Hokuyo LiDAR verwendet werden kann, muss zunächst die Kommunikation mit diesem hergestellt werden. Dazu stehten am LiDAR zwei Anschlüsse zur Verfügung. Dabei handelt es sich um einen Micro-Usb-Port und um eine RS-232-Schnittstelle. Der USB-Port dienst dabei lediglich der Spannungsversporgung. Den seriellen Anschluss, kann man über ein mitgeliefertes Kabel entweder ebenfalls per USB mit einem PC verbinden oder mit der über einen Sub-D-Stecker herausgeführten RS-232, also der seriellen Schnittstelle an eine Steuerungs, bzw- Auswerteeinheit anschließen.Der USB Port unterstützt ebenfalls das RS232-Protokoll <ref name="SCIP20"> Communication Protocol Specification For SCIP2.0 Standard. - letzter Aufruf: 06.07.2018 http://library.isr.ist.utl.pt/docs/roswiki/attachments/hokuyo_node/URG-Series_SCIP2_Compatible_Communication_Specification_ENG.pdf </ref>. <br/><br/>
Damit der Hokuyo LiDAR verwendet werden kann, muss zunächst die Kommunikation mit diesem hergestellt werden. Dazu stehten am LiDAR zwei Anschlüsse zur Verfügung. Dabei handelt es sich um einen Micro-Usb-Port und um eine RS-232-Schnittstelle. Der USB-Port dienst dabei lediglich der Spannungsversporgung. Den seriellen Anschluss, kann man über ein mitgeliefertes Kabel entweder ebenfalls per USB mit einem PC verbinden oder mit der über einen Sub-D-Stecker herausgeführten RS-232, also der seriellen Schnittstelle an eine Steuerungs, bzw- Auswerteeinheit anschließen.Der USB Port unterstützt ebenfalls das RS232-Protokoll <ref name="SCIP20"> Communication Protocol Specification For SCIP2.0 Standard. - letzter Aufruf: 06.07.2018 http://library.isr.ist.utl.pt/docs/roswiki/attachments/hokuyo_node/URG-Series_SCIP2_Compatible_Communication_Specification_ENG.pdf </ref>. <br/><br/>


Zeile 79: Zeile 97:


===Zwei-Zeichen-Codierung===
===Zwei-Zeichen-Codierung===
Die Zwei-Zeichen-Codierung ermöglicht die schnellere Datenübertragung bei einer maximalen Größe von 12 Bits. Beim Codierungsvorgang wird das Datenpaket in seine 6 hohen und 6 niedrigen Bits aufgeteilt und eine 30H wird zu beiden hinzu addiert, um sie in ASCII-Zeichen zu konvertieren. Dieser Codiervorgang und auch der Decodiervorgang sind Schrittweise in Abbildung 3 dargestellt. Die beiden übrigen Verfahren arbeiten nach dem selben Prinzip. Es werden also wiederum 6 Bit-Pakete aus dem Datensatz erstellt und durch Addition mit 30H ASCII-Zeichen aus den jeweiligen Bitsätzen generiert. Die Drei-Zeichen-Codierung unterstützte dann dementsprechend 18 Bit und die Vier-Zeichen-Codierung 24 Bit <ref name="SCIP20"> Communication Protocol Specification For SCIP2.0 Standard. - letzter Aufruf: 06.07.2018 http://library.isr.ist.utl.pt/docs/roswiki/attachments/hokuyo_node/URG-Series_SCIP2_Compatible_Communication_Specification_ENG.pdf </ref>.
Die Zwei-Zeichen-Codierung ermöglicht die schnellere Datenübertragung bei einer maximalen Größe von 12 Bits. Beim Codierungsvorgang wird das Datenpaket in seine 6 hohen und 6 niedrigen Bits aufgeteilt und eine 30H wird zu beiden hinzu addiert, um sie in ASCII-Zeichen zu konvertieren. Dieser Codiervorgang und auch der Decodiervorgang sind Schrittweise in Abbildung 4 dargestellt. Die beiden übrigen Verfahren arbeiten nach dem selben Prinzip. Es werden also wiederum 6 Bit-Pakete aus dem Datensatz erstellt und durch Addition mit 30H ASCII-Zeichen aus den jeweiligen Bitsätzen generiert. Die Drei-Zeichen-Codierung unterstützte dann dementsprechend 18 Bit und die Vier-Zeichen-Codierung 24 Bit <ref name="SCIP20"> Communication Protocol Specification For SCIP2.0 Standard. - letzter Aufruf: 06.07.2018 http://library.isr.ist.utl.pt/docs/roswiki/attachments/hokuyo_node/URG-Series_SCIP2_Compatible_Communication_Specification_ENG.pdf </ref>.
<br/><br/>
<br/><br/>


===Kommunikationsformat===
===Kommunikationsformat===
[[Datei:LidarKom.PNG|thumb|600px|right|Abbildung 4: Kommunikationsformat für Host und Lidar]]
[[Datei:LidarKom.PNG|thumb|600px|right|Abbildung 5: Kommunikationsformat für Host und Lidar]]
Damit Host und Sensor über die gegebenen Schnittstellen miteinander kommunizieren und Daten austauschen können, definiert das SCIP2.0-Protokoll Befehle. Diese Befehle folgen einem bestimmten Format, dem Kommunikationsformat. Der Kommunikationsaufbau ist bei Host und Sensor unterschiedlich. Für beide Komponenten ist das Kommunikationsformat in Abbildung 4 dargestellt.<br/><br/>
Damit Host und Sensor über die gegebenen Schnittstellen miteinander kommunizieren und Daten austauschen können, definiert das SCIP2.0-Protokoll Befehle. Diese Befehle folgen einem bestimmten Format, dem Kommunikationsformat. Der Kommunikationsaufbau ist bei Host und Sensor unterschiedlich. Für beide Komponenten ist das Kommunikationsformat in Abbildung 5 dargestellt.<br/><br/>
Die Kommunikation wird immer vom Host initiiert. Dazu sendet er einen Befehl, bestehend aus einem Befehlszeichen, einem Parameter, bis zu 16 String-Zeichen und einem Line Feed oder Carriage Return, bzw. beidem. Wenn der Sensor die Befehle empfängt, antwortet dieser mit einem Befehls-Echo, also einer Wiederhohlung der vollständigen Host-Sequenz. Dann folgt ein Status, eine Prüfsumme und ein Line Feed, um dann mit dem des empfangenen Befehls entsprechendem Datensatz fortzufahren. Die Daten sind wiederum gefolgt von einer Prüfsumme und zwei Line Feed zur Terminierung.<br/>
Die Kommunikation wird immer vom Host initiiert. Dazu sendet er einen Befehl, bestehend aus einem Befehlszeichen, einem Parameter, bis zu 16 String-Zeichen und einem Line Feed oder Carriage Return, bzw. beidem. Wenn der Sensor die Befehle empfängt, antwortet dieser mit einem Befehls-Echo, also einer Wiederhohlung der vollständigen Host-Sequenz. Dann folgt ein Status, eine Prüfsumme und ein Line Feed, um dann mit dem des empfangenen Befehls entsprechendem Datensatz fortzufahren. Die Daten sind wiederum gefolgt von einer Prüfsumme und zwei Line Feed zur Terminierung.<br/>
Der Befehlcode besteht aus zwei Bytes und steht an jedem Beginn einer Kommunikation. Parameter können dazu verwendet werden die Sensoreinstellungen zu ändern oder Daten anzufordern. Die String Zeichen sind optionale Information zum Befehl. Der Status gibt an, ob eine Anfrage erfolgreich war oder ob Fehler aufgetreten sind und die Daten sind die eigentlichen Informationen, die relevant sind. Der Sensor stellt über das Protokoll verschiedene Befehle bereit, die im [http://library.isr.ist.utl.pt/docs/roswiki/attachments/hokuyo_node/URG-Series_SCIP2_Compatible_Communication_Specification_ENG.pdf Kommunikationsptotokoll zum SCIP2.0] dargestellt sind. Dort sind ebenfalls die möglichen Fehlercodes des Sensors, sowie ein exemplarischer Nachrichtenverlauf dargestellt <ref name="SCIP20"> Communication Protocol Specification For SCIP2.0 Standard. - letzter Aufruf: 06.07.2018 http://library.isr.ist.utl.pt/docs/roswiki/attachments/hokuyo_node/URG-Series_SCIP2_Compatible_Communication_Specification_ENG.pdf </ref>.<br/><br/>
Der Befehlcode besteht aus zwei Bytes und steht an jedem Beginn einer Kommunikation. Parameter können dazu verwendet werden die Sensoreinstellungen zu ändern oder Daten anzufordern. Die String Zeichen sind optionale Information zum Befehl. Der Status gibt an, ob eine Anfrage erfolgreich war oder ob Fehler aufgetreten sind und die Daten sind die eigentlichen Informationen, die relevant sind. Der Sensor stellt über das Protokoll verschiedene Befehle bereit, die im [http://library.isr.ist.utl.pt/docs/roswiki/attachments/hokuyo_node/URG-Series_SCIP2_Compatible_Communication_Specification_ENG.pdf Kommunikationsptotokoll zum SCIP2.0] dargestellt sind. Dort sind ebenfalls die möglichen Fehlercodes des Sensors, sowie ein exemplarischer Nachrichtenverlauf dargestellt <ref name="SCIP20"> Communication Protocol Specification For SCIP2.0 Standard. - letzter Aufruf: 06.07.2018 http://library.isr.ist.utl.pt/docs/roswiki/attachments/hokuyo_node/URG-Series_SCIP2_Compatible_Communication_Specification_ENG.pdf </ref>.<br/><br/>
Zeile 91: Zeile 108:
Der URG-04LX arbeitet im Auslieferungszustand noch mit dem Vorgängerprotokoll SCIP1.1. Es wird allerdings empfohlen diesen direkt bei inbetirebnahme auf das neuste Protokoll zu aktualisieren. Aus diesem Grund ist lediglich das SCIP2.0 beschrieben.
Der URG-04LX arbeitet im Auslieferungszustand noch mit dem Vorgängerprotokoll SCIP1.1. Es wird allerdings empfohlen diesen direkt bei inbetirebnahme auf das neuste Protokoll zu aktualisieren. Aus diesem Grund ist lediglich das SCIP2.0 beschrieben.


==Inbetriebnahme des Hokuyo URG-04LX==
Damit der URG-04LX auf einem Windows PC funktioniert, muss wie bereits beschrieben,  zunächst der passende Treiber installiert werden. Nachdem die Installation abgeschlossen ist, gibt es verschiedene Möglichkeiten die Auswertung der Daten vorzunehmen. Das gewählte Vorgehen wird nachfolgend beschrieben.
===Erste Schritte===
[[Datei:UrgTool.png|thumb|500px|right|Abbildung 6: Windows Tool zur Auslesung des Lidar <ref name="SourceForge"> URG Network. - letzter Aufruf: 06.07.2018 https://sourceforge.net/p/urgnetwork/wiki/driver_win10_en/</ref>]]
Für die Inbetriebnahme wird zunächst das auf der Herstellerseite zu Verfügung gestellte [https://www.hokuyo-aut.jp/search/single.php?serial=166 Programm] verwendet, um einen Überblick über das Sensorverhalten zu bekommen. Ein Screenshot dieser verwendeten Software ist in Abbildung 6 gezeigt. Das Tool bietet die Möglichkeit den für den Sensor passenden COM Port auszuwählen und über einen Verbinden-Button beginnt unmittelbar die Visualisierung der gemessenen Sensorwerte in einer Grafik auf der linken Seite der Oberfläche.
===Verwendung des Sensors in Matlab===
Für die Verwendung des Sensors in Matlab gibt es bereits verschiedene Ansätze von unterschiedlichen Entwicklern, die ihre selbst erstellten Toolboxen zur Verfügung stellen. Aus diesem Grund wurden die verschiedenen Toolboxen gesichtet, modifiziert und diese in einer neu erstellten GUI in Matlab verwendet. Entstanden ist so ein Matlab-Programm mit vier Buttons und einer Eingabemöglichkeit für die serielle Schnittstelle, wie in Abbildung 7 zu sehen.<br/>
Der Plot zeigt dabei die ausgewerteten Entfernungsdaten des Lidars in Metern an. Der Sensor befindet sich im Ursprung des Plots. In Abbildung 7 ist deutlich eine Wand zu sehen, die der Sensor misst. Eine gegenprobe mit einem Maßband zeigt, dass die Genauigkeit im Bereich um einen Zentimeter liegt. 
[[Datei:GuiStatisch.PNG|thumb|800px|center|Abbildung 7: Matlab GUI zur Auslesung des Lidar]]


==Inbetriebnahme des Hokuyo URG-04LX==
Hinter dem Button "Initialisieren" verbirgt sich der Matlab-Code, der den empfohlenen Ablauf aus dem Dokument des SCIP2.0 Protokolls umsetzt. Dieser Code ist nachfolgend dargestellt.
[[Datei:UrgTool.png|thumb|500px|left|Abbildung 5: Windows Tool zur Auslesung des Lidar <ref name="SourceForge"> URG Network. - letzter Aufruf: 06.07.2018 https://sourceforge.net/p/urgnetwork/wiki/driver_win10_en/</ref>]]
Für die Inbetriebnahme wird zunächst das auf der Herstellerseite zu Verfügung gestellte [https://www.hokuyo-aut.jp/search/single.php?serial=166 Programm] verwendet, um einen Überblick über das Sensorverhalten zu bekommen. Ein Screenshot dieser verwendeten Software ist in Abbildung 5 gezeigt. Das Tool bietet die Möglichkeit den für den Sensor passenden COM Port auszuwählen und über einen Verbinden-Button beginnt unmittelbar die Visualisierung der gemessenen Sensorwerte in einer Grafik auf der linken Seite der Oberfläche.


==Ergebnis==
<div style="width:800px; height:300px; overflow:auto; border: 2px solid #088">
Das Ergebnis der Arbeit kann in [https://youtu.be/Gizjb0bY52c diesem Youtube Video] betrachtet werden.
<source lang=c>
%%Funktion bekommt COM Port übergeben und gibt ein lidar Objekt heraus
function [lidar] = SetupLidar(COM)
%%Erstellen eines lidar-Objektes: Konfiguration des Com Ports und der Baudrate
lidar=serial(COM,'baudrate',115200);
set(lidar,'Timeout',0.1);
set(lidar,'InputBufferSize',40000); %Konfiguration der Buffergröße
set(lidar,'Terminator','CR'); %Setzen der Terminator-Sequenz
fopen(lidar);%Herstellung der Verbindung
pause(0.1);
fprintf(lidar,'SCIP2.0'); %Konfiguration des Kommunikationsprotokolls
pause(0.1);
%%Vorgehen laut Kommunikationsprotokoll, um Zwei-Zeichen-Codierung zu
%%aktivieren und um den gewünschten Modus zu wählen
fscanf(lidar);
fprintf(lidar,'VV');
pause(0.1);
fscanf(lidar)
fprintf(lidar,'BM');
pause(0.1);
fscanf(lidar)
end


</source>
</div>
<br/>
Der Button "Start" ruft ebenfalls eine Funktion auf, die zyklisch das Auslesen über die serielle Schnittstelle anstößt und eine Datenaufbereitung durchführt. Dieser Funktion wird das Lidar-Objekt aus der zuvor beschriebenen Initialisierung zugewiesen. Die Datenaufbereitung besteht daraus, dass die zurückgegebenen Distanzen vom Sensor mit der Winkelauflösung verrechnet werden, sodass der gesamt Scanbereich des Lidar in einem Plot dargestellt werden kann. Die Ausgabe in dem Plot der GUI erfolgt ebenfalls über diese Funktion. Der Programm-Code ist nachfolgend dargestellt.
<div style="width:800px; height:300px; overflow:auto; border: 2px solid #088">
<source lang=c>
function []=ReadLidar(lidar)
%%startpoint und endpoint werden definiert, um den blinden Bereich des
%%Sensors zu berücksichtigen
start_point = 44;
end_point = 725;
cluster = 1; %Schrittweite der Werte


===Funktionsweise===
%die Winkel lassen sich berechnen durch Start und Endpunkt, sowie dem
%Winkelanteil der Werte (1024, da 10-Bit Auflösung)
angles=(((start_point-384):cluster:(end_point-384))*2*pi/1024)';
data_xy = zeros(682,2); %Datenarray wird erstellt


===Merkmale===
data = LidarScan(lidar)'; %Serieller lesevorgang wird gestartet
<br />
%%
<br />
%Die Daten werden in das Karthesische Koordinatensystem umgewandelt
<br />
data_xy(:,1)=-(data/1000).*sin(angles);
<br />
data_xy(:,2)=(data/1000).*cos(angles);
<br />
%ein Scatter-plot wird erstellt, um die einzelnen Messpunkte z
<br />
%visualisieren
<br />
scatter(data_xy(:,1),data_xy(:,2),'r.');
<br />
grid on
<br />
axis equal;
<br />
axis([-4.25 4.25 -4.25 4.25]);
shg


==Tabelle 2==
</source>
{| class="mw-datatable"
</div>
! style="font-weight: bold;" |
<br/>
! style="font-weight: bold;" |
Der eigentliche Auslesevorgang des Lidars bekommt wiederum das Lidar-Objekt übergeben und sendet dem Sensor den nach dem SCIP2.0-Protokoll spezifizierten Befehl zur Datenabfrage zu. Diese Funktion wurde vollständig aus einer [https://de.mathworks.com/matlabcentral/fileexchange/36700-hokuyo-urg-04lx-lidar-driver-for-matlab?focused=5233466&tab=function Toolbox] entnommen, ebenso wie die dort aufgerufene Decodierungsfunktion des SCIP2.0-Protkolls, die, wie zuvor beschrieben, für die Auswertung der Daten notwendig ist.<br/>
! style="font-weight: bold;" |
Der Button "Stop" beendet die Leseschleife des Lidars. Die Initialisierungsdaten bleiben dabei erhalten. Sollen die Initialisierungsdaten geänder werden, da beispielsweise der COM Port geändert wurde, besteht die Möglichkeit über den "Reset" Button alle seriellen Objekte und damit alle COM Ports, die durch MAtlab belegt werden wieder freizugeben.
! style="font-weight: bold;" |
! style="font-weight: bold;" |
! style="font-weight: bold;" |
! style="font-weight: bold;" |
|-
|
|
|
|
|
|
|
|-
|
|
|
|
|
|
|
|-
|
|
|
|
|
|
|
|-
|
|
|
|
|
|
|
|-
|
|
|
|
|
|
|
|-
|
|
|
|
|
|
|
|-
|}


==Ergebnis==
==Ergebnis==
Das Ergebnis der Arbeit ist eine Matlab GUI, die es ermöglicht den Sensor zu initialisieren, seine gemessenen Rohwerte auszulesen, diese aufzubereiten und schließlich in Form eines Plots auszugeben. Eine Forführung des laufenden Programms kann in [https://youtu.be/Gizjb0bY52c diesem Youtube Video] betrachtet werden.


==Ausblick und Fazit==
==Zusammenfassung==
Zunächst wurde das Grundprinzip eines Lidar Sensors vorgestellt, welcher in der Regel mit dem Phasendifferenzverfahren misst. Anschließend wurde der spezifische Sensor vorgestellt. Es folgte eine Erläuterung der möglich Digitalisierung der Messignale des Sensors, wobei sich da sowohl die Möglichkeit des klassischen Analog-Digital-Umsetzters, als auch die Möglichkeit der Verwendung eines Zeit-Digital-Umsetzers angeboten haben. Anschließend wurde das für den Sensor geltende Kommunikationsprotokoll vorgestellt. Dann wurde die Inbetriebnahme des Sensors beschrieben und ein Einblick in den Programmcode gegeben, sowie ein Video zu visualisierung des laufenden Sensors aufgenommen. Insgesamt wird der Lidar Sensor URG-04LX von der Firma Hokuyo erfolgreich in Betrieb genommen.
===Ausblick===
===Ausblick===
 
Da die Ansteuerung und Auswertung des Sensors in diesem Projekt ausschließlich mit Matlab stattgefunden hat, besteht für die Zukunft die Möglichkeit, diesen Prozess ebenfalls mit Simulink durchzuführen, um herauszufinden, ob sich dadurch möglicherweise Vorteile ergeben. Diese können beispielsweise im Bereich der Echtzeifähigkeit liegen.<br/>
 
In einem Ansatz wurde eine Simulinkimplementierung angestrebt, welche sich allerdings als schwierig herausgestellt hat, da das SCIP2.0 Protokoll über die Anforderung einer herkömmlichen seriellen Schnittstelle hinausgeht. Somit konnten die Standardblöcke, die in Simulink für serielle Kommunikation nciht verwendet werden. Ein weiterer Versuch ergab sich durch die Einbindung der Matlabfunktionen als Blöcke in Simulink. Dabei stellte sich jedoch heraus, dass die serielle Bibiliothek von Matlab nicht in Funktonsblöcken verwendbar ist. Aus Zeitgründen wurde dann die beschriebene Matlab-Lösung umgesetzt.<br/><br/>
===Fazit===
Ein Ansatz für die zukünftige Realisierung der Sensorauswertung in Simulink könnte möglicherweise dennoch mit den Standardblöcken realisierbar sein, indem man die Reihenfolge der zu sendenden Bits durch mehrere aneinander geschaltete Abfragen regelt und so gegebenenfalls die Möglichkeit besteht die Anforderungen des SCIP2.0-Protokolls zu erfüllen.
<br/>
<br/>


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




==Literatur==


getting started: [https://pdfs.semanticscholar.org/1f88/6a492fea6751ebe42f36d3f030d3115f3b6a.pdf]
==Literatur==
<references />
<references />
[https://pdfs.semanticscholar.org/1f88/6a492fea6751ebe42f36d3f030d3115f3b6a.pdf getting started]<br /><br />
----
→ zurück zum Hauptartikel: [[SigSys_SoSe2018| Signalverarbeitende Systeme Sommersemester 2018]]

Aktuelle Version vom 18. Oktober 2024, 12:39 Uhr

Sensor: Hokuyo URG-04

Autor: Simon Kohfeld
Betreuer: Prof. Schneider

Abbildung 1: Der Lidar URG-04LX [1]

Grundlagen Lidar

Der verwendete Sensor ist ein Lidar. Diese Bezeichung ist eine Abkürzung für die Technologie, die sich hinter diesem Sensor befindet. Der Begriff Lidar setzt sich aus den Worten Light Detection And Ranging zusammen. Man unterscheidet zwischen dem klassischen Lidar, der mit Licht bzw. Laser arbeitet, um Entfernungen zu messen, Doppler-Lidar, die den Doppler-Effekt nutzen, um Geschwindigkeiten zu bestimmen und Differential-Absorption-Lidar, die chemische Konzentrationen messen können.

Ein Lidar ist ein System, bestehend aus einer Laserdiode als Stahlungsquelle und einer Fotodiode als Empfänger, die das von Objekten reflektierte Laserlicht detektieren kann. Innerhalb des Lidars wird eine Signalaufbereitung nachgeschaltet, die aus einem variablen Verstärker (VGA) und einerm A/D - Wandler besteht.

Das Sendelicht wird in Form von Impulsen ausgesendet und bei Empfang der Fotodiode in Spannungsimpulse umgesetzt. Die Intensität der reflektierten Laserlichts ist dabei stark schwankend. Deshalb werden die Signale vor der Digitalisierung in dem variablen Verstärker aufbereitet. Aufgrund der kurzen Laserimpulse ist ein A/D - Wandler mit einer hohen Abtastrate erforderlich. Die Abtastrate hat dabei unmittelbaren Einfluss auf die Genauigkeit der Entfernungsmessung. Ein A/D - Wandler in einem Lidar-System erreicht eine Abtastrate von bis zu 3 GS/s (= 3 Giga Samples pro Sekunde) bei einer Bitzahl von 7.

Einsatzgebiete von Lidar-Sensoren sind beispielsweise militätrische Anwendungen, aber auch im Automotive-Bereich für Fahrassitenzsysteme oder in Mautsystemen zur Fahrzeugerkennung. Auch in SmartHome Anwendungen, wie beispielsweise im Staubsaugerroboter kommen Lidar-Systeme zum Einsatz. In der Industrie haben Lidar-Sensoren häufig Sicherheitsrelevante Funktionen [2].

Vorstellung des Sensors

Abbildung 2: Technische Daten des URG-04LX

Der URG-04LX, dargestell in Abbildung 1, ist ein klassischer Lidar mit einem Laser zum Scannen seines Umfelds. Dazu Verwendet dieser einen Infrarot-Laser mit einer Wellenlänge von 785 nm derLaser Klasse 1. Der Scanner deckt einen Bereich von 240° bei einem maximalen Radius von 4 m ab. Dabei löst der Sensor in 0,36 ° auf. Betrieben wird der Sensor mit einer Gleichspannung von 5 Volt und kann über USB oder Sub-D Stecker mit einer Auswerteeinheit verbunden werden. Angesprochen wird der Sensor über das serielle RS232-Protokoll. Die genannten technischen Daten sind in Abbildung 2 dargestellt.

Der URG-04LX nutzt für die Entfernungsmessung das Verfahren der Phasendifferenz, da damit eine stabile Messung möglich ist, ohne große Einflüsse der Farbe oder der Reflexion eines Objektes. Der Sensor ist nach dem IEC60947-5-2 Standard entwickelt und entspricht demnach dem Standard für industrielle Anwendungen.

Der Sensor sendet mit einem Laser Impulse in einem Radius von 240° und berechnet die Entfernung auf Basis der Phasenverschiebung bis zum Empfang des reflektierten Signals. Der Laser hat eine Wellenlänge von 785 nm und ist mit Laserklasse 1 eingestuft. Der Lidar liefert pro Messung 683 Werte, also alle 0,36° einen entsprechenden Entfernungswert. Die maximal messbare Distanz ist 4 m. Die Scanrichtung ist gegen den Uhrzeigersinn. Angesprochen wird der Sensor per USB über die serielle Schnittstelle.

Als Rohwert misst der Sensor den zeitlichen Abstand seiner Sendeimpulse zu den empfangenen Impulsen,um diese Zeit dann in eine Entfernung umzurechnen. Somit findet die Vorverarbeitung der Messdaten bereits im Sensor statt. Dafür verwendet der Sensor eine Formel, mit der sich die Distanz auf Basis der Phasenverschiebung des Signals berechnen lässt. Der Sensor liefert die Distanzwerte über die serielle Schnittstelle in Codierter Form, um die Übertragungszeit zu reduzieren. Entweder kommen die Daten in Form von zwei, drei oder von vier codierten Zeichen. Die Einheit der übetragenen Distanz ist mm.

Spezifikationsübersicht des URG-04LX

Name des Produkts Laser Entfernungsmesser
Lichtquelle Halbleiter Laserdiode (Wellenlänge 785 nm)
Versorgungsspannung 5VDC
Maximale Reichweite 0,002 m bis 5,6 m
Messbereich 0,006 m bis 4 m
Messauflösung 0,001 m
Genauigkeit (20mm - 1000mm) ± 0,03 m
Genauigkeit (1000mm - 4000mm) ± 3 %
Horizontaler Scanwinkel 240°
Winkelauflösung 0,36°
Anzahl Scanschritte 683
Scangeschwindigkeit 100 ms/scan
Schnittstelle RS-232 (seriell)



Analog-Digital-Umsetzung

Abbildung 3: Phasendifferenzverfahren

Für die Analog-Digital-Umsetzung kann für einen Lidar grundsätzlich ein Zeit-Digital-Umsetzer oder ein Analog-Digital-Umsetzer verwendet werden. Die Auswahl des Systems ist dabei abhängig von dem Messprinzip des Lidar-Sensors. Die Entfernungsmessung findet dabei entweder über eine Lichtlaufzeitmessung oder eine Phasendifferenzmessung statt[3].

Bei der Laufzeitmessung wird die sogenannte Pulslaufzeit gemessen, die misst, wie lange ein ausgesendeter Lichpuls benötigt um zurück zur Quelle reflektiert zu werden. Durch das Messen dieser Pulslaufzeit kann anhand der Lichgeschwindigkeit die Distanz zwischen Lichtquelle und Objekt bestimmt werden. Dadurch ermöglicht das Verfahren eine geringe Reaktionszeit. Nachteilig ist, dass die Messung in sehr kurzen Zeitabständen im Nano- bis Picosekundenbereich erfolgt und so eine Messung im Nahbereich sehr fehlerbehaftet ist.
Die Phasendifferenzmessung, die auch im vorliegenden Hokuyo Lidar verwendet wird, arbeitet mit einer kontinuierlichen Laserlichtwelle im Infrarotbereich. Diese Laserlichtwelle ist das Trägersignal und wird mit Sinussignalen unterschiedlicher Frequenz moduliert. Das Prinzip der Phasendifferenzmessung ist in Abbildung 3 dargestellt [4].
Abhängig vom Messverfahren kann für die Analog-Digital-Umsetzung entweder ein klassischer Analog-Digital-Umsetzer oder ein Zeit-Digital-Umsetzer verwendet werden. Beide Optionen werden nachfolgend beschrieben.

Lösung 1: Zeit-Digital-Umsetzer

Anders als bei der klassischen Analog-Digital-Umsetzung, bei welcher eine Spannung in einen Digitalwert umgewandelt wird, wählt man bie einer Zeit-Digital-Wandlung die physikalische Größe Zeit als Wandelgröße. Wie auch bei der Spannungswandlung, kann die Differenz von Zeit verwendet werden, um einen Digitalwert zu generieren. Wie bei der Spannungswandlung, ist auch bei der Zeitwandlung die Auflösung der wichtigste Faktor des Wandlers. Das bedeutet im Fall des Zeit-Digital-Wandlers wird eine hohe Zeitauflösung benötigt, um genaue Werte liefern zu können. Das Messprinzip ergibt aus aus einem Vergleich von gemessenen Zeitdifferenzen und durch Gatter festgelegte Laufzeiten. Es wird erfasst, wie viele Gatterlaufzeiten der Zeitdifferenz entsprechen. Die zu messende Zeitdifferenz wird durch STart- und Stoppsignale fixiert und aus der Anzahl der Gatterlaufzeiten wird das Digitalsignal abgeleitet. Zeit-Digital-Wandler auf dem Markt erreichen Zeotauflösungen im Picosekunden Bereich [5]. Ein Beispiel dafür ist der TDC7201 von Texas Instruments mit einer Auflösung von 55 ps.

Lösung 2: Analog-Digital-Umsetzer

Auch für die klassische Umwandlung einer gemessenen Spannung in ein Digitales Signal ist bei einem Lidar eine sehr hohe Verarbeitungsgeschwindigkeit wichtig. Diese liefert vor allem ein Flash-Wandler, welcher mit dem Parallelverfahren arbeitet. Dieser enthält für jede Spannungsstufe einen Komparator, welcher jeweils die Eingangsspannung mir seiner Spannungsstufe vergleicht und ensprechend des Vergleichsergebnisses seinen Ausgang beschaltet. Für eine 10-Bit Auflösung benötigt ein Flash-Umsetzer dementsprechend 1023 Komparatoren, wodurch der Preis eines solchen Wandlers schnell sehr hoch wird [6]. Der beschriebene Flash-Umsetzer reicht allerdings je nach Genauigkeitsanforderung an den Lidar nicht immer aus, soadass dieses sogenannte einstufige Parallelverfahren der Flash-Umsetzer zu einem mehrstufigen Parallelverfahren modifiziert wird. Diese Pipeline-Umsetzer können eine höhere Auflösung bei bis zu 250 MS/s erreichen und liegen preislich dabei unter dem Niveau eines Flash-Umsetzers, durch die Verwendung weniger Komparatoren. Ein Beispiel für einen Pipeline-Umsetzer, der die Anforderungen für eine Lidar-Anwendung erfüllt ist der AD9645 von Analog Devices.

Kommunikation mit dem Hokuyo URG-04LX

Abbildung 4: Zwei-Zeichen-Codierung

Damit der Hokuyo LiDAR verwendet werden kann, muss zunächst die Kommunikation mit diesem hergestellt werden. Dazu stehten am LiDAR zwei Anschlüsse zur Verfügung. Dabei handelt es sich um einen Micro-Usb-Port und um eine RS-232-Schnittstelle. Der USB-Port dienst dabei lediglich der Spannungsversporgung. Den seriellen Anschluss, kann man über ein mitgeliefertes Kabel entweder ebenfalls per USB mit einem PC verbinden oder mit der über einen Sub-D-Stecker herausgeführten RS-232, also der seriellen Schnittstelle an eine Steuerungs, bzw- Auswerteeinheit anschließen.Der USB Port unterstützt ebenfalls das RS232-Protokoll [7].

Die empfohlene Kommunikation erfolgt über das sogennante SCIP2.0 Protokoll, welches von der "sensor interface research group" entwickelt wurde und eine flexible und effiziente Einbindung in Roboter gestützte Automatisierungsprozesse ermöglichen soll. Die "sensor interface research group" ist eine Institution des Intelligent Robot Laboratory der Universität Tsukuba. Das genannte SCIP2.0 Protokoll soll nachfolgend erläutert werden [7].

Damit die Kommunikation von einem PC über USB zu dem Sensor funktioniert, muss zunächst der URG-04LX Treiber auf der Herstellerseite heruntergeladen und installiert werden. Den fertigen Treiber bietet der Hersteller nur für Windoes-Betriebsysteme an. Liux und Apple Betriebssysteme werden allerdings grundsätzlich auch unterstützt, bedürfen aber einem zusätzlichen Programmieraufwand. Die Daten, die der Sensor über die serielle Schnittstelle liefert, werden codiert, um die Übertragungszeit zwischen Host und dem Sensor zu minimieren. Das bedeutet, dass die empfangenen Daten von dem Host dekodiert werden müssen, um diese nutzen zu können. Abhängig von der Größe der Datenpakete können drei verschiedene Codierungsverfahren genutzt werden, um die Daten zu komprimieren. Zur Verfügung stehen die Zwei-Zeichen-Codierung, die Drei-Zeichen-Codierung und die Vier-Zeichen-Codierung. Die Zwei-Zeichen-Codierung wird exemplarisch nachfolgend dargestellt [7].

Zwei-Zeichen-Codierung

Die Zwei-Zeichen-Codierung ermöglicht die schnellere Datenübertragung bei einer maximalen Größe von 12 Bits. Beim Codierungsvorgang wird das Datenpaket in seine 6 hohen und 6 niedrigen Bits aufgeteilt und eine 30H wird zu beiden hinzu addiert, um sie in ASCII-Zeichen zu konvertieren. Dieser Codiervorgang und auch der Decodiervorgang sind Schrittweise in Abbildung 4 dargestellt. Die beiden übrigen Verfahren arbeiten nach dem selben Prinzip. Es werden also wiederum 6 Bit-Pakete aus dem Datensatz erstellt und durch Addition mit 30H ASCII-Zeichen aus den jeweiligen Bitsätzen generiert. Die Drei-Zeichen-Codierung unterstützte dann dementsprechend 18 Bit und die Vier-Zeichen-Codierung 24 Bit [7].

Kommunikationsformat

Abbildung 5: Kommunikationsformat für Host und Lidar

Damit Host und Sensor über die gegebenen Schnittstellen miteinander kommunizieren und Daten austauschen können, definiert das SCIP2.0-Protokoll Befehle. Diese Befehle folgen einem bestimmten Format, dem Kommunikationsformat. Der Kommunikationsaufbau ist bei Host und Sensor unterschiedlich. Für beide Komponenten ist das Kommunikationsformat in Abbildung 5 dargestellt.

Die Kommunikation wird immer vom Host initiiert. Dazu sendet er einen Befehl, bestehend aus einem Befehlszeichen, einem Parameter, bis zu 16 String-Zeichen und einem Line Feed oder Carriage Return, bzw. beidem. Wenn der Sensor die Befehle empfängt, antwortet dieser mit einem Befehls-Echo, also einer Wiederhohlung der vollständigen Host-Sequenz. Dann folgt ein Status, eine Prüfsumme und ein Line Feed, um dann mit dem des empfangenen Befehls entsprechendem Datensatz fortzufahren. Die Daten sind wiederum gefolgt von einer Prüfsumme und zwei Line Feed zur Terminierung.
Der Befehlcode besteht aus zwei Bytes und steht an jedem Beginn einer Kommunikation. Parameter können dazu verwendet werden die Sensoreinstellungen zu ändern oder Daten anzufordern. Die String Zeichen sind optionale Information zum Befehl. Der Status gibt an, ob eine Anfrage erfolgreich war oder ob Fehler aufgetreten sind und die Daten sind die eigentlichen Informationen, die relevant sind. Der Sensor stellt über das Protokoll verschiedene Befehle bereit, die im Kommunikationsptotokoll zum SCIP2.0 dargestellt sind. Dort sind ebenfalls die möglichen Fehlercodes des Sensors, sowie ein exemplarischer Nachrichtenverlauf dargestellt [7].

Zusatzinformation

Der URG-04LX arbeitet im Auslieferungszustand noch mit dem Vorgängerprotokoll SCIP1.1. Es wird allerdings empfohlen diesen direkt bei inbetirebnahme auf das neuste Protokoll zu aktualisieren. Aus diesem Grund ist lediglich das SCIP2.0 beschrieben.

Inbetriebnahme des Hokuyo URG-04LX

Damit der URG-04LX auf einem Windows PC funktioniert, muss wie bereits beschrieben, zunächst der passende Treiber installiert werden. Nachdem die Installation abgeschlossen ist, gibt es verschiedene Möglichkeiten die Auswertung der Daten vorzunehmen. Das gewählte Vorgehen wird nachfolgend beschrieben.

Erste Schritte

Abbildung 6: Windows Tool zur Auslesung des Lidar [8]

Für die Inbetriebnahme wird zunächst das auf der Herstellerseite zu Verfügung gestellte Programm verwendet, um einen Überblick über das Sensorverhalten zu bekommen. Ein Screenshot dieser verwendeten Software ist in Abbildung 6 gezeigt. Das Tool bietet die Möglichkeit den für den Sensor passenden COM Port auszuwählen und über einen Verbinden-Button beginnt unmittelbar die Visualisierung der gemessenen Sensorwerte in einer Grafik auf der linken Seite der Oberfläche.

Verwendung des Sensors in Matlab

Für die Verwendung des Sensors in Matlab gibt es bereits verschiedene Ansätze von unterschiedlichen Entwicklern, die ihre selbst erstellten Toolboxen zur Verfügung stellen. Aus diesem Grund wurden die verschiedenen Toolboxen gesichtet, modifiziert und diese in einer neu erstellten GUI in Matlab verwendet. Entstanden ist so ein Matlab-Programm mit vier Buttons und einer Eingabemöglichkeit für die serielle Schnittstelle, wie in Abbildung 7 zu sehen.
Der Plot zeigt dabei die ausgewerteten Entfernungsdaten des Lidars in Metern an. Der Sensor befindet sich im Ursprung des Plots. In Abbildung 7 ist deutlich eine Wand zu sehen, die der Sensor misst. Eine gegenprobe mit einem Maßband zeigt, dass die Genauigkeit im Bereich um einen Zentimeter liegt.

Abbildung 7: Matlab GUI zur Auslesung des Lidar

Hinter dem Button "Initialisieren" verbirgt sich der Matlab-Code, der den empfohlenen Ablauf aus dem Dokument des SCIP2.0 Protokolls umsetzt. Dieser Code ist nachfolgend dargestellt.

%%Funktion bekommt COM Port übergeben und gibt ein lidar Objekt heraus
function [lidar] = SetupLidar(COM)
%%Erstellen eines lidar-Objektes: Konfiguration des Com Ports und der Baudrate
lidar=serial(COM,'baudrate',115200); 
set(lidar,'Timeout',0.1);
set(lidar,'InputBufferSize',40000); %Konfiguration der Buffergröße
set(lidar,'Terminator','CR'); %Setzen der Terminator-Sequenz
fopen(lidar);%Herstellung der Verbindung
pause(0.1);
fprintf(lidar,'SCIP2.0'); %Konfiguration des Kommunikationsprotokolls
pause(0.1);
%%Vorgehen laut Kommunikationsprotokoll, um Zwei-Zeichen-Codierung zu
%%aktivieren und um den gewünschten Modus zu wählen
fscanf(lidar);
fprintf(lidar,'VV');
pause(0.1);
fscanf(lidar)
fprintf(lidar,'BM');
pause(0.1);
fscanf(lidar)
end


Der Button "Start" ruft ebenfalls eine Funktion auf, die zyklisch das Auslesen über die serielle Schnittstelle anstößt und eine Datenaufbereitung durchführt. Dieser Funktion wird das Lidar-Objekt aus der zuvor beschriebenen Initialisierung zugewiesen. Die Datenaufbereitung besteht daraus, dass die zurückgegebenen Distanzen vom Sensor mit der Winkelauflösung verrechnet werden, sodass der gesamt Scanbereich des Lidar in einem Plot dargestellt werden kann. Die Ausgabe in dem Plot der GUI erfolgt ebenfalls über diese Funktion. Der Programm-Code ist nachfolgend dargestellt.

function []=ReadLidar(lidar)
%%startpoint und endpoint werden definiert, um den blinden Bereich des
%%Sensors zu berücksichtigen
start_point = 44; 
end_point = 725;
cluster = 1; %Schrittweite der Werte

%die Winkel lassen sich berechnen durch Start und Endpunkt, sowie dem
%Winkelanteil der Werte (1024, da 10-Bit Auflösung)
angles=(((start_point-384):cluster:(end_point-384))*2*pi/1024)';
data_xy = zeros(682,2); %Datenarray wird erstellt

data = LidarScan(lidar)'; %Serieller lesevorgang wird gestartet
%%
%Die Daten werden in das Karthesische Koordinatensystem umgewandelt
data_xy(:,1)=-(data/1000).*sin(angles);
data_xy(:,2)=(data/1000).*cos(angles);
%ein Scatter-plot wird erstellt, um die einzelnen Messpunkte z
%visualisieren
scatter(data_xy(:,1),data_xy(:,2),'r.');
grid on
axis equal;
axis([-4.25 4.25 -4.25 4.25]);
shg


Der eigentliche Auslesevorgang des Lidars bekommt wiederum das Lidar-Objekt übergeben und sendet dem Sensor den nach dem SCIP2.0-Protokoll spezifizierten Befehl zur Datenabfrage zu. Diese Funktion wurde vollständig aus einer Toolbox entnommen, ebenso wie die dort aufgerufene Decodierungsfunktion des SCIP2.0-Protkolls, die, wie zuvor beschrieben, für die Auswertung der Daten notwendig ist.
Der Button "Stop" beendet die Leseschleife des Lidars. Die Initialisierungsdaten bleiben dabei erhalten. Sollen die Initialisierungsdaten geänder werden, da beispielsweise der COM Port geändert wurde, besteht die Möglichkeit über den "Reset" Button alle seriellen Objekte und damit alle COM Ports, die durch MAtlab belegt werden wieder freizugeben.

Ergebnis

Das Ergebnis der Arbeit ist eine Matlab GUI, die es ermöglicht den Sensor zu initialisieren, seine gemessenen Rohwerte auszulesen, diese aufzubereiten und schließlich in Form eines Plots auszugeben. Eine Forführung des laufenden Programms kann in diesem Youtube Video betrachtet werden.

Zusammenfassung

Zunächst wurde das Grundprinzip eines Lidar Sensors vorgestellt, welcher in der Regel mit dem Phasendifferenzverfahren misst. Anschließend wurde der spezifische Sensor vorgestellt. Es folgte eine Erläuterung der möglich Digitalisierung der Messignale des Sensors, wobei sich da sowohl die Möglichkeit des klassischen Analog-Digital-Umsetzters, als auch die Möglichkeit der Verwendung eines Zeit-Digital-Umsetzers angeboten haben. Anschließend wurde das für den Sensor geltende Kommunikationsprotokoll vorgestellt. Dann wurde die Inbetriebnahme des Sensors beschrieben und ein Einblick in den Programmcode gegeben, sowie ein Video zu visualisierung des laufenden Sensors aufgenommen. Insgesamt wird der Lidar Sensor URG-04LX von der Firma Hokuyo erfolgreich in Betrieb genommen.

Ausblick

Da die Ansteuerung und Auswertung des Sensors in diesem Projekt ausschließlich mit Matlab stattgefunden hat, besteht für die Zukunft die Möglichkeit, diesen Prozess ebenfalls mit Simulink durchzuführen, um herauszufinden, ob sich dadurch möglicherweise Vorteile ergeben. Diese können beispielsweise im Bereich der Echtzeifähigkeit liegen.
In einem Ansatz wurde eine Simulinkimplementierung angestrebt, welche sich allerdings als schwierig herausgestellt hat, da das SCIP2.0 Protokoll über die Anforderung einer herkömmlichen seriellen Schnittstelle hinausgeht. Somit konnten die Standardblöcke, die in Simulink für serielle Kommunikation nciht verwendet werden. Ein weiterer Versuch ergab sich durch die Einbindung der Matlabfunktionen als Blöcke in Simulink. Dabei stellte sich jedoch heraus, dass die serielle Bibiliothek von Matlab nicht in Funktonsblöcken verwendbar ist. Aus Zeitgründen wurde dann die beschriebene Matlab-Lösung umgesetzt.

Ein Ansatz für die zukünftige Realisierung der Sensorauswertung in Simulink könnte möglicherweise dennoch mit den Standardblöcken realisierbar sein, indem man die Reihenfolge der zu sendenden Bits durch mehrere aneinander geschaltete Abfragen regelt und so gegebenenfalls die Möglichkeit besteht die Anforderungen des SCIP2.0-Protokolls zu erfüllen.



Literatur

  1. Quality Robotics & Electronics. - letzter Aufruf: 06.07.2018 https://www.active-robots.com/hokuyo-robotics-laser-urg-04-lx.html
  2. IT-Wissen: Light Detection and Ranging. - letzter Aufruf: 05.07.2018 https://www.itwissen.info/LIDAR-light-detection-and-ranging.html
  3. Analog Applications Journal: How to build a LIDAR system with a time-to-digital converter. - letzter Aufruf: 05.07.2018 http://www.ti.com/lit/an/slyt706/slyt706.pdf
  4. AnalogDialgue: Which ADC Architecture Is Right for Your Application? - letzter Aufruf: 05.07.2018 http://www.analog.com/en/analog-dialogue/articles/the-right-adc-architecture.html
  5. IT-Wissen: Zeit-Digital-Wandler. - letzter Aufruf: 05.07.2018 https://www.itwissen.info/Zeit-Digital-Wandler-time-to-digital-converter-TDC.html
  6. Digitaltechnik: Analog-Digital-Wandler. - letzter Aufruf: 06.07.2018 https://www.swisseduc.ch/informatik/hardware/analog_digital_wandler/docs/script.pdf
  7. 7,0 7,1 7,2 7,3 7,4 Communication Protocol Specification For SCIP2.0 Standard. - letzter Aufruf: 06.07.2018 http://library.isr.ist.utl.pt/docs/roswiki/attachments/hokuyo_node/URG-Series_SCIP2_Compatible_Communication_Specification_ENG.pdf
  8. URG Network. - letzter Aufruf: 06.07.2018 https://sourceforge.net/p/urgnetwork/wiki/driver_win10_en/

getting started



→ zurück zum Hauptartikel: Signalverarbeitende Systeme Sommersemester 2018