Low-Cost Lidar Objekterkennung mit Matlab/Simulink: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
 
(18 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 10: Zeile 10:


== Aufgabe ==
== Aufgabe ==
# Inbetriebnahme des LiDAR
#Rechere nach Beschaffungsmöglichkeiten
# Erstellund eines Simulink Treibers zur Echtzeitverarbeitung
#Inbetriebnahme des LiDAR
# Erstellung eines Simulink Treibers zur Echtzeitverarbeitung
# Objektbildung mit Simulink
# Objektbildung mit Simulink
# Bewertung der Ergebnisse
# Bewertung der Ergebnisse
Zeile 18: Zeile 19:
# Funktionsnachweis als YouTube-Video (vgl. [[Veranstaltungsregeln_DSB_SoSe2017|Veranstaltungsregeln]])
# Funktionsnachweis als YouTube-Video (vgl. [[Veranstaltungsregeln_DSB_SoSe2017|Veranstaltungsregeln]])


== Lösungen ==
= Lösungen =
Im Folgenden werden die Lösungen dokumentiert


==Beschaffung==
Da die Beschaffung auf Rechnung möglich sein sollte, fiel die Wahl auf den Internet-Händler PC: [http://www.ep-mediastore-ab.de/neato-xv-lasereinheit-lidar-sensor-p-80105.html?gclid=EAIaIQobChMImaCW16Ss1QIVVT8bCh20sQ-zEAkYAyABEgL1KvD_BwE Mediastore Aschaffenburg].
==Inbetriebnahme==
Der Lidar-Sensor besitzt zwei Anschlussmöglichkeiten einen Zweierstecker für den Motor, welcher mit 5V beschaltet wird und einen Viererstecker für den eigentlichen Sensor (3,3 Volt-Versorgung und RX, TX). Für die Spannungsversorgung wurde der 5 Volt Ausgang des L298N-Motortreibers gewählt. Für die Serielle Verbindung wurde ein Arduino Due als Transciever gewählt. Dieser wurde so programmiert, dass er sobald Daten auf einem Seriellen-Port anliegen, diese an den jeweils Anderen weiter gesendet werden.
<syntaxhighlight lang="c">
void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }
  //Serial.println("USB-Verbindung hergestellt!");
  Serial1.begin(115200);
  //Serial.println("Lidar Kommunikation gestartet");
 
}
void loop() {
  // put your main code here, to run repeatedly:
  if (Serial1.available()) {
   
      //Serial.print(Serial1.read()-0xA0,Datatyp);
      //Serial.print(" ");
      Serial.write(Serial1.read());
  }
  if (Serial.available())
  {
      Serial1.write(Serial.read());
  }
 
}
</syntaxhighlight>
==Struktur der Daten==
Die Struktur der Daten wurde folgender Seite entnommen: https://xv11hacking.wikispaces.com
Eine Nachricht besteht dabei aus 20 Bytes
1. Startbit: 0xFA
2:Die ID: 0-90:
Eine Nachricht besteht immer aus 4 Datenpaketen, zugehörig den jeweiligen Gradzahlen. Beispiel: ID=0 => Messdaten 0°,1°,2°,3°
3+4: Codieren die Drehgeschwindigkeit des Motors
5-8: Daten-Paket 1.: [1.Byte: Distanz-Bits 7-0]
[2.Byte: zwei FehlerFlags+ Distanz-Bits 13-8]
[3.+4.Byte: Zusätzliche Signalinformationen]
9-12: Daten-Paket 2
13-16: Daten-Paket 3
17-20: Daten-Paket 4
== Auswertung der Daten==
Die Auswertung der Daten erfolgt über ein Matlab Skript und erzeugt eine Ausgabe mit den jeweiligen Punkten Transformiert in Kartesische Koordinaten, wie im Folgenden dargestellt.
[[Datei:Punkte Lidar.jpg|full|Messpunkte]]
==Weitere Herausforderungen ==
Wie im Bild zu sehen ist gibt es noch weitere Herausforderungen bezüglich der Auswertung der Daten zu bewältigen, die bis jetzt noch nicht behoben werden konnten. Die Datenpunkte Rotieren im Objekt, somit stimmt eine Entschlüsselung bezüglich des Winkels noch nicht. Zudem werden Wände auch noch nicht als gerade Punktketten erkannt. Jedoch ist eine Abhängigkeit der Punkte mit der Distanz nachweisbar. Dies kann durch ein DIN A4 Blatt welches auf den Sensor zubewegt wird demonstriert werden.


== Weblinks ==
== Weblinks ==

Aktuelle Version vom 20. April 2018, 11:02 Uhr

Autor: Marcel Kreuer
Betreuer: Prof. Schneider


Motivation

LiDAR ist eine hochgenaue störunanfällige Messtechnik für Abstände. Mittlerweile sind Laserscanner für unter 100€ erhältlich.

Ziel

In dieser Aufgabe soll ein Low-Cost LiDAR mit Matlab/Simulink in Betrieb genommen werden.

Aufgabe

  1. Rechere nach Beschaffungsmöglichkeiten
  2. Inbetriebnahme des LiDAR
  3. Erstellung eines Simulink Treibers zur Echtzeitverarbeitung
  4. Objektbildung mit Simulink
  5. Bewertung der Ergebnisse
  6. Wissenschaftliche Dokumentation als HSHL-Wiki Artikel
  7. Softwareentwicklung nach SDE Standard in SVN
  8. Funktionsnachweis als YouTube-Video (vgl. Veranstaltungsregeln)

Lösungen

Im Folgenden werden die Lösungen dokumentiert

Beschaffung

Da die Beschaffung auf Rechnung möglich sein sollte, fiel die Wahl auf den Internet-Händler PC: Mediastore Aschaffenburg.

Inbetriebnahme

Der Lidar-Sensor besitzt zwei Anschlussmöglichkeiten einen Zweierstecker für den Motor, welcher mit 5V beschaltet wird und einen Viererstecker für den eigentlichen Sensor (3,3 Volt-Versorgung und RX, TX). Für die Spannungsversorgung wurde der 5 Volt Ausgang des L298N-Motortreibers gewählt. Für die Serielle Verbindung wurde ein Arduino Due als Transciever gewählt. Dieser wurde so programmiert, dass er sobald Daten auf einem Seriellen-Port anliegen, diese an den jeweils Anderen weiter gesendet werden.


void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }
  //Serial.println("USB-Verbindung hergestellt!");

  Serial1.begin(115200);
  //Serial.println("Lidar Kommunikation gestartet");
  
}

void loop() {
  // put your main code here, to run repeatedly:
  if (Serial1.available()) {
    

      //Serial.print(Serial1.read()-0xA0,Datatyp);
      //Serial.print(" ");
      Serial.write(Serial1.read()); 
  }

  if (Serial.available()) 
  {
      Serial1.write(Serial.read());
  }
  
}

Struktur der Daten

Die Struktur der Daten wurde folgender Seite entnommen: https://xv11hacking.wikispaces.com

Eine Nachricht besteht dabei aus 20 Bytes

1. Startbit: 0xFA

2:Die ID: 0-90:

Eine Nachricht besteht immer aus 4 Datenpaketen, zugehörig den jeweiligen Gradzahlen. Beispiel: ID=0 => Messdaten 0°,1°,2°,3°

3+4: Codieren die Drehgeschwindigkeit des Motors

5-8: Daten-Paket 1.: [1.Byte: Distanz-Bits 7-0] [2.Byte: zwei FehlerFlags+ Distanz-Bits 13-8] [3.+4.Byte: Zusätzliche Signalinformationen]

9-12: Daten-Paket 2

13-16: Daten-Paket 3

17-20: Daten-Paket 4

Auswertung der Daten

Die Auswertung der Daten erfolgt über ein Matlab Skript und erzeugt eine Ausgabe mit den jeweiligen Punkten Transformiert in Kartesische Koordinaten, wie im Folgenden dargestellt.

Messpunkte


Weitere Herausforderungen

Wie im Bild zu sehen ist gibt es noch weitere Herausforderungen bezüglich der Auswertung der Daten zu bewältigen, die bis jetzt noch nicht behoben werden konnten. Die Datenpunkte Rotieren im Objekt, somit stimmt eine Entschlüsselung bezüglich des Winkels noch nicht. Zudem werden Wände auch noch nicht als gerade Punktketten erkannt. Jedoch ist eine Abhängigkeit der Punkte mit der Distanz nachweisbar. Dies kann durch ein DIN A4 Blatt welches auf den Sensor zubewegt wird demonstriert werden.

Weblinks

BSD-Lizenzbedingung BSD-Lizenz

Copyright (c) 2014, Hochschule Hamm-Lippstadt, Dep. Lip. 1, Prof. Schneider
Hochschule Hamm-Lippstadt. Alle Rechte vorbehalten.



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