Frage

Ich frage mich, ob es möglich ist, da die Wiimote hat 3 Beschleunigungsmesser, das Beschleunigungsmesser Lesungen zu einem 3D-Vektor zu konvertieren.

Ich kenne den Trick Pitch / Roll zu extrahieren, aber es nutzt nur das X- und Z-Beschleunigungsmesser, und hat die Gimbal Lock Problem.

Was ich möchte, ist ein Full-3D-Vektor, kann das zu einer quaternion Rotation Darstellung umgewandelt werden.

War es hilfreich?

Lösung

über sie denken weiter, die Beschleunigungswerte sind die Komponenten des Vektors Ich war auf der Suche nach ... Sie nur den kürzesten Bogen zwischen einem Referenzvektor und dieses Vektors als quaternion ausdrücken müssen.

Zum Beispiel, wenn accel ein (normierter) Vektor der Beschleunigungsmesser-Werte enthalten:

reference = Vector3(0, 0, 1)
axis = crossp(accel, reference)
angle = acos(dotp(accel, reference))
q = Quaternion::from_xyzr(axis, angle)
rotation_matrix = q.matrix()

Ich entschied ich für {0, 0, 1} als Referenzvektor, weil sie die Werte des Beschleunigungsmesser in „Ruhestellung“ ist (Wiimote auf einem Tisch, auf Sie zu zeigen).

Dies ergibt die gleiche Art von Bewegungen der X / Z Beschleunigungs Pitch / Roll Umwandlung tut, aber ohne Gimbal Lock an vertikalen Positionen.

Das einzige Problem ist, dass Sie nicht bekommen, Informationen über Drehungen auf der Erde Schwerachse gemacht ... Ich denke, das ist es, was die Motionplus für gemacht wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top