Low-Cost-Lidar Verarbeitung mit Matlab/Simulink

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen

Sensor/Vorgängerprojekt: Low-Cost_Lidar_Objekterkennung_mit_Matlab/Simulink

Aufgabenstellung

Im Studienfach Signalverarbeitende Systeme Sommersemester 2018 des Studiengangs BSE ist die folgende Arbeit entstanden.

Die Aufgabenstellung ist folgendermaßen definiert worden:

Aufgabenstellung

  • Lesen Sie den Sensor mit MATLAB/Simulink aus (MATLAB/Simulink Toolbox).
  • Beschreiben, untersuchen und verstehen Sie Ihre Signalverarbeitungskette.

Weitere Informationen zur Aufgabenstellung


Zusätzlich soll ein Youtube Video erstellt werden, in dem der Sensor betrieben und erklärt wird.

Lidar Technologie

Die Aufgabe von Lidar Sensoren ist es die Entfernung und den Winkel, ausgehend von der Sensornormalen, von Gegenständen und Hindernissen zu bestimmen. Im Stand der Technik gibt es zwei übliche Messverfahren um dies zu bestimmen. Das verbreitetste Verfahren ist das sogenannte "time of flight" (Deutsch: Zeit des Flugs) verfahren. Dabei wird ein Lichtstrahl von einer Sendeeinheit ausgesendet, von einem Objekt reflektiert und anschließend von einem Empfängermodul detektiert. Die Entfernung des zu messenden Objekts wird ermittelt, indem man die Zeit misst, die der Lichtimpuls benötigt, um die gesamte Strecke zu überwinden. Da die Geschwindigkeit des Lichtes eine bekannte konstante ist, kann man die Entfernung somit sehr genau bestimmen. Wichtig ist dabei, die halbe Strecke zu verwenden, da immer Hin- und Rückweg gemessen werden.

Um die Genauigkeit der Messung noch weiter zu erhöhen, wurde das Phase Shift (Deutsch: Phasendifferenzverfahren) entwickelt. Zusätzlich zur Laufzeitmessung wird die Wellenlänge des ausgegebenen Sendersignals variiert. Durch die Phasenverschiebung zwischen Sender und Empfänger kann auf die Entfernung zurück geschlossen werden. Dabei ist allerdings zu beachten, dass nur während eines kompletten Phasenablaufs gemessen werden kann. Nach einem Phasendurchlauf wiederholt sich der Wert und es kann sein, das statt dem erwarteten Befehls ein vielfaches detektiert wird. Die Wellenlänge muss also immer dem zu messenden Bereich angepasst werden.

Ein drittes und neues Verfahren nutzt Triangulation um auf die Entfernung zu ermitteln und wurde für das spezielle Einsatzgebiet des Staubsaugerroboters von der Firma Neato entwickelt. Bei einem vertikal horizontal orientiertem Aufbau ist immer eine gewisse Distanz zwischen Sender um Empfänger vorhanden. Dadurch ergibt sich immer ein gleichschenkliges Dreieck zwischen Sender, Objekt und Empfänger. Da es sich bei der Distanz zwischen Sender und Empfänger um eine mechanisch festgelegte Größe handelt, kann man mit der Information, in welchem Winkel das Signal auf dem Empfänger trifft, die Entfernung bestimmen. Die Hypotenuse des Dreiecks ist dabei die ermittelte Strecke. Dieses Verfahren ist von allen vorgestellten das ungenauste, hat aber eine sehr einfache Elektronik und Optik. Dadurch kann der Sensor sehr kostengünstig hergestellt werden. Dies war laut Patentschrift auch der Grund, warum der Hersteller Neato dieses Verfahren entwickelt hat und bis heute in Ihren Staubsauger-Robotern einsetzt.

Der verwendete Lidarsensor und dessen mechanischer und elektrischer Aufbau

Der verwendete Lidarsensor ist im Internet unter diversen Bezeichnungen zu finden. Die geläufigsten sind Neato LDS, Neato lidar, XV-11 lidar und XV-11 sensor.

Die Patentanmeldung der Firma Neato sowie die Publikation vom IEEE International Conference on Robotics and Automation (Pasadena, CA, USA, May 19-23) gibt einige Hintergrundinformationen über den mechanischen und elektrischen Aufbau des Lidarscanners.

Mechanischer Aufbau: Im inneren des Lidarscanners befindet sich ein Sendemodul und ein Empfangsmodul. Das Sendemodul besteht aus einer Laserdiode, die ein für das menschliche Auge nicht sichtbares Signal emittiert. Vor der Diode befindet sich eine Optik, die das Licht bündelt und damit die Signalstärke in Emitterrichtung erhöht. Dadurch tritt ein sehr fokussierter Strahl aus dem Gerät aus. Das Empfangsmodul besteht aus einer photoelektrischen Empfangselektronik und einer Optik. Sie arbeitet nach dem ähnlichen Prinzip, wie in Digitalkameras eingesetzten Bildsensoren. Es handelt sich dabei um ein Array aus Lichtempfindlichen Dioden, die bei auftreffen von Licht elektrische Spannung erzeugen. Die verwendete Optik bündelt das Empfangssignal und beugt es so, dass bei unterschiedlichen Einfallswinkeln, unterschiedliche Bereiche des Bildsensors getroffen werden. Dadurch kann der Sensor nicht nur die Intensität des Signals messen, sondern auch der Winkel aus dem das Signal den Sensor trifft. um die optische Qualität des Signals zu verbessern, wird zusätzlich ein Filterglas zwischen Optik und Empfangselektronik platziert. Dieser sorgt dafür, das ein Großteil des empfangenen Umgebungslichts nicht auf den Sensor trifft, sondern nur das ausgesendete Signal. Dieser Filter filtert außerhalb des ähnlichen Wellenlängenbereich der Laserdiode, in diesem Fall um 650 nm.

Um nicht nur in eine Richtung, sondern 360° messen zu können, ist die ganze Signaleinheit über einem Riemenantrieb mit der Basis des Sensors verbunden. Der Motor kann den Sensor frei mit circa. 50 Umdrehungen pro Minute drehen.

Elektrischer Aufbau:Im Inneren des Lidarscanners ist ein Blackfin Processor verantwortlich für die Datenverarbeitung, Taktung, Koordination und Kommunikation nach draußen verantwortlich. Der Signalablauf startet mit dem Befehl an der Laserdiode, einen Lichtimpuls auszusenden. Dieser Lichtimpuls wird von der Empfangselektronik empfangen und an den Prozessor übergeben. Dieser interpretiert aus den gemessenen Signalstärken den Winkel und damit die Entfernung des reflektierenden Objekts. Mit der Information, welcher Winkel zum Zeitpunkt des Messvorgangs der Messkopf hatte, kann zusätzlich zur Entfernung auch die Winkelposition des Objekts ermittelt werden. Die empfangenen Daten werden im seriellen Flash-Speicher zwischen gepuffert und über die serielle RS232 Schnittstelle ausgegeben.

Das Einsatzgebiet des Lidarsensors

Neato Staubsauger an Ladestation

Der verwendete Lidarsensor ist bei einigen Staubsaugermodellen des Herstellers Neato im Einsatz. Dabei wird der Lidarsensor verwendet um die Umgebung zu scannen und damit Hindernisse zu umfahren. Der Staubsauger erstellt mit Hilfe der vom Lidarscanner aufgenommenen Daten ein genaues Abbild der Wohnung und verwendet diese um effizienter beim Abfahren der Wohnung vorzugehen.

Die elektrischen Schnittstellen des Lidarsensors

Verkabelung mit Hilfe vom Arduino UNO R3


Der Lidarscanner besitzt zwei Stecker. Der erste Stecker besitzt zwei Adern und dient der Stromversorgung des Motors. Um den Motor anzutreiben wird 5V Gleichstrom benötigt. Das rote Kabel ist dabei +5V und das schwarze auf Masse zu legen. Der zweite Stecker besitzt 4 Adern. Schwarz und Rot dienen der Stromversorgung der Auswerte-Hardware und benötigt 3,3V. Rot ist dabei +3,3V und Schwarz die Masse. Zur Datenübertragung werden die zwei weiteren Adern verwendet. Hierbei handelt es sich um eine serielle Schnittstelle bei der braun der TX und orange der RX Pfad bildet.

Bei den beiden Steckern handelt es sich um einen JST PH Stecker mit 2mm Pitsch. Technische Informationen sind unter folgendem Link zu finden:

JST Automotive Steckeverbinder

Falls die Gegenstecker benötigt werden, können Sie zum Beispiel auf folgender Seite bestellt werden:

Mouser Elektronik Versand


Sobald der Lidar-Sensor elektrisch verbunden ist, sendet er die folgenden Informationen über die serielle Schnittstelle:

*Piccolo Laser Distance Scanner
Copyright (c) 2009-2011 Neato Robotics, Inc.
All Rights Reserved

Loader V2.5.15295
CPU F2802x/c001
Serial KSH14415AA-0358429
LastCal [5371726C]
Runtime V2.6.15295
#Spin...3 ESCs or BREAK to abort

Die Programmbefehle des Lidarsensors

Sobald die Serielle Verbindung aufgebaut ist, kann der Lidarsensor mit den folgenden Befehlen angesprochen werden:

GetVersion Der Lidarsensor gibt mit mit diesem Befehl die aktuelle Firmware und weitere Informationen aus. Help Der Befehl Help dient dazu, alle verfügbaren Befehle anzuzeigen. 'Log

  • SaveCal

Hiermit können Kalibrierdaten ausgelesen werden.

  • SetBaud

Mit diesem Befehl kann die Baudrate geändert werden.*

  • SetSerial

Hiermit kann die Seriennummer verändert werden.*

  • Upload

Hiermit kösnnen Daten an den wie Softwareupdates gesendet werden.*

  • Wanderer

Der Befehl Wanderer gibt ein Eichhörnchen Bild in ASCII Code aus.

  • Calibrate b16 b8 SunBlind loop2AA loop155

Hiermit kann der Sensor kalibriert werden.*

  • GetCal A B C LPT LFL LFT LFH IMX IB LPI LCH LPD ANG

Hiermit können Kalibrierdaten ausgelesen werden.

  • SetCal A B C LPT LFL LFT LFH IMX IB LPI LCH LPD ANG

Hiermit können Kalibrierdaten gezielt geschrieben werden.*

  • Spin Fake DotX DotI Text Hash Timing Foto RPS Pac

Hiermit kann eine Drehung durch den Motor zu Testzwecken simuliert werden. TestEncoder Dient Testzwecken.

*Hier ist Vorsicht geboten, da dadurch der Sensor unbrauchbar werden kann.

Die Rohdaten

Die Rohdaten die vom Sensor zur Verfügung gestellt werden sind von folgendem Format:

<start> <index> <speed_L> <speed_H> [Data 0] [Data 1] [Data 2] [Data 3] <checksum_L> <checksum_H>

start ist immer 0xFA

index ist eine Indexzahl, die von 0XA0 bis 0XF9 geht. Somit geht diese Zahl von 0 bis 89 und springt dann wieder auf 0. Damit können verloren gegangene Pakete erkannt werden.

speed_L und speed_H ist die Geschwindigkeit vom Motor in 64-tel Umdrehungen pro Minute. Die Information ist 2 Byte lang, mit 6 Nochkommastellen enthalten.

Data 0-3 überträgt vier mal die Entfernung des gemessenen Objekts und ist vier Byte lang.

Dabei steht im Byte 0 die Distanz in mm, im Byte 1 entweder ein Fehler oder erneut die Distanz aus zweiter Messung, im Byte 2 die Signal Stärke der ersten Messung und im Byte 3 die Signalstärke der zweiten Messung:

byte 0 : <distance 7:0>

byte 1 : <"invalid data" flag> <"strength warning" flag> <distance 13:8>

byte 2 : <signal strength 7:0>

byte 3 : <signal strength 15:8>

<checksum_L> <checksum_H> Überprüft die gesendeten Daten noch mal mit einer Checksumme. Damit kann am Sender erkannt werden ob alle Daten erfolgreich übermittelt wurden und die Daten weiter verwendet werden können.

Auswertung der Rohdaten

Mit Hilfe der Seriellen Schnittstelle wurden die Rohdaten des Lidarsensors im Betrieb aufgenommen. Sobald der Lidarsensor in Drehung versetzt wurde, werden Daten an den PC übertragen. Die Daten wurden mit dem Tool Hyper Terminal aufgenommen und im hexadezimalen Format ausgewertet. Dabei wird das Zeichen 0xFA als Startsignal für ein Datenpaket verwendet. Dabei fällt auf, das die Datenpakete die übertragen wurden, bei den enthaltenen Informationen und der Länge des Datenstrings Fehler aufwies. Der Sensor schickte nur bei kurzen Abschnitten die erwarteten Datenpakete und auch hier waren einige fehlerhaft. Ein Beispiel für Fehler ist im unterem Bild zu erkennen:



Die Rohdaten der Messung sind hier zu finden:

Datei:Rohdaten Neato.zip

Die Rohdatenpakete werden auch wiederholt von folgendem Inhalt unterbrochen (Dargestellt in ASCII):


Loader V2.5.15295

CPU F2802x/c001

Serial WTD47313AA-°»··LNR LastCal [5371726C]

Runtime V2.6.15295

  1. ê pˆaÿýõÛo¯Wmýu[{{¿o{¿{[u}kÿ¯¯¯ ü�G€ ÿÿû·?ÿ[ÿ÷ÿZÿ÷?ýÿüxÎT:%óÿgì o0+[ÿ�¾ë€öÿïïÿÿÛÀûÿ:)

Piccolo Laser Distance Scanner

Copyright¿¯{­¿»¿¿k·ëëû{Õõݽ}[oboti»¯ík½í¯µ/±½ý[µ�‹ÍReserved


Dieses Verhalten ist nicht wie erwartet und lässt darauf zurück schließen, das der Prozessor neustartet. Bei jedem trennen und erneut verbinden der Stromversorgung wird eine ähnliche Zeichenfolge ausgegeben. Eine detaillierte Fehleranalyse ist weiter unten im Artikel zu finden.

Da die Rohdaten, die vom Sensor ausgegeben werden fehlerhaft sind, werden im weiteren Verlauf die veröffentlichen Messdaten und Informationen der Firma Neato als Grundlage genommen.

Messfähigkeit

Winkelparameter

Der untersuchte Lidarscanner verwendet eine indirekte Messmethode, indem er den Abstand eine Gegenstandes über die Winkelprojektion und damit den Auftrittswinkel eines Lichtimpuls ermittelt. Der untersuchte Lidarscanner der Firma Neato besitzt eine typische Abtastrate von 5.5Hz und kann bis 10Hz konfiguriert werden. Bei einer Abtastrate von 5.5Hz und einer Abtastauflösung von 1 Messpunkt pro ° kommt man auf einer Messfrequenz von 1980 Messwerten pro Sekunde. Das Empfängermodul hat eine Auflösung von 2080 Pixeln mit einer Pixelgröße von 4µmx4µm. Mit internen Umrechnungs-Algorithmen kann der Sensor 0,1 Pixel genau den Auftrittspunkt erfassen. Dabei wird der Lichtpunkt nicht mehr als Punkt, sondern dessen Streulicht mit betrachtet. Die Entfernung zum Objekt wird beim Lidarsensor über folgende Formel ermittelt, wobei q die Entfernung, s der vertikale Abstand zwischen Sensor und Empfänger, f die Brennweite der Optik und x der Abstand zwischen Optik und Empfängermodul darstellt:

Die Empfindlichkeit () der Entfernung ist dabei Abhängig von der Entfernung selber.

Dabei gilt: Je höher die Entfernung, desto weniger Pixel messen, je niedriger die Entfernung, desto mehr Pixel messen die Entfernung.


Für die gesamte Messgenauigkeit spielen folgende Faktoren eine Rolle und können in Quantisierungs-,statistische, dynamische, systematische und zufällige Fehler kategorisiert werden:

Messverlauf über 3500s
Abstandsfehler von 0-3,5m

Quantisierungsfehler:

  • Abstand zwischen zwei Zeilen am Empfänger

statistische Fehler:

  • Umgebungstemperatur
  • Güte der Optiken
  • Güte der Beschichtungen
  • Leistung des Lasers
  • Stromversorgung des Lasers

Dynamische Fehler:

  • Einschwingverhalten der Elektronik: Im Messverlauf mit gleichbleibendem Ziel (2m Entfernung) ist zu erkennen, das sich das System erst nach 2000s bei stabilen Werten einpendelt. Der gesammte Wertebereich liegt bei 2,25m±0,15m. Nach der Einschwingphase liegt der Bereich bei 2,25m±0,05m. Sollte eine sehr genaue Messung notwendig sein, muss man beachten, das sich erst nach circa. 30min das System stabilisiert ist. Sollte dieses Verhalten sich bei jedem Neustart wiederholen, ist es auch möglich, den Fehler über einen Datensatz zu kompensieren. (Grafik: Messverlauf über 3500s)

Systematische Fehler:

  • Allgemeine mechanische Toleranzen wie Abstand zwischen Detektor und Emitter
  • Messentfernung/Messbereich: Der relative Zusammenhang zwischen Messdistanz und Messfehler wurde mit drei Experimenten unter unterschiedlichen Lichtbedingungen getestet. Dabei wurde die Entfernung von einem genormten Ziel in 20cm Schritten von 0 bis 3,5m gemessen und der Messfehler aufgetragen. Dabei ist zu erkennen das die relative Abweichung bei 0,5m nahezu 0, bei 2m bereits ±0,1m und bei 3,5m schon ±0,3m beträgt. (Grafik: Abstandsfehler von 0-3,5m)
  • Reflexionsverhalten des zu detektierenden Objekts (Oberfläche/Farbe): Messungen ergaben, dass bei einem Ziel mit 10% Reflexion im Vergleich mit einem Ziel mit 90% Reflexion vor allem bei Entfernungen >3m der Fehler signifikant höher ist. Dies ist mit dem deutlich niedrigerem Empfangspegel zu erklären. Dem Algorithmus, der die Pixelauflösung mit Lichtverteilungsinformationen verbessert, fehlen diese und die Messung wird dadurch ungenauer. Im Messbereich um 5m führt dies zu einer signifikanten Verschlechterung des Fehlers von 5m±0,038m auf 5m±0,240m.

Zufällige Fehler:

  • Rauschverhalten des Detektormoduls
  • Rotations-Motor-Vibration


Eine Messung in einem quadratischen Raum mit einigen Störobjekten wie Mülleimer, Tischen etc. ergab die unten gezeigten Werte. Dabei wurde zweimal gemessen und beide Messungen (blau und rot) übereinander gelegt. Man sieht das die Messwerte keine signifikanten Abweichungen gegenüber der ersten Messung aufweisen, selbst im Bereich >3m.

Messung Firma Neato

Fehleranalyse

Die fehlerhafte Ausgabe der Seriellen Schnittstelle im Betrieb hat dazu geführt, das die Daten nicht zur Auswertung des Sensorsignals genutzt werden kann. Um die Fehlerursache zu finden wurde ein Ishikawa Diagramm erstellt, das die möglichen Fehlerursachen kategorisiert und systematisch erarbeitet. Die für ein Ursache-Wirkungs-Diagramm typischen Kateorien sind Mensch, Hardware, Umwelt, Material, Methode und Messung und können, je nach Anwendungsfall durch weitere ergänzt werden.

Im diesem Fall ergaben sich folgende Fehlerursachen und deren Analyseergebnis:


Mensch

  • Falsche Interpretation des Rohdatenformats: Die Interpretation der Rohdaten wurde mit den im Quellenverzeichnis angegebenen Auswertungen verglichen. Kurzzeitig sind gleichbleibende Datenpakete mit dem Startsignal 0x1F zu erkennen. Die fehlerhaften Datenpakete lassen auf einen Reboot des Lidarsensors schließen. Dies ist zu erkennen das wiederholt die Startsequenz (Seriennummer, Softwareversion etc) ausgegeben wird. Würde eine falsche Interpretation der Rohdaten vorliegen, wäre der Fehler dauerhaft und nicht zufällig in unregelmäßigen Abständen.

Hardware

  • Interne Spannungsversorgung: Ein Defekt der internen Spannungsversorgung kann zu einem Spannungsabfall sowohl am Haupt-Prozessor, als auch am Kommunikations-Prozessor und dadurch zu einem Reset führen. Dieses verhalten zeigt sich am defekten Sensor.
  • Kommunikationscontroller: Auch ein defekt am Kommunikationscontroller kann zu einer fehlerhaften Ausgabe von Rohdaten führen.

Um diese beiden Fehler zu bestätigen oder zu widerlegen, muss der Sensor durch einen gleichartigen ausgetauscht werden.

Umwelt

  • Temperatur: Eine erhöhte Temperatur kann zu einem Ausfall oder einer verringerten Leistung der Kommunikationsschnittstelle und aller weiterer elektronischer Komponenten im Lidar führen. Da der Sensor unter Laborbedingungen (zwischen 20-24°C) getestet wurde und der Lidarsensor laut Datenblatt in diesem Temperaturbereich betrieben werden kann wird dieser Fehler ausgeschlossen.
  • EMC Störung: EMC Störungen durch andere elektrische Komponenten in unmittelbarer Umgebung des Lidarsensors kann zu einer fehlerhaften Übertragung der Daten führen. Der Sensor wurde an verschiedenen Standorten im Raum verwendet und es zeigte sich keine Veränderung. Auch würde man eher vereinzelte Fehler in einzelnen Bytes der Datenpakete erwarten und kein Reboot vom Sensor. Dies kann nur durch einen sehr starken EMC Störeinfluss passieren, was ich, da es sich um kontrollierte Laborbedingungen handelte, ausschließen.

Material

  • Serielle Schnittstelle: Um einen defekt der Seriellen Schnittstelle am PC auszuschließen, wurden zwei unterschiedliche Methoden für den Aufbau einer Seriellen Verbindung getestet. Ursprünglich wurde ein USB Adapter verwendet, bei dem TX und RX direkt verbunden werden können. Als zweite Variante wurde ein Adruino UNO verwendet. Dieser besitzt eine Serielle Schnittstelle, die über die Software des Adruino an den PC weitergegeben wird. Beide Varianten haben das gleiche Fehlerverhalten gezeigt. Deswegen würde ich die Serielle Schnittstelle am PC ausschließen.
  • Tool: Zu Beginn wurde mit dem Tool Terminal V1.93b gearbeitet. Um auch hier den Fehler ausschließen zu können wurde ein zweites Toll (Hyperterminal) getestet. Auch dies brachte keine Veränderung. Im dritten Schritt wurde ein Matlab Programm geschrieben, das die Datenverbindung der Seriellen Schnittstelle überwacht und ausliest. Auch hier war der Fehler zu sehen. Deswegen schließe ich das Tool als Fehlerquelle aus.
  • PC/Notebook: Der Sensor wurde mit zwei verschiedenen Notebooks und einem Desktop PC getestet. Bei allen drei Geräten hat sich der Fehler gezeigt. Deshalb schließe ich den Computer als Fehlerursache aus.

Methode

  • Serielle Verbindung falsch konfiguriert: Die Konfiguration der Seriellen Schnittstelle wurde von drei verschiedenen Quellen übernommen. Da der Sensor kurzzeitig fehlerfreie Daten verschickt und bei falscher Konfiguration gar nichts sinnvolles empfangen werden würde, schließe ich dies als Fehlerquelle aus.
  • Falsche Drehzahl: In einigen Ausarbeitungen im Internet wird ein Zusammenhang zwischen Drehzahl des Lidarsensor und der korrekten Rohdaten beschrieben. Um die Drehzahl des Sensors zu regeln, gibt es eine Adapterplatine zu kaufen. Diese Platine prüft die Momentangeschwindigkeit des Sensors und regelt die Stromversorgung des Motos. Dadurch wird immer die optimale Drehzahl erreicht. Um diesen Fehler zu bestätigen oder zu widerlegen, muss eine solche Regelung erstellt oder gekauft werden.

XV-11 Adapterplatine bei Getsurreal

Messung

  • Messumgebung passt nicht zur Anwendung: In technischen Beschreibungen und Vorgängerprojekten wird eine Messfähigkeit bis 10m beschrieben. Die Umgebung in der der Sensor getestet wurde entspricht diesen Abständen und hatte Ziele sowohl im Nahbereich, als auch im Fernbereich. Auch ist der Reset der Hardware durch diesen Fehler nicht erklärbar. Deshalb schließe ich die Messumgebung als Fehlerursache aus.


Youtube Video

Youtube Video zur Sensorinbetriebnahme


Weblinks

- Informationen und Publikationen von der Firma Neato und anderen Fachquellen -

- Projektinformationen von privaten Entwicklern -

- Beschaffung -


→ zurück zum Hauptartikel: Signalverarbeitende Systeme