Stopplinienerkennung mit Hough-Transformation: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Zeile 78: Zeile 78:




'''6. Schnittpunkt der Linien mit dem Spurpolynom prüfen'''
'''6. Linien in das originale Bild transformieren'''
 
Im nächsten Schritt werden die Punkte der relevanten Linien in das originale Bild zurück transformiert. Grund dafür ist die Berechnung des Schnittpunktes im darauffolgenden Schritt. Hier wird von jeder Linie der Schnittpunkt mit dem Spurpolynom berechnet und ausgewertet. Die Koeffizienten des Spurpolynoms sind allerdings für das originale Bild berechnet worden. Um den Schnittpunkt richtig berechnen zu können, müssen folglich die Linien in das originale Bild transformiert werden.
 
 
'''7. Schnittpunkt der Linien mit dem Spurpolynom prüfen'''


Das Kriterium von Länge und Winkel, um eine Linie als Stopplinie zu identifizieren, reicht nicht aus. Grund dafür ist, dass im Bild Linien vorkommen können, welche die Kriterien erfüllen, aber keine Stopplinie sind.
Das Kriterium von Länge und Winkel, um eine Linie als Stopplinie zu identifizieren, reicht nicht aus. Grund dafür ist, dass im Bild Linien vorkommen können, welche die Kriterien erfüllen, aber keine Stopplinie sind.
Zeile 111: Zeile 116:




'''7. Ausgabe'''
'''8. Ausgabe'''


Von der Funktion wird der Abstand der Stopplinie sowie das Bit, ob eine Stopplinie gefunden wurde, zurückgegeben.
Von der Funktion wird der Abstand der Stopplinie sowie das Bit, ob eine Stopplinie gefunden wurde, zurückgegeben.

Version vom 9. Februar 2021, 13:59 Uhr

Autor: Kevin Hustedt, Moritz Oberg

Einleitung

Im Praktikum des Studienschwerpunkts Systems Designe Engineering des Studiengangs Mechatronik, wird ein autonom fahrendes Modellauto entwickelt. Dieses Auto soll auf einem Rundkurs fahren, der unteranderem Kreuzungen mit Stopplinien beinhaltet. Das Auto soll automatisch an diesen Stopplinien halten. Für das Stoppen muss das Auto die Stopplinien über die eingebaute Kamera erkennen und den Abstand fortlaufend berechnen. Dies geht aus dem Lastenheft des Praktikums hervor (vgl. Abb. 1).

Lastenheft

Pflichtenheft

Programmablaufplan

Programm

Die Stopplinienerkennung wurde in der Programmiersprache C/C++ umgesetzt. Als Entwicklungsumgebung diente Visual Studio 2019. Es wurden Funktionen und Datentypen aus der Programmbibliothek OpenCV verwendet. Die Bibliothek muss für die Verwendung in die Entwicklungsumgebung Visual Studio eingebunden werden, eine ausführliche Anleitung für das Einbinden ist hier zu finden: Einrichten von OpenCV

Programmablauf

Der Programmablauf der Stopplinienerkennung ist in Abbildung 3 zu sehen. Auf dem Auto wird in regelmäßigen Schritten ein neues Bild mit der Kamera aufgenommen. Im folgenden werden die einzelnen Schritte des Programmablaufes beschrieben.


1. Eingabe

Das Bild der Kamera (vgl. Abb. 6) wird zunächst in der Bildtransformation in ein Graustufenbild gewandelt und in die Vogelperspektive transformiert (vgl. Abb. 7).

Danach erfolgt in der Spurerkennung die Berechnung des Spurpolynoms. Das Spurpolynom beschreibt den Verlauf der Fahrbahn in dem aufgenommenen Bild. Das Spurpolynom ist ein Polynom 2. grades und hat folgende Form:



Das in die Vogelperspektive transformierte Bild und die Koeffizienten a, b und c des Spurpolynoms, werden dann der Stopplinienerkennung als Funktionsparameter übergeben.


2. Schnittstelle zurücksetzen

Für die Datenübertragung zwischen PC und dSPACE Karte wurde eine Datenstruktur angelegt. Die Refernez der Datenstruktur wird der Stopplinienerkennung übergeben. Die Datenstruktur beinhaltet unter anderem ein Bit, welches anzeigt das eine Stopplinie erkannt wurde und den Abstand zu der gefundenen Stopplinie. Beide Werte werden zu Beginn eines Programmdurchlaufes zurückgesetzt.


3. Region of Interest erstellen

In Abbildung 7 ist das Bild nach der Transformation zu sehen, welches der Stopplinienerkennung übergeben wird. In dem Bild kann man erkennen, dass nicht das gesamte Bild relevant für die Erkennung einer Stopplinie ist. Aus diesem Grund wird im weiteren Verlauf, nur ein Ausschnitt aus diesem Bild untersucht. Dazu wird mit Hilfe einer Funktion ein Ausschnitt aus dem Bild (Region of Interest) erstellt. Ein weiterer Vorteil ist die Verringerung der Programmdurchlaufzeit, da vom Algorithmus nur ein kleines Bild verarbeitet werden muss. Die Größe des Bildausschnittes kann über Parameter in der Stopplinienerkennung beliebig eingestellt werden.


4. Linien im Bild finden

Im nächsten Schritt werden in dem Bildausschnitt Linien gesucht. Für das Suchen der Linien wird die Hough Line Transformation verwendet. Die Hough Line Tranformation wird verwendet um gerade Linien in einem binären Bild zu finden. In diesem Fall wird die Funktion cv::HoughlineP() aus der Programmbibliothek OpenCV verwendet. Der Funktion wird dazu ein binäres Bild übergeben. Als Rückgabe erhält man eine Liste mit Linien. Die Linien werden durch jeweils zwei Punkten: P1(x,y) und P2(x,y) beschrieben, wobei die Punkte in kartesischen Koordinaten angegeben werden.


5. Länge und Winkel der gefundenen Linien prüfen

Um die Anzahl an Linie zu reduzieren, werden die gefundenen Linien hinsichtlich Länge und Winkel untersucht, damit nur Linien weiter verfolgt werden, die die Kriterien einer Stopplinie erfüllen. Dabei fallen zu kurze Linien raus und Linien die zum Beispiel senkrecht zum Fahrzeug stehen. Senkrechte Linien stammen zum Beispiel von einer Fahrbahnmarkierung.

Eine Linie wird mit Hilfe von zwei Punkten beschreiben. Der Winkel in Grad einer Linie kann folgendermaßen berechnet werden:



Die Länge einer Linie kann mit der folgenden Formel berechnet werden:



Alle Linien, welche die Kriterien erfüllen, werden gespeichert und weiter verarbeitet, alle anderen Linien werden ignoriert. Der Programmablauf dieser Funktion ist in Abbildung 4 zu sehen.


6. Linien in das originale Bild transformieren

Im nächsten Schritt werden die Punkte der relevanten Linien in das originale Bild zurück transformiert. Grund dafür ist die Berechnung des Schnittpunktes im darauffolgenden Schritt. Hier wird von jeder Linie der Schnittpunkt mit dem Spurpolynom berechnet und ausgewertet. Die Koeffizienten des Spurpolynoms sind allerdings für das originale Bild berechnet worden. Um den Schnittpunkt richtig berechnen zu können, müssen folglich die Linien in das originale Bild transformiert werden.


7. Schnittpunkt der Linien mit dem Spurpolynom prüfen

Das Kriterium von Länge und Winkel, um eine Linie als Stopplinie zu identifizieren, reicht nicht aus. Grund dafür ist, dass im Bild Linien vorkommen können, welche die Kriterien erfüllen, aber keine Stopplinie sind. Aus diesem Grund werden die gefundenen Linien zusätzlich hinsichtlich des Schnittpunkts mit dem Spurpolynom untersucht. Der Programmablauf dieser Funktion ist in Abbildung 5 zu sehen.


Dazu werden die beiden Punkte einer Linie genutzt, um eine lineare Funktion zu berechnen. Die lineare Funktion hat dann folgende Form:



Dabei ist m die Steigung der linearen Funktion und d der y-Achsenabschnitt der Funktion. Durch gleichsetzen der linearen Funktion und der Funktion des Spurpolynoms, erhält man den Schnittpunkt:



Nach x umgestellt sieht die Gleichung folgendermaßen aus:



Ein Schnittpunkt der Linie mit dem Spurpolynom liegt dann vor, wenn die Lösung der Gleichung nicht komplex ist und der Schnittpunkt zwischen den beiden Endpunkten der Linie liegt: Schnittpunkt > P1.y und Schnittpunkt < P2.y

Wenn die Bedingung erfüllt sind, dann wird die Suche abgebrochen und der Abstand der Stopplinie bis zum Auto berechnet. Der Abstand wird ermittelt, indem der Abstand in Pixeln bestimmt. Der Abstand in Pixel dividiert durch den Kameraparameter (Pixel/Meter) ergibt den Abstand zum Auto in Meter. Der Abstandswert wird schlussendlich in der Datenstruktur der Kommunikationsschnittstelle geschrieben und das entsprechende Bit gesetzt.

Wenn die Linie die Bedingungen nicht erfüllt, dann wird die nächste Linie untersucht.


8. Ausgabe

Von der Funktion wird der Abstand der Stopplinie sowie das Bit, ob eine Stopplinie gefunden wurde, zurückgegeben.

Test

Zusammenfassung

Ausblick

Literaturverzeichnis