Go Down

Topic: Quaternion zu EulerWinkel umrechnen (Read 6 times) previous topic - next topic

Ketchup

May 14, 2012, 07:31 pm Last Edit: May 14, 2012, 10:35 pm by Ketchup Reason: 1
Hallo

Ich experimentiere mit einem MPU6050
Als Bibliothek und BeispielCode verwende ich Dieses.
Die Ausgabe der Fusionierten Daten sind Quaternion:

Code: [Select]
// display quaternion values in easy matrix form: [w, x, y, z]
       q[0] = (float)((fifoBuffer[0] << 8) + fifoBuffer[1]) / 16384;
       q[1] = (float)((fifoBuffer[4] << 8) + fifoBuffer[5]) / 16384;
       q[2] = (float)((fifoBuffer[8] << 8) + fifoBuffer[9]) / 16384;
       q[3] = (float)((fifoBuffer[12] << 8) + fifoBuffer[13]) / 16384;


Nun müsste ich diese in EulerWinkel umrechnen damit ich PID Regler für 3 Achsen nutzen kann.
Mit dem was ich bis jetzt darüber gefunden habe komme ich noch nicht zurecht.

Für eure Hilfe wäre ich sehr dankbar.

Gruss Kay

Udo Klein

Also in Wikipedia findest Du hier http://de.wikipedia.org/wiki/Quaternion#Drehungen_im_dreidimensionalen_Raum die Abbildung zwischen Quaternionen und Rotationsmatrizen. Und hier http://de.wikipedia.org/wiki/Eulersche_Winkel die Abbildung von Rotationsmatrizen und Eulerscher Winkeldarstellung. Was mir allerdings nicht klar ist: wieso willst Du überhaupt umrechnen. Laut der Beschreibung auf dem von Dir angegebenen Link:

Quote

Digital-output of 6 or 9-axis MotionFusion data in rotation matrix, quaternion, Euler Angle, or raw data format


D.h. das Teil sollte direkt die von Dir gewünschten Daten liefern können.
Check out my experiments http://blog.blinkenlight.net

Ketchup

#2
May 15, 2012, 05:09 pm Last Edit: May 15, 2012, 05:11 pm by Ketchup Reason: 1
Danke für die Links.
Ist ziemlich harter Stoff für mich.

Deine Idee die Euler Winkel direkt auszulesen ist natürlich die eleganteste Lösung.
Leider habe ich kein Beispiel gefunden.

Die Rohdaten liest sich so (MPU6050_raw Bibliothek):

Code: [Select]
// read raw accel/gyro measurements from device
   accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);

   // these methods (and a few others) are also available
   //accelgyro.getAcceleration(&ax, &ay, &az);
   //accelgyro.getRotation(&gx, &gy, &gz);


Die Quaternion so wie oben beschrieben.

Hier habe ich nichts gefunden:
http://www.invensense.com/mems/gyro/documents/RM-MPU-6000A.pdf

Wenn du eine Idee hast wie man die Euler Winkel ausliesst, das wäre natürlich super.

Gruss Kay

Udo Klein

Also ich hätte erwartet, dass
Code: [Select]
accelgyro.getRotation(&gx, &gy, &gz); genau die von Dir gewünschten Winkel liefert. Wieso gehst Du davon aus, dass das nicht so ist?
Check out my experiments http://blog.blinkenlight.net

Ketchup

Leider Nein.

Ich hatte das getestet.

Dieses gibt nur die ACC Werte:
Code: [Select]
accelgyro.getAcceleration(&ax, &ay, &az);

Und diese die Gyro Werte:
Code: [Select]
accelgyro.getRotation(&gx, &gy, &gz);

Hast du eventuell noch eine Idee?

Gruss Kay

Go Up