Cómo calcular los ángulos de balanceo, guiñada y cabeceo a partir de coordenadas 3D (Ángulos de Euler)

He digitalizado un video de una mosca volando en un espacio tridimensional.

En todo momento conozco las coordenadas x, y y z de los siguientes puntos en el cuerpo de la mosca ---

ingrese la descripción de la imagen aquí

Los puntos son mi elección, y los puntos se pueden colocar en cualquier otro lugar, cualquier número de veces.

Ahora, usando estos puntos, deseo conocer los ángulos del cuerpo (guiñada, cabeceo y balanceo) de la mosca con respecto a un eje fijo.

He intentado lo siguiente (que creo que está mal).

  1. Usando la cabeza y la cola como vector de cabeza --- calculé el ángulo de este vector con el eje Z. Y lo llamé tono. Pero esto funcionaría solo en ciertas circunstancias... no quiero entrar en detalles.
  2. Hice lo mismo que arriba para el balanceo excepto que usé las dos bases de las alas como un vector y luego calculé el ángulo de ese vector con el eje Z.

Estoy usando matlab para codificar lo anterior. Sé que tiene que hacerse con ángulos de Euler como en la figura que se muestra aquí:

http://mathworld.wolfram.com/EulerAngles.html

Pero no sé cómo proceder con todas las coordenadas 3D que tengo. Un poco de orientación ayudaría.....

Usar los vectores cola-cabeza y ala-ala es lo correcto: solo tiene que cambiar el orden (y reconocer que siempre habrá ciertas orientaciones que conducen al "bloqueo del cardán". Miraría hacia abajo desde arriba, rotaría el vector de la cabeza sobre Z primero (apunte al plano XZ), luego inclínelo para que apunte a lo largo del eje Z, y finalmente gire el vector del ala (ahora apuntando en una dirección diferente) a lo largo del eje X. Esto le da una matriz de rotación única desde que se puede obtener los ángulos de Euler.

Respuestas (1)

Encuentre el vector que corre de la cola a la cabeza y normalícelo: llame al resultado Z ^ .

Encuentre el vector que une el punto del ala izquierda con el punto del ala derecha y normalícelo: llame al resultado Y ^ .

Opcional: verifique la cordura de que Y ^ , Z ^ = 0

ahora calcula X ^ = Y ^ × Z ^ .

Reúna los tres vectores como vectores de columna en la matriz tu = ( X ^ Y ^ Z ^ ) . Esta es la matriz de rotación que rota tu referencia. X ^ , Y ^ , Z ^ base en la base alineada con la marcha.

Para convertir a ángulos, necesitamos calcular el eje de rotación y el ángulo de rotación. Esto se hace más fácilmente observando la fórmula de Rodrigues para un miembro general Exp ( H 3 × 3 ) de S O ( 3 ) "hacia atrás"

(1) Exp ( H 3 × 3 ) = I 3 × 3 + pecado ( | | H 3 × 3 | | ) | | H 3 × 3 | | H 3 × 3 + 1 porque ( | | H 3 × 3 | | ) | | H 3 × 3 | | 2 H 3 × 3 2

dónde:

(2) H 3 × 3 = ( 0 z y z 0 X y X 0 )

y

(3) | | H 3 × 3 | | = X 2 + y 2 + y 2

dónde X , y , z son las componentes del eje de rotación y X 2 + y 2 + y 2 es el ángulo de rotación en radianes. H 3 × 3 es el miembro del álgebra de Lie s o ( 3 ) que exponencia a la matriz de rotación.

Entonces tomamos la matriz tu que encontró arriba y compárelo con (1): puede ver en (1) que la parte simétrica sesgada es:

(4) 1 2 ( tu tu T ) = pecado ( | | H 3 × 3 | | ) | | H 3 × 3 | | H 3 × 3

y esto te permitirá leer H 3 × 3 y el ángulo de rotación | | H 3 × 3 | | .

Por cierto, si estuviera haciendo esto para construir un sistema de seguimiento para la mosca, necesitaría hacer algo como encontrar los mínimos cuadrados que mejor se ajusten a los vectores. Z ^ y Y ^ : los vectores de datos sin procesar no serían del todo ortogonales debido a los datos ruidosos. Alternativamente, puede elegir 3 puntos sobre la marcha, rastrearlos y encontrar Z ^ y Y ^ como base ortogonal de los tres lados del triángulo. Entonces no tendría que hacer el mejor ajuste de mínimos cuadrados, pero su seguimiento podría ser menos preciso.

En cuanto al "ajuste de mínimos cuadrados", estoy de acuerdo en que los dos vectores no serán (bastante) ortogonales, y que los mínimos cuadrados (o restando la proyección de b sobre a de b y renormalizando, si a se considera la dirección de referencia) es un buen enfoque.
@WetSavanna & Floris Estoy un poco confundido con lo que quieres decir con "donde x, y, z son los componentes del eje de rotación". Son x, y y z los ángulos de rotación necesarios para transformar el eje de rotación en uno fijo. Si es así, ¿cuál es el orden de transformación? Además, estaba buscando una rotación intrínseca con los ángulos de Bryan Tait. Es más como rotar primero sobre x, luego sobre y, y luego sobre z. Entonces podría llamarlos cabeceo, balanceo y guiñada. ¿Su solución proporciona esos ángulos?
@BlackDagger Las coordenadas que te he mostrado son el eje de rotación de rotación y un solo ángulo. Conozco estas coordenadas como coordenadas "geodésicas" o "exponenciales" para el grupo de Lie S O ( 3 ) . Estoy un poco ocupado en este momento para escribir una respuesta completa a la conversión: vea lo que puede encontrar y si no tiene éxito, me comunicaré con usted. Si lo olvido, puede encontrar mis datos de contacto en mi sitio web, así que envíeme un correo electrónico.
@BlackDagger Debería pensar que este artículo te da lo que necesitas, una vez que tienes Y ^ y Z ^ No es que haya ángulos de Tait Bryan discutidos allí. Estas últimas también se llaman coordenadas canónicas de segundo tipo para S O ( 3 ) (Las coordenadas geodésicas que encontré arriba también se llaman "coordenadas canónicas de primer tipo").
@WetSavannaAnimalakaRodVance ¡Necesito tu ayuda! --- física.stackexchange.com/questions/123522/ …