Beruflich Dokumente
Kultur Dokumente
PRCTICA #3:
HERRAMIENTAS DE ORIENTACIN ESPACIAL
Arequipa-Per
Abril-2017
Herramientas de orientacin espacial
1. Objetivos
-Emplear las herramientas matemticas de orientacin espacial en la solucin de
problemas de localizacin de robots.
-Construir programas que permitan automatizar el uso de las herramientas de
orientacin espacial.
-Emplear los programas construidos en la solucin de problemas de orientacin y
localizacin espacial de robots.
2. Material y Equipo
-PC y MATLAB
3. Procedimiento
ZA
ZB
XB
XA
YB YA
ZA
cos 90 90 0
= [ 90 cos 90 0]
ZB 0 0 1
YB 0 1 0
= [1 0 0]
0 0 1
XB YA
XA
b) Rotar un ngulo de 45 respecto del eje XB
ZA
1 0 0
= [0 cos 45 45]
YB 0 45 cos 45
ZB
1 0 0
= [0 0.7071 0.7071]
0 0.7071 0.7071
XB
XA
YA
ZA
cos 30 30 0
YB = [ 30 cos 30 0]
0 0 1
ZB
0.866 0.5 0
XB = [ 0.5 0.866 0]
0 0 1
XA
YA
-Escriba programas (funciones) en MATLAB para calcular las matrices de rotacin bsicas, dados
como parmetros el eje de giro y el ngulo de rotacin, en forma simblica.
function [R]=simbolica(eje,alfa) %ingresar el primer parametro entre
apostofes como: 'x',60
alfa=sym(alfa);%Convierte a variable simbolica
if eje=='x'
R=[1 0 0;0 cos(alfa) -sin(alfa);
0 sin(alfa) cos(alfa)];
end
if eje =='y'
R=[cos(alfa) 0 sin(alfa);0 1 0;
-sin(alfa) 0 cos(alfa)];
end
if eje =='z'
R=[cos(alfa) -sin(alfa) 0;
sin(alfa) cos(alfa) 0;0 0 1];
end
end
-Soluciones el problema 1 empleando las funciones implementadas en los dos tems anteriores.
Contrastar los resultados obtenidos con el resultado terico.
clear all, clc, close all;
R1S=simbolica('z',90)
R1=MR('z',90);
R2S=simbolica('x',45)
R2=MR('x',45);
R3S=simbolica('z',30)
R3=MR('z',30);
RR=R1*R2*R3
Como podemos ver la matriz de rotacin obtenida es idntica al del problema 1, al igual que
todas las matrices de cada rotacin. La razn por la cual se multiplica R1S primero es porque al
ser una rotacin respecto al eje fijo esta debe premultiplicar, las siguientes rotaciones se
posmultiplican ya que son rotaciones respecto al eje mvil por eso R2S es despus y luego R3S.
Para poder resolver el problema planteado primero se escribe al vector k como un vector
unitario para esto es necesario obtener la raz cuadrada de la suma de cada uno de los elementos
del vector y elevarlos al cuadrado.
1 1 2
12 + 12 + 22 = 6 = ( + + )
6 6 6
Rotar respecto a este vector es equivalente a rotar primero el eje z un ngulo alfa, luego rotar v
(mvil) un ngulo phi y posteriormente rotar w un ngulo teta, luego deshacer el movimiento
de phi y de alfa.
Z
0.4082 45
X 0.4082
Valor de phi (ngulo entre el vector y el eje z)
35.257
2 Y
0.8165
X
(, ) = () () () () ()
= 45 = 35.2572 = 45
alfa=atand(k(2)/k(1));
phi=atand((sqrt(k(1)^2+k(2)^2))/(k(3)));
R=MR('z',alfa)*MR('y',phi)*MR('z',45)*MR('y',-phi)*MR('z',-alfa);
%v=1-cosd(alfa);
%R=[k(1)*k(1)*v+cosd(alfa) k(1)*k(2)*v-k(3)*sind(alfa)
k(1)*k(3)*v+k(2)*sind(alfa);
% k(1)*k(2)*v+k(3)*sind(alfa) k(2)*k(2)*v+cosd(alfa) k(2)*k(3)*v-
k(1)*sind(alfa);
%k(1)*k(3)*v-k(2)*sind(alfa) k(2)*k(3)*v+k(1)*sind(alfa)
k(3)*k(3)*v+cosd(alfa)];
v=1-cosd(alfa);
R=[k(1)*k(1)*v+cosd(alfa) k(1)*k(2)*v-k(3)*sind(alfa)
k(1)*k(3)*v+k(2)*sind(alfa);
%k(1)*k(2)*v+k(3)*sind(alfa) k(2)*k(2)*v+cosd(alfa) k(2)*k(3)*v-
(1)*sind(alfa);
k(1)*k(3)*v-k(2)*sind(alfa) k(2)*k(3)*v+k(1)*sind(alfa)
(3)*k(3)*v+cosd(alfa)];
Teniendo la matriz de rotacin se puede emplear un algoritmo creado para calcular los ngulos
de Euler XYZ a partir de una matriz.
RX=MR('x',X);
RX_S=simbolica('x',X);
RY=MR('y',Y);
RY_S=simbolica('y',Y);
RZ=MR('z',Z);
RZ_S=simbolica('z',Z);
RR=RZ*RY*RX
RR_s=RZ_S*RY_S*RX_S
-Escriba un programa MATLAB que calcule los ngulos de Euler XYZ cuando el usuario introduzca
la matriz de rotacin R.
clear all
clc
for i=1:3
for j=1:3
R(i,j)=input('DATOS: ');
end
end
y=asind(-R(3,1));
x=asind((R(3,2))/(cosd(y)));
z=acosd((R(1,1))/(cosd(y)));
disp(' ');
fprintf('X (YAW): %f \n',x);
fprintf('Y (PITCH): %f \n',y);
fprintf('Z (ROLL): %f \n',z);
switch(modo)
case 'suma'
for i=1:4
Q(i)=q1(i)+q2(i);
end
case'producto'
Q=[q1(1)*q2(1)-q1(2)*q2(2)-q1(3)*q2(3)-q1(4)*q2(4)
q1(1)*q2(2)+q1(2)*q2(1)+q1(3)*q2(4)-q1(4)*q2(3)
q1(1)*q2(3)+q1(3)*q2(1)+q1(4)*q2(2)-q1(2)*q2(4)
q1(1)*q2(4)+q1(4)*q2(1)+q1(2)*q2(3)-q1(3)*q2(2)];
case'escalar'
a=input('ESCALAR: ');
Q=a*q1;
Q1=a*q2;
% disp(Q1);
end
%disp(Q);
end
ang=sym(ang);
Q = [cos(ang/2) k*sin(ang/2)];
Q_C=[cos(ang/2) -k*sin(ang/2)]
Rs=cuat(Q,[0 v],'producto');
Rs=cuat(Rs,Q_C,'producto')
%realizas la formula Q*(0,r)*q*;
-Obtener el cuaternio que representa una rotacin de 90 sobre el eje k(3,-2,1). Rot(k,90).
Aplique sus funciones MATLAB para las operaciones de la solucin. Luego crear un script solucin
del problema. Contraste sus resultados con la respuesta analtica.