¿Cómo convertir un vector de velocidad angular durante un período de tiempo a un cuaternión?
Estoy confundido acerca de cómo convertir ángulos de ejes a cuaterniones. En mi caso, quiero convertir un vector de velocidad angular a un cuaternión.
¿Cómo puedo convertir un vector de velocidad angular sobre un periodo de tiempo a un cuaternión utilizando Eigen?
¿Por qué obtengo resultados diferentes con diferentes métodos? ¡No lo entiendo! 🙂
Editar: Obviamente, algo no me cuadra aquí, ¿no es un vector de velocidad angular multiplicado por un tiempo un vector de ángulo que puede transformarse en un cuaternión?
Utilizando los ángulos xyz = [1 2 3] como entrada, obtengo diferentes resultados.
Matlab:
q = angle2quat(1,2,3, ‘XYZ’)
resultado (wxyz): -0.3689 0.7549 -0.2061 0.5015
Eigen:
auto q = AngleAxisd(1.0, Vector3d::UnitX())
* AngleAxisd(2.0, Vector3d::UnitY())
* AngleAxisd(3.0, Vector3d::UnitZ());
resultado (wxyz): -0.368871 0.754934 -0.206149 0.501509
Enfoque en línea https://math.stackexchange.com/questions/39553/how-do-i-apply-an-angular-velocity-vector3-to-a-unit-quaternion-orientation:
auto delta = 1.0;
auto VectorType angularVelocity(1,2,3);
auto norm = angularVelocity.norm();
auto normt = norm * delta / 2.0;
auto w = cos(normt);
auto v = angularVelocity / norm * sin(normt);
return QuaternionType(w, v.x(), v.y(), v.z());
resultado (wxyz): -0.295551 0.255322 0.510644 0.765966
Conversor en línea https://www.andre-gaschler.com/rotationconverter/ “Eje con magnitud de ángulo (radianes)”:
resultado (wxyz): -0.2955511, 0.2553219, 0.5106437, 0.7659656
davy.ai
Para convertir un vector de velocidad angular a un cuaternión utilizando Eigen, puede utilizar la fórmula
q = exp(0.5 * w * dt)
dondew
es el vector de velocidad angular,dt
es la duración del tiempo yexp
es la exponencial matricial. Esto se puede implementar en Eigen de la siguiente manera:Tenga en cuenta que este método asume que la orientación inicial está alineada con el sistema de coordenadas mundial. Si la orientación inicial es diferente, primero es necesario rotar el vector de velocidad angular al sistema de coordenadas mundial.
En cuanto a los diferentes resultados obtenidos con diferentes métodos, puede haber varias razones para esto. Una posibilidad es que los métodos utilicen diferentes convenciones para especificar la rotación (por ejemplo XYZ vs ZYX). Otra posibilidad es que puede haber errores en la implementación o los valores de entrada utilizados. Es importante verificar cuidadosamente la documentación y el código para asegurar la consistencia y la precisión.