SenKam - Stopplinienerkennung: Unterschied zwischen den Versionen
Zeile 124: | Zeile 124: | ||
<br> | <br> | ||
Die Stopplinie liegt zu Beginn der Schnittpunktberechnung lediglich als zwei Koordinatenpunkte vor: | Die Stopplinie liegt zu Beginn der Schnittpunktberechnung lediglich als zwei Koordinatenpunkte vor: | ||
<math>P_L = \binom{x_L}{y_L} P_R = \binom{x_R}{y_R}</math><br> | <math>\vec{P_L} = \binom{x_L}{y_L}; \vec{P_R} = \binom{x_R}{y_R}</math><br> | ||
Um die Berechnung des Schnittpunktes durchführen zu können, muss zunächst die Gerade in Vektorform erstellt werden. Die Form ist hierbei wie folgt: <math>g_s = (P_L-P_R)*s+P_R=\binom{x_L-x_R}{y_L-y_R}*s+\binom{x_R}{y_R}</math><br><br> | Um die Berechnung des Schnittpunktes durchführen zu können, muss zunächst die Gerade in Vektorform erstellt werden. Die Form ist hierbei wie folgt: <math>\vec{g_s} = (\vec{P_L}-\vec{P_R})*s+\vec{P_R}=\binom{x_L-x_R}{y_L-y_R}*s+\binom{x_R}{y_R}</math><br><br> | ||
Da diese Formeln nicht in der derzeitigen Form gleichgesetzt werden könnne, muss die Vektorform in die Berechnung des X- und Y-Wertes erfolgen, sodass das Ergebnis der nachfolgenden Formel entspricht. <math>x_g = (x_L-x_R)*s+x_R; y_g=(y_L-y_R)*s+y_R</math><br><br> | Da diese Formeln nicht in der derzeitigen Form gleichgesetzt werden könnne, muss die Vektorform in die Berechnung des X- und Y-Wertes erfolgen, sodass das Ergebnis der nachfolgenden Formel entspricht. <math>x_g = (x_L-x_R)*s+x_R; y_g=(y_L-y_R)*s+y_R</math><br><br> | ||
Anschließend können das Bahnspurpolynom und die Vektorschreibweise der Stopplinie gleichgesetzt werden: <math>(x_L-x_R)*s+x_R=x_P; (y_L-y_R)*s+y_R=ax^2_P+bx_P +c</math>;<br> | Anschließend können das Bahnspurpolynom und die Vektorschreibweise der Stopplinie gleichgesetzt werden: <math>(x_L-x_R)*s+x_R=x_P; (y_L-y_R)*s+y_R=ax^2_P+bx_P +c</math>;<br> | ||
Zeile 146: | Zeile 146: | ||
Um Stopplinien zu filtrieren, welche sich innerhalb eines Radius' um das Fahrzeug befinden, müssen die Stopplinien-Koordinaten vom Weltkoordinatensystem in das Fahrzeugkoordinatensystem überführt werden. Hierzu wird eine Drehmatrix auf die kordinaten angewendet, welche die Stopplinien-Koordinaten unter Zuhilfenahme der Fahrzeugposition und dem Winkel im Weltkoordinatensystem umwandelt. Die resultierenden Koordinaten beschreiben die relative Postion der Stopplinien zum Fahrzeug.<br><br> | Um Stopplinien zu filtrieren, welche sich innerhalb eines Radius' um das Fahrzeug befinden, müssen die Stopplinien-Koordinaten vom Weltkoordinatensystem in das Fahrzeugkoordinatensystem überführt werden. Hierzu wird eine Drehmatrix auf die kordinaten angewendet, welche die Stopplinien-Koordinaten unter Zuhilfenahme der Fahrzeugposition und dem Winkel im Weltkoordinatensystem umwandelt. Die resultierenden Koordinaten beschreiben die relative Postion der Stopplinien zum Fahrzeug.<br><br> | ||
Da nicht alle Stopplinien zu überprüfen sind und eine realistische Sichtweite in der Offline-Simulation simuliert werden soll, wird der Abstand der Punkte zum Fahrzeug mittels des Satzes von Pythagoras ermittelt. Stopplinien-Koordinaten-Paare mit einem kleineren Abstand als die zuvor festgelegte Sichtweite werden gespeichert und mit ihnen weitergearbeitet.Da Stopplinien hinter dem Fahrzeug nicht berücksichtigt werden müssen, werden diese anschließend durch auf negative X-Werte überprüft. Alle Stopplinienpaare mit mindestens einem positiven X-Wert werden gespeichert und anschließend weiterverwendet.<br> | Da nicht alle Stopplinien zu überprüfen sind und eine realistische Sichtweite in der Offline-Simulation simuliert werden soll, wird der Abstand der Punkte zum Fahrzeug mittels des Satzes von Pythagoras ermittelt. Stopplinien-Koordinaten-Paare mit einem kleineren Abstand als die zuvor festgelegte Sichtweite werden gespeichert und mit ihnen weitergearbeitet.Da Stopplinien hinter dem Fahrzeug nicht berücksichtigt werden müssen, werden diese anschließend durch auf negative X-Werte überprüft. Alle Stopplinienpaare mit mindestens einem positiven X-Wert werden gespeichert und anschließend weiterverwendet.<br> | ||
Die Verbleibenden Stopplinien, bestehend aus jeweils 2 Punkten, können trotz ihrer Distanz zum Fahrzeug dennoch für dieses irrelevant sein, wenn die Stopplinie nicht die prädizierte Fahrspur schneidet.Daher wird im nachfolgenden Schritt eine Schnittpunktberechnung mittels der zuvor errechneten Formel durchgeführt. Der daraus resultierende Faktor <b> s</b> wird dabei ermittelt und anschließend überprüft. Sollte dieser Wert zwischen 0 und 1 liegen, so wird der Schnittpunkt errechnet, indem <b> s<b> in die Geradengleichung eingefügt wird.<br> | Die Verbleibenden Stopplinien, bestehend aus jeweils 2 Punkten, können trotz ihrer Distanz zum Fahrzeug dennoch für dieses irrelevant sein, wenn die Stopplinie nicht die prädizierte Fahrspur schneidet.Daher wird im nachfolgenden Schritt eine Schnittpunktberechnung mittels der zuvor errechneten Formel durchgeführt. Der daraus resultierende Faktor <b> s</b> wird dabei ermittelt und anschließend überprüft. Sollte dieser Wert zwischen 0 und 1 liegen, so wird der Schnittpunkt errechnet, indem <b> s</b> in die Geradengleichung eingefügt wird.<br> | ||
Sobald alle gültigen Schnittpunkte errechnet wurden, wird mittels einer Abstandsberechnung der zum Fahrzeug am nächsten befindliche Punkt ermittelt. Der Abstand zu diesem Punkt wird in einer Ausgabevariable gespeichert und das Flagbit auf 1 gesetzt. <br> | Sobald alle gültigen Schnittpunkte errechnet wurden, wird mittels einer Abstandsberechnung der zum Fahrzeug am nächsten befindliche Punkt ermittelt. Der Abstand zu diesem Punkt wird in einer Ausgabevariable gespeichert und das Flagbit auf 1 gesetzt. <br> | ||
Abschließend wird, unabhängig davon ob eine gültige Stopplinie gefunden wurde, der Abstand und das Flagbit ausgegeben. | Abschließend wird, unabhängig davon ob eine gültige Stopplinie gefunden wurde, der Abstand und das Flagbit ausgegeben. | ||
<br><br> | <br><br> | ||
→ zurück zur Bahnplanung und Spurführung: [[BSF - Bahn- und Spurführung]]<br/> | → zurück zur Bahnplanung und Spurführung: [[BSF - Bahn- und Spurführung]]<br/> |
Version vom 20. November 2019, 07:09 Uhr
→ zurück zur Bahnplanung und Spurführung: BSF - Bahn- und Spurführung
Bearbeiter: Marcel Bröckelmann
Betreuer: Prof. Schneider
Aufgabe
Bearbeiten Sie nachfolgende Aufgaben bis zum Abgabetermin und stellen Sie Ihre Lösung Prof. Schneider vor. Gehen Sie systematisch in den in SDE vermittelten Schritten
- Einleitung
- Anforderungen
- Funktionaler Systementwurf / Technischer Systementwurf
- Komponentenspezifikation
- Programmierung
- Komponententest
- Zusammenfassung
- Link zum Quelltext in SVN
vor.
Einleitung
Während der Fahrt auf dem Rundkurs trifft das Fahrzeug auf mehrere Stopplinien. Diese sind zum bei einer Kreuzung vorzufinden. Das Fahrzeug muss diese erkennen, die Geschwindigkeit drosseln und wie in REQ 10.2340 im Abstand von maximal 15cm vor der Stopplinie zum stehen kommen. Anschließend muss das Fahrzeug zwei Sekunden die Weiterfahrt verhindern und abschließend diese regulär fortsetzen.
Anforderungen
Damit das Requirement erfüllt werden kann, müssen Anfroderungen an die entstehende Anwendung gestellt werden.
Diese Anforderungen sind in der Folgenden Tabelle aufgelistet:
ID | Inhalt | Ersteller | Datum | Prüfer |
---|---|---|---|---|
1 | Die Fahrzeugposition und Winkel müssen eingelesen werden. | Marcel Bröckelmann | 25.10.2019 | Marius Köhler |
2 | Der Schalter zur Aktivierung der Funktion muss eingelesen werden. | Marcel Bröckelmann | 25.10.2019 | Marius Köhler |
3 | Die Parameter des Bahnspurpolynoms müssen eingelesen werden. | Marcel Bröckelmann | 25.10.2019 | Marius Köhler |
4 | Die Koordinaten der Stopplinien müssen eingelesen werden. | Marcel Bröckelmann | 25.10.2019 | Marius Köhler |
5 | Die Stopplinienkoordinaten müssen in das Fahrzeugkoordinatensystem umgewandelt werden. | Marcel Bröckelmann | 25.10.2019 | Marius Köhler |
6 | Nur Stopplinien vor dem Fahrzeug dürfen berücksichtigt werden. | Marcel Bröckelmann | 25.10.2019 | Marius Köhler |
7 | Die verbleibenen Stopplinien müssen überprüft werden, ob die Stopplinien in der eigenen Fahrspur liegen. | Marcel Bröckelmann | 25.10.2019 | Marius Köhler |
8 | Das Fahrzeug muss die Distanz zu den Stopplinien ermittelt werden. | Marcel Bröckelmann | 25.10.2019 | Marius Köhler |
9 | Das Fahrzeug muss ein Stopplinien-Flagbit und eine Distanz ausgeben. | Marcel Bröckelmann | 25.10.2019 | Marius Köhler |
10 | Das Flagbit muss gesetzt werden und der kürzeste Abstand zu den Stopplinien ausgegeben werden. | Marcel Bröckelmann | 25.10.2019 | Marius Köhler |
Funktionaler Systementwurf / Technischer Systementwurf
Ablaufplan
Um diese Anforderungen zu erfüllen, wurde ein Ablaufplan erstellt. Dieser ist in Abbildung 18 zu sehen.
Zu Beginn der Stopplinienerkennung in der Offline-Simulation muss dem Programm die Position des Fahrzeug, dessen Winkel im Weltkoordinatensystem, die Start- und Endpunkte der Stopplinien und das Bahnspurpolynom übergeben werden.
Da die Funktion sowohl einen Abstand zur Stopplinie als auch ein Flagbit übermitteln soll, müssen diese zu Beginn des Programms initialisiert werden.Sollten Stopplinien übergeben worden sein, so muss zuerst eine Transformation der Stopplinienpunkte in das Fahrzeugkoordinatensystem stattfinden.
Anschließend müssen alle Stopplinien-Koordinaten-Paare extrahiert werden, welche sich innerhalb eines Radius' um das Fahrzeug befinden. Sofern nach dieser Extraktion Stopplinien verbleiben, muss anschließend ermittelt werden, welche Stopplinien sich vor dem Fahrzeug befinden.
Da auch Stopplinien auf der Gegenfahrbahn erkannt werden können, diese jedoch nicht beachtet werden müssen, wird im darauf folgenden Schritt ermittelt, welche Stopplinien einen Schnittpunkt mit dem Bahnspurpolynom besitzen. Hierzu wird eine Gerade durch die Punkte der jeweiligen Stopplinien gezogen und mittels der PQ-Formel die Schnittpunkte ermittelt. Die errechneten Schnittpunkte werden anschließend daraufhin geprüft, ob sie sich zwischen den beiden Stopplinienpunkten befinden. Ist dies der Fall, so wird diese Stopplinie gespeichert.
Da mehrere legitime Schnittpunkte möglich sind, muss anschließend der Abstand zwischen den Schnittpunkten zu dem Fahrzeug ermittelt werden. Jeder ermittelte Wert muss mit dem vorigen Abstand verglichen werden und der kleinere Abstand gespeichert werden.Zusätzlich muss nach dem ersten setzen des Minimalabstands das Flagbit auf 1 gesetzt werden.
Nachdem alle Abstände verglichen wurden oder in einer der zuvor verwendeten if-Verzweigungen der Workflow verlassen wurde, wird abschließend Flagbit und der Abstand übermittelt.
Schnittpunktberechnung
Um den Schnittpunkt zwischen Bahnspurpolynom und Stopplinie zu ermitteln, liegt das Bahnspurpolynom in folgender Form vor:
Die Stopplinie liegt zu Beginn der Schnittpunktberechnung lediglich als zwei Koordinatenpunkte vor:
Um die Berechnung des Schnittpunktes durchführen zu können, muss zunächst die Gerade in Vektorform erstellt werden. Die Form ist hierbei wie folgt:
Da diese Formeln nicht in der derzeitigen Form gleichgesetzt werden könnne, muss die Vektorform in die Berechnung des X- und Y-Wertes erfolgen, sodass das Ergebnis der nachfolgenden Formel entspricht.
Anschließend können das Bahnspurpolynom und die Vektorschreibweise der Stopplinie gleichgesetzt werden: ;
Da Xp durch das zusammenführen der Formeln einen Ersatzwert hat, wird dieser anschließend ersetzt:
Um den Schnittpunkt zu ermitteln, muss durch die PQ-Formel der Wert von S ermittelt werden, wofür die entstandene Gleichung in entsprechende Form umgewandelt werden muss.
Hierzu muss die Gleichung zuerst umgeformt werden:
Abschließend kann die Gleichung in die PQ-Formel eingesetzt werden, sodass folgende Formel entsteht:
Hierdurch kann das S ermittelt werden, welches in die Vektorform der Geraden eingefügt werden kann, um den Schnittpunkt zu ermitteln. Zusätzlich gibt der Wert Aufschluss darüber, ob der Schnittpunkt innerhalb der Stopplinie oder außerhalb der Begrenzungen sich befindet. Besitzt S eine Wert zwischen 0 und 1, so liegt der Schnittpunkt in den Begrenzungen. Sollte dies nicht der Fall sein, so liegt der Schnittpunkt außerhalb der Begrenzungen und die Stopplinie kann ignoriert werden.
Programmierung
Da die Daten über Spur und Stopplinien in Online- und Offline-Simulation unterschiedlich sind, muss die Implementierung der Funktion der Stopplinienerkennung an verschiedener Stelle stattfinden. In der Offline-Simulation wird hierfür der Offline-Sensoren-Block verwendet, da dieser in der Online-Simulation durch die Kamerafunktionen und deren Funktionen ersetzt wird.
Die Stopplinienerkennung wird mittels einer implementierten Matlab-Funktion realisiert, welche die Eingänge A,B,C des Fahrspurpolynoms, X,Y und Ausrichtung des Fahrzeugs und die Liste aller Stopplinien besitzt. Als Ausgänge werden ein double für den Abstand und ein Boolean für das Flagbit definiert.
Zu Beginn wird ermittelt, ob Stopplinien vorhanden sind. Hierzu wird der Abstand der ersten beiden Stopplinienpunkte verglichen und überprüft, ob der Abstand zwischen den beiden Punkten größer 0 ist. Ist dies der Fall, so wird die Funktion regulär fortgesetzt.
Um Stopplinien zu filtrieren, welche sich innerhalb eines Radius' um das Fahrzeug befinden, müssen die Stopplinien-Koordinaten vom Weltkoordinatensystem in das Fahrzeugkoordinatensystem überführt werden. Hierzu wird eine Drehmatrix auf die kordinaten angewendet, welche die Stopplinien-Koordinaten unter Zuhilfenahme der Fahrzeugposition und dem Winkel im Weltkoordinatensystem umwandelt. Die resultierenden Koordinaten beschreiben die relative Postion der Stopplinien zum Fahrzeug.
Da nicht alle Stopplinien zu überprüfen sind und eine realistische Sichtweite in der Offline-Simulation simuliert werden soll, wird der Abstand der Punkte zum Fahrzeug mittels des Satzes von Pythagoras ermittelt. Stopplinien-Koordinaten-Paare mit einem kleineren Abstand als die zuvor festgelegte Sichtweite werden gespeichert und mit ihnen weitergearbeitet.Da Stopplinien hinter dem Fahrzeug nicht berücksichtigt werden müssen, werden diese anschließend durch auf negative X-Werte überprüft. Alle Stopplinienpaare mit mindestens einem positiven X-Wert werden gespeichert und anschließend weiterverwendet.
Die Verbleibenden Stopplinien, bestehend aus jeweils 2 Punkten, können trotz ihrer Distanz zum Fahrzeug dennoch für dieses irrelevant sein, wenn die Stopplinie nicht die prädizierte Fahrspur schneidet.Daher wird im nachfolgenden Schritt eine Schnittpunktberechnung mittels der zuvor errechneten Formel durchgeführt. Der daraus resultierende Faktor s wird dabei ermittelt und anschließend überprüft. Sollte dieser Wert zwischen 0 und 1 liegen, so wird der Schnittpunkt errechnet, indem s in die Geradengleichung eingefügt wird.
Sobald alle gültigen Schnittpunkte errechnet wurden, wird mittels einer Abstandsberechnung der zum Fahrzeug am nächsten befindliche Punkt ermittelt. Der Abstand zu diesem Punkt wird in einer Ausgabevariable gespeichert und das Flagbit auf 1 gesetzt.
Abschließend wird, unabhängig davon ob eine gültige Stopplinie gefunden wurde, der Abstand und das Flagbit ausgegeben.
→ zurück zur Bahnplanung und Spurführung: BSF - Bahn- und Spurführung