OSE - Objekt - und Spurerkennung: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
 
(292 dazwischenliegende Versionen von 18 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
= Spurerkennung =
<!-- Kopieren Sie diesen Header in Ihren Artikel, damit er aufgelistet wird.  -->
==Workflow und Vorgehen ==
'''Autoren:''' Hendrik Steffen, Sven Posner <br/>
'''Betreuer:''' [[Benutzer:Ulrich_Schneider| Prof. Schneider]]<br/>
<br>
→ zurück zum Hauptartikel: [[Praktikum SDE]] <br>
<br>


=== Modellbasierte Entwicklung in Matlab===
= Aufbau dieser Seite=
- in Matlab werden die Algorithmen entwickelt
- leichter zu debugen
- Test auf Videobasis (Vlt einbauen der Funktion Video zu Bilder)


=== Umsetzung in C Code ===
Dieser Artikel ist eine Übersichtsseite, in der auf alle relevanten Artikel zur Objekt und Spurerkennung verwiesen wird. <br>
- Matlab zu C Code
Diese Seite soll, insbesondere einem neuen Jahrgang als Einstieg und Orientierung dienen und die hier beschriebenen Softwarestände sollen mit denen im SVN Archiv übereinstimmen. <br>
- anpassen des Matlabcodes da bestimmte Funktionen nicht genutzt werden Können
''' Alle Links und Informationen auf dieser Seite bitte aktuell halten''' <br>
- einbauen von Dummyfunktionen z.B. Polynom berechen / Polyfit
_ C Projekt Srtuktur
- einfügen eines Modulordners hin zu fügen zur Dateiliste
- in C müssen Funktionsaufrufe der Dummyfunktionen angepasst werden
- Hinweis auf extern Problem .cpp
<br/>


Die Grundlage des hier vorgestellten Vorgehen ist das die Datenbasis für beide Entwicklungsschritte gleich ist.
= '''OSE Softwareumgebung'''=
So muss gewährleistet sein, dass die Bilder der Kamera und die aus dem in Matlab verwendeten Video  einer Rundfahrt,
In diesem Artikel wird der aktuelle Softwarestand detailliert beschrieben
vor dem Verwenden durch die Algorithmen zur Spur- und Stoplinienerkennung in ein einheitliches Bildformat konvertiert werden. 
<br>
<br/>
'''Hier gehts zu Artikel'''    [[Datei:Ezgif-3-aa149494be25.gif]] [https://wiki.hshl.de/wiki/index.php/OSE_Softwareumgebung Aktuelle Softwareumgebung für das OSE-Programm]
[[Datei:Workflow C++ Matlab.png|mini|zentriert|500px| Schaffen gleicher Datenbasis]]


In der Matlab Umgebung werden die Video Frames mit der Auflösung 752*478 eingelesen und in die Matrix Frame gespeichert.  
= VRmagic Kamera einrichten =
Das in Frame gespeicherte Bild wird erst in ein Grau- und anschließend in ein S/W Bild umgewandelt. Auf dieses wird Sobel Operator angewendet.
In diesem Artikel befinden sich Erläuterungen wie die VRmagic Kamera auf dem Fahrzeug benutzt werden kann.<br>
Das Ergebnis wird in Frame_bw gespeichert. Frame_bw dient allen in Matlab entwickelten Algorithmen als Datengrundlage und muss bei deren Übersetzung als uint8 Array gespeichert werden.
'''Hier gehts zu Artikel'''    [[Datei:Ezgif-3-aa149494be25.gif]]  [https://wiki.hshl.de/wiki/index.php/Inbetriebnahme_der_VRmagic_Kamera Inbetriebnahme der VRmagic Kamera]


<source lang="matlab">
= Open CV installation =
% Frame lesen
In diesem Artikel wird die Einbindung der OpenCV Bibliotheken in ein Visual Studio Programm beschrieben.
    Frame = imread(Frame_Name,'PNG');
<br>
     Frame = rgb2gray(Frame);
'''Hier gehts zu Artikel'''    [[Datei:Ezgif-3-aa149494be25.gif]] [https://wiki.hshl.de/wiki/index.php/Einrichten_von_OpenCV_in_Visual_Studio Installation von OpenCV in Visual Studio]
= Objekterkennung mit dem Hokuyo LiDAR vom WS2022/2023=
In diesem Artikel befinden sich Erläuterungen und Dokumentationen für die Verwendung des Hokuyo LiDARs.<br>
'''Hier gehts zu Artikel'''    [[Datei:Ezgif-3-aa149494be25.gif]]  [https://wiki.hshl.de/wiki/index.php/OSE_Hokuyo-Lidar_Objekterkennung OSE Hokuyo-LiDAR Objekterkennung]


   
= Test =
% Vorverarbeitung
'''Hier gehts zu Artikel'''     [[Datei:Ezgif-3-aa149494be25.gif]][[OSE - Objekt - und Spurerkennung: Test der Spurparameter-Ermittlung in der Simulation]]
    Frame_bw = Gray2BW( Frame , 752, 478 );
    Frame_bw = edge(Frame_bw,'sobel','nothinning');


</source>
'''Hier gehts zu Artikel'''    [[Datei:Ezgif-3-aa149494be25.gif]][[OSE - Objekt - und Spurerkennung: Test der Spurparameter-Ermittlung am Fahrzeug]]


Im C++ Projekt werden die Bilder von der auf dem Auto verbauten VRmagic Kamera aufgenommen.Um diese mit den Matlab Algorithmen zu bearbeiten sind noch weiter Schritte nötig.Die Abbildung "''für die Bildverarbeitung relevanten Schritte''" zeigt die Schritte aus der Software "''Objekt_Spurerkennung''" die zur Bildverarbeitung nötig sind.
[[Datei:Ablaufplan_Objekt_Spurerkennung_Kamera.png|mini|zentriert|350px|für die Bildverarbeitung relevanten Schritte]]


Im linken Teil des Bildes sind die Initialisierungsschritte dargestellt. Zuerst muss die Verbindung zur Kamera aufgebaut und Einstellungen wie z.B. die Belichtungszeit gesetzt werden.
<br><br><br><br><br><br><br>
Anschließend werden Bildcontainer für das Quell- (''p_gray_src_img'') und das Ausgabebild(''p_out_img'') angelegt. Das Quellbild wird im Bildfromat "''VRM_GRAY_8''" gespeichert. Somit kann die Umwandlung von RGB zu Grau entfallen.


<source lang="cpp">
= Veraltete Softwarestände und Artikel =
    VRmImage* p_gray_src_img = 0;
    VRmImageFormat gray_format;
    gray_format.m_width = 752;
    gray_format.m_height = 478;
    gray_format.m_color_format = VRM_GRAY_8;
    gray_format.m_image_modifier = 0;


// allocation of gray level source image, use VRmUsbCamFreeImage to free images allocated with VRmUsbCam Lib
In diesem Abschnitt folgen veraltete Wiki Artikel zu Softwareständen, die nicht mehr existieren. <br>
    if(!VRmUsbCamNewImage(&p_gray_src_img, gray_format))
Die Softwarestände wurden mit Revison 6746 aus dem SVN Archiv gelöscht
        LogExit();
   
</source>


Das Ausgabebild muss in einem mit der Ausgabe auf dem Bildschirm durch die "SDL Bibliothek" kompatiblem Bildformat vorliegen. Es wird im Format "VRM_ARGB_4X8" gespeichert. Weiter Informationen über die verwendbaren Formate finden sich in der Datei "''vrmusbcam2.h''".
<div class="mw-collapsible mw-collapsed">


<source lang="cpp">
== Alter LiDAR-Wiki Artikel ==
     // allocation of gray level image for output in SDL window, use VRmUsbCamFreeImage to free images allocated with VRmUsbCam Lib
'''Hier gehts zu Artikel'''     [[Datei:Ezgif-3-aa149494be25.gif]]  [https://wiki.hshl.de/wiki/index.php/Objekterkennung_mit_Laserscanner Hokuyo LiDAR Objekterkennung (alt)]
    VRmImage* p_out_img = 0;
    VRmImageFormat bgr888_format;
    bgr888_format.m_width = 752;
    bgr888_format.m_height = 478;
    bgr888_format.m_color_format = VRM_ARGB_4X8;
    bgr888_format.m_image_modifier = 0;


    if(!VRmUsbCamNewImage(&p_out_img, bgr888_format))
== Kamerakalibrierung ==
        LogExit();
</source>


Um die zu vor in Matlab entworfenen Algorithmen in das C++ Projekt zu übernehmen gibt es die Möglichkeit den Embedded Coder zu nutzen.
'''Neuer Ansatz incl. extrinsische Kalibrierung'''
Dieser ermöglicht es aus Matlab Code C / C++ Code zu generieren. Eine Anleitung zum Generieren von C Code findet sich in dem Artikel "''[[Von Matlab zu C Code|Von Matlab zu C Code]]''"
Um den Code im "Objekt_Spurerkennung" Projekt zu verwenden muss unter dem Punkt "''Dateien ins Projekt übernehmen''" des Artikels "''[[Von Matlab zu C Code|Von Matlab zu C Code]]''"
"''C/C++ Dynamic Libary''" statt "''C/C++ Static Libary''" gewählt werden.
<br/>


Bestimmte Matlab Funktionen lassen sich nicht generieren. Hier müssen eigenen Funktionen in Matlab programmiert werden um diese zu ersetzen. Eine andere Möglichkeit ist das einsetzen von Dummyfunktionen in Matlab Code.
In diesem Artikel wird die intrinsische und extrinsische Kalibrierung der Kamera beschrieben. Dazu wird die OpenCV Bibliothek in einem C/C++ Programm verwendet.<br>
Diese Dummyfunktionen enthalten keine Funktionalität sondern dienen nur als Platzhalter deren Funktionsaufruf im C/C++ Projekt dann durch den Aufruf der jeweiligen C / C++ Funktion ersetzt wird.
'''Hier gehts zu Artikel'''    [https://wiki.hshl.de/wiki/index.php/Kalibrierung_der_Kamera Kalibrierung der Kamera]
<br/>


== Umsetzung ==
'''Alter Ansatz'''
=== Spur finden und auswerten ===
- erklären des Pap
=== Polynom umrechnen ===
=== Stoplinie finden ===


== Weitere Ansätze ==
In diesem Artikel findet sich die Beschreibung wie die Kameraparameter bestimmt werden können. Als Tool wird hier die Camera Calibrator Toolbox von Matlab verwendet.
=== Kalman Filter ===
<br>
=== Maske Für das Auto ===
'''Hier gehts zu Artikel'''      [https://wiki.hshl.de/wiki/index.php/Kameraparametrierung Kameraparametrierung]


=Inverse Perspective Mapping=
== Draufsichterstellung ==
Bei der Verwendung einer Kamera zur Fahrspurerkennung ergibt sich immer das Problem der perspektischen Verzerrung. Grund dafür ist, dass bei der Projektion aus dem 3D-Weltkoordinatensystem in das 2D-Koordinatensystem des Bildes Information verloren gehen. Das Inverse Perspective Mapping (IPM) bietet eine Möglichkeit die verloren gegangenen Daten zu rekonstruieren und das Bild in entzerrter Vogelperspektive darzustellen.
In diesem Artikel wird die Draufsichterstellung für das Fahrzeug erläutert.
<br>
'''Hier gehts zu Artikel'''  [https://wiki.hshl.de/wiki/index.php/Draufsichterstellung Draufsicht]


[[Datei:SDE IPM.png|left]]
== Fahrspurerkennung ==
In diesem Artikel ist die Fahrspurerkennung dokumentiert, welche momentan auf dem Fahrzeug implementiert ist.
<br>
'''Hier gehts zu Artikel'''    [https://wiki.hshl.de/wiki/index.php/Fahrspurerkennung Fahrspurerkennung]


Dabei wird das Bild unter Verwendung von geometrischen Beziehungen aus dem Weltkoodinatensystem W = {(x,y,z)} in ein volgelperspektivisches Bild I = {(u,v)} transformiert. Dabei ist die die y-Komponente, wie auch in der Abbildung zu sehen ist, stets 0. Das liegt daran das eindeutige Zuordnung der Punkte nicht ohne Weiteres möglich, da schließlich Informationen verloren gegangen sind. Da hierbei Straßenlinien gefunden werden sollen, kann die Annahme getroffen, dass alle Punkte auf dem Boden und damit auf y = 0 liegen müssen.
== Berechnung des Spurpolynoms ==
Im Fall nicht ebenen Straßen gilt diese Annahme nicht und fürht daher zu Fehlern. Das bedeutet, dass das IPM beispielsweise bei Straßen in Gebirgen nicht geeignet ist. Auch möglicherweise vor einem fahrende andere Fahrzeuge liegen nicht in der Bodenebene und sind in der Vogelperspektive verzerrt dargestellt. Der Abstand zu ihnen kann aber bestimmt werden.
Dieser beschreibt die Berechnung des Spurpolynoms in Matlab und den Aufruf des in C/C++ generierten Codes.
Außerdem müssen damit das IPM fehlerfrei funktioniert noch andere Anforderungen erfüllt sein. Position und Ausrichtung der Kamera müssen bekannt sein und es muss der Punkt auf dem Horizont fokussiert werden in dem sich die Fahrspuren zu schneiden scheinen, was wiederum erfordert, dass die Straße in der Mitte des Bildes liegt. Ist das nicht der Fall erhält man keine einwandfreien Ergebnisse, da die Straße immer noch eine perspektivische Verzerrung aufweist.
<br>
'''Hier gehts zu Artikel'''    [https://wiki.hshl.de/wiki/index.php/Berechnung_des_Spurpolynoms#Link_zum_Quelltext_und_zum_Komponententest_in_SVN Berechnung des Spurpolynoms]


== Übertragen des Spurpolynoms ==
In diesem Artikel ist die Kommunikation zwischen dSpace Karte und Computer über die RS232, zur Übertragung des Spurpolynoms, dargestellt.
<br>
'''Hier gehts zu Artikel'''      [https://wiki.hshl.de/wiki/index.php/Übertragen_des_Spurpolynoms#Link_zum_Quelltext_und_zum_Komponententest_in_SVN Übertragen des Spurpolynoms]


== Simulationsumgebung für die Objekt- und Spurerkennung  ==
In diesem Artikel wird die Simulationsumgebung für die Objekt- und Spurerkennung vorgestellt.
<br>
'''Hier gehts zu Artikel'''    [https://wiki.hshl.de/wiki/index.php/Simulationsumgebung_für_die_Objekt-_und_Spurerkennung Simulationsumgebung für die Objekt- und Spurerkennung]


== Stopplinienerkennung  ==
In diesem Artikel wird die Stopplinienerkennung vorgestellt.
<br>
'''Hier gehts zu Artikel'''      [https://wiki.hshl.de/wiki/index.php/Stopplinienerkennung_mit_Hough-Transformation Stopplinienerkennung]


</div>


=Archiv bisheriger Arbeit (sehr alte Artikel) =
<div class="mw-collapsible mw-collapsed">
== [[Alter Ansatz OSE-Objekt- und Spurerkennung]] ==
== [[Zentralperspektive "Umrechnung von Bild- zu Weltkoordinaten"]] (aktuell verwendeter Ansatz) ==


Ein Beispiel für gutes Ergebnis des IPM ist in Abbildung 1 zu sehen. [1]
[[Datei:SED IPM2.png|mini|400px|center|Abbildung 1: Straße aus Vogelperspektive]]
=Operatoren zur Kantenerkennung im Vergleich=
[[Datei:Kantenerkennung operatoren.png]]
=Quellen weiterführende Links=
[1] SVN\SDE_Praktikum\Literatur\Inverse Perspective Transformation: ipm_paper_direkt<br />
"Decomposing and composing a 3×3 rotation matrix" [http://nghiaho.com/?page_id=846]<br />
"Grundlegende mathematische Verfahren der 3D-Visualisierung"[http://www.3dsource.de/deutsch/3Dmathe.htm]<br />
"Caltech Lane Detection Software"[http://vision.caltech.edu/malaa/software/research/caltech-lane-detection/]<br />
"Rekonstruktion 3D - Koordinaten aus Kamerabild"[http://www.gomatlab.de/rekonstruktion-3d-koordinaten-aus-kamerabild-mit-nebenbed-t24440.html]<br />
= Fazit & Ausblick =
Das Carolo-Cup Fahrzeug ist nun in der Lage die Fahrspur zu erkennen und zu tracken. Allerdings liegen noch Abstimmungsprobleme vor, die bisher verhindern, dass das ermittelte Spurpolynom an die Bahn -und Spurfürhrung übergeben wird. Der Spursuchealgorithmus verwendet nun einen zentralperspektivischen Ansatz, um die gefundenen Spurdaten in das körperfeste Koordinatensystem zu überführen, da dieser zuverlässigere und vor allem plausiblere Ergebnisse lieferte als die bisher genutzte Koordinatentransformation.
Die nächsten Schritte bestehen darin die Probleme bei der Übertragung der Spurdaten zu lösen, den Status der Objekterkennung zu überprüfen und diese in Betrieb zu nehmen.
== Feedback zum Artikel ==
--[[Benutzer:Mirekgoebel|Prof. Dr. Mirek Göbel]] ([[Benutzer Diskussion:Mirekgoebel|Diskussion]]) 13:54, 8. Aug. 2014 (CEST)
* Projektplan etc. nichts ins Wiki!
* Originaldaten der Bilder fehlen (zum ggf. Nacharbeiten)
=Archiv bisheriger Arbeit =
== [[Zentralperspektive "Umrechnung von Bild- zu Weltkoordinaten"]] (akktuel verwendeter Ansatz) ==
== [[Spurerkennung]] (vorheriger Ansatz) ==
== [[Spurerkennung]] (vorheriger Ansatz) ==
== [[Objekterkennung mit Laserscanner]] ==
== [[Objekterkennung mit Laserscanner]] ==
== [http://193.175.248.52/wiki/index.php/Objekterkennung_mit_RP_Lidar_A1M8 Objekterkennung mit RP Lidar A1M8] ==


== [[Objekterkennung mit Kamera]] ==
== [[Objekterkennung mit Kamera]] ==


</div>


= Einzelnachweise =
<references/>


----
----
→ zurück zum Hauptartikel: [[Praktikum_SDE|Praktikum SDE]]
→ zurück zum Hauptartikel: [[Praktikum_SDE|Praktikum SDE]]

Aktuelle Version vom 11. Januar 2023, 09:18 Uhr

Autoren: Hendrik Steffen, Sven Posner
Betreuer: Prof. Schneider

→ zurück zum Hauptartikel: Praktikum SDE

Aufbau dieser Seite

Dieser Artikel ist eine Übersichtsseite, in der auf alle relevanten Artikel zur Objekt und Spurerkennung verwiesen wird.
Diese Seite soll, insbesondere einem neuen Jahrgang als Einstieg und Orientierung dienen und die hier beschriebenen Softwarestände sollen mit denen im SVN Archiv übereinstimmen.
Alle Links und Informationen auf dieser Seite bitte aktuell halten

OSE Softwareumgebung

In diesem Artikel wird der aktuelle Softwarestand detailliert beschrieben
Hier gehts zu Artikel Aktuelle Softwareumgebung für das OSE-Programm

VRmagic Kamera einrichten

In diesem Artikel befinden sich Erläuterungen wie die VRmagic Kamera auf dem Fahrzeug benutzt werden kann.
Hier gehts zu Artikel Inbetriebnahme der VRmagic Kamera

Open CV installation

In diesem Artikel wird die Einbindung der OpenCV Bibliotheken in ein Visual Studio Programm beschrieben.
Hier gehts zu Artikel Installation von OpenCV in Visual Studio

Objekterkennung mit dem Hokuyo LiDAR vom WS2022/2023

In diesem Artikel befinden sich Erläuterungen und Dokumentationen für die Verwendung des Hokuyo LiDARs.
Hier gehts zu Artikel OSE Hokuyo-LiDAR Objekterkennung

Test

Hier gehts zu Artikel OSE - Objekt - und Spurerkennung: Test der Spurparameter-Ermittlung in der Simulation

Hier gehts zu Artikel OSE - Objekt - und Spurerkennung: Test der Spurparameter-Ermittlung am Fahrzeug









Veraltete Softwarestände und Artikel

In diesem Abschnitt folgen veraltete Wiki Artikel zu Softwareständen, die nicht mehr existieren.
Die Softwarestände wurden mit Revison 6746 aus dem SVN Archiv gelöscht

Alter LiDAR-Wiki Artikel

Hier gehts zu Artikel Hokuyo LiDAR Objekterkennung (alt)

Kamerakalibrierung

Neuer Ansatz incl. extrinsische Kalibrierung

In diesem Artikel wird die intrinsische und extrinsische Kalibrierung der Kamera beschrieben. Dazu wird die OpenCV Bibliothek in einem C/C++ Programm verwendet.
Hier gehts zu Artikel Kalibrierung der Kamera

Alter Ansatz

In diesem Artikel findet sich die Beschreibung wie die Kameraparameter bestimmt werden können. Als Tool wird hier die Camera Calibrator Toolbox von Matlab verwendet.
Hier gehts zu Artikel Kameraparametrierung

Draufsichterstellung

In diesem Artikel wird die Draufsichterstellung für das Fahrzeug erläutert.
Hier gehts zu Artikel Draufsicht

Fahrspurerkennung

In diesem Artikel ist die Fahrspurerkennung dokumentiert, welche momentan auf dem Fahrzeug implementiert ist.
Hier gehts zu Artikel Fahrspurerkennung

Berechnung des Spurpolynoms

Dieser beschreibt die Berechnung des Spurpolynoms in Matlab und den Aufruf des in C/C++ generierten Codes.
Hier gehts zu Artikel Berechnung des Spurpolynoms

Übertragen des Spurpolynoms

In diesem Artikel ist die Kommunikation zwischen dSpace Karte und Computer über die RS232, zur Übertragung des Spurpolynoms, dargestellt.
Hier gehts zu Artikel Übertragen des Spurpolynoms

Simulationsumgebung für die Objekt- und Spurerkennung

In diesem Artikel wird die Simulationsumgebung für die Objekt- und Spurerkennung vorgestellt.
Hier gehts zu Artikel Simulationsumgebung für die Objekt- und Spurerkennung

Stopplinienerkennung

In diesem Artikel wird die Stopplinienerkennung vorgestellt.
Hier gehts zu Artikel Stopplinienerkennung

Archiv bisheriger Arbeit (sehr alte Artikel)

Einzelnachweise



→ zurück zum Hauptartikel: Praktikum SDE