12 votos

¿Cuáles son las ventajas del cuaternión sobre $3\times3$ ¿Matriz rotatoria para representar una rotación arbitraria?

Tengo mucha experiencia representando computacionalmente rotaciones de coordenadas 3D generalizadas utilizando $3\times3$ matriz de rotadores, R = [ nuevoEjeX, nuevoEjeY, nuevoEjeZ ]. Estos se comportan muy bien y son fáciles de pensar y programar. Parecen muy precisos y estables. Para rotaciones arbitrarias continuas, los valores "intermedios" (entre I y R) se pueden calcular extrayendo los ejes de Euler de R (vectores propios de longitud unitaria) y el ángulo de Euler correspondiente. Entonces se puede tomar la raíz enésima de un rotador R para obtener los rotadores intermedios que forman un arco rotacional continuo.

He oído que los cuaterniones también pueden utilizarse para representar rotaciones 3D generalizadas (computacionalmente). ¿Cuáles son las ventajas de hacerlo sobre el $3\times3$ ¿matriz rotatoria? La información se comprime en 4 números reales frente a 9, por lo que la sobrecompresión de la información ¿haría más complicados los algoritmos basados en cuaterniones?

2 votos

¿Bloqueo del cardán? Referencia

3 votos

No veo cómo el bloqueo del cardán es relevante. No existe este fenómeno cuando se utilizan rotadores 3x3 como representación primaria de la rotación 3D. El bloqueo del cardán es un problema con la representación altamente sobrecomprimida que utiliza 3 ángulos de Euler que representan una secuencia de 3 ángulos de rotación de un solo eje (2D) (balanceo, cabeceo, guiñada). Los ángulos no tienen nada que ver con mi pregunta.

11voto

steve Puntos 11

Hay dos operaciones típicas que se realizan con las rotaciones.

  1. Transforma un punto: $p_a = R_{a,b} \cdot p_b$ .
  2. Concatenando dos rotaciones: $R_{a,c} = R_{a,b} \cdot R_{b,c}$

En pocas palabras, la operación 1. es más barata para las matrices de rotación, mientras que la operación 2. es más barata para los cuaterniones unitarios. Por ejemplo, la concatenación de matrices de rotación requiere 27 multiplicaciones, pero sólo 16 para los cuaterniones.

Sin embargo, esto es no la historia completa. Si sólo nos ahorramos un poco de cálculo, ¿para qué molestarse en aprender sobre los cuaterniones y sus fórmulas menos intuitivas?

Supongamos que representamos nuestras rotaciones como matrices de 3x3 $R$ . Con el fin de $R$ para ser una matriz de rotación, tiene que ser ortogonal, es decir $R\cdot R^\top=I$ (y debería sostener que $det(R)=1$ ). Sin embargo, si realizamos una operación de concatenación utilizando aritmética numérica, la matriz 3x3 resultante no es necesariamente ortogonal debido a la precisión numérica, por ejemplo, a errores de redondeo. Este error puede ser pequeño, pero si realizamos un gran número de operaciones de este tipo, el error se acumulará. Un enfoque sería detectar si una matriz no es ortogonal, $R\cdot R^\top\neq I$ y luego reortogonalizar la matriz. Sin embargo, esta operación suele ser cara/compleja, ya que implica una descomposición SVD o un algoritmo similar.

Si se representa una rotación como cuaternión, hay una condición más sencilla: El cuaternión tiene que ser de longitud unitaria. Así, podemos comprobar simplemente si $|q_r^2 + q_x^2 + q_y^2 + q_z^2 - 1|> \epsilon$ y en su caso renormalizar el vector 4 $q$ . Tenga en cuenta que hay incluso formas de realizar esto renormalización sin calcular la raíz cuadrada .

En términos informáticos: Los cuaterniones unitarios tienen un invariante de tipo que las matrices de rotación; las violaciones son más baratas de detectar y el invariante es más barato de aplicar.

Además, cabe mencionar que pasar de un cuaternión unitario a una matriz de rotación 3d es relativamente barato y sencillo . (Ir en sentido contrario es más difícil de conseguir para todos los casos de esquina .) Por lo tanto, puede ser una buena estrategia representar las rotaciones 3d como cuaterniones por defecto. En caso de que necesitemos transformar un gran número de puntos mediante una rotación específica, podemos convertir el cuaternión correspondiente en una matriz de rotación y ahorrarnos algunos cálculos.

Los cuaterniones tienen otras ventajas:

  • Menos almacenamiento: 4 números frente a 9.
  • La interpolación entre dos rotaciones es más barata de calcular para los cuaterniones (por ejemplo, utilizando SLERP) que para las matrices, en las que necesitamos extraer la representación del vector de rotación (ángulo del eje x).

Tenga en cuenta que hay un error común cuando se utilizan cuaterniones: Hay una relación de uno a dos entre la rotación (matrices) en 3d y el cuaternión unitario. Para una matriz de rotación $R$ existen dos cuaterniones unitarios $(q_r, \pm \mathbf{v})$ , donde $q_r$ es la parte real y $\mathbf{v}$ la parte imaginaria/vectorial del cuaternión. Por lo tanto, es un poco más difícil comprobar si dos cuaterniones representan la misma rotación; no basta con comprobar la identidad de los componentes.

0 votos

Gracias, Hauke. Bien explicado. Hay un tema adicional para comparar 3x3 Rs vs. cuaterniones para representar rotaciones 3D arbitrarias. En este ejemplo, el objetivo es inferir una rotación 3D a partir de un par de cuñas de dirección del mismo tamaño, es decir, dados los dos pares de direcciones ordenados (como vectores de dirección 3D): entrada: [ d1 , d2 ] entrada salida: [ d1 , d2 ] out ¿cuál es la rotación 3D desconocida que transforma la cuña de entrada en la de salida? Aquí, ¿"pensar en cuaterniones" resuelve el problema de forma más elegante que pensar en rotadores de 3x3? Voy a dar la solución para 3x3 Rs:

0 votos

La fórmula de Rs no se muestra. ¿Podría publicarla de nuevo?

0 votos

Error tipográfico en el último párrafo. "[...] trampas comunes [...]". Quiere decir "pitanza".

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X