Simulation der IR-Einparksensorik

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen

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


Autor: Yanick Christian Tchenko
Betreuer: Prof. Schneider

Aufgabenstellung zum zweiten Meilenstein

  1. Übertragen der Testsoftware aus dem Branch in den Trunk (erledigt)
  2. Vereinfachung von Abstandssensorik.m. Für einen beliebigen IR-Sensor soll eine Funktion erstellt werden. Diese Funktion wird für alle 4 Sensoren aufgerufen. (erledigt)
  3. Code Review durch Prof. Schneider (erledigt)
  4. Test der neuen Unterfunktion (erledigt)
  5. Zeitmessung: Darstellung der Verbesserung, Optimierung durch mex-Compiler (offen)
  6. Anschauliche Dokumentation der Funktion von Abstandssensorik.m I(in Arbeit)
  7. Nach erfolgreichem Test: Übertragung in Offline-Simulation (offen)

Allgemeine Einleitung

Zur richtigen Durchführung des Einparkmanövers müssen die Sensorpositionen sowie die Messberechnungen der Abstände zu bestehen Hindernissen richtig durchgeführt werden. Für die verschiedenen Berechnungen und Positionsfestlegungen wird im Rahmen dieses Praktikums die Funktion abstandsensorik.m (ähnlich wie die Funktion fcn.m) angewendet.

Beschreibung der ursprünglichen Funktion Abstandssensorik.m

Abbildung 1: Programmablauf bei ursprünglicher Abstandssensorik.m

<br\>

Die ursprüngliche Funktion zur Abstand-Sensorik lässt sich wie auf der rechts stehenden Abbildung strukturell darstellen. Sie umfasst hauptsächlich 4 Blöcke:

%% Funktionsinitialisierung

  ...

Zur Initialisierung der Funktion werden neben den Eingabeparametern auch Globalvariablen vordefiniert.

- Globalvariablen<br\> Diese Variablen werden an unterschiedlichen Stellen im ganzen Programmablauf angewendet. Dazu zählen hauptsächlich die Variablen zur Fahrzeugparameterdarstellung, die der Quellcode im unteren Bereich veranschaulicht.

global Geraden Geraden2 Ergebnis  % Debug
global x_fahrzeug y_fahrzeug  % Debug
global PAR_CAR_Fahrzeugbreite_f64
global PAR_CAR_Fahrzeuglaenge_f64
breite = PAR_CAR_Fahrzeugbreite_f64;
laenge = PAR_CAR_Fahrzeuglaenge_f64;

Fahrzeuglänge, -breite, sowie Fahrzeugkoordinaten und entsprechende Granden lassen sich hiermit deklarieren

- Inputsgrößen

x, y, psi, ObjektListe, stIRPosition ,Schalter

%% Ermittlung der Abstände zu den Hindernissen als Ausgang


 
if Schalter == 1 % PAR_SenAbs_Schalter_EIN_bit Rechnung durchführen, sonst nicht
    
    % Fahrt im unteren Bereich
    Winkeloffset = 180;
    ...
    
%% Bearbeitung der Objekt- und Sensorpositionen

   ...

%% Sensorpositionen (in m)
    
    % IR_Sensor 	x-Position 	y-Position
    % rechts vorne 	- 7 cm 	-12 cm
    % rechts hinten -37 cm 	-12 cm
    % hinten links 	-42 cm 	 10 cm
    % hinten rechts -42 cm 	-10 cm
    
    % Beifahrerseite
    PAR_IR_xVR_x = stIRPosition(1,1);               % Pos x - IR rechts vorne  im Fahrzeug K-System
    PAR_IR_xVR_y = stIRPosition(1,2);               % Pos y
    PAR_IR_xHR_x = stIRPosition(2,1);               % Pos x - IR rechts hinten im Fahrzeug K-System
    PAR_IR_xHR_y = stIRPosition(2,2);               % Pos y
    
    % Hecksensoren
    PAR_IR_yHR_x = stIRPosition(3,1);               % Pos x - IR hinter rechts im Fahrzeug K-System
    PAR_IR_yHR_y = stIRPosition(3,2);               % Pos y
    PAR_IR_yHL_x = stIRPosition(4,1);               % Pos x - IR hinter links im Fahrzeug K-System
    PAR_IR_yHL_y = stIRPosition(4,2);               % Pos y
    
    ESM_psi_f64 = psi;                  % Fahrzeugwinkel in rad
    ESM_x_I_f64 = x;                    % Fahrzeugposition x
    ESM_y_I_f64 = y;                    % Fahrzeugposition y 
    ...
    ...
    ...

%% Berechnungen der Schnittpunkte  zwischen Sensorstrahlungen und  Hindernissen
    ...
    ...

%% Rückmelden der Werte
    
    % Seitliche Sensoren
    SenAbs_xVR_K_f64 = min(alle_Abstaende_VR);
    SenAbs_xHR_K_f64 = min(alle_Abstaende_HR);
    
    % Hecksensoren
    SenAbs_yHR_K_f64 = min(alle_Abstaende_yHR);
    SenAbs_yHL_K_f64 = min(alle_Abstaende_yHL);

else
    SenAbs_xVR_K_f64 = 0;
    SenAbs_xHR_K_f64 = 0;
    SenAbs_yHR_K_f64 = 0;
    SenAbs_yHL_K_f64 = 0;
end

Implementierte Vereinfachungen

Zur Übersichtlichkeit des Programmcodes wurden Vereinfachungen hauptsächlich an drei Stellen durchgeführt, wo sich die Berechnungsformeln wiederholen. Man kam demnach auf die drei unteren Funktionen, deren Funktionsweisen und Aufrufsorte im Gesamtprogramm im Folgenden detailliert beschrieben stehen.

Funktion NVektoren.m

In dieser Funktion findet die Normierung der der Aufnahmevektoren statt.

Funktion Objekt_Geraden.m

Diese Funktion ist eine Verallgemeinerung zur Positionsbestimmung der verschiedenen Sensoren (Vorderlinks-, Vorderrechts- sowie linke und rechte Hecksensoren). Ferner ermöglicht die Funktion die Einstellungen der Strahlrichtungen.

%% In dieser Funktion werden die Positionen der verschiednen Sensoren behandelt
function [r, u, n, rIR_VR, u_IR_yHR, n_IR_VR, rIR_VR_1, u_IR_VR_1, n_IR_VR_1] = Objekt_Geraden(ObjektKante1, ObjektKante2,ESM_x_I_f64, ESM_y_I_f64,...
Fahrzeug_Rotation,PAR_IR_xVR_x,PAR_IR_xVR_y,ESM_psi_f64)

%% Einnstellung der vorderen und hinteren Sensoren

    
         r = [ObjektKante1(1,1);ObjektKante1(2,1)];% Punkt auf Gerade
         u  = ObjektKante2-ObjektKante1; % Richtung
         n  = [u(2);-u(1)]/norm(u);   % Normal der Richtung

%% Einstellung der rechten Sensoren

   
        rIR_VR  = [[ESM_x_I_f64;ESM_y_I_f64;0]+Fahrzeug_Rotation*[PAR_IR_xVR_x;PAR_IR_xVR_y;0]]; % Montagepunkt Sensor
        u_IR_yHR = [-cos(ESM_psi_f64);-sin(ESM_psi_f64)]; % Richtung
        n_IR_VR = [u_IR_yHR(2);-u_IR_yHR(1)]; % Normal der Richtung

%% Einstellung der linken Hecksensoren

        rIR_VR_1  = [[ESM_x_I_f64;ESM_y_I_f64;0]+Fahrzeug_Rotation*[PAR_IR_xVR_x;PAR_IR_xVR_y;0]]; % Montagepunkt Sensor
        u_IR_VR_1 = [sin(ESM_psi_f64);-cos(ESM_psi_f64)]; % Richtung
        n_IR_VR_1 = [u_IR_VR_1(2);-u_IR_VR_1(1)]; % Normal der Richtung

Funktion KoordinatenNaechsten_Schnittpunkts.m

Es werden in dieser Funktion de verschiedenen Schnittpunkte auf Sensorstrahlwegen berechnet, sowie die entsprechenden Abstände und Koordinaten. Darauf basiert wird die Entscheidung darüber getroffen, ob der Sensor ein Hindernis in seiner Reichweite erkannt hat oder nicht.

Verbesserung der Funktion

Optimierung der neuen Funktion durch die mex-Funktion

Detaillierte Informationen zur Anwendung des Mex-Compilers sind unter folgendem Link zu finden <br\> AEP_-_Autonomes_Einparken

Gegenüberstellung Ausführungszeiten der neuen und alten Funktionen

Zusammenfassung

Die Funktion abstandssensorik.m umfasst das Kernstück der Simulation der Einpark-Sensorik und auch des Einparkmanövers. Ich verständliche Darstellung, was das hauptsächliche Ziel der Aufgabestellung war, vereinfacht nicht nur die Arbeit mit dem Programm, sodern sie ermöglicht auch gewünschte Umstellungen ohne ausführliche Auseinandersetzung mit dem Quelltext und ohne den ganzen Quellcode bei fehlerhaften Umstellungen zu beeinträchtigen.

Testdurchführung: Ansatz mit der entwickelten Test-GUI

Integration in die Offline-Simulation

Literatur

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