Orientamento Wiimote come vettore 3D
-
06-07-2019 - |
Domanda
Mi chiedo se sia possibile, poiché il Wiimote ha 3 accelerometri, per convertire le letture degli accelerometri in un vettore 3D.
Conosco il trucco per estrarre il pitch / roll, ma usa solo gli accelerometri X e Z e ha il problema del blocco del gimbal.
Quello che vorrei è un vettore 3D completo, che può essere convertito in una rappresentazione a rotazione quaternione.
Soluzione
Ripensandoci ulteriormente, i valori degli accelerometri sono i componenti del vettore che stavo cercando ... Devi solo esprimere l'arco più corto tra un vettore di riferimento e questo vettore come quaternione.
Ad esempio, se accel
è un vettore (normalizzato) contenente i valori dell'accelerometro:
reference = Vector3(0, 0, 1)
axis = crossp(accel, reference)
angle = acos(dotp(accel, reference))
q = Quaternion::from_xyzr(axis, angle)
rotation_matrix = q.matrix()
Ho scelto {0, 0, 1} come vettore di riferimento, perché sono i valori degli accelerometri in "posizione di riposo". (Wiimote su un tavolo, che punta verso di te).
Questo fornisce lo stesso tipo di movimenti della conversione pitch / roll degli accelerometri X / Z, ma senza blocco del gimbal in posizione verticale.
L'unico problema è che non si ottengono informazioni sulle rotazioni effettuate sull'asse di gravità terrestre ... Immagino che sia per questo che MotionPlus è fatto.