OSE - Objekterkennung und -verfolgung mittels LiDAR WS20/21: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Zeile 28: Zeile 28:
Die Segmente werden als Liste von Instanzen einer eigens dazu implementierten Klasse gespeichert. Diese umfasst unter Anderem eine Methode zur Charakterisierung des Segments als L-förmig bzw. nicht L-förmig. Diese Charakterisierung ist für die spätere Objektbildung von Nutzen.
Die Segmente werden als Liste von Instanzen einer eigens dazu implementierten Klasse gespeichert. Diese umfasst unter Anderem eine Methode zur Charakterisierung des Segments als L-förmig bzw. nicht L-förmig. Diese Charakterisierung ist für die spätere Objektbildung von Nutzen.


[[Datei:Segmentcharakterisierung 480p.gif|450px]]
[[Datei:Segmentcharakterisierung 480p.gif|480px]]


=== Objekterkennung ===  
=== Objekterkennung ===  

Version vom 9. Februar 2021, 23:24 Uhr


Autoren: Stefan Arndt, Marius Köhler

Schematischer Ablauf der Verarbeitung eines LiDAR-Sweeps

Einleitung

Im Rahmen des Praktikums "SDE - Systemintegration" wurde im Wintersemster 2020/2021 eine Software entwickelt, welche die LiDAR-basierte Erkennung und Verfolgung von Hindernissen durch das CaroloCup-Fahrzeug ermöglichen soll. Die Software wurde - grob unterteilt - in einem zweistufigen Prozess entwickelt. Zunächst erfolgte die prototypische Entwicklung und Erprobung in Matlab, anhand vorab aufgezeichneter Messungen. Nach Erreichen eines zufriedenstellenden Zustandes, folgte die Implementierung in C++, welche neben der Verarbeitung von aufgezeichneten Messungen auch direkt auf den LiDAR zugreifen und somit in Echtzeit Hindernisse erkennen und verfolgen kann.

Anforderungen

Im Lastenheft des Autonomen Fahrzeugs finden sich folgenden zwei Anforderungen an das Fahrzeug:


Die Erkennung und Verfolgung der Hindernisse (der statischen, wie der dynamischen) soll LiDAR-basiert erfolgen. Daher wurden folgende Pflichten aus Obigem abgeleitet:

Software-Entwurf

Zur rechten ist der Programmablaufplan der Opjekttracking-Software zusehen.
In den folgenden Abschnitten werden die wichtigsten der dort aufgeführten Funktionen und Module beschrieben. Zur tatsächlichen Funktionsweise wird ein Blick in den Programm-Code empfohlen.

Pap der Objekterkennung und -verfolgung anhand vorab aufgezeichneter LiDAR-Messungen.

Segmentierung

Die Segmentierung eines LiDAR-Sweeps erfolgt in Anlehnung an das sog. "Successive Edge Following". D.h. es werden all jene Punkte zu einem Segment zusammengefasst, die innerhalb eines bestimmten Abstandes zu den ihnen benachbarten Liegen.

Die Segmente werden als Liste von Instanzen einer eigens dazu implementierten Klasse gespeichert. Diese umfasst unter Anderem eine Methode zur Charakterisierung des Segments als L-förmig bzw. nicht L-förmig. Diese Charakterisierung ist für die spätere Objektbildung von Nutzen.

Objekterkennung

In Absprache mit Prof. Dr.-Ing Ulrich Schneider wurde ein modellbasierter Ansatz zur Erkennung relevanter Hindernisse verfolgt. Zur Modellbildung wird auf die a priori bekannten Abmessungen und Eigenschaften der möglichen Hindernisse zurückgegriffen. Bei diesen handelt es sich um weiße Kartons einer Breite von 20cm und eine Länge von 30cm. Die Höhe ist aufgrund der zweidimensionalität der LiDAR-Messung irrelevant.
Somit können folgende Annahmen gemacht werden:

Gemäß des Schnittstellendokuments, Punkt 3: RS-232 Schnittstelle, sollen folgende Track-Attribute er- bzw. übermittelt werden:

Zur anfänglichen Vereinfachung des Tracking-Problems soll zunächst die Erkennung und Verfolgung eines Hindernisses realisiert werden. Somit entfallen zunächst die Attribute:

  • Objekt[n].Nummer

Weiterhin wurde auf das Tracking von

  • Objekt[n].b
  • Objekt[n].t

zunächst verzichtet.

Implementierung in C++

Softwarevoraussetzungen

OpenCV 4.3.0_32bit - Einrichtugn siehe hier und hier
python 2.7.18 x86 - hier | Download
NuGet Package (Eigen) - Installation im Packet Manager von Visual Studio

Installation und Inbetriebnahme

1. Install just for me


2. Installationsverzeichnis sollte C:\Python27-x86 sein

3. pip.exe -V ausführen. Ausgabe sollte wie auf dem Bild sein und das richtige Verzeichnis ausgeben.

4. pip.exe install matplotlib ausführen

5. In Visual Studio Debug und x86 einstellen

6. Die Projekt-Properties einstellen (siehe Bilder)

Programmierung

Komponententest

Dyn. und statische Tests

Das Ergebnis der statischen Codeanalyse liegt im SVN-Ordner.

Die dynamische Codeanalyse hat eine konstante RAM- und CPU-Auslastung ergeben.

RAM-Auslastung
CPU-Auslastung

Fazit

Literaturverzeichnis




→ zurück zum Hauptartikel: Praktikum SDE