AEP - Autonomes Einparken: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
 
(180 dazwischenliegende Versionen von 5 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:


== Allgemeines ==
== Allgemeines ==
Innerhalb des Projektes SDE - Autonomes Fahrzeug arbeiten im SoSe 2020 zwei Teams an dem Thema 'Autonomes Einparken' (AEP). Das Teilteam [[AEP - Einparkalgorithmus| AEP - Einparkalgorithmus]] an der Implementierung des Parkvorgangs und das Teilteam [[AEP - Einparksensorik| AEP - Einparksensorik]] mit der zugehörigen Fahrzeughardware. Dieser Artikel dient der Dokumentation der entwickelten Software und der für den Einparkvorgang benötigten Harwdare.
Innerhalb des Projektes SDE - Autonomes Fahrzeug arbeiten im SoSe 2020 sowie im WiSe 2020/2021 zwei Teams an dem Thema 'Autonomes Einparken' (AEP). Das Teilteam [[AEP - Einparkalgorithmus| AEP - Einparkalgorithmus]] an der Implementierung des Parkvorgangs und das Teilteam [[AEP - Einparksensorik| AEP - Einparksensorik]] an der zugehörigen Fahrzeughardware (Sensoren für den Einparkvorgang).
Dieser Artikel dient der Dokumentation der entwickelten Software und der für den Einparkvorgang benötigten Harwdare.


'''Weiterführende Artikel
'''Weiterführende Artikel
Zeile 8: Zeile 9:


== Grundlagen ==
== Grundlagen ==
'''Autoren:''' [[Benutzer:Martin Theine|Martin Theine]] und [[Benutzer:Patrick Schumann|Patrick Schumann]]
<br />
'''Stand:''' 12.02.2021
<br />
<br />


=== Auswahl der Sensoren ===
=== Auswahl der Sensoren ===
Zeile 30: Zeile 26:
Die Geschwindigkeitsermittlung erfolgt durch die Auswertung der im Motor verbauten Hallsensoren. Die Streckenmessung erfolgt über die Ableitung der Geschwindigkeit. Die bereits zurückgelegte Strecke wird hauptsächlich für das Vermessen der Parklücken benötigt. Die weiteren Details der Hardware, sowie das physikalische Messprinzip sind in dem Artikel [[Hall-Sensor|Hall-Sensor]] beschrieben.
Die Geschwindigkeitsermittlung erfolgt durch die Auswertung der im Motor verbauten Hallsensoren. Die Streckenmessung erfolgt über die Ableitung der Geschwindigkeit. Die bereits zurückgelegte Strecke wird hauptsächlich für das Vermessen der Parklücken benötigt. Die weiteren Details der Hardware, sowie das physikalische Messprinzip sind in dem Artikel [[Hall-Sensor|Hall-Sensor]] beschrieben.


=== Einbindung des Einparkalgorithmus in die Simulink Umgebung ===
=== Einbindung der AEP-Bibliothek in die Simulink Umgebung ===


Die Umsetzung des Einparkvorgangs erfolgt in einer eigenen Bibliothek der Fahrzeugsoftware.  
'''Autoren:''' [[Benutzer:Martin Theine|Martin Theine]] und [[Benutzer:Patrick Schumann|Patrick Schumann]]
<br />
'''Stand:''' 12.02.2021
<br />


Die Einbindung des AEP Blocks (gelb umrandet) in die Software des Fahrzeugs ist in der folgenen Abbildung dargestellt:
Die Umsetzung des Einparkvorgangs erfolgt in einer eigenen Bibliothek (bib_AutonomesEinparken.mdl) der Fahrzeugsoftware.


[[Datei:CCF offline AEP markierung.png|700px|AEP-Block eingebunden im Simulinkmodell]]
Die Einbindung des AEP Blocks (gelb umrandet) im Offline-Modell (Simulation) ist in der folgenen Abbildung dargestellt:
 
[[Datei:CCF offline AEP markierung.png|700px|AEP-Block eingebunden im Offline-Modell]]
 
Die Einbindung des AEP Blocks (gelb umrandet) im Online-Modell (Carolo-Cup-Fahrzeug) ist in der folgenen Abbildung dargestellt:
 
[[Datei:Online-Modell.png|700px|AEP-Block eingebunden im Online-Modell]]


=== Schnittstellen zu anderen Softwaremodulen ===
=== Schnittstellen zu anderen Softwaremodulen ===
--> Beschreibung der Schnittstellen zu FAMO, BSF und Aktoren/Sensor-Online
'''Autoren:''' [[Benutzer:Martin Theine|Martin Theine]] und [[Benutzer:Patrick Schumann|Patrick Schumann]]
<br />
'''Stand:''' 12.02.2021
<br />
 
 
''' Bibliothek "bib_Fahrtmodus.mdl" '''
 
Der Zustandsautomat des Einparkalgorithmus gibt ausgangsseitig die Variablen ...
 
{| class="mw-datatable"
! Parameter !! Beschreibung
|-
|
|-
|rowspan="2" |Famo_Modi_Schalter_Lw_int ||1 = Lenkwinkelvorgabe durch BSF-Querregelung
|-
|| 2 = Lenkwinkelvorgabe durch AEP
|-
|
|-
|rowspan="2" |Famo_Modi_Schalter_Vx_int ||1 = Geschwindigkeitsvorgabe durch BSF-Längsregelung
|-
|| 2 = Geschwindigkeitsvorgabe durch AEP
|}
 
 
 
... auf den CCF-Bus. Diese beiden Werte werden vom "FAMO"-Block verwendet, um die Lenkwinkel- und Geschwindigkeitsvorgabe für BSF oder AEP zu konfigurieren.
 
Im Fall AEP, wird der Lenkwinkel zunächst über den "BSF"-Block vorgegeben (geregelt geradeaus fahren: Famo_Modi_Schalter_Lw_int = 1) bis eine Parklücke
gefunden wurde. Daraufhin wird im Zustandsautomaten des Einparkalgorithmus auf die AEP-Vorgabe gewechselt (Famo_Modi_Schalter_Lw_int = 2), um die Kurven
des Einparkvorgangs fahren zu können. Die Geschwindigkeitsvorgabe erfolgt im Fall AEP dauerhaft durch den Zustandsautomaten des Einparkalgorithmus
(Famo_Modi_Schalter_Vx_int = 2).
 
 
''' Bibliothek "bib_Sensoren_Aktoren_offline.mdl" '''
 
Im Offline-Modell (Simulation) bekommt der Zustandsautomat des Einparkalgorithmus eingangsseitig simulierte Sensorsignale aus dem Block "SEN" (Sensoren) über den CCF-Bus:
 
 
 
{| class="mw-datatable"
! Parameter !! Beschreibung
|-
||SenVx_sx_K_f64 ||berechnete gefahrene Strecke des simulierten Fahrzeugs aus dem Kinematikmodell
|-
||SenGier_psi_filt_K_f64 ||simulierter Gierwinkel des Fahrzeugs
|-
||SenAbs_xVR_K_f64 ||simulierter Abstandswert des vorderen rechten IR-Sensors
|-
||SenAbs_xHR_K_f64 ||simulierter Abstandswert des rechten hinteren IR-Sensors
|-
||SenAbs_yHR_K_f64 ||simulierter Abstandswert des rechten hinteren IR-Sensors
|-
||SenAbs_yHL_K_f64 ||simulierter Abstandswert des linken hinteren IR-Sensors
|-
|}
 
 
Ausgangsseitig wird der Solllenkwinkel (AEP_LwSoll_f64) und die Sollgeschwindigkeit (AEP_vx_K_soll_f64) auf den CCF-Bus gelegt. Durch o.g. Konfiguration
mittels "FAMO"-Block wird initial die Lenkwinkelvorgabe aus dem Block "BSFQuer - Querfuehrung" an den Block "AKT" (Aktoren) weitergegeben (Lücke suchen).
Beim Einparken wird die Lenkwinkelvorgabe des AEP-Blocks direkt an den Block "AKT" (Aktoren) weitergegeben. Die Geschwindigkeitsvorgabe erfolgt während
AEP dauerhaft durch den "AEP"-Block via "FAMO" -> "BSFLaengs - Laengsfuehrung" an den Block "AKT" (Aktoren). Der Block "AKT" (Aktoren) gibt die Vorgaben
für den Lenkwinkel und die Geschwindigkeit an das Kinematikmodell weiter.
 
 
''' Bibliothek "bib_Sensoren_Aktoren_online.mdl" '''
 
Im Online-Modell (reales Fahrzeug) bekommt der Zustandsautomat des Einparkalgorithmus eingangsseitig die realen Sensorsignale aus dem Block "SEN" (Sensoren) über den CCF-Bus:
 
 
{| class="mw-datatable"
! Parameter !! Beschreibung
|-
||SenVx_sx_K_f64 ||gefahrene Strecke des Fahrzeugs
|-
||SenGier_psi_filt_K_f64 ||Gierwinkel des Fahrzeugs
|-
||SenAbs_xVR_K_f64 ||Abstandswert des vorderen rechten IR-Sensors
|-
||SenAbs_xHR_K_f64 ||Abstandswert des hinteren rechten IR-Sensors
|-
||SenAbs_yHR_K_f64 ||Abstandswert des rechten hinteren IR-Sensors
|-
||SenAbs_yHL_K_f64 ||Abstandswert des linken hinteren IR-Sensors
|-
|}
 
 
[https://wiki.hshl.de/wiki/index.php/Infrarotsensoren Position und Beschreibung der Infrarot Sensoren]
 
[[Bild:Grafik IR Sensoren.svg|300px|mini|Skizze der Sensorpositionen der Infrarotsensoren [https://wiki.hshl.de/wiki/index.php/Infrarotsensoren Beschreibung der Infrarot Sensoren]]]
 
Ausgangsseitig wird der Solllenkwinkel (AEP_LwSoll_f64) und die Sollgeschwindigkeit (AEP_vx_K_soll_f64) auf den CCF-Bus gelegt. Durch o.g. Konfiguration
mittels "FAMO"-Block wird initial die Lenkwinkelvorgabe aus dem Block "BSFQuer - Querfuehrung" an den Block "AKT" (Aktoren) weitergegeben (Lücke suchen).
Beim Einparken wird die Lenkwinkelvorgabe des AEP-Blocks direkt an den Block "AKT" (Aktoren) weitergegeben. Die Geschwindigkeitsvorgabe erfolgt während
AEP dauerhaft durch den "AEP"-Block via "FAMO" -> "BSFLaengs - Laengsfuehrung" an den Block "AKT" (Aktoren). Der Block "AKT" (Aktoren) gibt die Vorgabe
für den Lenkwinkel an den Lenkservo des Fahrzeugs weiter und die Vorgabe der Geschwindigkeit an den Fahrtenregler weiter.


=== Auswahl des Einparkmodus ===
=== Auswahl des Einparkmodus ===
Zeile 49: Zeile 152:
Alle weiteren Einstellungen sind optional und werden in diesem [[Fahrzeugsoftware#Hauptdatei start.m|Link]] erläutert.
Alle weiteren Einstellungen sind optional und werden in diesem [[Fahrzeugsoftware#Hauptdatei start.m|Link]] erläutert.


= Offline-Simulation =  
= Offline-Modell =
'''Autoren:''' [[Benutzer:Martin Theine|Martin Theine]] und [[Benutzer:Patrick Schumann|Patrick Schumann]]
<br />
'''Stand:''' 12.02.2021
<br />
 
'''Konfiguration in der "start.m"-Datei zum Starten der Einparksimulation:'''
 
{| class="mw-datatable"
! Parameter !! Auswahl !! Beschreibung
|-
|
|-
|rowspan="3" |"Schalter_offline" 
| style="text-align:right"| 0: || Online Modell
|-
|  style="background-color:#eee; text-align:right"| 1: || style="background-color:#eee;"| Simulation/ Offline-Modell auswählen
|-
| style="text-align:right"| 2: || PC Onlina Sensor Aktortest
|-
|
|-
|rowspan="4" style="background-color:#ccc;" | "PAR_Modi_Schalter_Fahrbahn_int"
| style="background-color:#aaa; text-align:right"| 0: ||  style="background-color:#aaa;"|Rundkurs ohne Kreuzung, Startpunkt kurz vor erster Kurve
|-
| style="background-color:#ccc; text-align:right"| 1: || style="background-color:#ccc;"| Rundkurs mit Kreuzung
|-
| style="background-color:#aaa; text-align:right"| 2: || style="background-color:#aaa;"| Rundkurs mit Kreuzung, Start direkt vor S-Kurve
|-
| style="background-color:#ccc; text-align:right"| 3: || style="background-color:#ccc;"| Rundkurs ohne Kreuzung mit Stopplinie
|-
|
|-
|rowspan="4" |"Simulinkmodus"
| style="text-align:right"| 1: || BSF
|-
| style="background-color:#eee; text-align:right"| 2: || style="background-color:#eee;"| AEP (Lücke suchen, vermessen und anschließend anhalten)
|-
| style="text-align:right"| 3: || AEP (Lücke suchen, vermessen und einparken)
|-
| style="background-color:#eee; text-align:right"| 4: || style="background-color:#eee;"| BSF incl. Objekt auf der Fahrbahn
|-
|
|-
|rowspan="2" style="background-color:#ccc;" |"Lw_Vx_Manuell"
|  style="background-color:#aaa; text-align:right"| 0: || style="background-color:#aaa;"|  Automatisch
|-
|  style="background-color:#ccc; text-align:right"| 1: || style="background-color:#ccc;"|  manuelle Vorgabe (Werte s. u. beim Fahrmanöver)
|-
|
|-
|rowspan="13" |"PAR_Modi_Schalter_Luecke_int"
| style="text-align:right"| 0: || Positionierung vorgegeben (größte Lücke vorne), feste Hindernisbreite
|-
| style="background-color:#eee; text-align:right"| 1: || style="background-color:#eee;"| Positionierung zufällig, feste Hindernisbreite
|-
| style="text-align:right"| 2: || Positionierung und Hindernisbreite zufällig
|-
| style="background-color:#eee; text-align:right"| 3: || style="background-color:#eee;"| keine passende Lücke
|-
| style="text-align:right"| 4: || kein Hindernis
|-
| style="background-color:#eee;text-align:right"| 5: || style="background-color:#eee;"| nur vorderes Hindernis und kleinstmögliche Parklücke (0.71 m)
|-
| style="text-align:right"| 6: || kleinstmögliche Parklücke (0.71 m) zuerst
|-
| style="background-color:#eee;text-align:right"| 7: || style="background-color:#eee;"| optimale Parklücke (0.9 m) zuerst
|-
| style="text-align:right"| 8: || mittlere Parklücke (1.1 m) zuerst
|-
| style="background-color:#eee;text-align:right"| 9: || style="background-color:#eee;"| größtmögliche Parklücke (1.5 m) zuerst
|-
| style="text-align:right"| 10: || schmales Hindernis hinten links
|-
| style="background-color:#eee;text-align:right"| 11: || style="background-color:#eee;"| schmales Hindernis hinten mittig
|-
| style="text-align:right"| 12: || schmales Hindernis hinten rechts
|-
|
|-
 
|}
 
 
Das Fahrzeug startet nach einer kurzen Verzögerung zur Kalibrierung des Gierratensensors seine Fahrt entlang der Parklücken. Während des gesamten Suchvorgangs ist die geregelte Geradeausfahrt aktiv. Um dies zu zeigen startet das Fahrzeug im aktuellen Stand der Simulation leicht schräg und findet dann wieder auf seine Spur zurück.
 
*In den Fällen, in welchen Hindernisse in der Parkbucht stehen (0,1,2,6 bis 12), fährt das Fahrzeug, nachdem es eine Parklücke gefunden hat, an dieser vorbei bis die Hinterachse auf gleicher Höhe wie das Heck des vorderen Fahrzeugs der Parklücke ist. Das Fahrzeug parkt ein und positioniert sich in der Parklücke.
 
*Falls keine passende Lücke in der Parkbucht existiert (Fall 3), fährt das Fahrzeug bis zum Ende der Parkbucht (mittels Streckenerfassung) und bleibt stehen.
 
*Falls kein Hindernis in der Parkbucht steht (Fall 4), fährt das Fahrzeug so lange an der Parkbucht vorbei, bis die gefahrene Strecke ausreicht, um während der Linkskurve des Einparkmanövers parallel zur Fahrbahn zu gelangen. In diesem Fall wird direkt mit der Rechtskurve des Einparkvorgangs begonnen, um ohne Orientierung an einem Hindernis (IR-Sensoren), nur mit Hilfe des Gierratensensors einzuparken.
 
*Falls die erste Parklücke in der Parkbucht ausreicht, diese jedoch nur durch ein vorderes Hindernis begrenzt wird (Fall 5), so können die hinteren IR-Sensoren nicht genutzt werden, um einzuparken. Daher wird mittels festgelegter Streckenbegrenzung verhindert, dass das Fahrzeug an den "Boardstein" fährt.
 
'''Simulation starten'''
 
1 : Parameter Konfigurieren (s.o.) "start.m"-Datei ausführen (Run)
2 : Offline-Modell (Simulink) wird geöffnet
3 : In Simulink auf "Run" klicken
 
'''Letzter lauffähiger Stand der Offline-Simulation des Einparkvorgangs (10.07.2020):'''
 
SVN -> SDE Praktikum -> Software -> CaroloCupFahrzeug -> Update to '''Revision: 5502'''
 
Probleme in aktueller Head-Revision:


--> Beschreibung durchführen der Simulation
*parkende Hindernisse werden nicht mehr dargestellt (ab Revision 5539)
*die Querregelung wurde vom "Einspurmodell" auf das "Kinematikmodell" umgestellt und der Regler neu parametriert, wodurch die geregelte Geradeausfahrt nur noch mangelhaft funktioniert (ab Revision 5516)


Das Fahrzeug startet nach einer kurzen Verzögerung zur Kalibrierung des Gierratensensors seine Fahrt entlang der Parklücken. Während des gesamten Suchvorgangs ist die geregelte Geradeausfahrt aktiv. Um dies zu zeigen startet das Fahrzeug im aktuellen Stand der Simulation leicht schräg und findet dann wieder auf seine Spur zurück. Nach dem es eine Parklücke gefunden hat, fährt es an dieser noch vorbei, bis die Hinterachse auf gleicher Höhe wie das Heck des vorderen Fahrzeugs der Parklücke ist. Nach dem Finden der Parklücke parkt das Fahrzeug ein und positioniert sich in der Parklücke. Alle Vorraussetzungen wurden erfüllt.
'''Bearbeiten der Parklücken:'''
 
Die Parklücken und Objekte werden in der "param_SEN_offline.m" im Ordner "parameter" initialisiert. Diese werden anschließend in einem Vektor in "PAR_SenAbs_ObjektListe_f64" gespeichert und in der Darstellungsfunktion "funktion_simulink_simultan_draufsicht" aufgerufen.
Die einzelnen Parklücken werden in einer "switch case"-Schleife erstellt, sodass (in diesem Fall) 9 unterschliedlich lange Parklücken erstellt werden können. Dabei kann eine Lücke mehrfach verwendet werden, es wird also ein Vektor mit den gleichen Werten gefüllt.
Die Objekte werden analog dazu erstellt. Der daraus resultierende Seitenstreifen, in den das Fahrzeug einparken soll, wird mit einer Zählschleife im Vektor "x" in der Reihenfolge Objekt, dann Parklücke zusammengefasst.


= Online-Modell =
= Online-Modell =
'''Autoren:''' [[Benutzer:Martin Theine|Martin Theine]] und [[Benutzer:Patrick Schumann|Patrick Schumann]]
<br />
'''Stand:''' 12.02.2021
<br />
'''Konfiguration in der "start.m"-Datei zum Starten der Einparksimulation:'''


--> Beschreibung, wie sich der AEP starten lässt
* "Schalter_offline" = 0 (Modell für die dSPACE-Karte auswählen)
* "Simulinkmodus" = 2 -> Lücke finden und stehen bleiben ODER "Simulinkmodus" = 3 Lücke suchen und einparken
* "Lw_Vx_Manuell" = 0 -> automatische Vorgabe des Solllenkwinkels und der Sollgeschwindigkeit
* "PAR_Schleichmodus" = 0 -> Geschwindigkeitsbegrenzung bei Fernbedienungseingriff auf 0.3 m/s (Wettkampfmodus) ODER 1 -> Geschwindigkeitsbegrenzung bei Fernbedienungseingriff auf 1 m/s (Testmodus)
* "PAR_FernB_Schalter_AUS_int" = 0 -> Fernbedienungseingriff aktivieren


Der aktuelle Softwarestand wurde bis jetzt noch nicht auf dem Fahrzeug getestet. Die Implementierung für das Online Modell steht für das Wintersemester 2020/21 an.
'''Modell auf das Fahrzeug laden'''
 
* nach Konfiguration (s.o.) "start.m"-Datei ausführen (Run)
* Online-Modell (Simulink) wird geöffnet
* In Simulink auf "Build & Deploy" klicken
* Status des Builds wird im Command Window von MATLAB angezeigt
* Nach Ausrichtung des Fahrzeugs die Spannungsversorgung des Antriebs einschalten
* AEP-Starttaster betätigen
 
'''Der aktuelle Einparkalgorithmus konnte bislang noch nicht vollständig auf dem Fahrzeug getestet werden (Stand 12.02.2021).'''
 
Während der Fehleranalyse im Wintersemester 20/21 konnte die Hardware für die Hall-Sensorik vollständig durch das Team AEP - Einparkalgorithmus überprüft und repariert werden (Link Fehlerprotokoll).
Das Fahrzeug ist aktuell trotzdem nicht autonom fahrfähig, da die gefahrene Strecke und Ist-Geschwindigkeit noch nicht korrekt erfasst werden (Link Video). Somit kann keine korrekte Längsregelung (Geschwindigkeitsregelung) stattfinden. Der Einparkalgorithmus ist sowohl von einer funktionierenden Regelung auf die vorgegebenen Sollgeschwindigkeiten als auch von einer funktionierenden Streckenerfassung abhängig.
 
'''Mögliche Fehlerquellen:'''
 
* Vermutung 1: ab einer gewissen Motordrehzahl werden zu viele Interrupts durch die Hall-Kombi-Logik ausgelöst (Task Overrun) -> nicht alle Interrupts werden verwertet -> falsche Berechnung der Geschwindigkeit und Strecke<br /> (ignorierte Fehlermeldung: siehe [[AEP - Einparksensorik]] -> 7.2 "Behebung des Absturzes im Online-Modell")
 
* Vermutung 2: Die Getriebeübersetzung des Fahrzeugs wurde in der Vergangenheit verändert. Unter Umständen wird die Berechnung dadurch verfälscht, dass das Übersetzungsverhältnis in Software nicht darauf angepasst wurde <br /> (Messfehler scheint linear zu sein).
 
Der autonomen Fahrfunktion steht vermutlich nur noch die o.g. Problematik im Wege. Durch eine Hardwaresimulation mit LtSpice konnte herausgestellt werden, dass die Interrupt-Fehler vermutlich mit der Kondensatorspannung des Kondensators C2 (Schaltplan) des Tiefpassfilters der Hall-Kombi-Logik auf der Adapterplatine zur dSPACE-Karte entstehen. Die Ergebnisse dieser Simulation lassen auf eine falsche Dimensionierung des beschriebenen Bauteils bzw. des Tiefpassfilters schließen. '''Diesen Sachverhalt gilt es im Sommersemester 2021 bzw. Wintersemester 2021/22 genauer zu untersuchen.'''
 
-> Links einfügen
 
Zusätzlich kann festgehalten werden, dass die Steuerung des Antriebs mittels Fernbedienung oder manueller Vorgabe in Control Desk einwandfrei funktioniert '''(siehe [[Analyse und Fehlersuche WS20/21]]).''' Der Fahrtenregler, welcher die Eingabe per Fernbedienung oder Control Desk in eine Motordrehzahl umsetzt, greift auf die Hall-Sensorik zurück. Würde diese fehlerhaft sein (Sensor defekt/falsche Phasenzuordnung), so wäre keine kontrollierte Fahrt auf eben genannte Weise möglich. Der dSPACE-Karte stehen die selben Hall-Signale (zur Geschwindigkeitsermittlung/Streckenerfassung/Fahrtrichtungserkennung) zur Verfügung. Diese Beobachtung stützt die Annahme, dass die aktuell noch vorhandene Antriebsproblematik lediglich auf die Interrupt-Fehler bzw. eine fehlerhafte Geschwindigkeitsberechnung in der Software zurückzuführen ist '''(siehe Online-Modell: Block "SEN - Geschwindigkeit").'''
 
= Weiterführende Artikel =


= Quellen / Weiterführende Literatur =
*[[Wiki-Artikel_schreiben | Tipps zum Schreiben eines Wiki-Artikels]]
*[[ArduMower:_Simulation_der_Kinematik_eines_Fahrzeugs_mit_drei_R%C3%A4dern|Beispiel-Artikel von Prof. Göbel]]
*[[ArduMower:_Kartierung_in_Matlab/Simulink|Beispiel-Artikel von Prof. Schneider]]
<br />
----
→ zurück zum Hauptartikel: [[Praktikum_SDE|Praktikum SDE]]
→ zurück zum Hauptartikel: [[Praktikum_SDE|Praktikum SDE]]
<br />→ zum Artikel Einparkalgorithmus: [[AEP - Einparkalgorithmus| AEP - Einparkalgorithmus]]
<br />→ zum Artikel Einparkalgorithmus: [[AEP - Einparkalgorithmus| AEP - Einparkalgorithmus]]
<br />→ zum Artikel Einparksensorik: [[AEP - Einparksensorik| AEP - Einparksensorik]]
<br />→ zum Artikel Einparksensorik: [[AEP - Einparksensorik| AEP - Einparksensorik]]
→ zurück zum Hauptartikel: [[Praktikum_SDE|Praktikum SDE]]

Aktuelle Version vom 22. November 2023, 14:55 Uhr

Allgemeines

Innerhalb des Projektes SDE - Autonomes Fahrzeug arbeiten im SoSe 2020 sowie im WiSe 2020/2021 zwei Teams an dem Thema 'Autonomes Einparken' (AEP). Das Teilteam AEP - Einparkalgorithmus an der Implementierung des Parkvorgangs und das Teilteam AEP - Einparksensorik an der zugehörigen Fahrzeughardware (Sensoren für den Einparkvorgang). Dieser Artikel dient der Dokumentation der entwickelten Software und der für den Einparkvorgang benötigten Harwdare.

Weiterführende Artikel

Grundlagen

Auswahl der Sensoren

Die Sensoren wurden in Anlehnung an gängige Lösungen des Carolo Cups ausgewählt. Für den Einparkvorgang werden vier Infrarotsensoren (nachfolgend: IR), ein Gierratensensor und mehrere Hallsensoren zur Geschwindigkeitsermittlung eingesetzt. Eine Übersicht der Hardware des Fahrzeugs ist in dem Artikel Fahrzeughardware zu finden.

Infrarotsensoren:

Die Positionen der IR sind im Artikel Infrarotsensoren festgehalten. Die IR werden während des Einparkvorgangs zur Entfernungsmessung verwendet. Mit Hilfe der Messungen der seitlich montierten IR werden Parklücken erfasst und ausgemessen und der seitliche Abstand zu den am Straßenrand parkenden Fahrzeugen ermittelt. Die hinten am Fahrzeug montierten IR dienen zur Kollisionsvermeidung und der Positionierung innerhalb der Parklücke.

Gierratensensor:

Um geregelt an den parkenden Fahrzeugen vorbeifahren zu können und um erfolgreich ein eine Parklücke einparken zu können, wird die aktuelle Winkellage des Fahrzeugs benötigt. Zur Bestimmung dieser wird ein Gierratensensor eingesetzt.

Hallsensoren:

Die Geschwindigkeitsermittlung erfolgt durch die Auswertung der im Motor verbauten Hallsensoren. Die Streckenmessung erfolgt über die Ableitung der Geschwindigkeit. Die bereits zurückgelegte Strecke wird hauptsächlich für das Vermessen der Parklücken benötigt. Die weiteren Details der Hardware, sowie das physikalische Messprinzip sind in dem Artikel Hall-Sensor beschrieben.

Einbindung der AEP-Bibliothek in die Simulink Umgebung

Autoren: Martin Theine und Patrick Schumann
Stand: 12.02.2021

Die Umsetzung des Einparkvorgangs erfolgt in einer eigenen Bibliothek (bib_AutonomesEinparken.mdl) der Fahrzeugsoftware.

Die Einbindung des AEP Blocks (gelb umrandet) im Offline-Modell (Simulation) ist in der folgenen Abbildung dargestellt:

AEP-Block eingebunden im Offline-Modell

Die Einbindung des AEP Blocks (gelb umrandet) im Online-Modell (Carolo-Cup-Fahrzeug) ist in der folgenen Abbildung dargestellt:

AEP-Block eingebunden im Online-Modell

Schnittstellen zu anderen Softwaremodulen

Autoren: Martin Theine und Patrick Schumann
Stand: 12.02.2021


Bibliothek "bib_Fahrtmodus.mdl"

Der Zustandsautomat des Einparkalgorithmus gibt ausgangsseitig die Variablen ...

Parameter Beschreibung
Famo_Modi_Schalter_Lw_int 1 = Lenkwinkelvorgabe durch BSF-Querregelung
2 = Lenkwinkelvorgabe durch AEP
Famo_Modi_Schalter_Vx_int 1 = Geschwindigkeitsvorgabe durch BSF-Längsregelung
2 = Geschwindigkeitsvorgabe durch AEP


... auf den CCF-Bus. Diese beiden Werte werden vom "FAMO"-Block verwendet, um die Lenkwinkel- und Geschwindigkeitsvorgabe für BSF oder AEP zu konfigurieren.

Im Fall AEP, wird der Lenkwinkel zunächst über den "BSF"-Block vorgegeben (geregelt geradeaus fahren: Famo_Modi_Schalter_Lw_int = 1) bis eine Parklücke gefunden wurde. Daraufhin wird im Zustandsautomaten des Einparkalgorithmus auf die AEP-Vorgabe gewechselt (Famo_Modi_Schalter_Lw_int = 2), um die Kurven des Einparkvorgangs fahren zu können. Die Geschwindigkeitsvorgabe erfolgt im Fall AEP dauerhaft durch den Zustandsautomaten des Einparkalgorithmus (Famo_Modi_Schalter_Vx_int = 2).


Bibliothek "bib_Sensoren_Aktoren_offline.mdl"

Im Offline-Modell (Simulation) bekommt der Zustandsautomat des Einparkalgorithmus eingangsseitig simulierte Sensorsignale aus dem Block "SEN" (Sensoren) über den CCF-Bus:


Parameter Beschreibung
SenVx_sx_K_f64 berechnete gefahrene Strecke des simulierten Fahrzeugs aus dem Kinematikmodell
SenGier_psi_filt_K_f64 simulierter Gierwinkel des Fahrzeugs
SenAbs_xVR_K_f64 simulierter Abstandswert des vorderen rechten IR-Sensors
SenAbs_xHR_K_f64 simulierter Abstandswert des rechten hinteren IR-Sensors
SenAbs_yHR_K_f64 simulierter Abstandswert des rechten hinteren IR-Sensors
SenAbs_yHL_K_f64 simulierter Abstandswert des linken hinteren IR-Sensors


Ausgangsseitig wird der Solllenkwinkel (AEP_LwSoll_f64) und die Sollgeschwindigkeit (AEP_vx_K_soll_f64) auf den CCF-Bus gelegt. Durch o.g. Konfiguration mittels "FAMO"-Block wird initial die Lenkwinkelvorgabe aus dem Block "BSFQuer - Querfuehrung" an den Block "AKT" (Aktoren) weitergegeben (Lücke suchen). Beim Einparken wird die Lenkwinkelvorgabe des AEP-Blocks direkt an den Block "AKT" (Aktoren) weitergegeben. Die Geschwindigkeitsvorgabe erfolgt während AEP dauerhaft durch den "AEP"-Block via "FAMO" -> "BSFLaengs - Laengsfuehrung" an den Block "AKT" (Aktoren). Der Block "AKT" (Aktoren) gibt die Vorgaben für den Lenkwinkel und die Geschwindigkeit an das Kinematikmodell weiter.


Bibliothek "bib_Sensoren_Aktoren_online.mdl"

Im Online-Modell (reales Fahrzeug) bekommt der Zustandsautomat des Einparkalgorithmus eingangsseitig die realen Sensorsignale aus dem Block "SEN" (Sensoren) über den CCF-Bus:


Parameter Beschreibung
SenVx_sx_K_f64 gefahrene Strecke des Fahrzeugs
SenGier_psi_filt_K_f64 Gierwinkel des Fahrzeugs
SenAbs_xVR_K_f64 Abstandswert des vorderen rechten IR-Sensors
SenAbs_xHR_K_f64 Abstandswert des hinteren rechten IR-Sensors
SenAbs_yHR_K_f64 Abstandswert des rechten hinteren IR-Sensors
SenAbs_yHL_K_f64 Abstandswert des linken hinteren IR-Sensors


Position und Beschreibung der Infrarot Sensoren

Skizze der Sensorpositionen der Infrarotsensoren Beschreibung der Infrarot Sensoren

Ausgangsseitig wird der Solllenkwinkel (AEP_LwSoll_f64) und die Sollgeschwindigkeit (AEP_vx_K_soll_f64) auf den CCF-Bus gelegt. Durch o.g. Konfiguration mittels "FAMO"-Block wird initial die Lenkwinkelvorgabe aus dem Block "BSFQuer - Querfuehrung" an den Block "AKT" (Aktoren) weitergegeben (Lücke suchen). Beim Einparken wird die Lenkwinkelvorgabe des AEP-Blocks direkt an den Block "AKT" (Aktoren) weitergegeben. Die Geschwindigkeitsvorgabe erfolgt während AEP dauerhaft durch den "AEP"-Block via "FAMO" -> "BSFLaengs - Laengsfuehrung" an den Block "AKT" (Aktoren). Der Block "AKT" (Aktoren) gibt die Vorgabe für den Lenkwinkel an den Lenkservo des Fahrzeugs weiter und die Vorgabe der Geschwindigkeit an den Fahrtenregler weiter.

Auswahl des Einparkmodus

Um das Einparkmanöver zu starten, muss zu Beginn das Simulink-Modell start.m Datei in MATLAB geöffnet werden. Für den Einparkmodus bestehen die Möglichkeiten, nach der Lückenfindung direkt einzuparken (Simulinkmodus = 3) oder stehen zu bleiben (Simulinkmodus = 2). Beim Online-Model muss beachtet werden, dass vor der Betätigung des AEP-Tasters, die Aktuatoren ausgeschaltet werden, damit die Kalibrierung des Gierratensensors gemacht wird. Hierzu muss der Hebel, der sich hinten am Fahrzeug befindet, in die Mittelstellung gebracht werden.

Alle weiteren Einstellungen sind optional und werden in diesem Link erläutert.

Offline-Modell

Autoren: Martin Theine und Patrick Schumann
Stand: 12.02.2021

Konfiguration in der "start.m"-Datei zum Starten der Einparksimulation:

Parameter Auswahl Beschreibung
"Schalter_offline" 0: Online Modell
1: Simulation/ Offline-Modell auswählen
2: PC Onlina Sensor Aktortest
"PAR_Modi_Schalter_Fahrbahn_int" 0: Rundkurs ohne Kreuzung, Startpunkt kurz vor erster Kurve
1: Rundkurs mit Kreuzung
2: Rundkurs mit Kreuzung, Start direkt vor S-Kurve
3: Rundkurs ohne Kreuzung mit Stopplinie
"Simulinkmodus" 1: BSF
2: AEP (Lücke suchen, vermessen und anschließend anhalten)
3: AEP (Lücke suchen, vermessen und einparken)
4: BSF incl. Objekt auf der Fahrbahn
"Lw_Vx_Manuell" 0: Automatisch
1: manuelle Vorgabe (Werte s. u. beim Fahrmanöver)
"PAR_Modi_Schalter_Luecke_int" 0: Positionierung vorgegeben (größte Lücke vorne), feste Hindernisbreite
1: Positionierung zufällig, feste Hindernisbreite
2: Positionierung und Hindernisbreite zufällig
3: keine passende Lücke
4: kein Hindernis
5: nur vorderes Hindernis und kleinstmögliche Parklücke (0.71 m)
6: kleinstmögliche Parklücke (0.71 m) zuerst
7: optimale Parklücke (0.9 m) zuerst
8: mittlere Parklücke (1.1 m) zuerst
9: größtmögliche Parklücke (1.5 m) zuerst
10: schmales Hindernis hinten links
11: schmales Hindernis hinten mittig
12: schmales Hindernis hinten rechts


Das Fahrzeug startet nach einer kurzen Verzögerung zur Kalibrierung des Gierratensensors seine Fahrt entlang der Parklücken. Während des gesamten Suchvorgangs ist die geregelte Geradeausfahrt aktiv. Um dies zu zeigen startet das Fahrzeug im aktuellen Stand der Simulation leicht schräg und findet dann wieder auf seine Spur zurück.

  • In den Fällen, in welchen Hindernisse in der Parkbucht stehen (0,1,2,6 bis 12), fährt das Fahrzeug, nachdem es eine Parklücke gefunden hat, an dieser vorbei bis die Hinterachse auf gleicher Höhe wie das Heck des vorderen Fahrzeugs der Parklücke ist. Das Fahrzeug parkt ein und positioniert sich in der Parklücke.
  • Falls keine passende Lücke in der Parkbucht existiert (Fall 3), fährt das Fahrzeug bis zum Ende der Parkbucht (mittels Streckenerfassung) und bleibt stehen.
  • Falls kein Hindernis in der Parkbucht steht (Fall 4), fährt das Fahrzeug so lange an der Parkbucht vorbei, bis die gefahrene Strecke ausreicht, um während der Linkskurve des Einparkmanövers parallel zur Fahrbahn zu gelangen. In diesem Fall wird direkt mit der Rechtskurve des Einparkvorgangs begonnen, um ohne Orientierung an einem Hindernis (IR-Sensoren), nur mit Hilfe des Gierratensensors einzuparken.
  • Falls die erste Parklücke in der Parkbucht ausreicht, diese jedoch nur durch ein vorderes Hindernis begrenzt wird (Fall 5), so können die hinteren IR-Sensoren nicht genutzt werden, um einzuparken. Daher wird mittels festgelegter Streckenbegrenzung verhindert, dass das Fahrzeug an den "Boardstein" fährt.

Simulation starten

1 : Parameter Konfigurieren (s.o.) "start.m"-Datei ausführen (Run)
2 : Offline-Modell (Simulink) wird geöffnet
3 : In Simulink auf "Run" klicken

Letzter lauffähiger Stand der Offline-Simulation des Einparkvorgangs (10.07.2020):

SVN -> SDE Praktikum -> Software -> CaroloCupFahrzeug -> Update to Revision: 5502

Probleme in aktueller Head-Revision:

  • parkende Hindernisse werden nicht mehr dargestellt (ab Revision 5539)
  • die Querregelung wurde vom "Einspurmodell" auf das "Kinematikmodell" umgestellt und der Regler neu parametriert, wodurch die geregelte Geradeausfahrt nur noch mangelhaft funktioniert (ab Revision 5516)

Bearbeiten der Parklücken:

Die Parklücken und Objekte werden in der "param_SEN_offline.m" im Ordner "parameter" initialisiert. Diese werden anschließend in einem Vektor in "PAR_SenAbs_ObjektListe_f64" gespeichert und in der Darstellungsfunktion "funktion_simulink_simultan_draufsicht" aufgerufen. Die einzelnen Parklücken werden in einer "switch case"-Schleife erstellt, sodass (in diesem Fall) 9 unterschliedlich lange Parklücken erstellt werden können. Dabei kann eine Lücke mehrfach verwendet werden, es wird also ein Vektor mit den gleichen Werten gefüllt. Die Objekte werden analog dazu erstellt. Der daraus resultierende Seitenstreifen, in den das Fahrzeug einparken soll, wird mit einer Zählschleife im Vektor "x" in der Reihenfolge Objekt, dann Parklücke zusammengefasst.

Online-Modell

Autoren: Martin Theine und Patrick Schumann
Stand: 12.02.2021

Konfiguration in der "start.m"-Datei zum Starten der Einparksimulation:

  • "Schalter_offline" = 0 (Modell für die dSPACE-Karte auswählen)
  • "Simulinkmodus" = 2 -> Lücke finden und stehen bleiben ODER "Simulinkmodus" = 3 Lücke suchen und einparken
  • "Lw_Vx_Manuell" = 0 -> automatische Vorgabe des Solllenkwinkels und der Sollgeschwindigkeit
  • "PAR_Schleichmodus" = 0 -> Geschwindigkeitsbegrenzung bei Fernbedienungseingriff auf 0.3 m/s (Wettkampfmodus) ODER 1 -> Geschwindigkeitsbegrenzung bei Fernbedienungseingriff auf 1 m/s (Testmodus)
  • "PAR_FernB_Schalter_AUS_int" = 0 -> Fernbedienungseingriff aktivieren

Modell auf das Fahrzeug laden

  • nach Konfiguration (s.o.) "start.m"-Datei ausführen (Run)
  • Online-Modell (Simulink) wird geöffnet
  • In Simulink auf "Build & Deploy" klicken
  • Status des Builds wird im Command Window von MATLAB angezeigt
  • Nach Ausrichtung des Fahrzeugs die Spannungsversorgung des Antriebs einschalten
  • AEP-Starttaster betätigen

Der aktuelle Einparkalgorithmus konnte bislang noch nicht vollständig auf dem Fahrzeug getestet werden (Stand 12.02.2021).

Während der Fehleranalyse im Wintersemester 20/21 konnte die Hardware für die Hall-Sensorik vollständig durch das Team AEP - Einparkalgorithmus überprüft und repariert werden (Link Fehlerprotokoll). Das Fahrzeug ist aktuell trotzdem nicht autonom fahrfähig, da die gefahrene Strecke und Ist-Geschwindigkeit noch nicht korrekt erfasst werden (Link Video). Somit kann keine korrekte Längsregelung (Geschwindigkeitsregelung) stattfinden. Der Einparkalgorithmus ist sowohl von einer funktionierenden Regelung auf die vorgegebenen Sollgeschwindigkeiten als auch von einer funktionierenden Streckenerfassung abhängig.

Mögliche Fehlerquellen:

  • Vermutung 1: ab einer gewissen Motordrehzahl werden zu viele Interrupts durch die Hall-Kombi-Logik ausgelöst (Task Overrun) -> nicht alle Interrupts werden verwertet -> falsche Berechnung der Geschwindigkeit und Strecke
    (ignorierte Fehlermeldung: siehe AEP - Einparksensorik -> 7.2 "Behebung des Absturzes im Online-Modell")
  • Vermutung 2: Die Getriebeübersetzung des Fahrzeugs wurde in der Vergangenheit verändert. Unter Umständen wird die Berechnung dadurch verfälscht, dass das Übersetzungsverhältnis in Software nicht darauf angepasst wurde
    (Messfehler scheint linear zu sein).

Der autonomen Fahrfunktion steht vermutlich nur noch die o.g. Problematik im Wege. Durch eine Hardwaresimulation mit LtSpice konnte herausgestellt werden, dass die Interrupt-Fehler vermutlich mit der Kondensatorspannung des Kondensators C2 (Schaltplan) des Tiefpassfilters der Hall-Kombi-Logik auf der Adapterplatine zur dSPACE-Karte entstehen. Die Ergebnisse dieser Simulation lassen auf eine falsche Dimensionierung des beschriebenen Bauteils bzw. des Tiefpassfilters schließen. Diesen Sachverhalt gilt es im Sommersemester 2021 bzw. Wintersemester 2021/22 genauer zu untersuchen.

-> Links einfügen

Zusätzlich kann festgehalten werden, dass die Steuerung des Antriebs mittels Fernbedienung oder manueller Vorgabe in Control Desk einwandfrei funktioniert (siehe Analyse und Fehlersuche WS20/21). Der Fahrtenregler, welcher die Eingabe per Fernbedienung oder Control Desk in eine Motordrehzahl umsetzt, greift auf die Hall-Sensorik zurück. Würde diese fehlerhaft sein (Sensor defekt/falsche Phasenzuordnung), so wäre keine kontrollierte Fahrt auf eben genannte Weise möglich. Der dSPACE-Karte stehen die selben Hall-Signale (zur Geschwindigkeitsermittlung/Streckenerfassung/Fahrtrichtungserkennung) zur Verfügung. Diese Beobachtung stützt die Annahme, dass die aktuell noch vorhandene Antriebsproblematik lediglich auf die Interrupt-Fehler bzw. eine fehlerhafte Geschwindigkeitsberechnung in der Software zurückzuführen ist (siehe Online-Modell: Block "SEN - Geschwindigkeit").

Weiterführende Artikel

→ zurück zum Hauptartikel: Praktikum SDE
→ zum Artikel Einparkalgorithmus: AEP - Einparkalgorithmus
→ zum Artikel Einparksensorik: AEP - Einparksensorik

→ zurück zum Hauptartikel: Praktikum SDE