Stopplinien-Verhalten
Autoren: Hagen Heuer, Tim Kruse
Bearbeitet: Daniel Gosedopp, Ran Wei
Betreuer: Prof. Schneider, Prof. Göbel
Einleitung
Ziel ist es, das Verhalten des Fahrzeugs an Stopplinien entsprechend den Anforderungen im Lastenheft zu implementieren. Das Fahrzeug muss nach dem Lastenheft im Falle der Erkennung einer Haltelinie immer langsamer fahren. Befindet sich es an der Stopplinie, so muss es dort stoppen und zwei Sekunden halten. Anschließend überquert es Kreuzung und setzt die Weiterfahrt fort.
Anforderungen
Im Lastenheft des Projekts Carolo Cup wird die Anforderung an das Verhalten des Fahrzeugs an einer Stopplinie in REQ10.2340 festgehalten (s. Abbildung 1).
-
Abbildung 1: Lastenheftauszug Stopplinien-Verhalten.
Die Umsetzung der Anforderung ist im Pflichtenheft wie folgt festgehalten:
-
Abbildung 2: Pflichtenheftauszug zu REQ10.2340.
Folgende Anforderungen können festgelegt werden und im späteren Projekt berücksichtigt werden.
- Trifft das Fahrzeug bei seiner Rundfahrt an eine Stopp-Kreuzung, so muss es 15 cm vor der Stopplinie anhalten.
- Während das Fahrzeug auf die Stopplinie zufährt, muss die Geschwindigkeit des Fahrzeugs gedrosselt werden.
- Das Fahrzeug muss vor der Stoppline halten und 2 Sekunden warten.
- Nach der Wartezeit muss das Fahrzeug die Kreuzung passieren, ohne das die Stopplinie ein weiteres Mal erkannt wird.
- Die Implementierung erfolgt in Matlab-Simulink.
Konzept
Als Basis für die Implementierung diente die vorhandene MATLAB-Funktion für das Verhalten an Stopplinien. Beim Testen dieser Funktion viel unter anderem auf, dass diese nicht lauffähig ist. Außerdem war die Implementierung der Weiterfahrt nach einer Stopplinie fehlerhaft, da das Fahrzeug die vorherige Stopplinie erneut erkennen würde. Daher wurde ein neues Konzept erstellt, in dem Teile der ursprünglichen Idee berücksichtigt wurden. Zunächst werden die externen Ein- und Ausgänge des Moduls definiert:
Grundidee
Das Modul BSF ermittelt unter anderem die Sollgeschwindigkeit des Fahrzeugs. Dies geschieht entweder auf Basis der Kurvenkrümmung oder wird bei Vorhandensein eines Hindernisses als konstant angenommen. Die Grundidee ist es, die Sollgeschwindigkeit bei Erkennung einer Stopplinie mit einem Faktor (Werte von 0 - 1) zu multiplizieren, also immer weiter zu verringern, bis das Fahrzeug 15cm vor der Linie stillsteht. Der Stillstand soll für zwei Sekunden beibehalten werden. Danach soll das Fahrzeug mit unveränderter Sollgeschwindigkeit weiterfahren (Faktor = 1). Den Verlauf des Faktorwertes zeigt Abb. 3.
-
Abbildung 3: Verlauf des Geschwindigkeitsbegrenzungsfaktors
Am Anfang ist der Faktor 1, bis eine Stopplinie erkannt wird. Dann verringert er sich kontinuierlich, bis zum Wert 0, sodass das Auto immer langsamer wird und schließlich 15cm vor der Stopplinie zum Stillstand kommt. Hier wird für zwei Sekunden gewartet. Danach wird der Faktor wieder auf 1 gesetzt, sodass wieder auf errechnete Sollgeschwindigkeit beschleunigt wird.
Festlegung von Ein- und Ausgängen
Zur Umsetzung der Funktion werden zunächst die Ein- und Ausgänge festgelegt. Diese zeigt Tab. 1.
Art | Variablenname | Beschreibung | Einheit |
---|---|---|---|
Eingang | SenKam_Stopplinienabstand_f64 | Abstand von Fahrzeugfront zur Stopplinie | m |
Eingang | SenKam_Stopplinienflag_bit | Gesetzt, wenn eine Stopplinie erkannt wird | - |
Eingang | Vorfahrtssituation_bit | Gesetzt, wenn ein Hindernis an der Kreuzung steht. | - |
Eingang | T | Zykluszeit der Simulation | s |
Ausgang | BsfVx_Faktor_f64 | Geschwindigkeitsbegrenzungsfaktor, falls Stopplinie erkannt wurde | - |
Programmablauf
Das Programm wird als Zustandsautomat realisiert, dessen Zustandsdiagramm Abbildung 3 zeigt.
-
Abb. 3: Progammablaufplan des Stopplinien-Verhaltens.
Zu Beginn werden Variablen eingelesen und initialisiert. Anschließend erfolgt die Abfrage des Zustands. Das Programm wird hierbei in vier Zustände unterteilt.
Zustand 1 - Auf Stopplinie warten
Im ersten Zustand werden zunächst Variablen an den Ausgang übergeben. Anschließend wird abgefragt, ob das Stopplinienflag 1 ist. Trifft dies zu wird der Zustand auf 2 gesetzt. Wurde keine Stopplinie gefunden, so wird der Zustand nicht gewechselt.
Zustand 2 - Abbremsen nach Stopplinienerkennung
In diesem Zustand wird abgebremst. Ist der Stopplinienabstand kleiner als 15cm, werden die Motoren abgeschaltet und der Zustand auf 3 gesetzt.
Zustand 3 - An Stopplinie warten
In diesem Zustand wird an der Stopplinie gewartet. Liegt keine Vorfahrtssituation vor, beträgt die Wartezeit 2 Sekunden, ansonsten wird solange gewartet, bis das Hindernis die Kreuzung passiert hat.
Zustand 4 - Kreuzung überfahren Hier wird solange gefahren, bis die Stopplinie überquert wurde, der Stopplinienabstand also <= 0 ist. Dies ist nötig, damit die Stopplinie nicht als neue Stopplinie erkannt wird und das Farzeug erneut anhält. Danach wechselt der Automat wieder in den ersten Zustand.
Umsetzung und Ergebnis der Simulationsumgebung
Die Umsetzung der Implementierung erfolgt wie bereits erwähnt im Offline-Modell mit Hilfe von Simulink und MATLAB Code. Hierfür wurde eine MATLAB-Funktion eingefügt und anhand des Programmablaufplans programmiert. Da die Funktion in jedem Zyklus neu aufgerufen wird, gehen die vorherigen Werte der Variablen verloren. Dies muss allerdings für einige Werte verhindert werden, da diese im nächsten Zyklus von Bedeutung sind. Die Ausgangssignale werden über je einen Memory-Baustein an den Eingang zurückgeführt. Außerdem werden im Memory-Baustein passende Initialwerte hinterlegt, da im ersten Aufruf der Funktion noch keine Werte vorhanden sind (algebraische Schleife).
Die Ein- und Ausgänge der Funktion zeigt Abb. 5.
-
Abbildung 5: MATLAB-Funktionsblock.
Das Ergebnis des Stopplinienverhalten wird in der nachfolgenden Abbildung dargestellt.
-
Abbildung 6: Wichtige Variablenwerte beim Test der Funktion.
Im ersten Diagramm ist das Stopplinienflag zu sehen, welches bei Detektion einer Stopplinie auf Eins wechselt.
Im zweiten Diagramm ist der dazugehörige Stopplinienabstand zu sehen. Dieser ist solange Null, bis eine Stopplinie erkannt wurde. Die Stopplinie kann ab einem Abstand von einem Meter oder weniger erfasst werden. Am Verlauf ist zudem gut zu erkennen, dass das Fahrzeug beginnt zu verzögern, da der Abstand nicht linear abnimmt. Nach der zweisekündigen Wartezeit beschleunigt das Fahrzeug wieder und der Abstand zur Stopplinie nimmt linear weiter ab. Erreicht dieser Null, so wird die Stopplinie überfahren.
Im letzten Diagramm wird die errechnete Sollgeschwindigkeit ausgegeben. Auch an dieser Kurve ist gut zu sehen, dass das Fahrzeug verzögert. Wenn der Abstand 15 cm oder weniger beträgt, werden die Motoren abgeschaltet, da der Faktor auf Null abfällt.
Unit-Test & Integrations-Test
Im Folgenden sind die einzelnen Testfälle für den Unit- und Integrations-Test im Offline- und Online-Modell zu sehen.
Offline-Modell: Durch die Eingabe von Parametern konnten folgende Testfälle in der Simulation geprüft werden.
ID | Testfallbeschreibung | Eingänge | Ausgang | Erwartetes Ergebnis | Testergebnis | Testperson | Datum |
---|---|---|---|---|---|---|---|
1 | Das Fahrzeug fährt mit der vorgegebenen Geschwindigkeit, wenn keine Stopplinie erkannt wurde. | SenKam_StoplinienFlag_bit = 0 , SenKam_StoplinienAbst_f64 = 0
|
1 | Vollgas | 1 | Heuer, Kruse | 15.06.2020 |
2 | Trifft das Fahrzeug bei seiner Rundfahrt an eine Stopp-Kreuzung so muss es 0.15m vor der Stopplinie anhalten | SenKam_StoplinienFlag_bit = 1 , SenKam_StoplinienAbst_f64 <= 0.15
|
0 | Fahrzeug Stoppt | 0 | Heuer, Kruse | 15.06.2020 |
3 | Das Fahrzeug muss im Bereich zwischen 0.15m und 1m vor der Stopplinie immer langsamer fahren. | SenKam_StoplinienFlag_bit = 1 , 15 < SenKam_StoplinienAbst_f64 <= 100
|
0 < BSFVx_Faktor_i8 < 1
|
Bremsen | 0 < BSFVx_Faktor_i8 < 1
|
Heuer, Kruse | 15.06.2020 |
4 | Das Fahrzeug bremst bei eingeleiteter Bremsung weiter ab, auch wenn das Stopplinienflag verloren geht. | SenKam_StoplinienFlag_bit = 0 , SenKam_StoplinienAbst_f64 = 0
|
0 < BSFVx_Faktor_i8 < 1
|
Bremsen | 0 < BSFVx_Faktor_i8 < 1
|
Heuer, Kruse | 15.06.2020 |
5 | Das Fahrzeug muss bei Stopplinienerkennung im Bereich weiter als 1m weiter normal fahren. | SenKam_StoplinienFlag_bit = 1 , SenKam_StoplinienAbst_f64 > 100
|
BSFVx_Faktor_i8 = 1
|
Nicht unterbrochene Fahrt | BSFVx_Faktor_i8 = 1
|
Heuer, Kruse | 15.06.2020 |
Die fehlerfreie Funktionsweise ist zudem im eingefügten Video zu sehen.
Online-Modell:
ID | Testfallbeschreibung | Eingänge | Ausgang | Erwartetes Ergebnis | Testergebnis | Testperson | Datum |
---|---|---|---|---|---|---|---|
1 | Das Fahrzeug fährt mit der vorgegebenen Geschwindigkeit, wenn keine Stopplinie erkannt wurde. | SenKam_StoplinienFlag_bit = 0 , SenKam_StoplinienAbst_f64 = 0
|
Das Fahrzeug fährt mit Vollgas. | ||||
2 | Das Fahrzeug muss im Bereich zwischen 0.15m und 1m vor der Stopplinie immer langsamer fahren. | SenKam_StoplinienFlag_bit = 1 , 15 < SenKam_StoplinienAbst_f64 <= 100
|
Fahrzeug bremst ab. | ||||
3 | Das Fahrzeug bremst bei eingeleiteter Bremsung weiter ab, auch wenn das Stopplinienflag verloren geht. | SenKam_StoplinienFlag_bit = 0 , SenKam_StoplinienAbst_f64 = 0
|
Fahrzeug bremst ab. | ||||
4 | Trifft das Fahrzeug bei seiner Rundfahrt an eine Stopp-Kreuzung so muss es 0.15m vor der Stopplinie anhalten | SenKam_StoplinienFlag_bit = 1 , SenKam_StoplinienAbst_f64 <= 0.15
|
Fahrzeug stoppt vollständig. | ||||
5 | Das Fahrzeug muss bei Stopplinienerkennung im Bereich weiter als 1m weiter normal fahren. | SenKam_StoplinienFlag_bit = 1 , SenKam_StoplinienAbst_f64 > 100
|
Fahrzeug bremst nicht ab. |
Diskussion
Design-Review des Konzept
In Abbildung 4 fehlt die Beschriftung der Achsen.
- Gelöst am 06.06.2020
Warum woher kommt die 0.8, durch die der Abstand zur Stopplinie geteilt wird?
- Behoben am 07.06.2020
Wie soll mit dem "Verlust" einer Stopplinie Umgegangen werden? (Stopplinie wird erkannt und als zu-überquerend klassifiziert, wird dann aber aus nicht näher bekannten Gründen nicht mehr erkannt)
- Konzept dahingehend überarbeitet am 10.06.2020
Hier und da finden sich Rechtschreibfehler.
- Rechtschreibfehler korrigiert am 27.06.2020
Review: Marius Köhler, 02.06.2020
Review des überarbeiteten Konzepts ergab keine Beanstandung.
Review II: Marius Köhler, 15.06.2020
→ zurück zur Übersicht: SDE-Team_2020/21