Avance Final Laboratorio N°3
Tema: MATRICES DE TRANSFORMACIÓN HOMOGENEA Y OTRAS
HERRAMIENTAS APLICADAS A LA LOCALIZACIÓN ESPACIAL
Alumnos:
-Valente Mattos, Vincenzo
-Condori Guzman, Enmanuel Jack
Docente: Ing. JuanCarlos Cuadros Machuca
I. OBJETIVO
I.1. Emplear las herramientas matemáticas de localización espacial en la solución de problemas que impliquen
determinar la orientación y la posición espacial de objetos y de robots articulados.
I.2. Construir programas y/o funciones que permitan automatizar el uso de las herramientas de localización espacial en
la solución de problemas que impliquen la determinación de la orientación y la posición espacial de objetos y de robots
articulados.
II. MARCO TEORICO Considere las presentaciones de los temas teóricos (revisar el AV del curso).
Resuelva analíticamente los siguientes problemas:
[Link] la matriz de transformación homogénea para los siguientes movimientos:
• Rotación en un ángulo de 30° respecto al eje OX, seguida de:
• Rotación en un ángulo de 90° respecto al eje OW, seguida de:
• Rotación en un ángulo de 45° respecto al eje OY
• Dibujar cual es la posición y orientación de los sistemas intermedios y el sistema resultante, respecto del sistema fijo
OXYZ.
Para ejemplificar la resolicion y determinacin de la posicion de estos vectores usaremos el software "GeoGebra"
Para representar los vectores x, y & z que se rotaran pondremos unos puntos para representar su posicion y
orientacion inicial.
Ahora realizamos el primer movimiento:
Movimiento_1 = [1, 0, 0; 0, cos(deg2rad(30)), -sin(deg2rad(30)); 0, sin(deg2rad(30)),
cos(deg2rad(30))];
disp(Movimiento_1)
1.0000 0 0
0 0.8660 -0.5000
0 0.5000 0.8660
A=[4,0,0]';
B=[0,4,0]';
C=[0,0,4]';
%Nueva posicion de los puntos tras el movimiento uno
A1=Movimiento_1*A
A1 = 3×1
4
0
0
B1=Movimiento_1*B
B1 = 3×1
0
3.4641
2.0000
C1=Movimiento_1*C
C1 = 3×1
0
-2.0000
3.4641
Ahora repetimos el proceso para el segundo y el tercer movimiento
%Segundo Movimiento
Movimiento_2 = [cos(deg2rad(90)), -sin(deg2rad(90)), 0; sin(deg2rad(90)),
cos(deg2rad(90)), 0; 0, 0, 1];
disp(Movimiento_2)
0.0000 -1.0000 0
1.0000 0.0000 0
0 0 1.0000
A2=(Movimiento_1*Movimiento_2)*A
A2 = 3×1
0.0000
3.4641
2.0000
B2=(Movimiento_1*Movimiento_2)*B
B2 = 3×1
-4.0000
0.0000
0.0000
C2=(Movimiento_1*Movimiento_2)*C
C2 = 3×1
0
-2.0000
3.4641
%Tercer Movimiento
Movimiento_3 = [cos(deg2rad(45)), 0, sin(deg2rad(45)); 0, 1, 0; -sin(deg2rad(45)), 0,
cos(deg2rad(45))];
disp(Movimiento_3)
0.7071 0 0.7071
0 1.0000 0
-0.7071 0 0.7071
A3=(Movimiento_3*Movimiento_1*Movimiento_2)*A
A3 = 3×1
1.4142
3.4641
1.4142
B3=(Movimiento_3*Movimiento_1*Movimiento_2)*B
B3 = 3×1
-2.8284
0.0000
2.8284
C3=(Movimiento_3*Movimiento_1*Movimiento_2)*C
C3 = 3×1
2.4495
-2.0000
2.4495
[Link] el objeto en forma de cuña en la Figura 1:
Se pide:
1) Obtener la transformación que se debe aplicar para llevarlo desde el origen (figura 1-izquierda) hasta su ubicación
final (figura 1-derecha). Represente esta transformación como una traslación seguida de una rotación y viceversa.
Verifique que la solución sea la misma.
p=[0 -1 4];
[Tr,Tp]=Mmtt(p,pi, 'x')
Tr = 4×4
1.0000 0 0 0
0 -1.0000 -0.0000 0
0 0.0000 -1.0000 0
0 0 0 1.0000
Tp = 4×4
1 0 0 0
0 1 0 -1
0 0 1 4
0 0 0 1
2) Calcule las coordenadas de los vértices de la cuña trasladada y rotada con respecto al marco original.
syms px py pz alpha
p=[px py pz];
[Tr,Tp]=Mmtt(p,alpha, 'y')
Tr =
Tp =
3) Descomponga la rotación obtenida en la pregunta 1) como una secuencia de rotaciones sobre los ejes X, Y y Z.
Alpha = 30*pi/180;
p = [0,0,0];
[R1, ~] = Mmtt(p, Alpha, 'x'); % Suponiendo que la función Mmtt devuelve solo la
matriz de rotación
Alpha = 90*pi/180;
[R2, ~] = Mmtt(p, Alpha, 'z');
Alpha = 45*pi/180;
[R3, ~] = Mmtt(p, Alpha, 'y');
T = R3 * R1 * R2;
% Resto del código de graficación
figure(1)
quiver3(0,0,0,0,0,1, 'b', 'LineWidth', 4)
hold on
quiver3(0,0,0,0,1,0, 'g', 'LineWidth', 4)
hold on
quiver3(0,0,0,1,0,0, 'r', 'LineWidth', 4)
hold on
text(1,0,0, 'x', 'FontSize', 14)
text(0,1,0, 'y', 'FontSize', 14)
text(0,0,1, 'z', 'FontSize', 14)
hold on
quiver3(0,0,0,R1(1,1),R1(2,1),R1(3,1), 'r', 'LineWidth', 4)
hold on
quiver3(0,0,0,R1(1,2),R1(2,2),R1(3,2), 'g', 'LineWidth', 4)
hold on
quiver3(0,0,0,R1(1,3),R1(2,3),R1(3,3), 'b', 'LineWidth', 4)
hold on
text(T(1,1),T(2,1),T(3,1), 'u', 'FontSize', 14)
text(T(1,2),T(2,2),T(3,2), 'v', 'FontSize', 14)
text(T(1,3),T(2,3),T(3,3), 'w', 'FontSize', 14)
hold off
figure(2)
quiver3(0,0,0,R1(1,1),R1(2,1),R1(3,1), 'r', 'LineWidth', 4)
hold on
quiver3(0,0,0,R1(1,2),R1(2,2),R1(3,2), 'g', 'LineWidth', 4)
hold on
quiver3(0,0,0,R1(1,3),R1(2,3),R1(3,3), 'b', 'LineWidth', 4)
hold on
text(R1(1,1),R1(2,1),R1(3,1), 'u', 'FontSize', 14)
text(R1(1,2),R1(2,2),R1(3,2), 'v', 'FontSize', 14)
text(R1(1,3),R1(2,3),R1(3,3), 'w', 'FontSize', 14)
quiver3(0,0,0,R2(1,1),R2(2,1),R2(3,1), 'r', 'LineWidth', 2)
hold on
quiver3(0,0,0,R2(1,2),R2(2,2),R2(3,2), 'g', 'LineWidth', 2)
hold on
quiver3(0,0,0,R2(1,3),R2(2,3),R2(3,3), 'b', 'LineWidth', 2)
hold on
text(R2(1,1),R2(2,1),R2(3,1)+0.05, 'u2', 'FontSize', 14)
text(R2(1,2),R2(2,2),R2(3,2), 'v2', 'FontSize', 14)
text(R2(1,3),R2(2,3),R2(3,3)+0.05, 'w2', 'FontSize', 14)
title('Rotación de 90° sobre el eje Z')
figure(3)
quiver3(0,0,0,0,0,1, 'b' , 'Linewidth', 4)
hold on
quiver3(0,0,0,0,1,0, 'g' , 'Linewidth', 4)
hold on
quiver3(0,0,0,1,0,0, 'r' , 'Linewidth', 4)
hold on
text(1,0,0, 'x' , 'FontSize' ,14)
text(0,1,0, 'y' , 'FontSize' ,14)
text(0,0,1, 'z' , 'FontSize' ,14)
quiver3(0,0,0,T(1,1),T(2,1),T(3,1), 'r' , 'Linewidth', 4)
hold on
quiver3(0,0,0,T(1,2),T(2,2),T(3,2), 'g' , 'Linewidth', 4)
hold on
quiver3(0,0,0,T(1,3),T(2,3),T(3,3), 'b' , 'Linewidth', 4)
hold on
text(T(1,1),T(2,1),T(3,1), 'u' , 'FontSize' ,14)
text(T(1,2),T(2,2),T(3,2), 'v' , 'FontSize' ,14)
text(T(1,3),T(2,3),T(3,3), 'w' , 'FontSize' ,14)
4) Lo mismo que el anterior, pero como una secuencia de rotaciones sobre los ejes Z, Y y Z.
p=[0 0 0];
T1=Mmtt(p,pi/2, 'y' )
T1 = 4×4
0.0000 0 1.0000 0
0 1.0000 0 0
-1.0000 0 0.0000 0
0 0 0 1.0000
T2=Mmtt(p,-pi/2, 'x')
T2 = 4×4
1.0000 0 0 0
0 0.0000 1.0000 0
0 -1.0000 0.0000 0
0 0 0 1.0000
[x,T3]=Mmtt(p,0, 'x');
T3
T3 = 4×4
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
T=T3*T1*T2
T = 4×4
0.0000 -1.0000 0.0000 0
0 0.0000 1.0000 0
-1.0000 -0.0000 0.0000 0
0 0 0 1.0000
p1=[0 0 0 0; 0 0 0 0; 0 0 0 0.5; 0 0 0 1];
p2=[0 0 0 0; 0 0 0 0.25; 0 0 0 0.5; 0 0 0 1];
p3=[0 0 0 0.5; 0 0 0 0.25; 0 0 0 0; 0 0 0 1];
p4=[0 0 0 0.5; 0 0 0 0; 0 0 0 0; 0 0 0 1];
p5=[0 0 0 0; 0 0 0 0; 0 0 0 0; 0 0 0 1];
p6=[0 0 0 0; 0 0 0 0.25; 0 0 0 0; 0 0 0 1];
p1t=T*pi;p2t=T*p2;p3t=T*p3;
p4t=T*p4;p5t=T*p5;p6t=T*p6;
p1r=p1t(1:3,4)'
p1r = 1×3
0 0 0
p2r=p2t(1:3,4)'
p2r = 1×3
-0.2500 0.5000 -0.0000
p3r=p3t(1:3,4)'
p3r = 1×3
-0.2500 0.0000 -0.5000
p4r=p4t(1:3,4)'
p4r = 1×3
0.0000 0 -0.5000
p5r=p5t(1:3,4)'
p5r = 1×3
0 0 0
p6r=p6t(1:3,4)'
p6r = 1×3
-0.2500 0.0000 -0.0000
5) Obtenga el eje de rotación equivalente, y el ángulo girado sobre él, para la rotación obtenida en la pregunta 1).
Sabiendo que la Matriz de Rotación obtenida es:
0 −1 0 0 𝑛𝑥 𝑜𝑥 𝑎𝑥 0
0 0 1 0 𝑛𝑦 𝑜𝑦 𝑎𝑦 0
[
T = −1 0 0 0] = 𝑛
[ ]
𝑜𝑧 𝑎𝑧 0
0 0 0 1
𝑧
0 0 0 1
A partir de la Matriz NOA podemos obtener el eje de rotación equivalente, así como el
ángulo girado sobre dichos ejes.
√(𝑜𝑧 − 𝑎𝑦)2 + (𝑎𝑥 − 𝑛𝑧)2 +
tan(𝜃) = (𝑛𝑦 − 𝑜𝑥)2
𝑛𝑥 + 𝑜𝑦 + 𝑎𝑧 − 1
𝜃 = −60°
𝑜𝑧 − 𝑎 𝑦
𝑎𝑥 − 𝑛𝑧 𝑛𝑦 −
𝑜𝑥
𝐾𝑥 = = 0.5774 𝐾𝑦 = = −0.5774 𝐾𝑧 = =
2sin(𝜃) 2sin(𝜃) 2sin(𝜃)
6) Obtener el eje del tornillo para la transformación obtenida en la pregunta 1) y generar la trayectoria seguida por los
vértices de la cuña desde su ubicación inicial hasta su ubicación final interpolando simultáneamente la rotación sobre
este eje y la traslación a lo largo del mismo.
%Funcion creada para hallar las matrices de rotacion y
%de translación
function [Tr, Tp] = Mmtt(p,alpha,eje)
px=p(1);
py=p(2);
pz=p(3);
if eje=='x'
Tr=[1 0 0 0
0 cos(alpha) -sin(alpha) 0
0 sin(alpha) cos(alpha) 0
0 0 0 1];
Tp=[1 0 0 px
0 1 0 py
0 0 1 pz
0 0 0 1];
elseif eje=='y'
Tr=[cos(alpha) 0 sin(alpha) 0
0 1 0 0
-sin(alpha) 0 cos(alpha) 0
0 0 0 1];
Tp=[1 0 0 px
0 1 0 py
0 0 1 pz
0 0 0 1];
elseif eje=='z'
Tr=[cos(alpha) -sin(alpha) 0 0
sin(alpha) cos(alpha) 0 0
0 0 1 0
0 0 0 1];
Tp=[1 0 0 px
0 1 0 py
0 0 1 pz
0 0 0 1];
end
end
A. MATERIAL Y EQUIPO
Una PC y el Software MATLAB.
B. PROCEDIMIENTO
3. Desarrolle programas (funciones) en MATLAB para calcular las matrices de
transformación homogéneas básicas de traslación y rotación, dados como
parámetros el vector de traslación o el ángulo de rotación.
Para resolver este ejercicio, lo que se tiene que hacer es crear una función que admita
como parámetros de entrada ya sea el vector de posición, el ángulo de rotación y el eje
sobre el cual está rotando. Para eso creamos la siguiente función:
Si el eje de rotación es igual a x:
Si el eje de rotación es igual a y:
Si el eje de rotación es igual a z:
Probamos la función para p=[0,-1,4] y un ángulo de rotación de 90° (pi) alrededor del eje x:
Obtuvimos lo siguiente:
4. Desarrolle programas (funciones) en MATLAB para calcular las matrices de
transformación homogéneas básicas de traslación y rotación, dados como
parámetros el vector de traslación o el ángulo de rotación, en forma simbólica.
Para hallar las matrices de transformación también podemos usar la función creada en el
ejercicio anterior, pero definiendo las variables como simbólicas:
Y obtuvimos lo siguiente:
5. Genere un script en MATLAB que permita la solución de cada uno de los
problemas del marco teórico, empleando las funciones creadas en el punto IV.1
anterior y las composiciones matriciales adecuadas. Compare sus resultados con
los obtenidos analíticamente. (Considere el empleo de arrow3 para la
representación de las soluciones en forma gráfica).
5.1. Determinar la matriz de transformación homogénea para los siguientes
movimientos:
Rotación en un ángulo de 30° respecto al eje OX, seguida de:
Rotación en un ángulo de 90° respecto al eje OW, seguida de:
Rotación en un ángulo de 45° respecto al eje OY
Dibujar cual es la posición y orientación de los sistemas intermedios y el
sistema resultante, respecto del sistema fijo OXYZ.
Componiendo las matrices que se piden, usando las funciones halladas en el ejercicio 1, hallamos lo siguiente:
Una vez tenemos las matrices de cada transformación, componemos las rotaciones, en este caso tenemos que
considerar que una rotación sobre el eje fijo es una premultiplicación, u sobre el eje móvil es
postmultiplicación.
La matriz de transformación sería:
Obtenemos el siguiente resultado:
Luego se nos pide graficar los ejes en cada una de las transformaciones, para eso nos ayudaremos de la función
quiver3, esta función nos permite graficar un vector desde un punto inicial hasta un punto final (este punto es
con respecto al primero):
La orientación del eje rotado estará dada por la matriz hallada para cada transformación:
𝑛𝑥 𝑜𝑥 𝑎𝑥
𝑇 = 𝑜𝑦 𝑎𝑦]
[𝑛𝑦
𝑛𝑧 𝑜𝑧 𝑎𝑧
Entonces para la primera transformación tenemos (Rotx(30°)):
Para la segunda transformación tenemos (Rot OW 90°)
Y obtuvimos lo siguiente:
Por último, una rotación de 45° sobre el eje Y, ya que es la transformación final, vamos a graficar los ejes
rotados con respecto a su posición original, tenemos:
Y obtuvimos lo siguiente:
5.2. Considere el objeto en forma de cuña en la Figura:
Se nos pide llegar al mismo resultado de la parte teórica, pero usando la función creada (Mmtt). Primero
hallamos la transformación que nos lleve desde la posición inicial a la posición final:
Podemos ver que la matriz T coincide con la hallada en la parte teórica de forma analítica.
Luego, se nos pide hallar las coordenadas de cada vértice rotado, para esto, podemos crear una matriz que
represente cada vértice, si esta matriz la multiplicamos por la matriz T hallada, tendremos las
coordenadas de los puntos rotados:
Esto lo podemos graficar para ayudarnos con la visualización:
El procedimiento que seguiría para hallar las preguntas 3, 4, 5 y 6 es el mismo que la parte analítica, por lo
tanto, esas preguntas ya están resueltas y no requieren comprobación.
6. Aplique las funciones creadas en el laboratorio anterior respecto del algebra de
cuaternios y de solución al ítem 1) del problema II.2 del marco teórico. Crear un
script y comprobar los resultados con los obtenidos en la solución analítica.
Para esto, crearemos una función que nos permite componer cuaternios en base a
rotaciones, por teoría sabemos que:
(θ
Q=Rot ( k ,θ )= cos , σsin
2
θ
2 )
i=[ 1 , 0 ,0 ]
j=[ 0 ,1 , 0 ]
k =[ 0 , 0 ,1 ]
Escribiendo esto en una función:
Se nos pide obtener el cuaternio que lleve a la cuña del problema 1 del marco teórico, de su posición inicial a
su posición final, para esto, tendremos que realizar producto de cuaternios, para esto, creamos una función:
Una vez tenemos esto, componemos nuestras rotaciones:
Luego, hallamos los siguientes resultados:
Donde p es el cuaternio que define la posición final del robot con respecto a su posición inicial, y R0 es el
cuaternio que define la orientación:
(0, 𝑝) = (0, 𝑝𝑥, 𝑝𝑦, 𝑝𝑧)
Por último, para comprobar este resultado, podemos hallar la MTH usando la relación MTH cuaternios dada
por:
Y hallamos la siguiente matriz:
Y podemos ver que coincide con la matriz hallada, tanto en la parte analítica, como usado la función
MMTT:
Podemos ver que la matriz por MMTT y la matriz hallada con cuaternos son completamente iguales.
7. 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.
Para esto, también podemos usar la función creada para la composición de cuaternios:
C. CUESTIONARIO FINAL
1. Investigue en el rvctools acerca de las funciones que realicen los cálculos y
proporcionen resultados iguales o similares a las funciones desarrolladas por Ud.
en el procedimiento.
Rotx
Roty
Rotz
Arrow3
Rt2tr(R,t)
Quiver
quaternion
2. Desarrolle la solución de los problemas del marco teórico aplicando las funciones
del toolbox de robótica investigadas y contraste los resultados con los obtenidos
por las funciones desarrolladas por Ud. en el procedimiento.
Determinar la matriz de transformación homogénea para los siguientes movimientos:
Rotación en un ángulo de 30° respecto al eje OX, seguida de:
Rotación en un ángulo de 90° respecto al eje OW, seguida de:
Rotación en un ángulo de 45° respecto al eje OY
Dibujar cual es la posición y orientación de los sistemas intermedios y el
sistema resultante, respecto del sistema fijo OXYZ.
CÓDIGO
clc; clear all;close all T=[3,4,5];
R1=rotx(30*pi/180);
R2=rotz(90*pi/180);
R3=roty(45*pi/180); R=R2*R1*R3
TR=rt2tr(R,T)
arrow3(zeros(1,3),[1 0 0],'b2.5',3,7); hold on
arrow3(zeros(1,3),[0 1 0],'g2.5',3,7); hold on
arrow3(zeros(1,3),[0 0 1],'r2.5',3,7); hold on
text(1,0,0,'X','FontSize',14)
text(0,1,0,'Y','FontSize',14)
text(0,0,1,'Z','FontSize',14); hold on
arrow3(zeros(1,3),[TR(1,1),TR(2,1),TR(3,1)],'b2.5',3,7); hold on
arrow3(zeros(1,3),[TR(1,2),TR(2,2),TR(3,2)],'g2.5',3,7); hold on
arrow3(zeros(1,3),[TR(1,3),TR(2,3),TR(3,3)],'r2.5',3,7); hold on
text(TR(1,1),TR(2,1),TR(3,1),'U','FontSize',14)
text(TR(1,2),TR(2,2),TR(3,2),'V','FontSize',14)
text(TR(1,3),TR(2,3),TR(3,3),'W','FontSize',14); hold on axis([-1 1 -1
1 -1 1])
Utilizando las funciones anteriormente descritas, se utiliza las funciones “rotx”, etc que hacen los giros
respecto a esos ejes, para definir si son rotaciones respecto al eje fijo o móvil se premultiplica o
postmultiplica.
Finalmente se utiliza el comando arrow3 para graficar los ejes, para nombrar los ejes se utiliza el
comando “text” y finalmente es necesario definir los axis para que se observen todos los ejes rotados.
RESULTADOS
Se observa que los ejes “UVW” son diferentes a los ejes “XYZ” por las rotaciones que se realizó
durante el proceso, se graficó en color azul el eje X y su correspondiente eje U; de color verde el eje Y
y su correspondiente eje V; finalmente de color rojo el eje Z y su par W.
Considere el objeto en forma de cuña en la Figura 1:
Se pide:
1) Obtener la transformación que se debe aplicar para llevarlo desde el origen
(izquierda) hasta su ubicación final (derecha). Represente esta transformación
como una traslación seguida de una rotación y viceversa. Verifique que la
solución sea la misma.
2) Calcule las coordenadas de los vértices de la cuña trasladada y rotada con
respecto al marco original.
3) Descomponga la rotación obtenida en la pregunta 1) como una secuencia de
rotaciones sobre los ejes X, Y y Z.
4) Lo mismo que el anterior, pero como una secuencia de rotaciones sobre los
ejes Z, Y y Z.
5) Obtenga el eje de rotación equivalente, y el ángulo girado sobre él, para la
rotación obtenida en la pregunta 1).
6) Obtener el eje del tornillo para la transformación obtenida en la pregunta 1) y
generar la trayectoria seguida por los vértices de la cuña desde su ubicación
inicial hasta su ubicación final interpolando simultáneamente la rotación sobre
este eje y la traslación a lo largo del mismo.
CÓDIGO
Para el código solo se necesitan como parámetros de entrada un ángulo de rotación y un vector de giro,
simplemente se define estos parámetros y se introduce estos valores en la función brindada por el RVCtool, se
hacen las rotaciones tomando los ejes respecto a “Y” y “X”.
clc; clear all;close all
R1=r2t(roty(90*pi/180)) R2=r2t(rotx(-90*pi/180))
T=transl(1.5, 1, 0) R=T*R1*R2
RESULTADOS
R1 es una rotación en “Y” y R2 es una rotación en “X”, T es una traslación según los puntos
especificados, finalemtne estos valores se multiplican adecuadamente en R.
R1 =
0 0 1 0
0 1 0 0
-1 0 0 0
0 0 0 1
R2 =
1 0 0 0
0 0 1 0
0 -1 0 0
0 0 0 1
T =
1.0000 0 0 1.5000
0 1.0000 0 1.0000
0 0 1.0000 0
0 0 0 1.0000
R =
0 -1.0000 0 1.5000
0 0 1.0000 1.0000
-1.0000 0 0 0
0 0 0 1.0000
Podemos ver que la matriz R coincide con la hallada en la parte teórica de forma analítica y a la vez con la
matriz del procedimiento, hallada con funciones.
Posteriormente se debería de hallar las coordenadas de cada vértice rotado, para esto, podemos crear una
matriz que represente cada vértice, si esta matriz la multiplicamos por la matriz T hallada, tendremos las
coordenadas de los puntos rotados, esto yá se realizó en las partes de marco teórico y de procedimiento, por lo
que no se repetirá este procedimiento.
Finalmente se graficarán los puntos hallados esto lo podemos graficar para ayudarnos con la visualización:
El procedimiento que seguiría para hallar las preguntas 3, 4, 5 y 6 es el mismo que la parte analítica, por lo
tanto, esas preguntas ya están resueltas y no requieren comprobación.
PROCEDIMIENTO
Desarrolle programas (funciones) en MATLAB para calcular las matrices de transformación homogéneas
básicas de traslación y rotación, dados como parámetros el vector de traslación o el ángulo de rotación.
Para resolver este ejercicio, lo que se tiene que hacer es utilizar el RVCtool para poder ingresar un valor de eje
y un ángulo y nos de como respuesta la transformación requerida, por lo tanto, hacemos:
CÓDIGO
Para el código solo se necesitan como parámetros de entrada un ángulo de rotación y un vector de giro,
simplemente se define estos parámetros y se introduce estos valores en la función brindada por el RVCtool
clc;clear all theta=35*pi/180 v=[3,4,5]
t=[1, 2, 3]
R=angvec2r(theta,v) transl(t)
RESULTADOS
Probamos la función para una traslación t=[1,2,3] y una rotación alrededor del vector v=[3,4,5] y un ángulo de
rotación de 35°, sin embargo este valor en sexagesimales deben de ser convertidos a radianes, sistema en el
cual trabaja Matlab; obtuvimos lo siguiente:
R =
theta =
0.8517 -0.3622 0.3787
0.6109
0.4490 0.8770 -0.1710
v =
-0.2702 0.3157 0.9096
34 5
t =
ans =
1 2 3
1 0 0 1
0 1 0 2
Desarrolle programas (funciones) en MATLAB para calcular las matrices de transformación
homogéneas básicas de traslación y rotación, dados como parámetros el vector de traslación o el ángulo
de rotación, en forma simbólica.
Para hallar las matrices de transformación también podemos usar la función creada en el ejercicio anterior,
pero definiendo las variables como simbólicas:
clc;clear all R=angvec2r(theta,v) transl(t)
syms a b c d e f g theta=a
v=[b,c,d]
t=[e,f,g]
R=angvec2r(theta,v) transl(t)
Los parámetros a utilizar son los mismos que en la parte superior, se obtuvieron los siguientes resultados:
R =
El resultado mostrado es demasiado grande para
programa “eje_y_angulo_a_MTH”
theta = [ 1, 0, 0, e]
[ 0, 1, 0, f]
[ 0, 0, 1, g]
a
ans =
v =
[ b, c, d]
Genere un script en MATLAB que permita la solución de cada uno de los problemas del marco teórico,
empleando las funciones creadas en el punto IV.1 anterior y las composiciones matriciales adecuadas.
Compare sus resultados con los obtenidos analíticamente. (Considere el empleo de arrow3 para la
representación de las soluciones en forma gráfica).
Esta parte fue desarrollada en la parte superior, ya que se utiliza el RVCtool para resolver los problemas del
marco teórico.
Aplique las funciones creadas en el laboratorio anterior respecto del algebra de cuaternios y de solución
al ítem 1) del problema II.2 del marco teórico. Crear un script y comprobar los resultados con los
obtenidos en la solución analítica.
Considere el objeto en forma de cuña en la Figura 1:
Se pide:
a. Obtener la transformación que se debe aplicar para llevarlo desde el origen (izquierda) hasta su ubicación
final (derecha). Represente esta transformación como una traslación seguida de una rotación y viceversa.
Verifique que la solución sea la misma.
CÓDIGO
Para el código solo se necesitan como parámetros de entrada un ángulo de rotación y un vector de giro,
simplemente se define estos parámetros y se introduce estos valores en la función brindada por el RVCtool, se
hacen las rotaciones tomando los ejes respecto a “Y” y “X”.
clc; clear all;close all
R1=r2t(roty(90*pi/180)) R2=r2t(rotx(-90*pi/180))
T=transl(1.5, 1, 0) R=T*R1*R2
RESULTADOS
R1 es una rotación en “Y” y R2 es una rotación en “X”, T es una traslación según los puntos especificados,
finalemtne estos valores se multiplican adecuadamente en R.
R1 =
0 0 1 0
0 1 0 0
-1 0 0 0
0 0 0 1
R2 =
1 0 0 0
0 0 1 0
0 -1 0 0
0 0 0 1
T =
1.0000 0 0 1.5000
0 1.0000 0 1.0000
0 0 1.0000 0
0 0 0 1.0000
R =
0 -1.0000 0 1.5000
0 0 1.0000 1.0000
-1.0000 0 0 0
0 0 0 1.0000
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.
CÓDIGO
Para el código solo se necesitan como parámetros de entrada introducir el valor del ángulo que se desea rotar el
cuaternio y también definir el vector para el cuaternio; adicionalmente se configura dentro del mismo cuaternio
el coseno y el seno para darle la forma que siempre presentan los cuaternios
clc;clear all
a=90*pi/180 v=[3 -2 1]
quaternion([cos(a/2),sin(a/2)*v])
RESULTADOS
a =
1.5708
v =
3 -2 1
ans = quaternion
0.70711 + 2.1213i - 1.4142j + 0.70711k
Esto se contrasta con el resultado obtenido en la parte procedimental
3. Se pide:
3.1. Mostrar con un ejemplo gráfico la posición y orientación final de una pieza simple tras
someterse a dos transformaciones respecto de un sistema fijo: una traslación D y una
rotación R, tanto en el orden D, R como en el R, D.
CODIGO
clear all; clc;close all
figure (1)
L1=Link([0 0 0 0 0])
L2=Link([0 1 0 0 1 ])
[Link]=[0 2]
rp=SerialLink([L1 L2], 'name','RobConVal prueba robot
rp') [Link]([0 0])
figure (2)
L3=Link([0 0 0 0 0])
L4=Link([0 1 0 0 1 ])
[Link]=[0 2]
rp1=SerialLink([L3 L4], 'name','RobConVal prueba robot
rp') [Link]([ pi/2 2])
figure (3)
L1=Link([0 0 0 0 0])
L2=Link([0 1 0 0 1 ])
[Link]=[0 2]
rp=SerialLink([L2 L1], 'name','RobConVal prueba robot
rp') [Link]([pi/2 2])
Para comprobar la parte 3 del cuestionario se decidió utilizar el fkine, con el fin de mostrar las posiciones que
asumiría la pieza del robot teniendo las diferentes configuraciones, se observa que teniendo ejes fijos, las
posiciones finales del los efectores son las mismas
L1 =
Revolute(std): theta=q, d=0, a=0, alpha=0, offset=0
3.2. Dar la matriz de transformación homogénea y el cuaternio para cada caso de las
L2 cuatro
= posibles combinaciones que surgen de D y R: (emplear en la solución sus
funciones MATLAB
Prismatic(std): desarrolladas)
theta=0, d=q, a=0, alpha=0, offset=0
L2 = 3.2.1. Permutando el orden
Prismatic(std): theta=0, d=q, a=0, alpha=0, offset=0
3.2.2. Considerando si las transformaciones se realizan respecto de un sistema fijo
rp = o móvil.
[Link] prueba robot rp:: 2 axis, PR, stdDH, slowRNE
Realice todo el procedimiento anteriormente descrito y presente en un informe
+ + + + + + +
detallado
| j | eltheta
desarrollo
| de todos dlos|pasos indicados.
a | alpha | offset |
+ + + + + + +
| Realizado.
1| 0| q1| 0| 0| 0|
| 2| q2| 0| 0| 0| 0|
+ + + + + + +
CONCLUSIONES Y OBSERVACIONES
1. Importancia de la Precisión Numérica: Dado que las transformaciones se aplican frecuentemente en
cadenas (por ejemplo, en animaciones o en simulaciones robóticas), la precisión numérica es crítica. Los
errores de redondeo y la acumulación de errores pueden llevar a resultados no deseados, como la pérdida
de ortogonalidad en matrices de rotación, lo que requiere correcciones periódicas o el uso de algoritmos de
normalización.
2. Complejidad Computacional: Aunque las matrices de transformación homogénea simplifican muchos
problemas de transformación espacial, su implementación y manipulación requieren una comprensión
sólida de álgebra lineal, así como consideraciones sobre la eficiencia computacional, especialmente en
sistemas en tiempo real donde la velocidad de cálculo es crucial.
3. Educación y Entrenamiento: La efectividad en el uso de matrices de transformación homogénea depende
en gran medida de la educación y el entrenamiento de los usuarios. Los diseñadores de sistemas,
ingenieros y desarrolladores deben estar bien versados en los principios matemáticos subyacentes para
aprovechar al máximo estas herramientas.
4. Desarrollo de Software: Existe una variedad de bibliotecas y herramientas de software que facilitan el
trabajo con matrices de transformación homogénea. La elección de la herramienta adecuada puede afectar
significativamente la eficiencia del desarrollo y la calidad del producto final, por lo que es importante
mantenerse actualizado con las últimas tecnologías y mejores prácticas en la industria.
5. Estándar de Interoperabilidad en Diversos Campos: Las matrices de transformación homogénea se han
establecido como un estándar de facto en numerosos campos que requieren manipulación geométrica,
como la robótica, la realidad aumentada, la simulación física y los gráficos computacionales. Su uso
universal facilita la interoperabilidad entre diferentes sistemas y plataformas, permitiendo una integración
más fluida de componentes software y hardware de distintos proveedores. Este nivel de estandarización es
crucial para el desarrollo de sistemas complejos donde múltiples tecnologías deben coexistir y operar de
manera sincronizada, garantizando así una implementación efectiva y eficiente de soluciones en industrias
que van desde la manufactura automatizada hasta los entretenimientos interactivos y la educación virtual.
BIBBLIOGRAFIA
[1] Introduction to Robotics. Mechanics & Control, J. Craig, Addison-Wesley.
[2] Robot Builder's Bonanza: 99 Inexpensive Robotics Projects, Gordon McComb,
McGraw-Hill. [3]Robótica. Universidad de Guadalajara. Méjico.
[Link]/materias/robotica/
[4] Curso de robótica móvil. Aperobot.
[Link]/aperobot/indice_tutorial.html
[5] Control de Robots y sistemas sensoriales. ISA. Universitas Miguel Hernández:
[Link]/
[6] Robótica. Universidad Rey Juan Carlos.
[Link]/docencia/asignaturas/robotica/
[7] Robotics course. Universitat Jaume I. [Link]/personal/robotica/[Link]
[8] Robótica Industrial. [Link]/~cim/[Link]
[9] Tutorial sobre robótica. [Link]/~cim/tutor/[Link]
[10] Sitio Web de Fischertechnik. [Link]
[11] TodoRobot. [Link]