AEP - Einparkalgorithmus: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
K (→‎Implementierung des Einparkalgorithmus: Anpassung Text für Einparken ohne Hindernis Zustand 2.2)
 
(352 dazwischenliegende Versionen von 6 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
'''Autoren:''' [[Benutzer:Martin Theine|Martin Theine]] und [[Benutzer:Patrick Schumann|Patrick Schumann]]  
'''Autoren:''' [[Benutzer:Martin Theine|Martin Theine]] und [[Benutzer:Patrick Schumann|Patrick Schumann]]
<br />
'''Stand:''' 23.10.2022
<br />
<br />


== Einleitung ==
== Einleitung ==
Das Team „AEP - Einparkalgorithmus“ beschäftigt sich mit dem Programmablauf und der Implementierung des autonomen Einparkvorganges unter Verwendung der vorhandenen Einparksensorik. Dazu zählt zum einen das Detektieren einer Parklücke, welche eine außreichende Länge für das vorhandene Carolo-Cup Fahrzeug aufweist und das Einparkmanöver selbst. Dazu wurde auf Basis vorliegender Fachliteratur ein Konzept erarbeitet, welches nachfolgend erläutert wird.
Das Team „AEP - Einparkalgorithmus“ beschäftigt sich mit dem Programmablauf und der Implementierung des autonomen Einparkvorganges unter Verwendung der vorhandenen [[Infrarotsensoren | Einparksensorik]]. Dazu zählt zum einen das Detektieren einer Parklücke, welche eine außreichende Länge für das vorhandene Carolo-Cup Fahrzeug aufweisen muss und zum anderen das Einparkmanöver selbst. Dazu wird zunächst auf Basis vorliegender Fachliteratur ein Grundkonzept erarbeitet und dazugehörige Berechnungen durchgeführt. Nach erfolgreicher Umsetzung dieses Konzepts wird der Algorithmus erweitert und optimiert, um auf verschiedene realitätsnahe Szenarien reagieren zu können (z.B. kein Hindernis in der Parkbucht). Daraufhin wird ein Testkonzept entwickelt, um die Funktion aller implementierten Zustände überprüfen zu können. Abschließend werden auf Basis dieses Konzepts Unittests und ein Integrationstest durchgeführt, um die korrekte Funktion des entwickelten Einparkalgorithmus zu verifizieren.


== Anforderungen ==
== Anforderungen ==
Durch das Lastenheft des Projekts "Autonomes Fahrzeug" werden nachfolgende Anforderungen an das Autonome Einparken und somit an den umgesetzten Einparkalgorithmus gestellt:
Durch das Lastenheft des Projekts "Autonomes Fahrzeug" werden nachfolgende Anforderungen an das autonome Einparken und somit an den umzusetzenden Einparkalgorithmus gestellt:
<br />
 
'''Lastenheft im SVN:''' https://svn.hshl.de/svn/MTR_SDE_Praktikum/trunk/Anforderungsmanagement/Lastenheft/Lastenheft_Autonomes_Fahrzeug.pdf
 
{|
{|
|[[Datei:CCF_REQ10_2200_Paralleles_Einparken.JPG|thumb|600px|left|Abb. 1: REQ - Paralleles Einparken]]
|[[Datei:CCF_REQ10_2200_Paralleles_Einparken.JPG|thumb|600px|left|Abb. 1: REQ - Paralleles Einparken]]
Zeile 15: Zeile 23:


== Pflichten / Ziele ==
== Pflichten / Ziele ==
Aus den genannten Anforderungen (Abb. 1 - Abb. 4) lassen sich nachfolgende Pflichten ableiten.
Aus den genannten Anforderungen (s.o.) lassen sich nachfolgende Pflichten zu den Meilensteinen 1,2,3 und 4 ableiten.
[[Datei:CCF_AEP_Pflichten_SoSe2020.JPG|thumb|1600px|none|Abb. 5: Pflichten Team AEP - Einparkalgorithmus SoSe2020]]
 
'''Pflichtenheft im SVN:''' https://svn.hshl.de/svn/MTR_SDE_Praktikum/trunk/Anforderungsmanagement/Pflichtenheft/Pflichtenheft.xlsx
 
Während des Sommersemesters 2020 wurden die nachfolgenden Pflichten und Ziele umgesetzt (Meilenstein 1 und 2). Hierbei lag der Schwerpunkt auf der Implementierung des Einparkalgorithmus im Offline-Modell
sowie auf der erfolgreichen Simulation des Einparkmanövers.
 
[[Datei:CCF_AEP_Pflichten_SoSe2020.JPG|thumb|1000px|none|Abb. 5: Pflichten Team AEP - Einparkalgorithmus SoSe2020]]
 
Während des Wintersemseters 2020/21 sollte der Einparkalgorithmus auf das Fahrzeug integriert werden (Online-Modell). Auf Grund der Tatsache, dass zu Beginn des Semesters kein funktionsfähiges Fahrzeug zur Verfügung stand, wurde der Fokus auf die Fehleranalyse und Instandsetzung des Carolo-Cup-Fahrzeugs gelegt. Die nachfolgenden Pflichten und Ziele repräsentieren somit die Arbeiten am Carolo-Cup-Fahrzeug im Wintersemseter 2020/21 zu Meilenstein 3 und 4:
 
[[Datei:CCF_AEP_Pflichten_WiSe2021.png|thumb|1000px|none|Abb. 6: Pflichten Team AEP - Einparkalgorithmus WiSe2021]]
 
Einige Pflichten mussten aufgrund der nicht gegebenen autonomen Fahrfähigkeit und den eingeschränkten Möglichkeiten der Arbeit am Fahrzeug (bedingt durch die Covid-19-Pandemie) zum Ende des Wintersemesters 2020/21 zurückgestellt werden.
 
'''''Hinweis: Ziele und Pflichten an das jeweilige Semester anpassen. Ziele und Pflichten des voherigen Jahrgangs entfernen!'''''
 
== Grundkonzept ==
[[Datei:CCF_AEP_Konzept_Einparkalgorithmus.jpg|thumb|500px|right|Abb. 7: Konzept AEP - Einparkalgorithmus]]
 
Dieses Kapitel befasst sich mit dem Grundkonzept des AEP - Einparkalgorithmus. Das Konzept beruht auf zwei verschiedenen Ansätzen zum autonomen Einparken aus der Literatur (siehe Quelle: [1], [2]) und stellt eine Kombination dieser dar. Zunächst wird davon ausgegangen, dass das Fahrzeug eine Lücke findet, die etwas größer als die mindestens benötigte Parklücke ist. Diese wird durch ein vorderes und ein hinteres Hindernis begrenzt.
 
'''Sequenz 1'''
 
Das Carlolo-Cup-Fahrzeug fährt zunächst parallel zu den Parkbuchten. Wurde eine passende Parklücke identifiziert, fährt das CCF so lange weiter, bis sich das Fahrzeugheck auf Höhe Heck des parkenden Autos befindet, hinter welchem eingeparkt werden soll. Dadurch wird beim Zurücksetzen so eng wie möglich um dieses vordere Hindernis herumgefahren, ohne dieses zu berühren.
 
'''Sequenz 2'''
 
Daraufhin soll das Fahrzeug rückwärts eine Rechtskurve fahren, bis dieses im zuvor berechneten Umschlagwinkel zur Fahrbahn steht.
 
'''Sequenz 3'''
 
Anschließend behält das Fahrzeug diesen Winkel zur Fahrbahn bei und fährt eine Korrekturstrecke gerade rückwärts, um so “tief” wie möglich in die Parklücke hineinzufahren.
 
'''Sequenz 4'''
 
Nun soll das Fahrzeug rückwärts eine Linkskurve fahren, bis es mit der hinteren linken Ecke auf einen definierten Abstand zum dahinterliegenden Auto herangefahren ist.
 
'''Sequenz 5'''
 
Abschließend werden zwei Korrekturzüge gefahren. Zunächst absolviert das Fahrzeug eine Rechtskurve vorwärts, bis es parallel zur Fahrbahn steht.
 
'''Sequenz 6'''
 
Zuletzt fährt es gerade rückwärts, bis es mittig zwischen beiden parkenden Autos steht.
 
<onlyinclude><div style="clear:{{{{{|safesubst:}}}#switch:{{{1}}}
| links|left = left
| rechts|right = right
| #default = both
}};"></div></onlyinclude>
 
 
===Vereinfachtes Zustandsdiagramm===
[[Datei:Zustandsdiagramm_AEP.png|thumb|500px|left|Zustandsdiagramm]] <br>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
 
 


== Berechnungen ==
== Berechnungen ==
=== Abmaße Carolo-Cup Fahrzeug ===
Zunächst werden anhand der vorliegenden Literatur (siehe Quelle: [1], [2]) Berechnungen im Vorfeld durchgeführt, die fest von den Fahrzeugparametern abhängen. Die für die Berechnungen erforderlichen Parameter werden in den nachfolgenden Parameterdateien deklariert und definiert.
 
* '''param_AEP.m
* '''param_CAR.m
 
=== Parameter für Berechnungen ===


{| class="mw-datatable"
{| class="mw-datatable"
! style="font-weight: bold; width:40%; text-align:left;" | Beschreibung
! style="font-weight: bold; width:25%; text-align:center;" | Beschreibung:
! style="font-weight: bold; width:20%; text-align:left;" | Matlab / Simulink
! style="font-weight: bold; width:30%; text-align:center;" | Bezeichnung in Matlab / Simulink:
! style="font-weight: bold; width:20%; text-align:center;" | Variablen   
! style="font-weight: bold; width:20%; text-align:center;" | Variablen:  
! style="font-weight: bold; width:20%; text-align:left;" | Wert
! style="font-weight: bold; width:15%; text-align:center;" | Wert:
|-
|-
| Fahrzeugbreite || ... || <math>w</math> || 0,200m
| Fahrzeugbreite || PAR_CAR_Fahrzeugbreite_f64 || <math>w</math> || 0,200m
|-
|-
| Fahrzeuglänge || ... || <math>l</math> || 0,430m
| Fahrzeuglänge || PAR_CAR_Fahrzeuglaenge_f64 || <math>l</math> || 0,430m
|-
|-
| Radstand || ... || <math>l_R</math> || 0,265m
| Radstand || PAR_CAR_Radstand_f64 || <math>l_R</math> || 0,265m
|-
|-
| Max. Lenkwinkel || ... || <math>\alpha</math> || 23°
| Max. Lenkwinkel || PAR_CAR_max_Lenkeinschlag_alpha_deg_f64 || <math>\alpha</math> || 23°
|-
|-
| Abstand Hinterachse - Front || ... || <math>l_F</math> || 0,330m
| Abstand Hinterachse - Front || PAR_CAR_Radstand_f64 + PAR_CAR_Mitte_Vorderachse_Vorne_f64 || <math>l_F</math> || 0,330m
|-
|-
| Abstand Hinterachse - Heck || ... || <math>l_H</math> || 0,100m
| Abstand Hinterachse - Heck || PAR_CAR_Mitte_Hinterachse_Ende_f64 || <math>l_H</math> || 0,100m
|-
|-
| Wendekreisradius || ... || <math>R</math> || siehe Berechnung
| Wendekreisradius || PAR_CAR_Wendekreisradius_f64 || <math>R</math> || siehe Berechnung
|-
|-
| Benötigte Parklückenlänge || ... || <math>l_P</math> || siehe Berechnung
| Benötigte Parklückenlänge || PAR_AEP_Parkluecke_Soll_f64 || <math>l_P</math> || siehe Berechnung
|-
|-
| Gemessene Parklückenlänge || ... || <math>l_g</math> || siehe Berechnung
| Umlenkwinkel || PAR_AEP_Umschlagwinkel_f64 || <math>\beta</math> || siehe Berechnung
|-
|-
| Umlenkwinkel || ... || <math>\beta</math> || siehe Berechnung
| Korrekturfaktor Rückwärtsfahrt || PAR_AEP_Korrekturfaktor_Rueck_f64 || <math>f_{KR}</math> || 0,3 (empirisch ermittelt)
|-
|-
| Endabstand Heck - Hindernis || ... || <math>x_H</math> || siehe Berechnung
| Maximaler IR-Sensorwert || PAR_AEP_IR_max_f64 || <math>l_{IRmax.}</math> || 0,300m
|-
|-
|}
|}
Zeile 58: Zeile 127:


=== Umlenkwinkel ===
=== Umlenkwinkel ===
Der Umlenkwinkel beschreibt den Gierwinkel des Fahrzeugs, an dem der Lenkumschlag von rechts nach links erfolgen muss.
<br \>
<br \>
<math>\beta = \arccos(\frac{2\cdot R - w}{2\cdot R}) = \arccos(\frac{2\cdot 0,624m - 0,200m}{2\cdot 0,624m}) = 32,88^\circ</math>
<math>\beta = \arccos(\frac{2\cdot R - w}{2\cdot R}) = \arccos(\frac{2\cdot 0,624m - 0,200m}{2\cdot 0,624m}) = 32,88^\circ</math>
<br \>
Die nachfolgenden Berechnungen erfolgen in Abhängigkeit zur gemessenen Parklückenlänge und werden bei jedem Druchlauf des Einparkalgorithmus erneut durchgeführt. Die Ergebnisse werden in lokalen Variablen des Stateflow-Modells gespeichert und weiterverarbeitet.
=== Lokale Variablen für Berechnungen ===
{| class="mw-datatable"
! style="font-weight: bold; width:25%; text-align:center;" | Beschreibung:
! style="font-weight: bold; width:30%; text-align:center;" | Bezeichnung in Matlab / Simulink:
! style="font-weight: bold; width:20%; text-align:center;" | Variablen: 
! style="font-weight: bold; width:15%; text-align:center;" | Wert:
|-
| Gemessene Parklückenlänge || AEP_Parkluecke_Ist_f64 || <math>l_g</math> || siehe Berechnung
|-
| Endabstand Heck - Hindernis || AEP_Abstand_Hinten || <math>x_H</math> || siehe Berechnung
|-
| Korrekturstrecke Rückwärtsfahrt || AEP_Korrekturstrecke_Rueck_f64 || <math>x_{KR}</math> || siehe Berechnung
|-
| Differenz Endabstand maximale IR-Sensorreichweite || AEP_Abstand_Differenz_f64 || <math>\Delta x_{DE}</math> || siehe Berechnung
|-
|}


=== Endabstand Heck - Hindernis ===
=== Endabstand Heck - Hindernis ===
<math>a_H = \frac{l_g - l}{2}</math>
<math>x_H = \frac{l_g - l}{2}</math>
 
=== Korrekturstrecke Rückwärtsfahrt ===
<math>x_{KR} = l_g\cdot f_{KR}</math>
 
=== Differenz Endabstand maximale IR-Sensorreichweite ===
<math>\Delta x_{DE} = |x_H - l_{IRmax.} |</math>
 
== Zustandsautomat im Offline-/Online-Modell ==
[[Datei:State_Machine_AEP1.jpg|thumb|650px|right|Abb. 8: I/Os des Zustandsautomaten AEP]]
 
<br \>
''' Eingangsseitig stehen dem Zustandsautomaten für den Einparkalgorithmus folgende Daten zur Verfügung: '''
<br \>
 
{| class="mw-datatable"
! style="font-weight: bold; text-align:center;" | Beschreibung:
! style="font-weight: bold; text-align:center;" | Bezeichnung in Matlab / Simulink:
|-
| zurückgelegte Strecke in Metern || SenVx_sx_K_f64
|-
| Gierwinkel des Gierratensensors in rad || SenGier_psi_filt_K_f64
|-
| gemessener Abstand des Infrarotsensors rechts vorne in Metern || SenAbs_xVR_K_f64
|-
| gemessener Abstand des Infrarotsensors rechts hinten in Metern || SenAbs_xHR_K_f64
|-
| gemessener Abstand des Infrarotsensors hinten rechts in Metern || SenAbs_yHR_K_f64
|-
| gemessener Abstand des Infrarotsensors hinten links in Metern || SenAbs_yHL_K_f64
|-
| Einparkmodus || PAR_AEP_Measure_or_Park_f64
|-
| Länge der Parkbucht || PAR_AEP_Laenge_Parkbucht_f64
|-
| Abstand zur Parkbucht || PAR_AEP_Abstand_Startkoordinate_Parkbucht_f64
|-
| Geschwindigkeitsvorgabe Lückensuche || PAR_AEP_Suchgeschwindigkeit_f64
|-
| Geschwindigkeitsvorgabe Lückenvermessung || PAR_AEP_Vermessgeschwindigkeit_f64
|-
| Geschwindigkeitsvorgabe Einparkvorgang || PAR_AEP_Einparkgeschwindigkeit_f64
|-
| Geschwindigkeitsvorgabe zum Anhalten || PAR_AEP_Stoppgeschwindigkeit_f64
|-
| Lenkwinkelvorgabe Rechtskurve || PAR_AEP_Lenkung_MAX_Rechts_f64
|-
| Lenkwinkelvorgabe Geradeausfahrt || PAR_AEP_Lenkung_Mittelstellung_f64
|-
| Lenkwinkelvorgabe Linkskurve || PAR_AEP_Lenkung_MAX_Links_f64
|-
| Minimaler IR-Sensorwert || PAR_AEP_IR_MIN_f64
|-
| Maximaler IR-Sensorwert || PAR_AEP_IR_MAX_f64
|-
| Umlenkwinkel || PAR_AEP_Umschlagwinkel_f64
|-
| Benötigte Parklückenlänge || PAR_AEP_Parkluecke_Soll_f64
|-
| Korrekturstrecke Vorwärtsfahrt || PAR_AEP_Korrekturstrecke_Vor_f64
|-
| Korrekturfaktor Rückwärtsfahrt || PAR_AEP_Korrekturfaktor_Rueck_f64
|-
| maximale Korrekturstrecke Rückwärtsfahrt || PAR_AEP_Korrekturstrecke_Rueck_MAX_f64
|-
| Benötigte Parklückenlänge, um bei Rückwärtsfahrt parallel zur Fahrbahn zu gelangen || PAR_AEP_Parkluecke_Rueck_Parallel_MIN_f64
|-
| Streckenbegrenzung Rückwärtsfahrt ohne hinteres Hindernis || PAR_AEP_Streckenbegrenzung_Rueck_f64
|-
| Gierwinkel, um parallel zur Fahrbahn zu gelangen || PAR_AEP_Schlussparkwinkel_f64
|-
| Gierwinkel, um parallel zur Fahrbahn zu gelangen, wenn kein Korrekturzug nötig ist || PAR_AEP_Schlussparkwinkel_ohne_Korrekturzug_f64
|-
| Fahrzeuglänge || PAR_CAR_Fahrzeuglaenge_f64
|-
| Abstand Hinterachse - Heck || PAR_CAR_Mitte_Hinterachse_Ende_f64
|-
|}
 
<br \>
''' Ausgangsseitig werden durch den Zustandsautomaten folgende Daten auf den CCF_Bus gelegt: '''
<br \>
 
{| class="mw-datatable"
! style="font-weight: bold; text-align:center;" | Beschreibung:
! style="font-weight: bold; text-align:center;" | Bezeichnung in Matlab / Simulink:
|-
| Sollvorgabe Lenkwinkel || AEP_LwSoll_f64
|-
| Sollvorgabe Geschwindigkeit || AEP_vx_K_soll_f64
|-
| Aktiver Zustand des Zustandsautomaten || AEP_AKT_Zustand
|-
| Anforderung des Blinkers rechts || Blinker_Rechts_Manual_Enable_bit
|-
| Anforderung des Warnblinkers || Warnblinker_Manual_Enable_bit
|-
| Ein- und Ausschalten der geregelten Geradeausfahrt || Famo_Modi_Schalter_Lw_int
|-
| Ein- und Ausschalten der Geschwindigkeitsvorgabe AEP || Famo_Modi_Schalter_Vx_int
|}
 
== Implementierung des Einparkalgorithmus ==
 
Nach Umsetzung des Grundkonzepts wurde ein [https://svn.hshl.de/svn/MTR_SDE_Praktikum/trunk/Teams/AEP/Dokumentation/Optimierungskonzept_AEP_Einparkalgorithmus.docx Optimierungskonzept] erarbeitet, welches das Einparken auch mit verschiedenen Positionierungen der Hindernisse ermöglichen soll. Die Programmoptimierungen wurden im Stateflow-Modell (Simulink-Bibliothek: "bib_AutonomesEinparken.mdl", Stateflow-Model: "State Machine AEP1") auf Basis dieses Konzepts umgesetzt. Der nachfolgende Abschnitt beschreibt die Implementierung dieses Stateflow-Modells und soll unter Zuhilfenahme der Programmablaufplänen (siehe nachfolgende Abbildungen) eine schnellere Einarbeitung in den umgesetzten Einparkalgorithmus ermöglichen.
 
<br \>
 
[[Datei:CCF_LueckeSuchen_MS2.png|thumb|450px|right|Abb. 9: Programmablaufplan - Einparkalgorithmus LueckeSuchen]]
 
'''Superstate „LueckeSuchen“ (AEP_AKT_Zustand = 1):'''
 
Entspricht dem Initialzustand des Zustandsautomaten.
 
<br \>
 
'''Substate „FahreVorBisParkbucht“ (AEP_AKT_Zustand = 1.1):'''
 
Das Fahrzeug fährt nach Programmstart zunächst vorwärts und erfasst dabei die gefahrene Strecke ab dem Startpunkt (X: -9.58). Währenddessen wird laufend überprüft, ob die zurückgelegte Strecke dem Abstand zwischen Fahrzeugstartpunkt und Beginn der Parkbucht plus dem Abstand zwischen Fahrzeugfront und Vorderachse entspricht. Ist dies der Fall, so befindet sich das Fahrzeug mit dem vorderen rechten IR-Sensor am Beginn der Parkbucht und kann mit dem Ausmessen der Parklücken beginnen.
 
<br \>
 
'''Superstate „ParkbuchtVermessen“ (AEP_AKT_Zustand = 2):'''
 
Parallel zur Suche einer passenden Lücke misst das Fahrzeug die gefahrene Strecke ab Beginn der Parkbucht. Entspricht die zurückgelegte Strecke der Länge der Parkbucht, bevor eine passende Lücke gefunden wurde, so wird das Fahrzeug angehalten.
Dieser Zustand ist ein Substate des Superstates „LueckeSuchen“ und gleichzeitig Superstate für die nachfolgenden zwei Substates.
 
<br \>
 
'''Substate „ParklueckeSuchen“ (AEP_AKT_Zustand = 2.1):'''
 
Das Fahrzeug fährt mit „Suchgeschwindigkeit“ vorwärts, bis der Beginn einer Parklücke gefunden wurde (IR-Sensor vorne rechts detektiert kein Hindernis mehr). In diesem Fall wird in den Substate „ParklueckeAusmessen“ gewechselt.
 
<br \>
 
'''Substate „ParklueckeAusmessen“ (AEP_AKT_Zustand = 2.2):'''
 
Das Fahrzeug fährt mit „Vermessgeschwindigkeit“ vorwärts und misst die gefahrene Strecke ab Beginn der Parklücke. Wird das Ende einer Parklücke gefunden (IR-Sensor vorne rechts detektiert ein Hindernis), so wird geprüft, ob die zurückgelegte Strecke größer oder gleich der im Vorfeld berechneten benötigten Parklückengröße ist. Wenn die Lücke kleiner ist, wird zurück in den Substate „ParklueckeSuchen“ gewechselt und erneut nach dem Beginn einer Lücke gesucht. Ist die Lücke groß genug, so bleibt das Fahrzeug stehen (Wechsel in den State „Ende“) oder beginnt durch Wechsel in den Superstate „Parken“ mit dem Einparkvorgang (je nach Konfiguration in der start.m-Datei: Parameter „Measure_or_Park“).
Alternativ kann es vorkommen, dass kein Hindernis in der Parkbucht steht. In diesem Fall soll das Fahrzeug trotzdem einparken, sobald die zurückgelegte Strecke mindestens der Summe der optimalen Parklückenlänge und der Fahrzeuglänge entspricht. Trifft diese Bedingung zu, so wird das Bit „kein_Hindernis“ gesetzt und dadurch direkt in den Substate „FahreRechtskurve“ gewechselt, da nun kein vorderes Hindernis existiert, an dem sich das Fahrzeug weiterhin orientieren kann. Zuvor wird ebenfalls geprüft, ob das Fahrzeug stehenbleiben oder einparken soll (Parameter „Measure_or_Park“).
 
<br \>
 
<onlyinclude><div style="clear:{{{{{|safesubst:}}}#switch:{{{1}}}
| links|left = left
| rechts|right = right
| #default = both
}};"></div></onlyinclude>
 
[[Datei:PAP-Einparkalgorithmus.png|thumb|450px|left|Abb. 10: Programmablaufplan - Einparkalgorithmus Parken]]
 
'''Superstate „Parken“ (AEP_AKT_Zustand = 3):'''
 
Entspricht dem Initialzustand für den Einparkvorgang (wenn Bit „kein_Hindernis“ nicht gesetzt).
 
<br \>
 
'''Substate „FahreVorBisHinterachseAufHoeheHeckHindernis“ (AEP_AKT_Zustand = 3.1):'''
 
Da eine passende Lücke gefunden wurde, wird zunächst das „Blinker_Rechts_Manual_Enable_Bit“ gesetzt.
Das Fahrzeug fährt weiter mit „Vermessgeschwindigkeit“ vorwärts, bis sich die Hinterachse auf Höhe Heck des vorderen Hindernisses befindet (IR-Sensor hinten rechts detektiert ein Hindernis). Daraufhin wird in den Substate „FahreVorBisStartposition“ gewechselt.
 
<br \>
 
'''Substate „FahreVorBisStartposition“ (AEP_AKT_Zustand = 3.2):'''
 
Das Fahrzeug fährt weiterhin mit „Vermessgeschwindigkeit“ vorwärts und erfasst dabei die gefahrene Strecke. Ist die zurückgelegte Strecke größer oder gleich dem Abstand der Hinterachse bis zum Fahrzeugende plus der definierten „Korrekturstrecke_Vor“, so ist das Fahrzeug maximal nach vorne gefahren und es wird in den Substate „FahreRechtskurve“ gewechselt.
 
<br \>
 
'''Substate „FahreRechtskurve“ (AEP_AKT_Zustand = 3.3):'''
 
Entspricht dem Initialzustand für den Einparkvorgang (wenn Bit „kein_Hindernis“ gesetzt).
 
Zunächst wird die geregelte Geradeausfahrt ausgeschaltet (Famo_Modi_Schalter_Lw_int = 2). Die Lenkung des Fahrzeugs wird maximal nach rechts eingeschlagen. Das Fahrzeug fährt nun so lange mit „Einparkgeschwindigkeit“ rückwärts eine Rechtskurve, bis der gemessene Gierwinkel dem zuvor berechneten Umschlagwinkel entspricht.
 
<br \>
 
'''Substate „BerechnungenMitParklueckeIst“ (AEP_AKT_Zustand = 3.4):'''
 
An dieser Stelle werden nachfolgend benötigte Größen in Abhängigkeit von der gemessenen Parklückenlänge berechnet (siehe Abschnitt „Berechnungen“). Wenn die berechnete „Korrekturstrecke_Rueck“ größer als der festgelegte Maximalwert ist, so wird diese auf den Maximalwert gesetzt. Anschließend wird in den Substate „FahreKorrekturstreckeRueck“ gewechselt.
 
<br \>
'''Substate „FahreKorrekturstreckeRueck“ (AEP_AKT_Zustand = 3.5):'''
 
Die Lenkung des Fahrzeugs wird in Mittelstellung gebracht und erneut die zurückgelegte Strecke erfasst. Das Fahrzeug fährt im zuvor erreichten Winkel zur Fahrbahn gerade rückwärts, bis die berechnete „Korrekturstrecke_Rueck“ zurückgelegt wurde, um maximal tief in die Parklücke hineinzufahren. Daraufhin wird in den Substate „FahreLinkskurve“ gewechselt.
 
<onlyinclude><div style="clear:{{{{{|safesubst:}}}#switch:{{{1}}}
| links|left = left
| rechts|right = right
| #default = both
}};"></div></onlyinclude>
 
'''Substate „FahreLinkskurve“ (AEP_AKT_Zustand = 3.6):'''
 
Die Lenkung wird maximal nach links eingeschlagen. Das Fahrzeug fährt mit aktiver Streckenerfassung und gleichbleibender Geschwindigkeit rückwärts eine Linkskurve, bis …
 
(1) … der linke hintere Infrarotsensor einen festgelegten Mindestabstand zum hinteren Hindernis misst. Dies ist der Fall, wenn ein hinteres Hindernis vorhanden ist.
 
(2) … die zurückgelegte Strecke der festgelegten Streckenbegrenzung entspricht. Diese Abbruchbedingung wird nur geprüft, wenn sich hinter dem Fahrzeug kein Hindernis befindet (beide hinteren IR-Sensoren  den Maximalabstand messen) und die Parklücke zu klein ist, um bereits beim Rückwärtsfahren parallel zur Fahrbahn zu gelangen. Das ist der Fall, wenn die erstmögliche Parklücke in der Parkbucht nur durch ein vorderes Hindernis begrenzt wird und groß genug zum Einparken jedoch kleiner als 95 cm ist.
 
(3) … bis der gemessene Gierwinkel dem Schlussparkwinkel entspricht (Fahrzeug parallel zur Fahrbahn). Dies ist der Fall, wenn die Parklücke groß genug (> 95 cm) ist, um bereits beim Rückwärtsfahren parallel zur Fahrbahn zu gelangen.
 
Im Fall (1) oder (2) steht das Fahrzeug noch nicht parallel zur Fahrbahn und muss daher einen Korrekturzug nach vorne fahren, um dies zu erreichen. Es wird in den Substate „FahreKorrekturzugVorFall1“ gewechselt.
Im Fall (3) steht das Fahrzeug bereits parallel zur Fahrbahn. Daher muss kein Korrekturzug nach vorne gefahren werden, wie in den Fällen (1) und (2). Es wird direkt in die „Junction“ gewechselt.
 
<br \>
 
'''Substate „FahreKorrekturzugVorFall1“ (AEP_AKT_Zustand = 3.7):'''
 
Die Lenkung des Fahrzeugs wird maximal nach rechts eingeschlagen. Das Fahrzeug fährt nun so lange mit „Vermessgeschwindigkeit“ vorwärts eine Rechtskurve, bis der gemessene Gierwinkel dem festgelegten Schlussparkwinkel entspricht (Fahrzeug parallel zur Fahrbahn).
 
<br \>
 
'''Junction:'''
 
An dieser Stelle wird mit Hilfe einer Junction (siehe Stateflow-Modell) geprüft, ob …
 
(1) … das Bit „kein_Hindernis“ zuvor gesetzt worden ist. In diesem Fall wird das Fahrzeug gestoppt, da keine Hindernisse vorhanden sind, an denen sich nachfolgend orientiert werden kann (Wechsel in State „Ende“).
 
(2) … beide hinteren IR-Sensoren den Maximalabstand messen, also hinten kein Hindernis vorhanden ist. Auch in diesem Fall wird das Fahrzeug gestoppt, indem in den State „Ende“ gewechselt wird.
 
(3) … einer der beiden hinteren IR-Sensoren einen größeren Abstand misst als den zuvor berechneten Endabstand. Dies ist der Fall, wenn hinten ein Hindernis vorhanden ist und das Fahrzeug zu weit vorne in der Parklücke steht. Es ist also notwendig einen Korrekturzug rückwärts zu fahren, um mittig zwischen vorderem und hinterem Hindernis zu stehen. Dazu wird in den Substate „FahreKorrekturzugRueck“ gewechselt.
 
(4) … einer der beiden hinteren IR-Sensoren einen kleineren Abstand misst als den zuvor berechneten Endabstand. Dies ist der Fall, wenn hinten ein Hindernis vorhanden ist und das Fahrzeug zu weit hinten in der Parklücke steht. Es ist also notwendig einen Korrekturzug vorwärts zu fahren, um mittig zwischen vorderem und hinterem Hindernis zu stehen. Nun wird geprüft, ob der berechnete Endabstand größer als die maximale Sensorreichweite ist. In diesem Fall wird der Endabstand auf den Maximalwert und das „Weiterfahrt_Enable_bit“ gesetzt. Daraufhin wird in den Substate „FahreKorrekturzugVorFall2“ gewechselt.
 
<br \>


== Konzept ==
'''Substate „FahreKorrekturzugRueck“ (AEP_AKT_Zustand = 3.81):'''
[[Datei:CCF_AEP_Konzept_Einparkalgorithmus.jpg|thumb|500px|right|Abb. 6: Konzept AEP - Einparkalgorithmus]]


Dieses Kapitel befasst sich mit dem Konzept des AEP - Eonparkalgorithmus. Das Konzept beruht auf zwei verschiedenen Ansätzen zum autonomen Einparken aus der Literatur und stellt eine kombination dieser dar.
Die Lenkung des Fahrzeugs wird in Mittelstellung gebracht. Das Fahrzeug fährt mit „Einparkgeschwindigkeit“ gerade rückwärts, bis der zuvor berechnete Endabstand zum hinteren Hindernis erreicht ist. Daraufhin wird das Fahrzeug durch einen Wechsel in den State „Ende“ gestoppt.


Das Carlolo-Cup-Fahrzeug fährt zunächst parallel zu den Parkbuchten. Wurde eine passende Parklücke identifiziert, fährt das CCF so lange weiter, bis sich das Fahrzeugheck auf Höhe Heck des parkenden Autos befindet, hinter welchem eingeparkt werden soll (siehe Abb. 6 - 1). Dadurch wird beim Zurücksetzen so eng wie möglich um dieses vordere Hindernis herumgefahren, ohne es zu berühren. Daraufhin soll das Fahrzeug rückwärts eine Rechtskurve fahren, bis dieses im zuvor berechneten Umschlagwinkel zur Fahrbahn steht (siehe Abb. 6 - 2). Anschließend behält das Fahrzeug diesen Winkel zur Fahrbahn bei und fährt eine definierte Strecke gerade rückwärts, um so “tief” wie möglich in die Parklücke hineinzufahren (siehe Abb. 6 - 3). Nun soll das Fahrzeug rückwärts eine Linkskurve fahren, bis es mit der hinteren linken Ecke auf einen definierten Abstand zum dahinterliegenden Auto herangefahren ist (siehe Abb. 6 - 4). Abschließend werden zwei Korrekturzüge gefahren. Zunächst absolviert das Fahrzeug eine Rechtskurve vorwärts, bis es parallel zur Fahrbahn steht (siehe Abb. 6 - 5). Zuletzt fährt es gerade rückwärts, bis es mittig zwischen beiden parkenden Autos steht (siehe Abb. 6 - 6).
<br \>


== Struktur Matlab / Simulink ==
'''Substate „FahreKorrekturzugVorFall2“ (AEP_AKT_Zustand = 3.82):'''
[[Datei:PAP-Einparkalgorithmus.png|thumb|400px|left|Abb. 7: Programmablaufplan - Einparkalgorithmus]]


Der Programmablauf des Einparkvorgangs (siehe Abb. 7) teilt sich, analog zum oben beschriebenen Konzept, in sechs Sequenzen auf:
Die Lenkung des Fahrzeugs wird in Mittelstellung gebracht. Das Fahrzeug fährt mit „Einparkgeschwindigkeit“ gerade vorwärts, bis der zuvor berechnete Endabstand zum hinteren Hindernis erreicht ist. Daraufhin wird geprüft, ob das „Weiterfahrt_Enable_bit“ gesetzt wurde. Falls nicht, wird das Fahrzeug durch einen Wechsel in den State „Ende“ gestoppt. Falls doch wird in den Substate „FahreWeiterBisMitte“ gewechselt.


==== Sequenz 1 ====
<br \>
Wurde eine passende Parklücke gefunden, so wird der Blinker rechts gesetzt und das Fahrzeug fährt mit „Vermessgeschwindigkeit“ weiter vorwärts. Erfasst der seitliche hintere Infrarotsensor das Heck des vorderen Hindernisses, so befindet sich die Hinterachse des Fahrzeugs genau auf dieser Höhe.
 
<br />
'''Substate „FahreWeiterBisMitte“ (AEP_AKT_Zustand = 3.9):'''
<br />Das Fahrzeug fährt mit gleichbleibender Geschwindigkeit vorwärts und erfasst ab diesem Zeitpunkt die gefahrene Strecke. Wurde die festgelegte „Korrekturstrecke_Vorn“ zurückgelegt, so beginnt die nächste Sequenz.


==== Sequenz 2 ====
Dieser Substate wird nur aktiv, wenn das Weiterfahrt_Enable_bit gesetzt wurde. Dies ist nur der Fall, wenn der berechnete Endabstand zum hinteren Hindernis die Sensorreichweite übersteigt. Somit kann die hintere IR-Sensorik nicht vollständig genutzt werden, um mittig zwischen beide Hindernisse zu fahren. Daher wird zusätzlich die Streckenerfassung genutzt, um die restliche Strecke vorwärts zu fahren, die über die Reichweite der Sensoren hinausgeht. Diese Differenz wird im Vorfeld im Substate „BerechnungenMitParklueckeIst“ ermittelt. Das Fahrzeug fährt also weiter vorwärts, bis die zurückgelegte Strecke größer oder gleich der berechneten Differenz ist. Daraufhin wird in den State „Ende“ gewechselt und das Fahrzeug gestoppt.
Die Lenkung des Fahrzeugs wird maximal nach rechts eingeschlagen und die Geschwindigkeit auf die „Einparkgeschwindigkeit“ gesetzt. Das Fahrzeug fährt nun so lange rückwärts eine Rechtskurve, bis der gemessene Gierwinkel dem zuvor berechneten Umschlagwinkel entspricht.  


==== Sequenz 3 ====
<br \>
Die Lenkung des Fahrzeugs wird in Mittelstellung gebracht und ab diesem Zeitpunkt wird erneut die zurückgelegte Strecke erfasst. Das Fahrzeug fährt im zuvor erreichten Winkel zur Fahrbahn gerade rückwärts, bis die festgelegte „Korrekturstrecke_Rueck“ zurückgelegt wurde.


==== Sequenz 4 ====
'''State „Ende“ (AEP_AKT_Zustand = 4):'''
Die Lenkung wird maximal nach links eingeschlagen und das Fahrzeug fährt mit gleichbleibender Geschwindigkeit rückwärts eine Linkskurve, bis der linke hintere Infrarotsensor einen festgelegten Mindestabstand zum hinteren Hindernis misst.


==== Sequenz 5 ====
Das „Warnblinker_Manual_Enable_bit“ wird gesetzt, um anzuzeigen, dass der Parkvorgang beendet wurde und das Fahrzeug wird angehalten.  
Die Geschwindigkeit wird auf die zuvor gefahrene „Vermessgeschwindigkeit“ gesetzt und die Lenkung maximal nach rechts eingeschlagen. Das Fahrzeug fährt so lange einen Korrekturzug vorwärts, bis der gemessene Gierwinkel dem festgelegten „Schlussparkwinkel“ entspricht. Das Fahrzeug ist somit parallel zur Fahrbahn ausgerichtet.


==== Sequenz 6 ====
<onlyinclude><div style="clear:{{{{{|safesubst:}}}#switch:{{{1}}}
Die Lenkung wird in Mittelstellung gebracht und die Geschwindigkeit wieder auf die „Einparkgeschwindigkeit“ gesetzt. Das Fahrzeug fährt so lange einen Korrekturzug gerade Rückwärts, bis die hinteren Infrarotsensoren den vorgegebnen Abstand zum hinteren Hindernis messen. Ist dieser Zustand erreicht, so steht das Fahrzeug in gleichem Abstand zum hinteren und vorderen Hindernis, also mittig in der Parklücke.
| links|left = left
| rechts|right = right
| #default = both
}};"></div></onlyinclude>


== Unit- und Integrationstest ==
== Unit- und Integrationstest ==
[[Datei:CCF AEP bib AutonomesEinparken.PNG|thumb|500px|right|Abb. 8: Simulinkbibliothek - Autonomes EInparken]]
[[Datei:CCF AEP bib AutonomesEinparken.PNG|thumb|500px|right|Abb. 11: Simulinkbibliothek - Autonomes EInparken]]


Mithilf der Unit- und Integrationstest sollen die Funktion des AEP - Einparkalgorithmus getestet und überpfrüft werden. Nach Erfolgreiche bestehen der Tests kann so gewährleistet werden, dass die Anforderungen aus dem Lastenheft erfüllt sind. Nachfolgend wird das Vorgehen beim Unit- und Intergartionstest Stichpunktartig erklärt. Eine Vorlage und die genau Beschreibung zur Durchführung der Test ist im  SVN hinterlegt.
Mit Hilfe der Unit- und Integrationstests soll die Funktion des AEP - Einparkalgorithmus getestet und überpfrüft werden. Nach erfolgreichem Bestehen der Tests kann so gewährleistet werden, dass die Anforderungen aus dem Lastenheft erfüllt sind. Nachfolgend wird das Vorgehen beim Unit- und Integrationstest stichpunktartig erläutert. Eine Vorlage und die genaue Beschreibung zur Durchführung der Tests ist im  SVN hinterlegt.
<br \>
<br \>
<br \> '''Vorlage im SVN:''' https://svn.hshl.de/svn/MTR_SDE_Praktikum/trunk/Teams/AEP/Dokumentation
<br \> '''Vorlage im SVN:''' https://svn.hshl.de/svn/MTR_SDE_Praktikum/trunk/Teams/AEP/Dokumentation
<br \>
<br \>
<br \> Die Abb. 8 zeigt die Simulink-Bibliothek "AEP-Autonomes Einparken" und die Dataus hervorgehenden Variablen. Die rot eingerahmten Variablen werden vorwiegend zur Auswertung der Unittests herangezogen.
<br \> Die neben stehende Abbildung zeigt die Simulink-Bibliothek "AEP-Autonomes Einparken" mit den aus dieser hervorgehenden Output-Variablen. Die rot eingerahmten Variablen werden vorwiegend zur Auswertung der Unittests herangezogen. Zusätzlich müssen während der Simulation weitere Merkmale beobachtet und dokumentiert werden.
=== Vorgehen Unit- und Integrationstest ===


=== Vorgehen Unittest ===
# Öffnen der Datei "AEP_Unittest_und_Integrationstest.docx" in Word
# Öffnen der Datei "AEP_Unittest_und_Integrationstest.docx" in Word
# Vorlage zu den Unittests (siehe „AEP_Vorlage_Unittest_und_Integrationstest.docx“ Kapitel 2) ausfüllen. Wichtig: Anmerkungen zur Simulation beachten!
# Vorlage zu den Unittests (siehe „AEP_Vorlage_Unittest_und_Integrationstest.docx“ Kapitel 2) ausfüllen. Wichtig: Anmerkungen zur Simulation beachten!
Zeile 111: Zeile 425:
#* Auswahl des Simulationstyps: 1 (Simulation offline)
#* Auswahl des Simulationstyps: 1 (Simulation offline)
#* Laden verschiedener Fahrbahnformen: 0 (Rundkurs ohne Kreuzung)
#* Laden verschiedener Fahrbahnformen: 0 (Rundkurs ohne Kreuzung)
#* Auswahl des Simulationsmodus: 2 oder 3 (je nach durchzuführenden Unittest)
#* Auswahl des Simulationsmodus: 2 oder 3 (je nach durchzuführendem Unittest)
#* Im Fall AEP: Positionswahl der Objekte: 0…12 (je nach durchzuführenden Unittest)
#* Im Fall AEP: Positionswahl der Objekte 0…12 (je nach durchzuführendem Unittest)
# Unter Registerkarte "Editor" in Matlab auf "RUN" klicken, um Matlab-Skript auszuführen --> Simulink-Modell öffnet sich
# Unter Registerkarte "Editor" in Matlab auf "RUN" klicken, um Matlab-Skript auszuführen --> Simulink-Modell öffnet sich
# Erforderliche Variablen (siehe "AEP_Vorlage_Unittest_und_Integrationstest.docx" Kapitel 2) im Watch-Window anzeigen und zur Auswertung der Test nutzen
# Erforderliche Variablen (siehe "AEP_Vorlage_Unittest_und_Integrationstest.docx" Kapitel 2) im Watch-Window anzeigen und zur Auswertung des Tests nutzen
# Im Subsystem "AEP-Autonomes Einparken" mit klicken von „Run“ unter der Registerkarte "Simulation" die Simulation starten
# Im Subsystem "AEP-Autonomes Einparken" mit klicken von „Run“ unter der Registerkarte "Simulation" die Simulation starten
# Testergebnisse in "AEP_Vorlage_Unittest_und_Integrationstest.docx" Kapitel 2 dokumentieren und mit nachfolgender Dateibezeichnung in SVN hinterlegen . Gegebenenfalls zusätzlich Screenshots der Simulation in SVN hinterlegen
# Testergebnisse in "AEP_Vorlage_Unittest_und_Integrationstest.docx" Kapitel 2 dokumentieren und mit nachfolgender Dateibezeichnung in SVN hinterlegen . Gegebenenfalls zusätzlich Screenshots und Videos der Simulation in SVN hinterlegen.
#* '''Ablage in SVN:''' https://svn.hshl.de/svn/MTR_SDE_Praktikum/trunk/Teams/AEP/Dokumentation/Unittest
#* '''Ablage in SVN:''' https://svn.hshl.de/svn/MTR_SDE_Praktikum/trunk/Testdokumente/Unittests
#* '''Dateibezeichnung Testergebnisse (PDF-Datei):''' „CCF_AEP_Testergebnis_Datum_NameTestperson.pdf“
#* '''Dateibezeichnung Testergebnisse (PDF-Datei):''' „CCF_AEP_Unittest_Datum_NameTestperson.pdf“
#* '''Dateibezeichnung Screenshots (PNG-Datei):''' „CCF_AEP_Testergebnis_IDxxx_Datum_NameTestperson.png“
#* '''Dateibezeichnung Screenshots (PNG-Datei):''' „CCF_AEP_Unittest_IDxxx_Datum_NameTestperson.png“
 
==== Testfälle Unittest ====
(Stand 19.06.2020: Test in der Simulationsumgebeung)
{| class="mw-datatable"
! style="font-weight: bold; text-align:left;" | Unittest-ID:
! style="font-weight: bold; text-align:left;" | Beschreibung:
! style="font-weight: bold; text-align:left;" | Testergebnis:
! style="font-weight: bold; text-align:left;" | Stand:
 
|-
| 001 || Test der Funktionen Streckenerfassung und Parklückenvermessung || i.O. || 18.06.2020
|-
| 002 || Einzelnes Hindernis am Anfang der Parkbucht || i.O. || 18.06.2020
|-
| 003 || Kein Hindernis in der Parkbucht || i.O. || 18.06.2020
|-
| 004 || Keine ausreichend große Parklücke || i.O. || 18.06.2020
|-
| 005 || Ein einzelnes Hindernis im Abstand von < 0,95m vom Anfang der Parkbucht || i.O. || 18.06.2020
|-
| 006 || Größte Parklücke an beliebiger Position und prozentuale Erhöhung der Parklückenlänge || i.O. || 19.06.2020
|-
| 007 || Größte Parklücke an beliebiger Position, Parklückenlänge minimal und prozentuale Erhöhung der Hindernisbreite || i.O. || 19.06.2020
|-
|}


=== Übersicht der Testfälle ===
=== Vorgehen Integrationstest ===
Der Integrationstest wird im Anschluss an die Unittests durchgeführt und bildet die abschließende Funktionskontrolle des AEP - Einparkalgorithmus. Hierzu wird der während der Entwicklungs- und Optimierungsphase im SVN angelegte "Branch" mit dem "Trunk" gemerget und anschließend die Unittests "Test der Funktionen Streckenerfassung und Parklückenvermessung" und "Größte Parklücke an beliebiger Position und prozentuale Erhöhung der Parklückenlänge" wiederholt. Die Ergebnisse der Unittets vor und nach dem Mergen werden miteinander verglichen. Sind die Ergebnisse der Tests identisch, so gilt der Integrationstest als bestanden.
* '''Ablage in SVN:''' https://svn.hshl.de/svn/MTR_SDE_Praktikum/trunk/Testdokumente/Integrationstests
* '''Dateibezeichnung Testergebnisse (PDF-Datei):''' „CCF_AEP_Integrationstest_Datum_NameTestperson.pdf“
* '''Dateibezeichnung Screenshots (PNG-Datei):''' „CCF_AEP_Integrationstest_IDxxx_Datum_NameTestperson.png“


==== Testfälle Integrationstest ====
(Stand 15.07.2020: Test in der Simulationsumgebeung)
{| class="mw-datatable"
{| class="mw-datatable"
! style="font-weight: bold; width:15%; text-align:left;" | Unittest-ID:
! style="font-weight: bold; text-align:left;" | Unittest-ID:
! style="font-weight: bold; text-align:left;" | Beschreibung:
! style="font-weight: bold; text-align:left;" | Beschreibung:
! style="font-weight: bold; text-align:left;" | Testergebnis:
! style="font-weight: bold; text-align:left;" | Testergebnis:
! style="font-weight: bold; text-align:left;" | Datum:
! style="font-weight: bold; text-align:left;" | Stand:


|-
|-
| 001 || Test der Funktionen Streckenerfassung und Parklückenvermessung || ... || ...
| 001 || Test der Funktionen Streckenerfassung und Parklückenvermessung || i.O. || 15.07.2020
|-
|-
| 002 || Einzelnes Hindernis am Anfang der Parkbucht || ... || ...
| 006 || Größte Parklücke an beliebiger Position und prozentuale Erhöhung der Parklückenlänge || i.O. || 15.07.2020
|-
|-
| 003 || Kein Hindernis in der Parkbucht || ... || ...
|}
 
== Systemtest ==
(Stand 27.05.2021: Test in der Offline-Simulationsumgebung)
Das jeweilige Testdokument ist über Klicken auf den Datum-Link zu finden.
{| class="mw-datatable"
! style="font-weight: bold; text-align:left;" | Systemtest-ID:
! style="font-weight: bold; text-align:left;" | Beschreibung:
! style="font-weight: bold; text-align:left;" | Testergebnis:
! style="font-weight: bold; text-align:left;" | Stand:
 
|-
|-
| 004 || Keine ausreichend große Parklücke || ... || ...
| 001 || Test der Einparkmodi nach Parameteränderung für AEP || i.O. || [https://svn.hshl.de/svn/MTR_SDE_Praktikum/trunk/Testdokumente/Systemtests/Systemtest_AEP.xlsx 27.05.2021]
|-
|-
| 005 || Ein einzelnes Hindernis im Abstand von < 0,95m vom Anfang der Parkbucht || ... || ...
|}
 
== Zusammenfassung ==
 
{| class="mw-datatable"
! style="font-weight: bold;" | Spez.-ID
! style="font-weight: bold;" | Anforderungs-ID
! style="font-weight: bold;" | Anforderung-Titel
! style="font-weight: bold;" | Beschreibung der Spezifikation
! style="font-weight: bold;" | Erwartetes Arbeitsergebnis / Testergebnis
! style="font-weight: bold;" | Ergebnisprotokoll
! style="font-weight: bold;" | Testergebnis
! style="font-weight: bold;" | Testperson
! style="font-weight: bold;" | Datum
|+ style = "text-align: left"|Tabelle 2: Testbericht für den Komponententest
|-
|1300-0 || REQ10.2300 || Fahrt auf der Rundstrecke || Fehleranalyse Fahrwerk || Protokoll Fehleranalyse Fahrwerk || [[Datei:CCF_AEP_Protokoll_Fehleranalyse_Fahrwerk.pdf]] || n.i.O. || M. Theine || 16.10.2020
|-
|1305-0 || REQ10.2300 || Fahrt auf der Rundstrecke || Fehleranalyse/-behebung des Software Moduls BSF - Bahn und Spurführung || Protokoll der Fehleranalyse und -behebung der festgestellten Mängel || [[Datei:CCF AEP Protokoll Fehleranalyse CCF online.pdf]] || i.O. || M. Theine || 14.01.2021
|-
|1310-0 || REQ10.2300 || Fahrt auf der Rundstrecke ||Fehleranalyse/-behebung des Software Moduls FAMO - Wahl des Fahrtmodus || Protokoll der Fehleranalyse und -behebung der festgestellten Mängel || [[Datei:CCF AEP Protokoll Fehleranalyse Taster.pdf]] || i.O. || P.Schumann || 17.12.2021
|-
|1315-0 || REQ10.2300 || Fahrt auf der Rundstrecke ||Optimierungen auf Basis der Fehleranalyse Fahrwerk || Auswahl optimierter Stoßdämpfer für das CCF || - || i.O. || M. Theine || 05.02.2020
|-
|2000-0 || REQ10.2210 || Start des Einparkmanövers ||Fehleranalyse Verkabelung Starttaster Softwaremodull-AEP || Protokoll Fehleranalyse und Funktionsfähiger Taster-AEP || [[Datei:CCF AEP Protokoll Fehleranalyse Taster.pdf]] || i.O. || M. Theine || 16.10.2020
|-
|-
| 006 || Größte Parklücke an beliebiger Position und prozentuale Erhöhung der Parklückenlänge || ... || ...
|2000-1 || REQ10.2210 || Start des Einparkmanövers ||Fehleranalyse Start des Softwaremoduls-AEP || Softwaremodule-AEP lässt sich über Taster-AEP starten || [[Datei:CCF AEP Protokoll Fehleranalyse Taster.pdf]] || i.O. || P.Schumann || 16.10.2020
|-
|-
| 007 || Größte Parklücke an beliebiger Position, Parklückenlänge minimal und prozentuale Erhöhung der Hindernisbreite || ... || ...
|2000-2 || REQ10.2220 || Durchführen des Einparkmanövers || Fehleranalyse Verkabelung Hall-Sensoren (Hall-Sensoren / DS-Karte) || Protokoll Fehleranalyse und Funtkionfähige Verkabelung der Hall-Sensoren || [[Datei:CCF AEP Protokoll Fehleranalyse Hall Sensoren.pdf]] || i.O. || M. Theine || 30.10.2020/12.11.2020
|-
|2000-3 || REQ10.2220 || Durchführen des Einparkmanövers || Fehleranalyse Adapter-Platine Hall-Sensoren || Protokoll der Fehleranalyse und Funktionsfähige / Optimierte Adapterplatine-Hall-Sensoren || [[Datei:CCF AEP Protokoll Fehleranalyse Hall Sensoren.pdf]] || i.O. || P.Schumann || 26.11.2020
|-
|2000-4 || REQ10.2220 || Durchführen des Einparkmanövers || Fehleranalyse Soll-Ist-Wert vergleich Hall-Sensoren || Protokoll Fehleranalyse und Funktionsfähige Hall-Sensoren || [[Datei:CCF AEP Protokoll Fehleranalyse Hall Sensoren.pdf]] || n.i.O. || P.Schumann || 25.02.2020
|-
|2000-6 || REQ10.2220 || Durchführen des Einparkmanövers ||Fehleranalyse/-behebung Adapterplatine DS-Karte || Protokoll der Fehleranalyse und Behebung der gefundenen Mängel || [[Datei:CCF AEP Protokoll Fehleranalyse Hall Sensoren.pdf]] || i.O. || P.Schumann || 26.11.2020
|-
|2005-0 || REQ10.2220 || Durchführen des Einparkmanövers || Überprüfung der Implementierung des AEP - Einparkalgorithmus im Online-Modell || Strukturiertes und kommentiertes Softwaremodul AEP || [[AEP - Autonomes Einparken]] || i.O. || P.Schumann || 11.12.2020
|-
|2510-0 || REQ10.3270 || Unit-Test || Funktionstest der Streckenerfassung mittels Hall-Sensoren || Protokoll der Fehleranalyse und Dokumentation der noch Umzusetzenden Lösungsansätze || [[Datei:CCF AEP Protokoll Fehleranalyse Hall Sensoren.pdf]] || n.i.O. || M.Theine || 05.02.2021
|-
|2510-3 || REQ10.3290 || Dokumentation von Software ||Sichtung, Strukturierung und Dokumentation des Moduls AEP im Online-Modell || Strukturiertes und Kommentiertes Softwaremodul AEP || [[AEP - Autonomes Einparken]] || i.O. || P.Schumann || 11.12.2020
|-
|3000-0 || REQ10.2000 || Eigenständige Funktionsweise des Fahrzeugs ||Fehleranalyse/-behebung "CCF-online.mdl" || Protokoll der Fehleranalyse und Nachweis über die behobenen Problemstellen || [[Datei:CCF AEP Protokoll Fehleranalyse CCF online.pdf]] || i.O. || M. Theine || 14.01.2021
|-
|8000-0 || REQ10.2070 || Fahrfunktionen im RC- Modus || Fehleranalyse/-behebung Kalibrierung Fernbedienung || Protokoll der Fehleranalyse und kalibrierte Hardwarekomponenten Fernbedienung und Fahrtenregler || [[Datei:CCF AEP Protokoll Fehleranalyse Fernbedienung und Antrieb.pdf]] || i.O. || P.Schumann || 17.12.2020
|-
|8000-1 || REQ10.2070 || Fahrfunktionen im RC- Modus || Fehleranalyse/-behebung Prototypenplatine Fernbedienung || Protokoll der Fehleranalyse und behobene Mängel an der Prototypenplatine Fernbedienung || [[Datei:CCF AEP Protokoll Fehleranalyse Fernbedienung und Antrieb.pdf]] || i.O. || P.Schumann || 17.12.2020
|-
|-
|}
|}


== Zusammenfassung ==
'''Ergebnisse MS1 und MS2:'''
 
Das erarbeitete Konzept des Einparkalgorithmus funktioniert in Simulation für alle Testfälle einwandfrei. Videos einzelner Testfälle, welche die Funktion neben den Messprotokollen und Screenshots verifizieren, sind in folgendem Ordner abgelegt: //svn.hshl.de/svn/MTR_SDE_Praktikum/trunk/Teams/AEP/Bilder und Videos/Videos
 
'''Ergebnisse MS3 und MS4:'''
 
Auf dem Fahrzeug konnte der Einparkalgorithmus nicht getestet werden, da das Fahrzeug noch nicht autonom fahrfähig ist (siehe [[AEP - Autonomes Einparken]] -> 4. "Online-Modell"). Die durchgeführten Fehleranalysen (Fehlerprotokolle) und Arbeiten am Fahrzeug wurden in den folgenden Wiki-Artikeln dokumentiert:
 
* [[Analyse und Fehlersuche WS20/21]]
* [[AEP - Autonomes Einparken]]
* [[AuF - Antrieb und Fernbedienung]]
 
=== Offene Punkte und Ausblick ===
'''Stand:''' 15.02.2021
 
* Funktionstest der Vermessung der Parklücke mittels IR-Sensoren (Online-Modell)
* Ermitteln der realen Fahrzeugparameter (z.B. Wendekreis, Lenkwinkel, etc.)
* Anpassen des AEP-Einparkalgorithmus an reale Bedingungen (Fahrzeug und reale Parkbucht)
* Durchführen der Unit- und Integrationstest im Online-Modell (mit Carolo-Cup-Fahrzeug)
* Optimieren der Fahrzeuggeometrie, um größere Lenkwinkel zu realisieren
* Optimieren der Simulation (Laufzeitoptimierung)
 
'''Stand:''' 23.10.2022
* Ermittlung des Fehlers vom Gyrosensorwert im online Modell
* Testen des Einparkalgorithmus im online Modell
* Zurücksetzten des aktuellen Zustandes beim Reset


=== Ausblick ===
'''Bitte beachten:''' Der Artikel [[Fahrzeugsoftware]] bildet alte Stände der Parameterdateien und Simulink-Modelle ab. Dieser muss im Bezug auf die AEP-Software aktualisiert werden.


=== Offene Punkte ===
== Quellen / Weiterführende Literatur ==
<references /> [1] Hermann Norbert (2012), Mathematik ist Überall. 4.Auflage Oldenburg, Oldenbourg Wissenschaftsverlag (24. Oktober 2012)
<references /> [2] Kochem M. (2006) Parkassistent. In: Isermann R. (eds) Fahrdynamik-Regelung. Vieweg. https://doi.org/10.1007/978-3-8348-9049-8_14


== Literaturverzeichnis ==
<references />


--------------------------
--------------------------

Aktuelle Version vom 24. Oktober 2022, 21:26 Uhr

Autoren: Martin Theine und Patrick Schumann
Stand: 23.10.2022

Einleitung

Das Team „AEP - Einparkalgorithmus“ beschäftigt sich mit dem Programmablauf und der Implementierung des autonomen Einparkvorganges unter Verwendung der vorhandenen Einparksensorik. Dazu zählt zum einen das Detektieren einer Parklücke, welche eine außreichende Länge für das vorhandene Carolo-Cup Fahrzeug aufweisen muss und zum anderen das Einparkmanöver selbst. Dazu wird zunächst auf Basis vorliegender Fachliteratur ein Grundkonzept erarbeitet und dazugehörige Berechnungen durchgeführt. Nach erfolgreicher Umsetzung dieses Konzepts wird der Algorithmus erweitert und optimiert, um auf verschiedene realitätsnahe Szenarien reagieren zu können (z.B. kein Hindernis in der Parkbucht). Daraufhin wird ein Testkonzept entwickelt, um die Funktion aller implementierten Zustände überprüfen zu können. Abschließend werden auf Basis dieses Konzepts Unittests und ein Integrationstest durchgeführt, um die korrekte Funktion des entwickelten Einparkalgorithmus zu verifizieren.

Anforderungen

Durch das Lastenheft des Projekts "Autonomes Fahrzeug" werden nachfolgende Anforderungen an das autonome Einparken und somit an den umzusetzenden Einparkalgorithmus gestellt:

Lastenheft im SVN: https://svn.hshl.de/svn/MTR_SDE_Praktikum/trunk/Anforderungsmanagement/Lastenheft/Lastenheft_Autonomes_Fahrzeug.pdf

Abb. 1: REQ - Paralleles Einparken
Abb. 2: REQ - Start des Einparkmanövers
Abb. 3: REQ - Durchführen des Einparkmanövers
Abb. 4: REQ - Erfolgreiches Einparkmanöver

Pflichten / Ziele

Aus den genannten Anforderungen (s.o.) lassen sich nachfolgende Pflichten zu den Meilensteinen 1,2,3 und 4 ableiten.

Pflichtenheft im SVN: https://svn.hshl.de/svn/MTR_SDE_Praktikum/trunk/Anforderungsmanagement/Pflichtenheft/Pflichtenheft.xlsx

Während des Sommersemesters 2020 wurden die nachfolgenden Pflichten und Ziele umgesetzt (Meilenstein 1 und 2). Hierbei lag der Schwerpunkt auf der Implementierung des Einparkalgorithmus im Offline-Modell sowie auf der erfolgreichen Simulation des Einparkmanövers.

Abb. 5: Pflichten Team AEP - Einparkalgorithmus SoSe2020

Während des Wintersemseters 2020/21 sollte der Einparkalgorithmus auf das Fahrzeug integriert werden (Online-Modell). Auf Grund der Tatsache, dass zu Beginn des Semesters kein funktionsfähiges Fahrzeug zur Verfügung stand, wurde der Fokus auf die Fehleranalyse und Instandsetzung des Carolo-Cup-Fahrzeugs gelegt. Die nachfolgenden Pflichten und Ziele repräsentieren somit die Arbeiten am Carolo-Cup-Fahrzeug im Wintersemseter 2020/21 zu Meilenstein 3 und 4:

Abb. 6: Pflichten Team AEP - Einparkalgorithmus WiSe2021

Einige Pflichten mussten aufgrund der nicht gegebenen autonomen Fahrfähigkeit und den eingeschränkten Möglichkeiten der Arbeit am Fahrzeug (bedingt durch die Covid-19-Pandemie) zum Ende des Wintersemesters 2020/21 zurückgestellt werden.

Hinweis: Ziele und Pflichten an das jeweilige Semester anpassen. Ziele und Pflichten des voherigen Jahrgangs entfernen!

Grundkonzept

Abb. 7: Konzept AEP - Einparkalgorithmus

Dieses Kapitel befasst sich mit dem Grundkonzept des AEP - Einparkalgorithmus. Das Konzept beruht auf zwei verschiedenen Ansätzen zum autonomen Einparken aus der Literatur (siehe Quelle: [1], [2]) und stellt eine Kombination dieser dar. Zunächst wird davon ausgegangen, dass das Fahrzeug eine Lücke findet, die etwas größer als die mindestens benötigte Parklücke ist. Diese wird durch ein vorderes und ein hinteres Hindernis begrenzt.

Sequenz 1

Das Carlolo-Cup-Fahrzeug fährt zunächst parallel zu den Parkbuchten. Wurde eine passende Parklücke identifiziert, fährt das CCF so lange weiter, bis sich das Fahrzeugheck auf Höhe Heck des parkenden Autos befindet, hinter welchem eingeparkt werden soll. Dadurch wird beim Zurücksetzen so eng wie möglich um dieses vordere Hindernis herumgefahren, ohne dieses zu berühren.

Sequenz 2

Daraufhin soll das Fahrzeug rückwärts eine Rechtskurve fahren, bis dieses im zuvor berechneten Umschlagwinkel zur Fahrbahn steht.

Sequenz 3

Anschließend behält das Fahrzeug diesen Winkel zur Fahrbahn bei und fährt eine Korrekturstrecke gerade rückwärts, um so “tief” wie möglich in die Parklücke hineinzufahren.

Sequenz 4

Nun soll das Fahrzeug rückwärts eine Linkskurve fahren, bis es mit der hinteren linken Ecke auf einen definierten Abstand zum dahinterliegenden Auto herangefahren ist.

Sequenz 5

Abschließend werden zwei Korrekturzüge gefahren. Zunächst absolviert das Fahrzeug eine Rechtskurve vorwärts, bis es parallel zur Fahrbahn steht.

Sequenz 6

Zuletzt fährt es gerade rückwärts, bis es mittig zwischen beiden parkenden Autos steht.


Vereinfachtes Zustandsdiagramm

Zustandsdiagramm


















Berechnungen

Zunächst werden anhand der vorliegenden Literatur (siehe Quelle: [1], [2]) Berechnungen im Vorfeld durchgeführt, die fest von den Fahrzeugparametern abhängen. Die für die Berechnungen erforderlichen Parameter werden in den nachfolgenden Parameterdateien deklariert und definiert.

  • param_AEP.m
  • param_CAR.m

Parameter für Berechnungen

Beschreibung: Bezeichnung in Matlab / Simulink: Variablen: Wert:
Fahrzeugbreite PAR_CAR_Fahrzeugbreite_f64 0,200m
Fahrzeuglänge PAR_CAR_Fahrzeuglaenge_f64 0,430m
Radstand PAR_CAR_Radstand_f64 0,265m
Max. Lenkwinkel PAR_CAR_max_Lenkeinschlag_alpha_deg_f64 23°
Abstand Hinterachse - Front PAR_CAR_Radstand_f64 + PAR_CAR_Mitte_Vorderachse_Vorne_f64 0,330m
Abstand Hinterachse - Heck PAR_CAR_Mitte_Hinterachse_Ende_f64 0,100m
Wendekreisradius PAR_CAR_Wendekreisradius_f64 siehe Berechnung
Benötigte Parklückenlänge PAR_AEP_Parkluecke_Soll_f64 siehe Berechnung
Umlenkwinkel PAR_AEP_Umschlagwinkel_f64 siehe Berechnung
Korrekturfaktor Rückwärtsfahrt PAR_AEP_Korrekturfaktor_Rueck_f64 0,3 (empirisch ermittelt)
Maximaler IR-Sensorwert PAR_AEP_IR_max_f64 0,300m

Wendekreisradius

Benötigte Parklücke

Umlenkwinkel

Der Umlenkwinkel beschreibt den Gierwinkel des Fahrzeugs, an dem der Lenkumschlag von rechts nach links erfolgen muss.


Die nachfolgenden Berechnungen erfolgen in Abhängigkeit zur gemessenen Parklückenlänge und werden bei jedem Druchlauf des Einparkalgorithmus erneut durchgeführt. Die Ergebnisse werden in lokalen Variablen des Stateflow-Modells gespeichert und weiterverarbeitet.

Lokale Variablen für Berechnungen

Beschreibung: Bezeichnung in Matlab / Simulink: Variablen: Wert:
Gemessene Parklückenlänge AEP_Parkluecke_Ist_f64 siehe Berechnung
Endabstand Heck - Hindernis AEP_Abstand_Hinten siehe Berechnung
Korrekturstrecke Rückwärtsfahrt AEP_Korrekturstrecke_Rueck_f64 siehe Berechnung
Differenz Endabstand maximale IR-Sensorreichweite AEP_Abstand_Differenz_f64 siehe Berechnung

Endabstand Heck - Hindernis

Korrekturstrecke Rückwärtsfahrt

Differenz Endabstand maximale IR-Sensorreichweite

Zustandsautomat im Offline-/Online-Modell

Abb. 8: I/Os des Zustandsautomaten AEP


Eingangsseitig stehen dem Zustandsautomaten für den Einparkalgorithmus folgende Daten zur Verfügung:

Beschreibung: Bezeichnung in Matlab / Simulink:
zurückgelegte Strecke in Metern SenVx_sx_K_f64
Gierwinkel des Gierratensensors in rad SenGier_psi_filt_K_f64
gemessener Abstand des Infrarotsensors rechts vorne in Metern SenAbs_xVR_K_f64
gemessener Abstand des Infrarotsensors rechts hinten in Metern SenAbs_xHR_K_f64
gemessener Abstand des Infrarotsensors hinten rechts in Metern SenAbs_yHR_K_f64
gemessener Abstand des Infrarotsensors hinten links in Metern SenAbs_yHL_K_f64
Einparkmodus PAR_AEP_Measure_or_Park_f64
Länge der Parkbucht PAR_AEP_Laenge_Parkbucht_f64
Abstand zur Parkbucht PAR_AEP_Abstand_Startkoordinate_Parkbucht_f64
Geschwindigkeitsvorgabe Lückensuche PAR_AEP_Suchgeschwindigkeit_f64
Geschwindigkeitsvorgabe Lückenvermessung PAR_AEP_Vermessgeschwindigkeit_f64
Geschwindigkeitsvorgabe Einparkvorgang PAR_AEP_Einparkgeschwindigkeit_f64
Geschwindigkeitsvorgabe zum Anhalten PAR_AEP_Stoppgeschwindigkeit_f64
Lenkwinkelvorgabe Rechtskurve PAR_AEP_Lenkung_MAX_Rechts_f64
Lenkwinkelvorgabe Geradeausfahrt PAR_AEP_Lenkung_Mittelstellung_f64
Lenkwinkelvorgabe Linkskurve PAR_AEP_Lenkung_MAX_Links_f64
Minimaler IR-Sensorwert PAR_AEP_IR_MIN_f64
Maximaler IR-Sensorwert PAR_AEP_IR_MAX_f64
Umlenkwinkel PAR_AEP_Umschlagwinkel_f64
Benötigte Parklückenlänge PAR_AEP_Parkluecke_Soll_f64
Korrekturstrecke Vorwärtsfahrt PAR_AEP_Korrekturstrecke_Vor_f64
Korrekturfaktor Rückwärtsfahrt PAR_AEP_Korrekturfaktor_Rueck_f64
maximale Korrekturstrecke Rückwärtsfahrt PAR_AEP_Korrekturstrecke_Rueck_MAX_f64
Benötigte Parklückenlänge, um bei Rückwärtsfahrt parallel zur Fahrbahn zu gelangen PAR_AEP_Parkluecke_Rueck_Parallel_MIN_f64
Streckenbegrenzung Rückwärtsfahrt ohne hinteres Hindernis PAR_AEP_Streckenbegrenzung_Rueck_f64
Gierwinkel, um parallel zur Fahrbahn zu gelangen PAR_AEP_Schlussparkwinkel_f64
Gierwinkel, um parallel zur Fahrbahn zu gelangen, wenn kein Korrekturzug nötig ist PAR_AEP_Schlussparkwinkel_ohne_Korrekturzug_f64
Fahrzeuglänge PAR_CAR_Fahrzeuglaenge_f64
Abstand Hinterachse - Heck PAR_CAR_Mitte_Hinterachse_Ende_f64


Ausgangsseitig werden durch den Zustandsautomaten folgende Daten auf den CCF_Bus gelegt:

Beschreibung: Bezeichnung in Matlab / Simulink:
Sollvorgabe Lenkwinkel AEP_LwSoll_f64
Sollvorgabe Geschwindigkeit AEP_vx_K_soll_f64
Aktiver Zustand des Zustandsautomaten AEP_AKT_Zustand
Anforderung des Blinkers rechts Blinker_Rechts_Manual_Enable_bit
Anforderung des Warnblinkers Warnblinker_Manual_Enable_bit
Ein- und Ausschalten der geregelten Geradeausfahrt Famo_Modi_Schalter_Lw_int
Ein- und Ausschalten der Geschwindigkeitsvorgabe AEP Famo_Modi_Schalter_Vx_int

Implementierung des Einparkalgorithmus

Nach Umsetzung des Grundkonzepts wurde ein Optimierungskonzept erarbeitet, welches das Einparken auch mit verschiedenen Positionierungen der Hindernisse ermöglichen soll. Die Programmoptimierungen wurden im Stateflow-Modell (Simulink-Bibliothek: "bib_AutonomesEinparken.mdl", Stateflow-Model: "State Machine AEP1") auf Basis dieses Konzepts umgesetzt. Der nachfolgende Abschnitt beschreibt die Implementierung dieses Stateflow-Modells und soll unter Zuhilfenahme der Programmablaufplänen (siehe nachfolgende Abbildungen) eine schnellere Einarbeitung in den umgesetzten Einparkalgorithmus ermöglichen.


Abb. 9: Programmablaufplan - Einparkalgorithmus LueckeSuchen

Superstate „LueckeSuchen“ (AEP_AKT_Zustand = 1):

Entspricht dem Initialzustand des Zustandsautomaten.


Substate „FahreVorBisParkbucht“ (AEP_AKT_Zustand = 1.1):

Das Fahrzeug fährt nach Programmstart zunächst vorwärts und erfasst dabei die gefahrene Strecke ab dem Startpunkt (X: -9.58). Währenddessen wird laufend überprüft, ob die zurückgelegte Strecke dem Abstand zwischen Fahrzeugstartpunkt und Beginn der Parkbucht plus dem Abstand zwischen Fahrzeugfront und Vorderachse entspricht. Ist dies der Fall, so befindet sich das Fahrzeug mit dem vorderen rechten IR-Sensor am Beginn der Parkbucht und kann mit dem Ausmessen der Parklücken beginnen.


Superstate „ParkbuchtVermessen“ (AEP_AKT_Zustand = 2):

Parallel zur Suche einer passenden Lücke misst das Fahrzeug die gefahrene Strecke ab Beginn der Parkbucht. Entspricht die zurückgelegte Strecke der Länge der Parkbucht, bevor eine passende Lücke gefunden wurde, so wird das Fahrzeug angehalten. Dieser Zustand ist ein Substate des Superstates „LueckeSuchen“ und gleichzeitig Superstate für die nachfolgenden zwei Substates.


Substate „ParklueckeSuchen“ (AEP_AKT_Zustand = 2.1):

Das Fahrzeug fährt mit „Suchgeschwindigkeit“ vorwärts, bis der Beginn einer Parklücke gefunden wurde (IR-Sensor vorne rechts detektiert kein Hindernis mehr). In diesem Fall wird in den Substate „ParklueckeAusmessen“ gewechselt.


Substate „ParklueckeAusmessen“ (AEP_AKT_Zustand = 2.2):

Das Fahrzeug fährt mit „Vermessgeschwindigkeit“ vorwärts und misst die gefahrene Strecke ab Beginn der Parklücke. Wird das Ende einer Parklücke gefunden (IR-Sensor vorne rechts detektiert ein Hindernis), so wird geprüft, ob die zurückgelegte Strecke größer oder gleich der im Vorfeld berechneten benötigten Parklückengröße ist. Wenn die Lücke kleiner ist, wird zurück in den Substate „ParklueckeSuchen“ gewechselt und erneut nach dem Beginn einer Lücke gesucht. Ist die Lücke groß genug, so bleibt das Fahrzeug stehen (Wechsel in den State „Ende“) oder beginnt durch Wechsel in den Superstate „Parken“ mit dem Einparkvorgang (je nach Konfiguration in der start.m-Datei: Parameter „Measure_or_Park“). Alternativ kann es vorkommen, dass kein Hindernis in der Parkbucht steht. In diesem Fall soll das Fahrzeug trotzdem einparken, sobald die zurückgelegte Strecke mindestens der Summe der optimalen Parklückenlänge und der Fahrzeuglänge entspricht. Trifft diese Bedingung zu, so wird das Bit „kein_Hindernis“ gesetzt und dadurch direkt in den Substate „FahreRechtskurve“ gewechselt, da nun kein vorderes Hindernis existiert, an dem sich das Fahrzeug weiterhin orientieren kann. Zuvor wird ebenfalls geprüft, ob das Fahrzeug stehenbleiben oder einparken soll (Parameter „Measure_or_Park“).


Abb. 10: Programmablaufplan - Einparkalgorithmus Parken

Superstate „Parken“ (AEP_AKT_Zustand = 3):

Entspricht dem Initialzustand für den Einparkvorgang (wenn Bit „kein_Hindernis“ nicht gesetzt).


Substate „FahreVorBisHinterachseAufHoeheHeckHindernis“ (AEP_AKT_Zustand = 3.1):

Da eine passende Lücke gefunden wurde, wird zunächst das „Blinker_Rechts_Manual_Enable_Bit“ gesetzt. Das Fahrzeug fährt weiter mit „Vermessgeschwindigkeit“ vorwärts, bis sich die Hinterachse auf Höhe Heck des vorderen Hindernisses befindet (IR-Sensor hinten rechts detektiert ein Hindernis). Daraufhin wird in den Substate „FahreVorBisStartposition“ gewechselt.


Substate „FahreVorBisStartposition“ (AEP_AKT_Zustand = 3.2):

Das Fahrzeug fährt weiterhin mit „Vermessgeschwindigkeit“ vorwärts und erfasst dabei die gefahrene Strecke. Ist die zurückgelegte Strecke größer oder gleich dem Abstand der Hinterachse bis zum Fahrzeugende plus der definierten „Korrekturstrecke_Vor“, so ist das Fahrzeug maximal nach vorne gefahren und es wird in den Substate „FahreRechtskurve“ gewechselt.


Substate „FahreRechtskurve“ (AEP_AKT_Zustand = 3.3):

Entspricht dem Initialzustand für den Einparkvorgang (wenn Bit „kein_Hindernis“ gesetzt).

Zunächst wird die geregelte Geradeausfahrt ausgeschaltet (Famo_Modi_Schalter_Lw_int = 2). Die Lenkung des Fahrzeugs wird maximal nach rechts eingeschlagen. Das Fahrzeug fährt nun so lange mit „Einparkgeschwindigkeit“ rückwärts eine Rechtskurve, bis der gemessene Gierwinkel dem zuvor berechneten Umschlagwinkel entspricht.


Substate „BerechnungenMitParklueckeIst“ (AEP_AKT_Zustand = 3.4):

An dieser Stelle werden nachfolgend benötigte Größen in Abhängigkeit von der gemessenen Parklückenlänge berechnet (siehe Abschnitt „Berechnungen“). Wenn die berechnete „Korrekturstrecke_Rueck“ größer als der festgelegte Maximalwert ist, so wird diese auf den Maximalwert gesetzt. Anschließend wird in den Substate „FahreKorrekturstreckeRueck“ gewechselt.


Substate „FahreKorrekturstreckeRueck“ (AEP_AKT_Zustand = 3.5):

Die Lenkung des Fahrzeugs wird in Mittelstellung gebracht und erneut die zurückgelegte Strecke erfasst. Das Fahrzeug fährt im zuvor erreichten Winkel zur Fahrbahn gerade rückwärts, bis die berechnete „Korrekturstrecke_Rueck“ zurückgelegt wurde, um maximal tief in die Parklücke hineinzufahren. Daraufhin wird in den Substate „FahreLinkskurve“ gewechselt.

Substate „FahreLinkskurve“ (AEP_AKT_Zustand = 3.6):

Die Lenkung wird maximal nach links eingeschlagen. Das Fahrzeug fährt mit aktiver Streckenerfassung und gleichbleibender Geschwindigkeit rückwärts eine Linkskurve, bis …

(1) … der linke hintere Infrarotsensor einen festgelegten Mindestabstand zum hinteren Hindernis misst. Dies ist der Fall, wenn ein hinteres Hindernis vorhanden ist.

(2) … die zurückgelegte Strecke der festgelegten Streckenbegrenzung entspricht. Diese Abbruchbedingung wird nur geprüft, wenn sich hinter dem Fahrzeug kein Hindernis befindet (beide hinteren IR-Sensoren den Maximalabstand messen) und die Parklücke zu klein ist, um bereits beim Rückwärtsfahren parallel zur Fahrbahn zu gelangen. Das ist der Fall, wenn die erstmögliche Parklücke in der Parkbucht nur durch ein vorderes Hindernis begrenzt wird und groß genug zum Einparken jedoch kleiner als 95 cm ist.

(3) … bis der gemessene Gierwinkel dem Schlussparkwinkel entspricht (Fahrzeug parallel zur Fahrbahn). Dies ist der Fall, wenn die Parklücke groß genug (> 95 cm) ist, um bereits beim Rückwärtsfahren parallel zur Fahrbahn zu gelangen.

Im Fall (1) oder (2) steht das Fahrzeug noch nicht parallel zur Fahrbahn und muss daher einen Korrekturzug nach vorne fahren, um dies zu erreichen. Es wird in den Substate „FahreKorrekturzugVorFall1“ gewechselt. Im Fall (3) steht das Fahrzeug bereits parallel zur Fahrbahn. Daher muss kein Korrekturzug nach vorne gefahren werden, wie in den Fällen (1) und (2). Es wird direkt in die „Junction“ gewechselt.


Substate „FahreKorrekturzugVorFall1“ (AEP_AKT_Zustand = 3.7):

Die Lenkung des Fahrzeugs wird maximal nach rechts eingeschlagen. Das Fahrzeug fährt nun so lange mit „Vermessgeschwindigkeit“ vorwärts eine Rechtskurve, bis der gemessene Gierwinkel dem festgelegten Schlussparkwinkel entspricht (Fahrzeug parallel zur Fahrbahn).


Junction:

An dieser Stelle wird mit Hilfe einer Junction (siehe Stateflow-Modell) geprüft, ob …

(1) … das Bit „kein_Hindernis“ zuvor gesetzt worden ist. In diesem Fall wird das Fahrzeug gestoppt, da keine Hindernisse vorhanden sind, an denen sich nachfolgend orientiert werden kann (Wechsel in State „Ende“).

(2) … beide hinteren IR-Sensoren den Maximalabstand messen, also hinten kein Hindernis vorhanden ist. Auch in diesem Fall wird das Fahrzeug gestoppt, indem in den State „Ende“ gewechselt wird.

(3) … einer der beiden hinteren IR-Sensoren einen größeren Abstand misst als den zuvor berechneten Endabstand. Dies ist der Fall, wenn hinten ein Hindernis vorhanden ist und das Fahrzeug zu weit vorne in der Parklücke steht. Es ist also notwendig einen Korrekturzug rückwärts zu fahren, um mittig zwischen vorderem und hinterem Hindernis zu stehen. Dazu wird in den Substate „FahreKorrekturzugRueck“ gewechselt.

(4) … einer der beiden hinteren IR-Sensoren einen kleineren Abstand misst als den zuvor berechneten Endabstand. Dies ist der Fall, wenn hinten ein Hindernis vorhanden ist und das Fahrzeug zu weit hinten in der Parklücke steht. Es ist also notwendig einen Korrekturzug vorwärts zu fahren, um mittig zwischen vorderem und hinterem Hindernis zu stehen. Nun wird geprüft, ob der berechnete Endabstand größer als die maximale Sensorreichweite ist. In diesem Fall wird der Endabstand auf den Maximalwert und das „Weiterfahrt_Enable_bit“ gesetzt. Daraufhin wird in den Substate „FahreKorrekturzugVorFall2“ gewechselt.


Substate „FahreKorrekturzugRueck“ (AEP_AKT_Zustand = 3.81):

Die Lenkung des Fahrzeugs wird in Mittelstellung gebracht. Das Fahrzeug fährt mit „Einparkgeschwindigkeit“ gerade rückwärts, bis der zuvor berechnete Endabstand zum hinteren Hindernis erreicht ist. Daraufhin wird das Fahrzeug durch einen Wechsel in den State „Ende“ gestoppt.


Substate „FahreKorrekturzugVorFall2“ (AEP_AKT_Zustand = 3.82):

Die Lenkung des Fahrzeugs wird in Mittelstellung gebracht. Das Fahrzeug fährt mit „Einparkgeschwindigkeit“ gerade vorwärts, bis der zuvor berechnete Endabstand zum hinteren Hindernis erreicht ist. Daraufhin wird geprüft, ob das „Weiterfahrt_Enable_bit“ gesetzt wurde. Falls nicht, wird das Fahrzeug durch einen Wechsel in den State „Ende“ gestoppt. Falls doch wird in den Substate „FahreWeiterBisMitte“ gewechselt.


Substate „FahreWeiterBisMitte“ (AEP_AKT_Zustand = 3.9):

Dieser Substate wird nur aktiv, wenn das Weiterfahrt_Enable_bit gesetzt wurde. Dies ist nur der Fall, wenn der berechnete Endabstand zum hinteren Hindernis die Sensorreichweite übersteigt. Somit kann die hintere IR-Sensorik nicht vollständig genutzt werden, um mittig zwischen beide Hindernisse zu fahren. Daher wird zusätzlich die Streckenerfassung genutzt, um die restliche Strecke vorwärts zu fahren, die über die Reichweite der Sensoren hinausgeht. Diese Differenz wird im Vorfeld im Substate „BerechnungenMitParklueckeIst“ ermittelt. Das Fahrzeug fährt also weiter vorwärts, bis die zurückgelegte Strecke größer oder gleich der berechneten Differenz ist. Daraufhin wird in den State „Ende“ gewechselt und das Fahrzeug gestoppt.


State „Ende“ (AEP_AKT_Zustand = 4):

Das „Warnblinker_Manual_Enable_bit“ wird gesetzt, um anzuzeigen, dass der Parkvorgang beendet wurde und das Fahrzeug wird angehalten.

Unit- und Integrationstest

Abb. 11: Simulinkbibliothek - Autonomes EInparken

Mit Hilfe der Unit- und Integrationstests soll die Funktion des AEP - Einparkalgorithmus getestet und überpfrüft werden. Nach erfolgreichem Bestehen der Tests kann so gewährleistet werden, dass die Anforderungen aus dem Lastenheft erfüllt sind. Nachfolgend wird das Vorgehen beim Unit- und Integrationstest stichpunktartig erläutert. Eine Vorlage und die genaue Beschreibung zur Durchführung der Tests ist im SVN hinterlegt.

Vorlage im SVN: https://svn.hshl.de/svn/MTR_SDE_Praktikum/trunk/Teams/AEP/Dokumentation

Die neben stehende Abbildung zeigt die Simulink-Bibliothek "AEP-Autonomes Einparken" mit den aus dieser hervorgehenden Output-Variablen. Die rot eingerahmten Variablen werden vorwiegend zur Auswertung der Unittests herangezogen. Zusätzlich müssen während der Simulation weitere Merkmale beobachtet und dokumentiert werden.

Vorgehen Unittest

  1. Öffnen der Datei "AEP_Unittest_und_Integrationstest.docx" in Word
  2. Vorlage zu den Unittests (siehe „AEP_Vorlage_Unittest_und_Integrationstest.docx“ Kapitel 2) ausfüllen. Wichtig: Anmerkungen zur Simulation beachten!
  3. Öffnen der Datei "start.m" in Matlab R2019b
  4. Folgende Parameter setzten
    • Auswahl des Simulationstyps: 1 (Simulation offline)
    • Laden verschiedener Fahrbahnformen: 0 (Rundkurs ohne Kreuzung)
    • Auswahl des Simulationsmodus: 2 oder 3 (je nach durchzuführendem Unittest)
    • Im Fall AEP: Positionswahl der Objekte 0…12 (je nach durchzuführendem Unittest)
  5. Unter Registerkarte "Editor" in Matlab auf "RUN" klicken, um Matlab-Skript auszuführen --> Simulink-Modell öffnet sich
  6. Erforderliche Variablen (siehe "AEP_Vorlage_Unittest_und_Integrationstest.docx" Kapitel 2) im Watch-Window anzeigen und zur Auswertung des Tests nutzen
  7. Im Subsystem "AEP-Autonomes Einparken" mit klicken von „Run“ unter der Registerkarte "Simulation" die Simulation starten
  8. Testergebnisse in "AEP_Vorlage_Unittest_und_Integrationstest.docx" Kapitel 2 dokumentieren und mit nachfolgender Dateibezeichnung in SVN hinterlegen . Gegebenenfalls zusätzlich Screenshots und Videos der Simulation in SVN hinterlegen.

Testfälle Unittest

(Stand 19.06.2020: Test in der Simulationsumgebeung)

Unittest-ID: Beschreibung: Testergebnis: Stand:
001 Test der Funktionen Streckenerfassung und Parklückenvermessung i.O. 18.06.2020
002 Einzelnes Hindernis am Anfang der Parkbucht i.O. 18.06.2020
003 Kein Hindernis in der Parkbucht i.O. 18.06.2020
004 Keine ausreichend große Parklücke i.O. 18.06.2020
005 Ein einzelnes Hindernis im Abstand von < 0,95m vom Anfang der Parkbucht i.O. 18.06.2020
006 Größte Parklücke an beliebiger Position und prozentuale Erhöhung der Parklückenlänge i.O. 19.06.2020
007 Größte Parklücke an beliebiger Position, Parklückenlänge minimal und prozentuale Erhöhung der Hindernisbreite i.O. 19.06.2020

Vorgehen Integrationstest

Der Integrationstest wird im Anschluss an die Unittests durchgeführt und bildet die abschließende Funktionskontrolle des AEP - Einparkalgorithmus. Hierzu wird der während der Entwicklungs- und Optimierungsphase im SVN angelegte "Branch" mit dem "Trunk" gemerget und anschließend die Unittests "Test der Funktionen Streckenerfassung und Parklückenvermessung" und "Größte Parklücke an beliebiger Position und prozentuale Erhöhung der Parklückenlänge" wiederholt. Die Ergebnisse der Unittets vor und nach dem Mergen werden miteinander verglichen. Sind die Ergebnisse der Tests identisch, so gilt der Integrationstest als bestanden.

Testfälle Integrationstest

(Stand 15.07.2020: Test in der Simulationsumgebeung)

Unittest-ID: Beschreibung: Testergebnis: Stand:
001 Test der Funktionen Streckenerfassung und Parklückenvermessung i.O. 15.07.2020
006 Größte Parklücke an beliebiger Position und prozentuale Erhöhung der Parklückenlänge i.O. 15.07.2020

Systemtest

(Stand 27.05.2021: Test in der Offline-Simulationsumgebung) Das jeweilige Testdokument ist über Klicken auf den Datum-Link zu finden.

Systemtest-ID: Beschreibung: Testergebnis: Stand:
001 Test der Einparkmodi nach Parameteränderung für AEP i.O. 27.05.2021

Zusammenfassung

Spez.-ID Anforderungs-ID Anforderung-Titel Beschreibung der Spezifikation Erwartetes Arbeitsergebnis / Testergebnis Ergebnisprotokoll Testergebnis Testperson Datum
Tabelle 2: Testbericht für den Komponententest
1300-0 REQ10.2300 Fahrt auf der Rundstrecke Fehleranalyse Fahrwerk Protokoll Fehleranalyse Fahrwerk Datei:CCF AEP Protokoll Fehleranalyse Fahrwerk.pdf n.i.O. M. Theine 16.10.2020
1305-0 REQ10.2300 Fahrt auf der Rundstrecke Fehleranalyse/-behebung des Software Moduls BSF - Bahn und Spurführung Protokoll der Fehleranalyse und -behebung der festgestellten Mängel Datei:CCF AEP Protokoll Fehleranalyse CCF online.pdf i.O. M. Theine 14.01.2021
1310-0 REQ10.2300 Fahrt auf der Rundstrecke Fehleranalyse/-behebung des Software Moduls FAMO - Wahl des Fahrtmodus Protokoll der Fehleranalyse und -behebung der festgestellten Mängel Datei:CCF AEP Protokoll Fehleranalyse Taster.pdf i.O. P.Schumann 17.12.2021
1315-0 REQ10.2300 Fahrt auf der Rundstrecke Optimierungen auf Basis der Fehleranalyse Fahrwerk Auswahl optimierter Stoßdämpfer für das CCF - i.O. M. Theine 05.02.2020
2000-0 REQ10.2210 Start des Einparkmanövers Fehleranalyse Verkabelung Starttaster Softwaremodull-AEP Protokoll Fehleranalyse und Funktionsfähiger Taster-AEP Datei:CCF AEP Protokoll Fehleranalyse Taster.pdf i.O. M. Theine 16.10.2020
2000-1 REQ10.2210 Start des Einparkmanövers Fehleranalyse Start des Softwaremoduls-AEP Softwaremodule-AEP lässt sich über Taster-AEP starten Datei:CCF AEP Protokoll Fehleranalyse Taster.pdf i.O. P.Schumann 16.10.2020
2000-2 REQ10.2220 Durchführen des Einparkmanövers Fehleranalyse Verkabelung Hall-Sensoren (Hall-Sensoren / DS-Karte) Protokoll Fehleranalyse und Funtkionfähige Verkabelung der Hall-Sensoren Datei:CCF AEP Protokoll Fehleranalyse Hall Sensoren.pdf i.O. M. Theine 30.10.2020/12.11.2020
2000-3 REQ10.2220 Durchführen des Einparkmanövers Fehleranalyse Adapter-Platine Hall-Sensoren Protokoll der Fehleranalyse und Funktionsfähige / Optimierte Adapterplatine-Hall-Sensoren Datei:CCF AEP Protokoll Fehleranalyse Hall Sensoren.pdf i.O. P.Schumann 26.11.2020
2000-4 REQ10.2220 Durchführen des Einparkmanövers Fehleranalyse Soll-Ist-Wert vergleich Hall-Sensoren Protokoll Fehleranalyse und Funktionsfähige Hall-Sensoren Datei:CCF AEP Protokoll Fehleranalyse Hall Sensoren.pdf n.i.O. P.Schumann 25.02.2020
2000-6 REQ10.2220 Durchführen des Einparkmanövers Fehleranalyse/-behebung Adapterplatine DS-Karte Protokoll der Fehleranalyse und Behebung der gefundenen Mängel Datei:CCF AEP Protokoll Fehleranalyse Hall Sensoren.pdf i.O. P.Schumann 26.11.2020
2005-0 REQ10.2220 Durchführen des Einparkmanövers Überprüfung der Implementierung des AEP - Einparkalgorithmus im Online-Modell Strukturiertes und kommentiertes Softwaremodul AEP AEP - Autonomes Einparken i.O. P.Schumann 11.12.2020
2510-0 REQ10.3270 Unit-Test Funktionstest der Streckenerfassung mittels Hall-Sensoren Protokoll der Fehleranalyse und Dokumentation der noch Umzusetzenden Lösungsansätze Datei:CCF AEP Protokoll Fehleranalyse Hall Sensoren.pdf n.i.O. M.Theine 05.02.2021
2510-3 REQ10.3290 Dokumentation von Software Sichtung, Strukturierung und Dokumentation des Moduls AEP im Online-Modell Strukturiertes und Kommentiertes Softwaremodul AEP AEP - Autonomes Einparken i.O. P.Schumann 11.12.2020
3000-0 REQ10.2000 Eigenständige Funktionsweise des Fahrzeugs Fehleranalyse/-behebung "CCF-online.mdl" Protokoll der Fehleranalyse und Nachweis über die behobenen Problemstellen Datei:CCF AEP Protokoll Fehleranalyse CCF online.pdf i.O. M. Theine 14.01.2021
8000-0 REQ10.2070 Fahrfunktionen im RC- Modus Fehleranalyse/-behebung Kalibrierung Fernbedienung Protokoll der Fehleranalyse und kalibrierte Hardwarekomponenten Fernbedienung und Fahrtenregler Datei:CCF AEP Protokoll Fehleranalyse Fernbedienung und Antrieb.pdf i.O. P.Schumann 17.12.2020
8000-1 REQ10.2070 Fahrfunktionen im RC- Modus Fehleranalyse/-behebung Prototypenplatine Fernbedienung Protokoll der Fehleranalyse und behobene Mängel an der Prototypenplatine Fernbedienung Datei:CCF AEP Protokoll Fehleranalyse Fernbedienung und Antrieb.pdf i.O. P.Schumann 17.12.2020

Ergebnisse MS1 und MS2:

Das erarbeitete Konzept des Einparkalgorithmus funktioniert in Simulation für alle Testfälle einwandfrei. Videos einzelner Testfälle, welche die Funktion neben den Messprotokollen und Screenshots verifizieren, sind in folgendem Ordner abgelegt: //svn.hshl.de/svn/MTR_SDE_Praktikum/trunk/Teams/AEP/Bilder und Videos/Videos

Ergebnisse MS3 und MS4:

Auf dem Fahrzeug konnte der Einparkalgorithmus nicht getestet werden, da das Fahrzeug noch nicht autonom fahrfähig ist (siehe AEP - Autonomes Einparken -> 4. "Online-Modell"). Die durchgeführten Fehleranalysen (Fehlerprotokolle) und Arbeiten am Fahrzeug wurden in den folgenden Wiki-Artikeln dokumentiert:

Offene Punkte und Ausblick

Stand: 15.02.2021

  • Funktionstest der Vermessung der Parklücke mittels IR-Sensoren (Online-Modell)
  • Ermitteln der realen Fahrzeugparameter (z.B. Wendekreis, Lenkwinkel, etc.)
  • Anpassen des AEP-Einparkalgorithmus an reale Bedingungen (Fahrzeug und reale Parkbucht)
  • Durchführen der Unit- und Integrationstest im Online-Modell (mit Carolo-Cup-Fahrzeug)
  • Optimieren der Fahrzeuggeometrie, um größere Lenkwinkel zu realisieren
  • Optimieren der Simulation (Laufzeitoptimierung)

Stand: 23.10.2022

  • Ermittlung des Fehlers vom Gyrosensorwert im online Modell
  • Testen des Einparkalgorithmus im online Modell
  • Zurücksetzten des aktuellen Zustandes beim Reset

Bitte beachten: Der Artikel Fahrzeugsoftware bildet alte Stände der Parameterdateien und Simulink-Modelle ab. Dieser muss im Bezug auf die AEP-Software aktualisiert werden.

Quellen / Weiterführende Literatur

[1] Hermann Norbert (2012), Mathematik ist Überall. 4.Auflage Oldenburg, Oldenbourg Wissenschaftsverlag (24. Oktober 2012)
[2] Kochem M. (2006) Parkassistent. In: Isermann R. (eds) Fahrdynamik-Regelung. Vieweg. https://doi.org/10.1007/978-3-8348-9049-8_14



→ zurück zum Hauptartikel: SDE Praktikum Autonomes Fahren
→ zum Artikel Autonomes Einparken: AEP - Autonomes Einparken
→ zum Artikel Einparksensorik: AEP - Einparksensorik