Quantcast
Channel: Matlab – Motorblog
Viewing all articles
Browse latest Browse all 15

[Tutorial] Ermittlung der Rotationsmatrix zur Transformation zwischen sensorfestem und fahrzeugfestem Koordinatensystem

0
0

Viele interessante Artikel befassen sich mit der Rotationsmatrix und wie man diese zur Transformation zwischen Koordinatensystemen verwenden kann. Für meinen konkreten Anwendungsfall – der Auswertung von fahrdynamischen Messdaten im Fahrzeugbetrieb – konnte ich jedoch kein “Kochrezept” finden welches mir bei der Umrechnung von gemessenen Beschleunigungswerten aus dem gedrehten, sensorfesten Koordinatensystem in das fahrzeugfeste Koordinantensystem weiterhelfen konnte.

Darstellung der Smartphone-Position und der daraus resultierenden Verschiebung der Beschleunigungsachsen zwischen sensorfestem und fahrzeugfestem Koordinatensystem

 

Auf meinem Weg der Informationsbeschaffung bin ich unter anderen auch immer wieder auf den Motorblog-Beitrag von Paul Balzer und die Verlesungsvideos von Prof. Dr.-Ing. Jörg J. Buchholz zurückgekommen und habe im direkten Austausch wertvolle Tipps erhalten. Dabei ist auch das Angebot dieses Gastbeitrags entstanden, welches ich hiermit gerne wahrnehme um zu erläutern mit welcher Verfahrensweise ich einen Lösungsweg gefunden habe.

Vorbereitung & Toolkette

Die Signalaufzeichnung der Messfahrt erfolgt mit einem im Fahrzeug beliebig, aber fest montierten Android-Smartphone (Samsung Galaxy S6) und der App OBDLink, welche mittels zugehörigem OBD-Adapter neben den fahrzeugseitigen OBD-Signalen auch die smartphoneinternen Sensorwerte aufzeichnet. Als Entwicklungsumgebung zum Postprocessing setze ich Matlab/Simulink ein. Die Berechnungen erfolgen mittels Simulink-Modellen und eingebetteten Matlab Skript-Files vor allem auf Basis der drei zentralen Beschleunigungssensorsignale X,Y und Z.

Simulink Modellübersicht: Die Berechnungsschritte werden durch den Modellblock der Situationserkennung (blau) getriggert. In den cyan-farbenen Submodell-Blöcken erfolgt die Bestimmung der Achsen- und Ebenenlage, aus welchen im Anschluss mittels der orange eingefärbten Blöcke die Einheitsvektoren als Eingangsgrößen für die Bildung der Rotationsmatrix (grün) berechnet werden. Das Ergebnis ist eine 3×3-Rotationsmatrix.

 

Zur nachgelagerten Verifikation der Berechnungsmethodik ist ein weiteres, kalibriertes Messsystem fahrzeugfest verbaut. Die Signalaufzeichnung erfolgt über ein separates, windowsbasiertes System und wird im Vorfeld der Berechnungen mit der Smartphone-Messung zeitsynchron gestellt.

Vergleich der Geschwindigkeitssignale beider Messysteme zur Zeitsynchronisierung (oben). Die Beschleunigungswerte in Längsrichtung (mitte) und Querrichtung (unten) zeigen die Achsenverschiebung zwischen sensorfestem Koordinatensystem (rot) und fahrzeugfestem Koordinatensystem (blau)

 

Voraussetzungen für eine korrekte Koordinatentransformation mit der gewählten Berechnungsmethodik sind wie folgt:

  • Das Fahrzeug steht auf einer in Längs- und Querrichtung ebenen Fläche (X- und Y-Werte des Beschleunigungssensors zeigen 0 m/s² wenn das Messgerät auf der Straße liegt)
  • Das Messgerät ist im Fahrzeug beliebig positioniert und fest fixiert
  • Es wird nach kurzer Standphase eine Beschleunigung in Geradeausfahrt ohne Lenkbewegung durchgeführt

 

Schritt 1: Bestimmung der fahrzeugfesten Z-Achse

Wir beginnen unsere mathematische Reise mit einer einfache Mittelwertbildung. In einem über die Situationserkennung definierten Zeitfenster werden die Mittelwerte der sensorfesten XYZ-Beschleunigungswerte sowie der zugehörige Vektorbetrag (=Gravitationskonstante) ermittelt. Neben dem Nullvektor [0;0;0] ist nun ein zweiter Vektor mit fahrzeugfester Z-Ausrichtung definiert. Wir kennen nun die Lage unserer Fahrzeughochachse.

 

Schritt 2: Bestimmung der fahrzeugfesten XZ-Ebene & XY-Ebene

Im zweiten Schritt erhöhen wir die Dimension und bilden eine fahrzeugfeste XZ-Ebene, indem wir durch ein Beschleunigungsmanöver ohne Queranteil (keine Lenkbewegung) in die Richtung der fahrzeugfesten X-Achse eine Messpunktewolke generieren. Diese setzt sich aus einem Gravitationsanteil in Richtung der ermittelten Z-Achse sowie dem Längsbeschleunigungsanteil in X-Richtung zusammen. Aus diesem Grund ist es erforderlich, den Z-Anteil durch Projektion der Punktewolke auf die Orthogonalebene (XY-Ebene bzw. LQ-Ebene) zu eliminieren um einen Vektor in Richtung der X-Achse zu erhalten.

Hierfür nutzen wir die Vektoralgebra für geometrische Anwendungen. Folgende Formel projiziert einen Vektor P zu Po auf die Orthogonalebene entlang der Z-Achse:

\(P_0 = P+\lambda \cdot Z\)

Der zugehörige Berechnungsblock verwendet entsprechend als Eingangsignale den Z-Vektor zum Aufspannen der Projektionsrichtung sowie die jeweiligen XYZ-Werte der Punktewolke.

 

Im Subblock werden die jeweiligen Vektorwerte der Punktewolke mit dem berechneten Lambda-Wert multipliziert und auf die Orthogonalebene projiziert.

 

Die Lambda-Berechnung ist in Simulink wie folgt umgesetzt:

 

Schritt 3: Bestimmung der fahrzeugfesten X-Achse

Nachdem die im dreidimensionalen Raum ermittelte XYZ-Punktewolke der Beschleunigungswerte auf die zweidimensionale Projektionsebene (fahrzeugfeste XY-Ebene) übertragen worden sind, geht es an die Bestimmung der horizontalen Ausrichtung der Längsbeschleunigungsachse (fahrzeugfeste X-Achse).

Hierzu werden die Methoden der Matrixdrehung um eine Achsengerade durch den Ursprung im R3 mit der Ermittlung der Standardabweichung kombiniert. Zum besseren Verständnis ist die Darstellung dieser Seite sehr hilfreich.

Zunächst wird als erste Richtungsannäherung der Längsbeschleunigungsachse das erste XYZ-Werteset aus der Situationserkennung als Referenzwinkel verwendet. Basierend auf diesem Referenzwinkel werden in beide Richtungen jeweils 90° aufgespannt und im Anschluss im 1°-Raster bzgl. der Abweichung zur projizierten Punktewolke berechnet.

Aufgrund der zeitunabhängigen Berechnung wird für die Ermittlung der resultierenden XYZ-Werte der fahrzeugfesten X-Achse folgendes, eingebettete Matlab M-Skript ausgeführt:

resultMatrix = [];
dmin = 99999;

%For-Schleife für Winkelgeraden
for i = 1:length(Rvt_simout.signals.values(:,1))                           
    resultMatrix(i,1) = i-1;                                                      
    dsum = 0;

    %For-Schleife zur Berechnung der Abstände zwischen x-Punkten auf der Orthogonalebene und Winkelgerade
    for j = 1:length(Pdot_simout.signals.values(:,1))                      
        
        %Bestimmung x-Vektor auf Orthogonalebene
        Qx = Pdot_simout.signals.values(j,1);
        Qy = Pdot_simout.signals.values(j,2);
        Qz = Pdot_simout.signals.values(j,3);
        
        %Bestimmung Einheitsvektor je Winkelgrad
        Rex = Rvt_simout.signals.values(i,1);
        Rey = Rvt_simout.signals.values(i,2);
        Rez = Rvt_simout.signals.values(i,3);
        
        %Berechnung Abweichung pro x-Vektor zum Winkeleinheitsvektor
        dx = Rey * Qz - Rez * Qy;
        dy = Rez * Qx - Rex * Qz;
        dz = Rex * Qy - Rey * Qx;
        
        %Vektorbetragbildung
        Vd = sqrt(dx^2+dy^2+dz^2);
        VRe = sqrt(Rex^2+Rey^2+Rez^2);
        
        %Abstandsberechnung
        d = Vd/VRe;
        
        %Summenbildung der Abstände pro Winkelwert
        dsum = dsum + d;                                                    
        
        %Ergebnismatrix
        resultMatrix(i,2) = Qx;
        resultMatrix(i,3) = Qy;
        resultMatrix(i,4) = Qz;
        resultMatrix(i,5) = Rex;
        resultMatrix(i,6) = Rey;
        resultMatrix(i,7) = Rez;
        resultMatrix(i,8) = dx;
        resultMatrix(i,9) = dy;
        resultMatrix(i,10) = dz;
    end
    dsum = dsum / length(Pdot_simout.signals.values(:,1));

    % Ermittlung Minimalabstand inkl. Vektorkoordinaten für Einheitsvektor der Winkelgeraden
    if dsum < dmin
        dmin = dsum;
        Lonx = Rex;
        Lony = Rey;
        Lonz = Rez;
        Angledeg = i-1;
        Anglerad = Angledeg * pi / 180;
        Result = [Lonx, Lony, Lonz];
        disp(Result)
    end
end

Im dargestellten Beispiel liegt die geringste Abweichung bei 86° und somit 4° abweichend zum initialen Referenzwinkel. In der Polarplot-Darstellung sind die resultierenden Abweichungen mit dem Minimum bei 86° dargestellt.

Das Ergebnis der Berechnung sind die XYZ-Werte des fahrzeugfesten x-Einheitsvektors (LonX, LonY, LonZ), welche in diesem Beispiel der cyanfarbenen Raute bei 86° im linken Plot entspricht.

 

Schritt 4: Bestimmung der fahrzeugfesten Y-Achse

Nachdem mittlerweile die Einheitsvektoren zur fahrzeugfesten Z-Achse und X-Achse bekannt sind, ist es ein leichtes den fehlenden Einheitsvektor der fahrzeugfesten Y-Achse zu ermitteln, indem das Kreuzprodukt der beiden bekannten Einheitsvektoren gebildet wird.

 

Schritt 5: Bestimmung der Rotationsmatrix

Jetzt liegen alle benötigten Informationen vor um die Rotationsmatrix zu befüllen, mit welcher im Anschluss alle sensorfesten xyz-Beschleunigungswerte in das fahrzeugfeste Koordinatensystem transformiert werden können.

 

Verwendung der Rotationsmatrix zur Koordinatentransformation

Die generierte 3×3-Rotationsmatrix wird nun mittels Matrixmultiplikation mit den sensorfesten Messwerten multipliziert. Die Transformation in das fahrzeugfeste Koordinatensystem kann durchgeführt werden.

 

Verifikation der Berechnungsmethodik

Nach Anwendung der oben beschriebenen Transformationsberechnungen sieht das zu Beginn des Artikels gezeigte Diagramm deutlich besser aus. Die sensorseitig aufgezeichneten x-Werte entsprechen den Werten der Fahrzeuglängsbeschleunigung, die y-Werte sind in korrekter Achsenrichtung dargestellt.

Im Details kann man an den Querbeschleunigungsdaten erkennen, wie wichtig eine in x- und y-Richtung waagerechte Referenzfläche ist. Während der Lagekalibrierung ist das Fahrzeug auf einer Fläche mit leichter Neigung gestanden, so dass in dieser Messung ein Offset von 0,2m/s² zwischen realer Querbeschleunigung und der sensorseitig ermittelten und transformierten vorhanden ist.

Für die Bestätigung der Wirksamkeit der Berechnungsmethode ist dies jedoch nicht entscheidend.

 

Zum Author:

Lars ist Entwicklungsingenieur in der Automobilbranche und beschäftigt sich in seiner Freizeit u.a. mit fahrdynamischen Aspekten der Messdaten-Auswertung aus Fahrzeugversuchen.


Viewing all articles
Browse latest Browse all 15

Latest Images

Trending Articles





Latest Images