El problema con las rotaciones es que la mayoría de las personas piensan en términos de ángulos de Euler, ya que son fáciles de entender.
Sin embargo, la mayoría de la gente olvida el punto de que Euler se inclina son tres ángulos secuenciales . Esto significa que la rotación alrededor del primer eje hará que la siguiente rotación sea relativa a la primera rotación original, por lo tanto, no puede rotar independientemente un vector alrededor de cada uno de los 3 ejes usando ángulos de Euler.
Esto se traduce directamente en matrices cuando multiplica dos matrices, puede pensar que esta multiplicación transforma una matriz en el espacio de la otra matriz.
Esto debe suceder con 3 rotaciones secuenciales, incluso cuando se usan cuaterniones.
Quiero enfatizar el hecho de que los cuaterniones no son una solución para el bloqueo de gimble. En realidad, el bloqueo de gimble siempre sucederá si representó ángulos de Euler usando cuaterniones. El problema no es la representación, el problema es la 3 pasos secuenciales.
¿La solución?
La solución para rotar un vector alrededor de 3 ejes independientemente es combinarlo en un solo eje y un solo ángulo, de esta manera puede deshacerse del paso en el que tiene que hacer una multiplicación secuencial. Esto se traducirá efectivamente en:
Mi matriz de rotación representa el resultado de la rotación alrededor de X e Y y Z.
en lugar de la interpretación de Euler de
Mi matriz de rotación representa la rotación alrededor de X, luego Y y luego Z.
Para aclarar esto, citaré del teorema de rotación de Euler de Wikipedia:
Según el teorema de rotación de Euler, cualquier rotación o secuencia de rotaciones de un cuerpo rígido o sistema de coordenadas sobre un punto fijo es equivalente a una rotación simple por un ángulo dado given sobre un eje fijo (llamado eje de Euler) que atraviesa el punto fijo. El eje de Euler normalmente está representado por un vector unitario u →. Por lo tanto, cualquier rotación en tres dimensiones puede representarse como una combinación de un vector u → y un escalar θ. Los cuaterniones brindan una manera simple de codificar esta representación de eje-ángulo en cuatro números, y aplicar la rotación correspondiente a un vector de posición que representa un punto relativo al origen en R3.
Tenga en cuenta que multiplicar 3 matrices siempre representará 3 rotaciones secuenciales.
Ahora para combinar rotaciones alrededor de 3 ejes, debe obtener un solo eje y ángulos únicos que representen la rotación alrededor de X, Y, Z. En otras palabras, debe usar una representación de eje / ángulo o cuaternión para deshacerse de las rotaciones secuenciales.
Esto generalmente se hace, comenzando con una orientación inicial (la orientación puede considerarse como un ángulo de eje), generalmente representada como un cuaternión o un ángulo de eje, y luego modificando esa orientación para representar su orientación de destino. Por ejemplo, comienza con el quaterion de identidad y luego gira por la diferencia para llegar a la orientación de destino. De esta manera no pierdes ningún grado de libertad.