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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top