7 votos

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

He digitalizado un vídeo de una mosca volando en un espacio tridimensional.

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

enter image description here

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

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

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

  1. Usando la cabeza y la cola como un vector cabeza --- calculé el ángulo de este vector con el eje Z. Y lo llamé cabeceo. Pero esto funcionaría sólo 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 vector y luego calculé el ángulo de ese vector con el eje Z.

Estoy usando matlab para codificar lo anterior. Sé que hay que hacerlo 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 me ayudaría.....

4voto

Encuentra el vector que va de la cola a la cabeza y lo normaliza: llama al resultado $\hat{Z}^\prime$ .

Encuentra el vector que une el punto del ala izquierda con el punto del ala derecha y lo normaliza: llama al resultado $\hat{Y}^\prime$ .

Opcional: hacer una comprobación de cordura que $\left<\hat{Y}^\prime,\,\hat{Z}^\prime\right>=0$

Calcula ahora $\hat{X}^\prime = \hat{Y}^\prime\times\hat{Z}^\prime$ .

Reúne los tres vectores como vectores columna en la matriz $U = \left(\hat{X}^\prime\, \hat{Y}^\prime\,\hat{Z}^\prime\right)$ . Esta es la matriz de rotación que gira su referencia $\hat{X},\,\hat{Y},\,\hat{Z}$ en la base alineada a la mosca.

Para convertir a ángulos, tenemos que calcular el eje de rotación y el ángulo de rotación. La forma más fácil de hacerlo es mediante la fórmula de Rodrigues para un miembro general $\exp\left(H_{3\times 3}\right)$ de $SO(3)$ "hacia atrás"

$$\exp\left(H_{3\times 3}\right)=I_{3\times3}+\frac{\sin\left(||H_{3\times 3}||\right)}{||H_{3\times 3}||}\,H_{3\times 3} +\frac{1-\cos\left(||H_{3\times 3}||\right)}{||H_{3\times 3}||^2}\,H_{3\times 3}^2\tag{1}$$

donde:

$$H_{3\times3} = \left(\begin{array}{ccc}0&z&-y\\-z&0&x\\y&-x&0\end{array}\right)\tag{2}$$

y

$$||H_{3\times3}||=\sqrt{x^2+y^2+y^2}\tag{3}$$

donde $x,\,y,\,z$ son las componentes del eje de rotación y $\sqrt{x^2+y^2+y^2}$ es el ángulo de rotación en radianes. $H_{3\times3}$ es el miembro del álgebra de Lie $\mathfrak{so}(3)$ que exponga a la matriz de rotación.

Entonces, tomamos la matriz $U$ que encontraste arriba y compáralo con (1): puedes ver en (1) que la parte sesgada-simétrica es:

$$\frac{1}{2}(U-U^T) = \frac{\sin\left(||H_{3\times 3}||\right)}{||H_{3\times 3}||}\,H_{3\times 3}\tag{4}$$

y esto le permitirá leer $H_{3\times3}$ y el ángulo de rotación $||H_{3\times 3}||$ .

Por cierto, si hicieras esto para construir un sistema de seguimiento para la mosca, tendrías que hacer algo como encontrar el mejor ajuste por mínimos cuadrados a los vectores $\hat{Z}^\prime$ y $\hat{Y}^\prime$ Los vectores de datos brutos no serían del todo ortogonales debido a los datos ruidosos. Como alternativa, se podrían elegir 3 puntos sobre la marcha, seguirlos y encontrar $\hat{Z}^\prime$ y $\hat{Y}^\prime$ como base ortogonal de los tres lados del triángulo. En ese caso, no tendrías que hacer el mejor ajuste por mínimos cuadrados, pero tu seguimiento podría ser menos preciso.

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