Question

Je me demande s'il est possible, étant donné que la Wiimote dispose de 3 accéléromètres, de convertir les lectures des accéléromètres en un vecteur 3D.

Je connais le truc pour extraire la hauteur / roulis, mais il utilise uniquement les accéléromètres X et Z, et présente le problème de blocage de la nacelle.

Ce que je voudrais, c’est un vecteur 3D intégral pouvant être converti en une représentation de rotation de quaternion.

Était-ce utile?

La solution

En y réfléchissant plus avant, les valeurs des accéléromètres sont les composants 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 vecteur (normalisé) 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 il s'agit des valeurs des accéléromètres en position "au repos". (Wiimote sur une table, pointant vers vous).

Cela donne le même genre de mouvements que la conversion pas / roulis des accéléromètres X / Z, mais sans blocage de la nacelle en position verticale.

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 pour cela que MotionPlus est conçu.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top