Stopplinien-Verhalten: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Zeile 11: Zeile 11:
== Einleitung ==
== Einleitung ==


In dieser Aufgabestellung ist die Zielsetzung, 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, dann muss es zwei Sekunden halten und dann weiterfahren<br>
In dieser Aufgabestellung ist die Zielsetzung, 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, dann muss es zwei Sekunden halten und anschleißend weiterfahren.<br/>


== Anforderungen ==
== Anforderungen ==

Version vom 30. Mai 2020, 12:38 Uhr

→ zurück zur Übersicht: SDE-Team_2019/20
→ zurück zur Übersicht: SDE-Team_2020/21


Bearbeiter: Yanick Christian Tchenko
Autoren: Hagen Heuer, Tim Kruse
Betreuer: Prof. Schneider


Einleitung

In dieser Aufgabestellung ist die Zielsetzung, 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, dann muss es zwei Sekunden halten und anschleißend weiterfahren.

Anforderungen

Im Lastenheft des Projets Carolo Cup wird die Steuerung des Verhaltens des Fahrzeugs an der Stopplinie genau so wie in der folgenden Abbildung gefordert:

Es entstand demnach das untere Pflichtenheft:

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 Stoppkreuzungen. 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. Zudem wurde die Matlab-Funktion um weitere Ein- und Ausgänge erweitert.

Eingänge:

  • Stopplininenflag
  • Stopplinienabstand
  • Zykluszahl
  • Zustand

Ausgang:

  • Geschwindigkeitsfaktor
  • Zykluszahl
  • Zustand

Der Programmablaufplan des neuen Konzeptes ist im Folgenden erklärt.

Zu Beginn werden Variablen eingelesen oder initialisiert. Anschließend erfolgt die Abfrage der einzelnen Cases. Das Programm wird hierbei in drei Cases unterteilt.

Case 1 (Zustand = 1)
Falls das Stopplinienflag nicht gesetzt ist, soll das Fahrzeug weiter fahren und den Case nicht verlassen. Fall ein Stopplinienflag erkannt wurde, soll das Fahrzeug anfangen zu verzögern. Wenn der Abstand zur Stopplinie < 15 cm ist, soll das Fahrzeug stoppen und in den Case 2 wechseln.

Case 2 (Zustand = 2)
In Case 2 wird zunächst der aktuelle Haltezyklus mit dem vorgegebenen Haltezyklus verglichen. Mit Hilfe dieser Haltezyklen kann die Haltezeit erfasst werden, da die Simulationszeit 0,005 Sekunden beträgt. Solange die Haltezyklen geringer sind wie die vorgegebene Zahl, werden diese um eins addiert und der Case 2 nicht verlassen. Im anderen Fall wird Fahrzeug wieder beschleunigt und es wird in den Case 3 gewechselt.

Case 3 (Zustand = 3)
Im dritten Case wird der Abstand zur Stopplinie abgefragt. Falls dieser größer Null ist, soll das Fahrzeug weiter fahren und den Case nicht verlassen. Falls der Abstand zur Stopplinie Null ist, soll in den Case 1 gewechselt werden und dort auf eine neue Stopplinie reagiert werden.

Falls kein Case ausgewählt wurde, soll in den vorherigen Case gewechselt werden und das Fahrzeug weiter fahren.

Ziel ist es das folgende Verhalten, wie in Abbildung... zu sehen, zu erreichen. Der Geschwindigkeitsfaktor hat den Wert 1 angenommen und das Fahrzeug fährt mit konstanter Geschwindigkeit. Wird eine Stopplinie erkannt, so soll das Fahrzeug verzögern bis es zum Stillstand kommt. Nach den zwei Sekunden Wartezeit soll das Fahrzeug wieder beschleunigen, weshalb der Geschwindigkeitsfaktor den Wert 1 annimmt.

Abb. 2: Konzept zur Implementierung
Abb. 3: Spezifikation des Fahrtverhaltens

Als Aufgabenstellung ein MATLAB/Simulink-Block für das Verhalten an Stopplinien gemäß Lastenheft zu entwickeln. Dieser Block muss in Simulation und im realen Fahrzeug lauffähig sein.


Eingänge:

  • SenKam_StoplinieFlag_bit
  • SenKam_StoplinieAbst_f64

Ausgang:

  • BSFVx_Faktor_i8

(Siehe Abb. 1)

Die Präfixen(SenKam, BSFVx)und Suffix (bit, f64, i8)in der Namenstruktur entsprechend an der Stelle den Bezechnungen zum einen für die passenden Gruppen und zum anderen für die Datentypen oder Variablenkonvention in jenen Gruppen. Die Bezeichnung "bit" zum Beispiel am Ende derVariiable SenKam_StoplinieFlag_bit bedeutet, dass es sich bei dieser Variable um einen booleschen Wert handelt.

Im Fall einer Stopplinienerkennung, wobei sich das Fahrzeug noch nicht an der Stopplinie befindet, wird die Geschwindigkeit wie folgend berechnet.

  • Der Zustand des Fahrzeugs genauso wie der maximale Abstand, die eine Zeitvariable und der Faktor werden im ersten Programmdurchlauf initialisieren. Der Zustand wird an der Stelle als Fahren-Zustand durch durch die Bezeichnung halten = false gesetzt.
  • Im Falle einer Objekt- bzw. Stopplinienerkenung, also SenKam_StoplinieFlag_bit gesetzt, dann wird bei der ersten Bitsetztung der geliferte SenKam_StoplinieAbst_f64 als maximaler Abstand festgelegt. Bei weiteren Bitsetzungen ändert sich die Geschwindigkeit proportional zu dem Faktor. Letzterer lässt sich wie folgend bestimmen:
  1. Faktor = Abstand/Abstandmax und
  2. Geschwindigkeit = Faktor x Soll_Geschwindigkeit
  • Bei einer Annäherung bis zu einem Abstand von 15 cm, wird der Faktor zu Null gesetzt, und der Zustand entsprechend, wie folgt, geändert halten = true . An der Stelle kommt die Zeitvariable in Frage. Es wird für eine Ausführung der Fortfahrtfunktion eine Periode von ca. 0,005s, also 5 ms, gebraucht. Im Falle einer Haltung erfolgen c.a 400 Ausführungen, bei denen die Faktor und entsprechend die Geschwindigkeit auf Null gesetzt werden. Dies bedeutet, dass das Fahrzeug während einer Dauer von ca. 400 x 0,005s = 2s hält.(Genauso wie in Abb. 2 zu erkennen ist)


  1. Das Bit SenKam_StoplinieFlag_bit aktiviert den Simulink Block.
  2. Vor der Stopplinie wird BSFVx_Faktor_i8 abhängig von SenKam_StoplinieAbst_f64 linear von 1 auf 0 runtergeramt.
  3. Standphase entsprechend des Lastenheftes.
  4. Überprüfung ob die Straße frei ist.
  5. Bei freier Straße BSFVx_Faktor_i8=1 setzen.

Die allgemeine Vorgehensweise beim dem vorliegenden Projekt sieht genauso wie in Abb. 3 beschrieben aus.

Umsetzung und Ergebnis der Simulationsumgebung

Autoren: Hagen Heuer, Tim Kruse

Vorstellung

Für die Vorstellung des Ergebnisse wurde der 18.10.19 12:30 Uhr vereinbart.

Komponententest

Hier werden die verschiedenen entwickelten Komponente getestet. Die Testergebnisse ergaben nach bestimmten Eingaben die in der unteren Tabelle zu sehenden numerische Resultate.

ID Testfallbeschreibung Eingänge(SenKam_StoplinieAbst_f64, SenKam_StoplinieFlag_bit) Ausgang(BSFVx_Faktor_i8) Erwartetes Ergebnis Testergebnis Testperson Datum
1 Das Fahrzeug fährt normal, wenn keine Stopplinie erkannt wurde. SenKam_StoplinienFlag_bit = 0, SenKam_StoplinienAbst_f64 = 0 1 Vollgas 1 Tchenko (mit Zustimmung von Prof. Schneider) 15.11.2019
2 Trifft das Fahrzeug bei seiner Rundfahrt an eine Stopp-Kreuzung so muss es 10cm vor der Stopplinie anhalten SenKam_StoplinienFlag_bit = 1, SenKam_StoplinienAbst_f64 <= 10% Max_Abstand 0 Fahrzeug Stoppt 0 Tchenko (mit Zustimmung von Prof. Schneider) 15.11.2019
3 Das Fahrzeug fährt weiter, wenn keine Stopplinie erkannt wurde. SenKam_StoplinienFlag_bit = 0, SenKam_StoplinienAbst_f64 existiert 1 Nicht plausibeler Fall. (Da keine Stopplinie erkannt wurde) 1 Tchenko (mit Zustimmung von Prof. Schneider) 15.11.2019
4 Das Fahrzeug muss im Bereich zwischen 0.1m und 1m vor der Stopplinie immer langsamer fahren. SenKam_StoplinienFlag_bit = 1, 0<SenKam_StoplinienAbst_f64<=10 0<BSFVx_Faktor_i8<1 (Linieare Änderung) Bremsen 0<BSFVx_Faktor_i8<1 (Linieare Änderung) Tchenko (mit Zustimmung von Prof. Schneider) 15.11.2019
5 Das Fahrzeug muss bei Srtopplinienerkennung im Bereich weiter als 1m weiter normal fahren. SenKam_StoplinienFlag_bit = 0, SenKam_StoplinienAbst_f64>10 BSFVx_Faktor_i8 = 1 Nicht unterbrochene Fahrt BSFVx_Faktor_i8 = 1 Tchenko (mit Zustimmung von Prof. Schneider) 15.11.2019

Die Abbildung "Simulationsergebnis unter Berücksichtigung unterschiedlicher Testfälle" steht ferner graphisch dar, wie sich die Werte des BSFVx_Faktor_i8 in Abhängigkeit der simulierten Werte für SenKam_StoplinienFlag_bit und SenKam_StoplinienAbst_f64 verändert. Dies erfolgt unter Anwendung des entwickelten Moduls zur Steeurung des Fahrzeugsverhaltens an der Stopplinie. (Siehe Abb. 4)

Fazit

Das Modell ist fertig bearbeitet worden und funktioniert gemäß der Anforderungen einwandfrei. Die Entwicklung weiterer Algorithmen ist demmnach möglich, die im Zusammenhang mit dem modellierten Anteil arbeiten. Noch zu erledigen ist die Integration des Software ins reale Fahrzeug, wobei zur reisbungslosen Funktionalität des Modells zusammen mit den anderen Projektkompartimenten einige Anpassungen bezüglich der Kennlinienerkennung noch optimiert werden müssen! Dies umfasst eine der Hauptaufgaben des Teams zur Objekterkennung.

Abb. 4: Simulationsergebnis unter Berücksichtigung unterschiedlicher Testfälle.

Beispielartikel



→ zurück zur Übersicht: SDE-Team_2019/20
→ zurück zur Übersicht: SDE-Team_2020/21