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))
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?