OSE Hokuyo-Lidar Objekterkennung: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
 
(11 dazwischenliegende Versionen von einem anderen Benutzer werden nicht angezeigt)
Zeile 1: Zeile 1:
[[Kategorie:Lidar]]
[[Kategorie:Objekterkennung mit LiDAR]]
→ zurück zum Hauptartikel: [[Praktikum_SDE|Praktikum SDE]] <br />
→ zurück zum Hauptartikel: [[Praktikum_SDE|Praktikum SDE]] <br />
→ zurück zu [[OSE - Objekt - und Spurerkennung|OSE - Objekt - und Spurerkennung]]
→ zurück zu [[OSE - Objekt - und Spurerkennung|OSE - Objekt - und Spurerkennung]]
----
----
'''Autor:''' [[Benutzer:Michael_Deitel|Michael Deitel]] [[Benutzer:Manuel_Gross|Manuel Groß]] <br />
{| class="wikitable"
'''Bearbeitet von:''' [[Benutzer:Patricio-emiliano hernandez-murga|Patricio Emiliano Hernandez Murga]] und [[Benutzer:Moritz-Ben-Joe Kühnrich|Moritz-Ben-Joe Kühnrich]]
|-
| '''Autor:''' || [[Benutzer:Patricio-emiliano hernandez-murga|Patricio Emiliano Hernandez Murga]] und [[Benutzer:Moritz-Ben-Joe Kühnrich|Moritz-Ben-Joe Kühnrich]]
|-
| '''Stand:''' || 09.01.2023
|-
| '''Lehrveranstaltung:'''|| Mechatronik, Praktikum SDE, 7. Semester, Wintersemester
|}


== Einleitung ==
== Einleitung ==
Zeile 21: Zeile 27:


'''Falls beim Kompilieren einer der mit LiDAR in Verbindung hängenden Projekten ein Linker-Fehler auftritt. Stellen Sie sicher, dass die [https://svn.hshl.de/svn/MTR_SDE_Praktikum/trunk/Software/Laserscanner/WS2022/LiDAR_Framework/LiDAR_Framework.chm eben genannte Anleitung] befolgt wurde'''
'''Falls beim Kompilieren einer der mit LiDAR in Verbindung hängenden Projekten ein Linker-Fehler auftritt. Stellen Sie sicher, dass die [https://svn.hshl.de/svn/MTR_SDE_Praktikum/trunk/Software/Laserscanner/WS2022/LiDAR_Framework/LiDAR_Framework.chm eben genannte Anleitung] befolgt wurde'''
'''Zudem muss für die Visualisierung in C/C++ GNU-Plot installiert sein. Eine Anleitung ist ebenfalls in der [https://svn.hshl.de/svn/MTR_SDE_Praktikum/trunk/Software/Laserscanner/WS2022/LiDAR_Framework/LiDAR_Framework.chm Doxygen-Dokumentation] '''


Bei der Entwicklung des LiDARs ist nach ne V-Modell vorgegangen worden.
Bei der Entwicklung des LiDARs ist nach ne V-Modell vorgegangen worden.
Zeile 98: Zeile 106:
[[Datei:Kalman-Filter Ablaufplan.png|mini|links|Tracking mit Kalman-Filter]] </br></br>
[[Datei:Kalman-Filter Ablaufplan.png|mini|links|Tracking mit Kalman-Filter]] </br></br>
</br>
</br>
</br></br></br></br></br></br></br></br></br></br></br></br>
</br>
</br></br></br>
Es wird ein 3D-Kalman Filter verwendet mit einem Konstante Geschwindigkeits-Modell. Es werden die x-Position y-Postion und Ausrichtung gefiltert, sowie deren 1. Ableitungen.
[[Datei:MessVektorundZustandsVektor.png|mini|Mess- und Zustandsvektor des Kalmanfilters]]
[[Datei:Systemmodell.png|mini|A-Matrix des Systemmodells]]
Die  Parameter sind wie folge gewählt:
Q – Matrix:
* niedrig gewählt → hohes Vertrauen ins Systemmodell, gefunden durch Trial und Error
R – Matrix:
* nach Messrauschen des LiDAR gewählt (ca. 100 mm)
x – Vektor:
* erster Messwert für Position und Ausrichtung. 0 für die Geschwindigkeiten
P - Matrix:
* hohe Unsicherheit für Pos und 𝜑, niedrige Unsicherheit für Geschwindigkeiten. Da Elemente sonst in den ersten Frames "katapultiert" werden


===Implementierung===
===Implementierung===
Zeile 125: Zeile 151:
Es wurde auch ein LiDAR-Simulationsobjekt erstellt. Um einen weiteren LiDAR einzupflegen muss lediglich die virtuelle Klasse "Sensor-Lidar" implementiert werden.
Es wurde auch ein LiDAR-Simulationsobjekt erstellt. Um einen weiteren LiDAR einzupflegen muss lediglich die virtuelle Klasse "Sensor-Lidar" implementiert werden.
'''Weiteres ist in der [https://svn.hshl.de/svn/MTR_SDE_Praktikum/trunk/Software/Laserscanner/WS2022/LiDAR_Framework/LiDAR_Framework.chm Doxygen-Dokumentation] zu finden!
'''Weiteres ist in der [https://svn.hshl.de/svn/MTR_SDE_Praktikum/trunk/Software/Laserscanner/WS2022/LiDAR_Framework/LiDAR_Framework.chm Doxygen-Dokumentation] zu finden!
== Abnahme Test ==
{| class="wikitable"
|+ Tests
|-
! Bezeichnung !! Beschreibung !! Link
|-
| LiDAR-Konzept in Matlab || Test der Implementierung in Matlab, nur die Datenverarbeitung |[[OSE - Anahmetest_der_Matlab-Implementierung |OSE: Abnahme Test der Matlab-Implementierung]]
|-
| Beispiel || Beispiel || Beispiel
|-
| Beispiel || Beispiel || Beispiel
|}


== Literatur ==
== Literatur ==

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

→ zurück zum Hauptartikel: Praktikum SDE
→ zurück zu OSE - Objekt - und Spurerkennung


Autor: Patricio Emiliano Hernandez Murga und Moritz-Ben-Joe Kühnrich
Stand: 09.01.2023
Lehrveranstaltung: Mechatronik, Praktikum SDE, 7. Semester, Wintersemester

Einleitung

Die Objekterkennung mit Laserscanner ist einer der Arbeitsbereiche des SDE-Praktikums. Die Tätigkeit besteht aus Auswertung der Rohdaten und umformen dieser in eine Objektliste, welche Daten zu den vom Laserscanner erfassten Objekten enthält. Das Thema wird im Wintersemester 2022/2023 von Patricio Emiliano Hernandez Murga und Moritz-Ben-Joe Kühnrich bearbeitet.

Inhalt

Hardware Inbetriebnahme

Zur Objekterkennung mittels LIDAR wird der Laserscanner URG-04LX der Firma Hokuyo verwendet.

Laserscanner URG-04LX (Originaldatei)

Im Praktikum stehen zwei Laserscanner zur Verfügung. Ein auf dem Fahrzeug verbauter und ein nicht verbauter zum Testen ohne das Fahrzeug für andere Teams zu blockieren. Mit beiden können die nachfolgenden Programme ausgeführt werden. Der Lidar, der auf dem Fahrzeug verbaut wurde ist mit schwarzem Klebeband oben abgeklebt (Klebestelle im Bild grüner Pfeil), da die ansonsten sichtbaren weißen Linien auf dem Lidar die Kamera irritieren. Der Lidar ist am Fahrzeug mit 2 Schrauben befestigt (siehe rote Pfeile im Bild).

Beim erstmaligen Anschluss werden die Treiber nicht automatisch installiert. Diese müssen manuell eingebunden werden. Die Treiber sind im SVN unter [1]

Um den LiDAR dann über C/C++ zu verwenden muss die dazugehörige URG-Bibliothek eingebunden werden. Eine detaillierte Anleitung dafür befindet sich hier

Falls beim Kompilieren einer der mit LiDAR in Verbindung hängenden Projekten ein Linker-Fehler auftritt. Stellen Sie sicher, dass die eben genannte Anleitung befolgt wurde

Zudem muss für die Visualisierung in C/C++ GNU-Plot installiert sein. Eine Anleitung ist ebenfalls in der Doxygen-Dokumentation

Bei der Entwicklung des LiDARs ist nach ne V-Modell vorgegangen worden.

Anforderungen

Aufgrund der Requirements im Lastenheft des Praktikums ergeben sich für das LiDAR-System folgenden Anforderungen:

REQ10.2330:
1. Erkennung von statischen Hindernissen
2. Zu erkennende Hindernisse haben eine Feste Abmessung (Pappkartons 31cm x 22cm)
3. Erkennung der Position der Hindernissen
REQ10.2350:
4. Erkennung von dynamischen Hindernissen
5. Erkennung der Geschwindigkeit der dynamischen Hindernissen
6. Erkennung der Orientierung der Boxen
REQ10.3170:
7. Lernen des Rundkurses
Aus der Kommunikation und Rücksprache mit anderen Gruppen:
8. Errechnung eines Vertrauenswert für die Objekte

funktionaler Systementwurf

Hier wird der grobe Ablauf des LiDAR-Systems gezeigt

1. Einlesen der LiDAR-Daten
2. Erkennung der Boxen aus den Daten
3. Tracking der Boxen
4. Weitersenden an die dSPACE-Karte

Technischer Systementwurf

Hier wird der eben funktionale Systementfwurd weiter ausgeführt.
Klassestruktur

1. Die LiDAR-Daten werden ausgelesen, diese werden dann in Polar-Koordinaten ausgeben
2. Die LiDAR Punkte werden mithilfe eines Sucessive Edge Following(SEF) Algorithmus segmentiert. Es entstehen L-Shapes
3. Die Segmente werden gefiltert, sodass nur L-Shapes verarbeitet werden, Diese werden zu Objekte verarbeitet
4. Die Objekte sollen getrackt und gefiltert werden
5. Die 5 wichtigsten Objekte werden über die RS-232 Schnittstelle an die dSpace-Karte geschickt

Komponenten Spezifikationen

Einlesen der Daten

Für das Einlesen der LiDAR-Daten wurde eigenes Framework entwickelt. Dieses ist weiter unten im Artikel dokumentiert

Segmentierung

Eingang:
- LiDAR-Daten
Ausgang:
- Liste aus L-Shapes, ein L-Shape ist dabei ein Struct, bestehend aus: ID und dem linkesten Punkt, dem rechtesten Punkt und dem nächsten Punkt.
Einzustellende Parameter:
- Minimale Punktanzahl pro Segment
- Maximaler Abstand zwischen zwei Punkten des Segments
- Filterung des Nahbereichs wegen der Reflektion an der Sensorkappe
Ablauf:
In der Segmentierung sollen die LiDAR Daten segmentiert mithilfe eines Successive Edge Following Algorithmus zu L-Shapes und diese werden auf das Fahrzeug-Koordinatensystem umgerechnet werden.

Objektbildung

Eingang:
- L-Shapes
Ausgang:
- Objektliste
Einzustellende Parameter:
- Prozentuale Abweichung des Winkels zwischen zwei Schenkeln, damit das L-Shape als Box mit zwei sichtbaren Seiten erkannt wird
- Schwellwert für den Winkel, damit das L-Shape als eine Linie behandelt wird
- Abweichung der Abmessung damit L-Shape noch als Box gewertet wird
- Vertrauenswert-Abzüge falls Tiefe, Breite oder Winkel nicht aus dem L-Shape ermittelbar sind
Ablauf:
Die Objektbildung filtert alle L-Shapes die als Box in Frage kommen. Dabei wird unterschieden ob das L-Shape eine Linie darstellt oder eine zwei Seiten einer Box. Dies geschieht über den Winkel der zwei Schenkel des L-Shapes. Daraufhin wird überprüft die Abmessungen des L-Shapes mit dene einer Box übereinstimmen, wenn nicht, dann wird das Objekt verworfen. Je nachdem wie viel von der Box zu sehen sind und anhand der Geometrie wird dann ein Vertrauenswert errechnet.

Tracking

Eingang:
- ObjektListe
Ausgang:
- Trackliste
Einzustellende Parameter:
- Distanz zum Gating zwischen einer Box aus dem letzten Frame und dem aktuellen Frame
- Maximale Strikes die ein Track haben darf, bevor es rausfliegt
- Parameter des Kalman-Filters
Ablauf:

Tracking mit Kalman-Filter




















Es wird ein 3D-Kalman Filter verwendet mit einem Konstante Geschwindigkeits-Modell. Es werden die x-Position y-Postion und Ausrichtung gefiltert, sowie deren 1. Ableitungen.

Mess- und Zustandsvektor des Kalmanfilters
A-Matrix des Systemmodells

Die Parameter sind wie folge gewählt: Q – Matrix:

  • niedrig gewählt → hohes Vertrauen ins Systemmodell, gefunden durch Trial und Error

R – Matrix:

  • nach Messrauschen des LiDAR gewählt (ca. 100 mm)

x – Vektor:

  • erster Messwert für Position und Ausrichtung. 0 für die Geschwindigkeiten

P - Matrix:

  • hohe Unsicherheit für Pos und 𝜑, niedrige Unsicherheit für Geschwindigkeiten. Da Elemente sonst in den ersten Frames "katapultiert" werden

Implementierung

Die Funktionen Segmentierung, Objektbildung wurden alle in Matlab implementiert und dann mit dem Matlab-Coder zu C-Code exportiert.
Segmentierung und Objektbildung
Tracking

Der Code-Export ist aufwendig, deshalb sollte möglichst alle Fehler beseitigt werden bevor man Matlab-Code Exportiert

Modultest

Für alle Module gibt es eine eigenes Testmodul. Zusätzlich gibt es auch ein Testmodul für das Gesamtkonzept. In den jeweiligen Testmodulen ist es möglich sowohl einzelne Frames diverser Testmessungen durchzugehen, als auch ein Live-Visualisierung. Das Gesamt-Testmodul kann zusätzlich direkt mit dem LiDAR arbeite, dafür muss der Parameter für den COM-Port in der Funktion "sweepLidar" angepasst werden. Umschalten zwischen den Modi ist möglich über eine Schaltvariable in dem Gesamt-Testmodul. Die Testmodule sind hier zu finden:
Modultest-Segmentierung und Objektbildung
Modultest-Tracking
Gesamt-Testmodul


Der generierte Code wurde in die Visual-Studio-Projektmappe LiDAR-Framework eingefügt. Dieses C-Projekt wurde mit Doxygen dokumentiert.

LiDAR-Framework

Es wurde ein Framework erstellt, dies hält das Programm modular und es ist sehr einfach eine anderen LiDAR-Sensor einzupflegen. Das LiDAR Framework ist wie folgt aufgebaut
LiDAR-Framework Schema
Die Klassenstruktur sieht wie folgt aus. Der LidarA1M8 ist hier nur ein Beispiel, für diesen existiert keine Implementierung.
Klassestruktur

Es wurde auch ein LiDAR-Simulationsobjekt erstellt. Um einen weiteren LiDAR einzupflegen muss lediglich die virtuelle Klasse "Sensor-Lidar" implementiert werden. Weiteres ist in der Doxygen-Dokumentation zu finden!

Abnahme Test

Tests
Bezeichnung Beschreibung Link
LiDAR-Konzept in Matlab OSE: Abnahme Test der Matlab-Implementierung
Beispiel Beispiel Beispiel
Beispiel Beispiel Beispiel

Literatur

  1. trunk\Dokumentation\Datenblätter\Laserscanner\URG Driver for Win im SVN-Archiv

→ zurück zum Hauptartikel: Praktikum SDE
→ zurück zu OSE - Objekt - und Spurerkennung