Está en la página 1de 5

IV.2.

Escriba programas (funciones) en MATLAB para calcular las matrices de rotación básicas,
dados como parámetros el eje de giro y el ángulo de rotación.
close all,
clear all,
clc,
fprintf('Ingrese el movimiento \n');
fprintf ('Ingrese angulo de rotacion \n ');
teta=input ('Angulo= ');
fprintf('Si desea el eje x presione 1, si desea el eje y presione 2 y
si desea el eje z presione 3\n')
Vec=input('Ingrese el eje= ');
switch (Vec) %DADA LA OPCION SE ESCOGERA UNA OPERACION DIFERENTE PARA
CADA CASO
case (1) %SI ME DAN A ESCOGER EL EJE X
T= eleccejeX (teta); %TENGO UNA FUNCION QUE DESARROLLARA LA
MATRIZ CON EL ANGULO DADO
disp(T) %SE ME MOSTRARA DICHA MATRIZ
case (2)
T= eleccejeY (teta);
disp(T)
case (3)
T=eleccejeZ (teta);
disp(T)
otherwise %EN EL CASO QUE NO SE COLOQUE LAS OPCIONES DADAS
disp('No has elegido bien')
end
Mov=input('Ingrese 1 si quiere hacer otro movimiento de lo contrario 0
\n');
while (Mov==1) %ESTE CICLO SEGUIRA MIENTRAS SE SELECCIONE 1
fprintf ('Ingrese angulo de rotacion \n ');
teta=input ('Angulo= ');
fprintf('Si desea el eje x presione 1, si desea el eje y presione 2 y
si desea el eje z presione 3\n')
Vec=input('Ingrese el eje= ');
switch (Vec)
case (1)
R= eleccejeX (teta);
disp(R)
case (2)
R= eleccejeY (teta);
disp(R)
case (3)
R=eleccejeZ (teta);
disp(R)
end
D= input('Ingrese 1 si es fijo, si es movil 0 \n');
if (D==1)
T=R*T; % T FUE LA PRIMERA MATRIZ ALMACENADA Y A ESA MATRIZ SE LE
PREMULTIPLICARA LA NUEVA MATRIZ QUE SERA R
%Y ESA MULTIPLICACION SERA LA NUEVA T ALMACENADA PARA CONTINUAR LAS
PRE O
%POST MULTIPLICACIONES SEGUN SEA EL CASO
disp(T)
else
T=T*R;
disp(T)
end
Mov=input('Ingrese 1 si quiere hacer otro movimiento de lo contrario 0
\n');% ES IMPORTANTE VOLVER A PREGUNTAR
%O MOV SEGUIRA SIENDO 1 SIEMPRE Y EL BUCLE SERA INFINITO
end

CODIGO DE LAS FUNCIONES


function [R]= eleccejeX (teta) %FUNCION PARA HALLAR LA MATRIZ EN EL
EJE X
%SU ENTRADA SERA UNICAMENTE EL ANGULO
% ES IMPORTANTE PONER COSD O SIND PARA ANGULO EN GRADOS
%LA SALIDA SE ALMACENARA EN LA VARIABLE R
R=[1 0 0; 0 cosd(teta) -sind(teta); 0 sind(teta) cosd(teta)];
end

Se realizó el mismo procedimiento para cada eje.

IV.3. Escriba programas (funciones) en MATLAB para calcular las matrices de rotación
básicas, dados como parámetros el eje de giro y el ángulo de rotación, en forma simbólica.
close all,
clear all,
clc,
fprintf('Ingrese el movimiento \n');
fprintf ('teta es el angulo de x, phi para y, y zhi para z \n');
syms teta phi zhi %sysms es una funcion de matlab para guardar
variables en forma simbolica
Vec=input('Ingrese el eje= ','s');%La función input acepta un
argumento extra como indicativo
%de que lo introducido será una cadena de texto
%para ello se añade una 's' como segundo argumento
switch (Vec) %DADA LA OPCION SE ESCOGERA UNA OPERACION DIFERENTE PARA
CADA CASO

case ('x') %Ahora si escoge el eje en la forma simbolica de x

T=[1 0 0; 0 cos(teta) -sin(teta); 0 sin(teta)


cos(teta)];%hacemos una modificacion
%no podemos usar el cosd por que eso acepta angulos en grados
%una vez lo dejamos como cos o sin aceptara nuestra variable
%simbolica
disp(T) %SE ME MOSTRARA DICHA MATRIZ
case ('y')
T=[cos(phi) 0 sin(phi); 0 1 0 ; -sin(phi) 0 cos(phi)];
disp(T)
case ('z')
T=[cos(zhi) -sin(zhi) 0; sin(zhi) cos(zhi) 0; 0 0 1];
disp(T)
otherwise %EN EL CASO QUE NO SE COLOQUE LAS OPCIONES DADAS
disp('No has elegido bien')
end
Mov=input('Ingrese 1 si quiere hacer otro movimiento de lo contrario 0
\n');
while (Mov==1) %ESTE CICLO SEGUIRA MIENTRAS SE SELECCIONE 1

syms teta phi zhi


Vec=input('Ingrese el eje= ','s');%Se le agrega el s para que acepte
letras
switch (Vec)
case ('x')
R=[1 0 0; 0 cos(teta) -sin(teta); 0 sin(teta) cos(teta)];
disp(R)
case ('y')
R=[cos(phi) 0 sin(phi); 0 1 0 ; -sin(phi) 0 cos(phi)];

disp(R)
case ('z')
R=[cos(zhi) -sin(zhi) 0; sin(zhi) cos(zhi) 0; 0 0 1];
disp(R)
end
D= input('Ingrese 1 si es fijo, si es movil 0 \n');
if (D==1)
T=R*T; % T FUE LA PRIMERA MATRIZ ALMACENADA Y A ESA MATRIZ SE LE
PREMULTIPLICARA LA NUEVA MATRIZ QUE SERA R
%Y ESA MULTIPLICACION SERA LA NUEVA T ALMACENADA PARA CONTINUAR LAS
PRE O
%POST MULTIPLICACIONES SEGUN SEA EL CASO
disp(T)
else
T=T*R;
disp(T)
end
Mov=input('Ingrese 1 si quiere hacer otro movimiento de lo contrario 0
\n');% ES IMPORTANTE VOLVER A PREGUNTAR
%O MOV SEGUIRA SIENDO 1 SIEMPRE Y EL BUCLE SERA INFINITO
end

IV.4. Solucione el problema del ítem IV.1 empleando las funciones implementadas en los dos
ítems anteriores.Contrastar los resultados obtenidos con el resultado teórico.

Primera comparación de resultados.


Segunda comparación en forma simbólica.

IV.5. Desarrollar un programa en MATLAB que permita realizar composición de matrices de


rotación y se adapte a la solución de problemas de orientación espacial empleando esta
herramienta. El programa proporcionará respuestas numéricas y respuestas simbólicas
según sea el problema.
IV.6. Deducir la matriz que representa la rotación de un ángulo de 45º alrededor de un eje
dado por el vector k=[1,1,2]T . Obtener los ángulos roll, pitch y yaw alrededor de los ejes
principales del S.R. que orientan el S.R. de la misma forma que esta rotación alrededor del
eje k. Revisar la posibilidad de emplear MATLAB en la solución del problema.

IV.7. Escriba un programa en MATLAB para calcular la matriz de rotación R cuando el usuario
introduzca los ángulos de Euler XYZ

IV.8. Escriba un programa MATLAB que calcule los ángulos de Euler XYZ cuando el usuario
introduzca la matriz de rotación R.

IV.9. Escriba programas (funciones) en MATLAB para solucionar problemas de orientación


espacial con cuaternios y su algebra, tanto en forma numérica como simbólica.

IV.10. Obtener el cuaternio que representa una rotación de 90° sobre el eje k(3,-2,1).
Rot(k,90°). Aplique sus funciones Matlab para las operaciones de la solución. Luego crear un
script solución del problema. Contraste sus resultados con la respuesta analítica.

También podría gustarte