PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Vektor von Körpersystem in Erdsystem transformieren



Che Guevara
04.04.2017, 10:22
Hallo,

ich möchte die Daten eines 3-Achs Beschleunigungssensors (Körpersystem) in das Erdsystem übertragen.
Ich kenne die beiden Winkel der Auslenkung aus der Ruhelage, diese in Euler-Winkeln (es treten max. Winkel von 89° auf, also kein Gimbal Lock etc..).
Leider stehe ich etwas auf dem Schlauch und weiß nicht so recht, nach was ich suchen soll.

Vorgestellt hätte ich mir eig folgendes:


NickSin = Sin(NickAngle);
NickCos = Cos(NickAngle);
RollSin = Sin(RollAngle);
RollCos = Cos(RollAngle);

VertWinkel = Sqrt(NickAngle * NickAngle) + Sqrt(RollAngle * RollAngle);
VertSin = Sin(VertWinkel);
VertCos = Cos(VertWinkel);

XAcc = SensorX*NickCos + SensorZ*NickSin;
YAcc = SensorY*RollCos + SensorZ*RollSin;
ZAcc = SensorZ*VertCos + SensorX*NickSin + SensorY*RollSin;


Wird nur in eine Richtung geneigt (also Nick ODER Roll), so stimmen die Werte für ZAcc (vertikale Beschl). Werden aber beide Achsen geneigt, so ist der Wert um bis zu 10% zu klein...
Die Sensoren sind kalibriert, daran kanns nicht liegen.

Vielen Dank & Gruß
Chris

damfino
04.04.2017, 14:34
Versuchs mal damit: Koordinatentransformation (https://de.wikipedia.org/wiki/Koordinatentransformation)

Hast den Code oben aus einer Formelsammlung?

Che Guevara
05.04.2017, 18:13
Hi,

nein der Code ist Selbstgeschrieben (Pseudocode).
Die Drehmatrix bringt mich ein Stück weiter, aber noch nicht ans Ziel...
Ich weiß, dass ich die Winkelhalbierende als Einheitsvektor brauche und den Drehwinkel um den gedreht werden soll.
Mein Problem ist, dass ich die beiden Winkel (Nick & Roll) kenne, um wieviel Grad der Sensor aus der Ruhelage / Nulllage ausgelenkt ist. Daraus müsste ich jetzt einen Vektor machen, daraus die Winkelhalbierende bilden und dann damit weiterrechnen. Stimmt das soweit?
Wenn ja, wie bekomme ich aus den Winkeln einen Vektor?

Vielen Dank & Gruß
Chris

damfino
06.04.2017, 12:35
hast auch die Beschleunigungswerte? Diese wären schon 3 Vektoren aus denen man den resultierenden Vektor berechnet, Koordinatentransformation zum Bezugssystem durchführt und fertig.
Über Winkel, wenn ich es richtig im Kopf habe:
Mit den Daten müsste es ein Vektor im Kugelformat sein, Länge da nur Winkel bekannt sind =1
x= sin(nick)*cos(roll)
y= sin(nick)*sin(roll)
z= cos(roll)


Je nach Winkelfunktion Library brauchst das ganze in Radiant und nicht in Grad.

Bei dem ganzen auf die Winkeldefintion aufpassen, beim Kompass ist im Norden 0°, mathematisch ist "oben" aber 90° und im "Osten" 0°. Das hat mich beim Abgleich mit Kompassdaten ein paar graue Haare gekostet bis ich mein Wissen über Vektoren wieder aufpoliert hatte.

Hatte mir ein paar Beispiele aufgezeichnet (zB 45° Auslenkung), wenn man sich auf 2D beschränkt und genau zeichnet kann man das Ergebnis abmessen und so die Formel überprüfen.

Vielleicht ist hier noch jemand dem Vektorrechnung geläufiger ist?
Bin da schon sehr eingerostet und kann sein das alles Müll ist...