Pregunta

Me pregunto si es posible, ya que el Wiimote tiene 3 acelerómetros, para convertir las lecturas de los acelerómetros en un vector 3D.

Conozco el truco para extraer pitch / roll, pero solo usa los acelerómetros X y Z, y tiene el problema de bloqueo del cardán.

Lo que me gustaría es un vector 3D completo, que se puede convertir en una representación de rotación de cuaternión.

¿Fue útil?

Solución

Pensando en ello, los valores del acelerómetro son los componentes del vector que estaba buscando ... Solo tiene que expresar el arco más corto entre un vector de referencia y este vector como un cuaternión.

Por ejemplo, si accel es un vector (normalizado) que contiene los valores del acelerómetro:

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

Elegí {0, 0, 1} como el vector de referencia, porque son los valores de los acelerómetros en " posición de reposo " (Wiimote en una mesa, apuntando hacia ti).

Esto proporciona el mismo tipo de movimientos que la conversión de cabeceo / balanceo de los acelerómetros X / Z, pero sin bloqueo de cardán en posiciones verticales.

El único problema es que no obtienes información sobre las rotaciones realizadas en el eje de gravedad de la tierra ... Supongo que para eso está hecho el MotionPlus.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top