5 votos

Visualización de rotaciones elementales mediante ángulos de Euler en Matlab

Me gustaría visualizar las rotaciones elementales utilizando la convención Z-Y-X en Matlab. Si quieres seguirme exactamente, me referiré a un documento Dinámica y control de cuadrotores por Randal Beard.

El marco de coordenadas base, $F^v$ se denomina marco de referencia del vehículo (página 6). Se trata de un marco de referencia cartesiano derecho. Los vectores unitarios en $F^v$ son $x^v, y^v, z^v$ que puede ser visualizado en Matlab utilizando el siguiente script:

x_v = [1;0;0]; %Define unit vectors in vehicle frame
y_v = [0;1;0];
z_v = [0;0;1];
o_v = [x_v'; y_v'; z_v']; %Convert to quiver3 compliant form
quiver3(zeros(3,1), zeros(3,1), zeros(3,1), o_v(:,1), o_v(:,2), o_v(:,3)) %Draw the frame

He escrito una función para crear una Matriz de Coseno de Dirección a partir de los ángulos de Euler, tal y como se define en la página 9 del citado documento:

function dcm = RPY_2_DCM(roll, pitch, yaw)
  cR = cos(roll);  sR = sin(roll);
  cP = cos(pitch); sP = sin(pitch);
  cY = cos(yaw);   sY = sin(yaw);

  dcm = [cP*cY          cP*sY          -sP;
         sR*sP*cY-cR*sY sR*sP*sY+cR*cY sR*cP;
         cR*sP*cY+sR*sY cR*sP*sY-sR*cY cR*cP];
end

Dibujo del vehículo-1 $F^{v1}$ como una rotación alrededor de $z^v$ por ángulo de guiñada con el siguiente script funciona bien (fotograma del vehículo en azul, fotograma del vehículo-1 en verde):

yaw = pi/6;
x_v1 = RPY_2_DCM(0,0,yaw)*x_v; %Draw vehicle-1 coordinate frame obtained by right-handed rotation of F_v around z_v
y_v1 = RPY_2_DCM(0,0,yaw)*y_v;
z_v1 = RPY_2_DCM(0,0,yaw)*z_v;
o_v1 = [x_v1'; y_v1'; z_v1'];
quiver3(zeros(3,1), zeros(3,1), zeros(3,1), o_v1(:,1), o_v1(:,2), o_v1(:,3))

Vehicle-1 frame

Ahora, me gustaría rotar los vectores en $F^{v1}$ alrededor de $y^{v1}$ eje del vehículo-1 añadiendo:

pitch = pi/6;
x_v2 = RPY_2_DCM(0,pitch,0)*x_v1;
y_v2 = RPY_2_DCM(0,pitch,0)*y_v1;
z_v2 = RPY_2_DCM(0,pitch,0)*z_v1;
o_v2 = [x_v2'; y_v2'; z_v2'];
quiver3(zeros(3,1), zeros(3,1), zeros(3,1), o_v2(:,1), o_v2(:,2), o_v2(:,3))

Pero en lugar de girar alrededor de $y^{v1}$ Obtengo una rotación de $F^{v1}$ alrededor de $y^v$ (véase la imagen de abajo, $F^{v2}$ en rojo). ¿Qué estoy haciendo mal?

Vehicle-2 frame

1voto

Kenial Puntos 111

Un poco tarde, pero de todos modos tal vez mi respuesta pueda ayudar a otras personas.

Si quieres realizar rotaciones sobre ejes rotatorios (rotaciones intrínsecas), puedes obtener el mismo resultado invirtiendo el orden de las rotaciones y realizando las rotaciones sobre los ejes fijos (rotaciones extrínsecas), así que si quieres realizar rotaciones intrínsecas sobre el eje Z, luego sobre el nuevo eje Y y finalmente sobre el nuevo eje X puedes rotar sobre el eje x, luego sobre el eje y y finalmente sobre el eje z.

0voto

Ronin Puntos 1

¡Tus matrices de rotación estarán en el orden equivocado de la forma en que lo haces! Matemáticamente es M1*M2*M3*V con M1,M2,M3 siendo la PRIMERA segunda tercera matriz de rotación y V un vector. Así que la primera transformación es la última multiplicación en el vector. En tu ejemplo de la segunda transformación haces M2*M1*V ... orden equivocado... resultado equivocado...

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