Estoy usando la biblioteca Bullet Physic para programar alguna función, donde tengo la diferencia entre la orientación del giroscopio dada en cuaterniones y la orientación de mi objeto, y el tiempo entre cada cuadro en milisegundos. Todo lo que quiero es establecer la orientación de mi giroscopio a la orientación de mi objeto en el espacio 3D. Pero todo lo que puedo hacer es establecer la velocidad angular a mi objeto. Tengo la diferencia de orientación y el tiempo, es por eso que necesito vector de velocidad angular [Wx,Wy,Wz] de eso.
Después de leer esto: angularVelocidadArtículo1 y esto: angularVelocidadArtículo2
Hice algo así:
btQuaternion diffQuater = gyroQuater - boxQuater;
btQuaternion diffConjQuater;
diffConjQuater.setX(-(diffQuater.x()));
diffConjQuater.setY(-(diffQuater.y()));
diffConjQuater.setZ(-(diffQuater.z()));
////////////////
//W(t) = 2 * dq(t) /dt * conj(q(t))
btQuaternion velQuater;
velQuater = ((diffQuater * 2) / d_time) * diffConjQuater;
Pero no funciona como espero, es decir, está escrito, la parte vectorial del cuaternión resultante debe ser el vector de la velocidad angular, y la parte escalar debe ser 0, pero mi resultado no es así.
vector de velocidad angular representado como cuaternión con parte escalar cero, es decir W (t ) = (0, W x (t ), W y (t ), W z (t ))
¿Alguna idea?