2009-07-31 28 views
2

Je me demande s'il est possible, comme la Wiimote possède 3 accéléromètres, de convertir les lectures d'accéléromètres en un vecteur 3D.L'orientation de la Wiimote en tant que vecteur 3D

Je connais l'astuce pour extraire le tangage/roulis, mais il utilise seulement les accéléromètres X et Z, et a le problème de verrou de cardan.

Ce que je voudrais est un vecteur 3D complet, qui peut être converti en une représentation de rotation de quaternion.

+0

Wii MotionPlus offre un contrôle plus fin. – geowa4

+0

Oui, je sais, mais je me demande pourquoi vous ne pouvez pas obtenir une information en 3 dimensions à partir de quelque chose qui a 3 capteurs indépendants ... –

Répondre

1

En y réfléchissant davantage, les valeurs des accéléromètres sont les composantes du vecteur que je cherchais ... Il suffit d'exprimer l'arc le plus court entre un vecteur de référence et ce vecteur en tant que quaternion.

Par exemple, si accel est un (normalisé) vecteur contenant les valeurs de l'accéléromètre:

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

J'ai choisi {0, 0, 1} comme vecteur de référence, car ce sont les valeurs des accéléromètres à "position de repos" (Wiimote sur une table, pointant vers vous). Cela donne le même genre de mouvements que la conversion pitch/roll des accéléromètres X/Z, mais sans verrouillage à la cardan dans les positions verticales. Le seul problème est que vous n'obtenez pas d'informations sur les rotations effectuées sur l'axe de gravité de la Terre ... Je suppose que c'est ce que le MotionPlus est fait pour.