Objekttracking mit LiDAR: Unterschied zwischen den Versionen
Zeile 39: | Zeile 39: | ||
==== Inbetriebnahme und Ansteuerung des LiDARs ==== | ==== Inbetriebnahme und Ansteuerung des LiDARs ==== | ||
'''Hier gehts zu Artikel''' [[Datei:Ezgif-3-aa149494be25.gif]] | '''Hier gehts zu Artikel''' [[Datei:Ezgif-3-aa149494be25.gif]] | ||
[https://wiki.hshl.de/wiki/index.php/Inbetriebnahme und Ansteuerung des LiDARs] | [https://wiki.hshl.de/wiki/index.php/Inbetriebnahme_und_Ansteuerung_des_LiDARs Inbetriebnahme und Ansteuerung des LiDARs] | ||
Bei diesem Praktikum verwendete LiDAR ist UGR-04LX-UG01. Im Folgende sind Spezifikation von UGR-04LX-UG01: | Bei diesem Praktikum verwendete LiDAR ist UGR-04LX-UG01. Im Folgende sind Spezifikation von UGR-04LX-UG01: | ||
{| class="mw-datatable" | {| class="mw-datatable" |
Version vom 30. Dezember 2020, 16:20 Uhr
Autoren: Ahmad Hassan, Lihui Liu
Einleitung
Die Gruppe Hassan/Liu beschäftigt sich im Wintersemester 2020/2021 mit dem Thema Objekterkennung und Objekttracking mit dem Hokuyo LiDAR. Im Sommersemester wurde schon ein Arbeitskonzept dazu entworfen inkl. einem Signalflussplan sowie einem morphologischen Kasten. In dem WS20/21 soll eine Umsetzung dieses Arbeitskonzepts in C erfolgen. Zuerst kommt die Einbindung bzw. Einrichtung und Ansteuerung des LiDARs in C. Darauffolgend wird die Koordinatentransformation implementiert. Zum Testen des Schnittstellenkommunikationsprinzips wird auch eine Funktion programmiert, die innerhalb des ersten Monats des Semesters eine Dummy Objektliste erstellt, die an die DS1104 verschickt werden kann anhand von dem vom Team Heuer/Kruse entwickelten Kommunikationsframework. Zukünftig dient diese Funktion dem Versand der tatsächlichen, erfassten Objekte und ihrer Attribute. Es ist die Implementierung eines Connected Component Clusterung Algorithmus zur Segmentierung und eines L-Shape Fitting Algorithmus zur Objektbildung vorgesehen. An letzter Stelle findet die Programmierung des Kalman-Filters zur Objektverfolgung und Schätzung Attribute wie Geschwindigkeit und Beschleunigung der verfolgten Objekte. Eine detaillierte Beschreibung der erforderlichen, fachlichen Grundlagen und des entwickelten Konzepts ist im Objekterkennung mit Hokuyo LiDAR zu finden.
Eine Auflistung der Aufgaben zu den entsprechenden Meilensteinen ist unten ersichtlich.
- Meilenstein 3:
- Implementierung der Einbindung und Ansteuerung des Hokuyo LiDAR
- Implementierung der Koordinatentransformation
- Testdokumentation der Koordinatentransformation
- Versand einer Dummy-Objektliste an DS1104
- Implementierung der Segmentierung (Connected Component Clustering)
- Erstellen eines PAPs zum L-Shape Fitting Algorithmus
- Meilenstein 4:
- Implementierung des L-Shape Fitting Algorithmus
- Implementierung des Kalman Filters
- Attribute schätzen
- Versand der echten Objektlisten an die dSpace-Karte
- Dokumentation im Wiki
Anforderungen
Pflichten
Die vorgenommenen Pflichten zeigen die folgenden Abbildungen:
Funktionaler Systementwurf / Technischer Systementwurf
Komponentenspezifikation (Hier pro Modul ein PAP)
Inbetriebnahme und Ansteuerung des LiDARs
Hier gehts zu Artikel Inbetriebnahme und Ansteuerung des LiDARs Bei diesem Praktikum verwendete LiDAR ist UGR-04LX-UG01. Im Folgende sind Spezifikation von UGR-04LX-UG01:
Beschreibung | Kenngröße |
---|---|
Maximale Reichweite | 20 - 5.600 mm |
Garantierte Messreichweite | 60 - 4.000 mm |
Horizontaler Scanwinkel | 240◦ |
Winkelauflösung | 0.36 |
Anzahl Scannschritte | 682 |
Auflösung | 1 mm |
Genauigkeit (20mm ~ 1000mm) | ±30mm |
Genauigkeit (20mm ~ 4000mm) | ±3% |
Schnittstelle | USB |
Eine genaue Spezifikation ist "Specification""
Um Bibliothek vom LiDAR mit Visual Studio zu verbinden, müssen Sie die folgende 4 Schritten einsetzen.
1.Unter Projekt->Eigenschaften öffnen Sie ein Fenster.
2.Auf der Linken Seite klicken Sie bitte C/C++ -> Allgemein. Dann fügen Sie die Adresse (...\Teams\OSE\OSE_LiDAR_Tracking\LiDAR_Tracking_Software_C\Test_LiDAR\urg_library-1.2.5\urg_library-1.2.5\include\c) im "zusätzliche Includeverzeichnisse" hinzu.
3.Auf der Linken Seite klicken Sie bitte Linker -> Allgemein. Dann fügen Sie die Adresse (...\Teams\OSE\OSE_LiDAR_Tracking\LiDAR_Tracking_Software_C\Test_LiDAR\urg_library-1.2.5\urg_library-1.2.5\vs2017\c\Win32\Debug) im "zusätzliche Bibliothekverzeichnisse" hinzu.
4.Auf der Linken Seite klicken Sie bitte Eingabe. Dann fügen Sie "urg.lib; ws2_32.lib; setupapi.lib" im "zusätzliche Abhängigkeiten" hinzu.
Koordinatentransformation
Das kartesische Koordinatensystem benutzt zum Beispiel x- und y-Koordinaten, um die Position eines Objektes darzustellen. Das Polarkoordinatensystem benutzt im Gegensatz dazu die radiale Entfernung vom Ursprung zum Objekt sowie den Objektwinkel. Deshalb wird das Koordinatensystem transformiert. Mehr Informationen über Koordinatentransformation siehe Programmierung von Koordinatentransformation.
Erstellung einer Dummy Objektliste zum Testen des Schnittstellenkommunikationsprinzips für LiDAR Daten
Für den Fall, dass kein Lidar genutzt wird werden Dummyparameter für die Objektliste des Lidar generiert. Die versandete Objektliste ist wie folgende Tabelle dargestellt.
Signal | Bedeutung | Datentype |
---|---|---|
nObjekte | Gesamtanzahl der relevanten Objekte (max. 5) | u8 |
Objekt[n].Nummer | Objektzähler | u8 |
Objekt[n].x0 | x-Koordinate des Objektmittelpunktes (mitte, vorn) | f32 |
Objekt[n].y0 | y-Koordinate des Objektmittelpunktes (mitte, vorn) | f32 |
Objekt[n].b | Objektbreite | f32 |
Objekt[n].t | Objekttiefe | f32 |
Objekt[n].alpha | Objektausrichtung | f32 |
Objekt[n].v | Betrag des Geschwindigkeitsvektors | f32 |
Objekt[n].Plausibel | Vertrauenswert für das Objekt (100: 100% vertrauenswürdig) | u8 |
Segmentierung: Connected Component Clustering
Nach die Transformation der Koordinaten ist die Segmentierung erforderlich. Hier verwendet Algorithmus ist Connected Component Clustering (CCC). Der Zweck des CCC-Algorithmus besteht darin, das eingegebene Binärbild in ein symbolisches Bild umzuwandeln, in dem jede verbundene Komponente eine eindeutige Bezeichnung hat(siehe Abbildung x).
Der linke Teil der Abbildung zeigt ein Beispiel für ein Binärbild. Die rechte Seite zeigt ein Ergebnis des Etikettierungsprozesses mit CCC. Wir erweitern den CCC-Algorithmus von der Kennzeichnung von Binärbildern bis zur Segmentierung von 2D-LIDAR-Daten, indem wir zunächst LIDAR-Daten vorverarbeiten. Die von LIDAR zurückgegebenen Daten werden als Array von k 2D-Punkten dargestellt. Der Index des Arrays entspricht dem Winkel θ (i) und der Wert ist der Abstand zum Objekt entlang des in Richtung des Winkels θ (i) emittierten Strahls. Dann werden Punkte auf das Belegungsraster projiziert. Dieses Raster wird als Binärbild behandelt und zur Beschriftung verwendet.
Objektbildung: L-Shape Fitting
LiDAR bietet beim Umfahren die Messungsdaten von den Hindernissen. Hier handelt es um die statischen Hindernisse, kann die Szenarien je nach Konzept von BSF in folgende Abbildungen dargestellt werden. Die Bewegungspositionen von dem Fahrzeug werden nummeriert, und auf der rechten Seiten zeigt die entsprechenden Punkten von LiDAR.
Die Objekte werden zyklisch gebildet, die von LiDAR erfassten Punkten in jeder Zyklus zugeordnet werden müssen, indem jede Cluster mit unterschiedlichen Farben kenngezeichnet werden. Mit der Kamera lässt sich erfahren, was bedeutet die Messpunkte in jeder Cluster, damit die Position des Kartons zum Fahrzeug bestimmt werden kann (d.h. Die Kartons befinden sich auf rechten/linken Seite, werden ermittelt). Um Karton zu simulieren, wird ein Modell erstellt. Hier wird mit Szene 1 als Beispiel erklärt. Die Hauptidee ist, dass bei jeder Frame die Abstände zwischen Start-und Endpunkte berechnet werden. Mit Szene 1 wird hier nur 4 Hauptframe betrachtet. Bei der Frame 1 befinden sich die Punkte in x-Achse, wird der Abstand zwischen Start-und Endpunkte berechnet, dann wird als L1 gespeichert. Bei der Frame 2 befinden sich die Punkte sowohl in x-Achse als auch in y-Achse, wird der Abstand zwischen Start-und Endpunkte von den beiden Achsen berechnet, eine wird als L2 gespeichert, anderen wird als B1 gespeichert. Dann werden die Abstand von L1 und L2 verglichen, die größte Länge wird als die simulierte Länge des Kartons gespeichert. Bei der Frame 3 befinden sich die Punkte in y-Achse, wird der Abstand zwischen Start-und Endpunkte berechnet, dann wird als B2 gespeichert. Dann werden die Abstand von B1 und B2 verglichen, die größte Breit wird als die simulierte Breit des Kartons gespeichert. Mit ermittelten Länge und Breit des Kartons werden alle Punkten mit einem Rechteck umrahmt. Um die oben genannten Schritte zu vereinfachen, wurden ein Programmablaufplan entwickelt. Abbildung 5.8 zeigt der Programmablaufplan.
Objekttracking: Kalman Filter
Attribute schätzen
Programmierung (Hier pro Modul Code-Snippets und Erklärung)
Inbetriebnahme und Ansteuerung des LiDARs
Koordinatentransformation
Das Modul zur Umsetzung der Koordinatentransformation besteht aus der Schnittstellendatei coordinate_transformation.h und ihrer Implementierung coordinate_transformation.c. Der Funktionsprototyp sieht folgendermaßen aus:
void coord_transform(const urg_t* lidar_handle, long* distance_array, int numMeasurements, long* x_coord, long* y_coord, int trans_x, int trans_y);
Die Eingangsparameter sind:
- lidar_handle: Lidarobjekt dient dem Zugriff auf die erstellte LiDAR Instanz und ihre Funktionalitäten
- distance_array: dynamisch erstellte Array der empfangenen Schrägentfernungswerte
- numMeasurements: Anzahl der durchgeführten Messungen
- x_coord: Dieser leere, dynamische Array wird über Call-by-Reference übergeben. Die transformierten x-Koordinaten werden in diesem Array geschrieben
- y_coord: Dieser leere, dynamische Array wird über Call-by-Reference übergeben. Die transformierten y-Koordinaten werden in diesem Array geschrieben
- trans_x: x-Komponente des Translationsvektors, falls nötig, zwischen Ursprung dem KoS des Fahrzeugs und dem des LiDARs
- trans_y: y-Komponente des Translationsvektors, falls nötig, zwischen Ursprung dem KoS des Fahrzeugs und dem des LiDARs
Die Funktion ist void. Es wird kein Rückgabewert zurückgeliefert. Die Ausgangsparameter der Funktion bzw. ihre Resultate werden in den übergebenen, dynamischen, leeren Arrays gespeichert. Im Folgenden wird die Definition der Koordinatentransformationsfunktion in detaillierten Schritten erklärt.
Zuerst findet die Deklaration der lokalen Variablen statt
long distance; // einen Schrägentfernungswert von dem distance_array ablesen und speichern pro Durchlauf double angle_rad; // den entsprechenden Winkel ermitteln und in dieser Variable speichern pro Durchlauf long x; // die daraus berechnete x-Koordinate hier speichern pro Durchlauf long y; // die daraus berechnete y-Koordinate hier speichern pro Durchlauf
Hiernach kommt die Hauptschleife. Innerhalb dieser Schleife wird ein Entfernungswert von dem übergebenen Array distance_array abgelesen und in eine x- und y- Koordinate überführt. Diese bilden das x-y Koordinatenpaar dieses bestimmten Messpunktes. Dies passiert, indem die folgenden mathematischen Gleichungen angewendet werden:
Gegebenenfalls erfolgt eine Translation anhand von dem übergebenen Translationsvektor-Argument. Am Ende vom Durchlauf wird jede Koordinate an der richtigen Stelle in dem entsprechenden, leeren Array, der über Call-by-Reference übergeben wurde, gespeichert.
/*Main loop*/ for (int i = 0 ; i < numMeasurements ; i++) { distance = distance_array[i]; // Entfernungswert ablesen und speichern angle_rad = urg_index2rad(lidar_handle, i); // Entsprechenden Winkel ermitteln mit der verfügbaren Member-Method x = (long)(distance * cos(angle_rad)); // x-Koordinate aus Polarkoordinaten ermitteln in mm y = (long)(distance * sin(angle_rad)); // y-Koordinate aus Polarkoordinaten ermitteln in mm /*Je nachdem ist die Translation erforderlich*/ //x = (long)(trans_x + x); // Translate x //y = (long)(trans_y + y); // Translate y /*Speichern in Arrays*/ x_coord[i] = x; y_coord[i] = y; }
Erstellung einer Dummy Objektliste zum Testen des Schnittstellenkommunikationsprinzips für LiDAR Daten
Segmentierung: Connected Component Clustering
Objektbildung: c
Objekttracking: Kalman Filter
Attribute schätzen
Komponententest
Zusammenfassung
Ausblick
Link zum Quelltext in SVN
Literaturverzeichnis
→ zurück zum Gruppenartikel: SDE-Team_2020/21
→ zurück zum Hauptartikel: SDE Praktikum Autonomes Fahren