Cinematic A Direct A Robot
Cinematic A Direct A Robot
Cinematic A Direct A Robot
Prctica 3
Dinmica de Robots
3.1.-Introduccin
La dinmica del robot relaciona el movimiento del robot y las fuerzas implicadas
en el mismo. El modelo dinmico establece relaciones matemticas entre las
coordenadas articulares (o las coordenadas del extremo del robot), sus derivadas
(velocidad y aceleracin), las fuerzas y pares aplicados en las articulaciones (o en el
extremo) y los parmetros del robot (masas de los eslabones, inercias, etc).
Prctica 3 .- Pg. 1
Prcticas de Robtica utilizando Matlab
carga que soporta el robot. Aunque las ecuaciones del movimiento son equivalentes ya
sean analticas o recursivas, los diferentes planteamientos dependen de los objetivos que
se quieran conseguir con ellos. En algunos casos es necesario solucionar el problema
dinmico de un robot para lograr tiempos de calculo rpidos en la evaluacin de los
pares y fuerzas articulares para controlar el manipulador, y en otros casos son necesarios
planteamientos para facilitar el anlisis y la sntesis del control.
z*
P
r*
0*
y*
z0 r
h
x*
0
y0
x0
Con respecto a la figura 3.1 se tiene que el sistema de coordenadas 0* se desplaza y gira
en el espacio respecto del sistema de referencia de la base 0, el vector que describe el
origen del sistema en movimiento es h y el punto P se describe respecto del sistema 0* a
travs del vector r*, de acuerdo a esto, la descripcin del punto P respecto del sistema
de la base es:
r = r* + h (3.1)
*
dr dr dh
= + = v * + vh (3.2)
dt dt dt
donde * es la velocidad del punto P respecto del origen del sistema 0* en movimiento y
h es la velocidad del origen del sistema 0* respecto de la base.
Prctica 3 .- Pg. 2
Prcticas de Robtica utilizando Matlab
Si el punto P se desplaza y gira respecto del sistema 0* la ecuacin (3.2) debe escribirse
como:
dr * dh d * r * dh
v= + = + w r * + (3.3)
dt dt dt dt
d *r *
donde es la velocidad lineal del punto P respecto del origen 0* y w r * es la
dt
velocidad angular del punto P respecto del origen 0*.[1]
dv d 2 r * d 2 h
a= = 2 + 2 = a * + ah (3.4)
dt dt dt
d *2 r * d *r * dw * d 2 h
a= + 2w + w (w r ) + r + 2 (3.5)
dt 2 dt dt dt
articulacin i
zi
i
ai
xi 0
zi-2
*
p i
xi-1
yi
i 0*
articulacin
z0 pi ai-1 i-1
articulacin
pi-1
i+1 yi-1
0 y0
x0
De acuerdo a la figura 3.2 las ecuaciones cinemticas para los eslabones de un robot, se
pueden escribir como:
d * pi*
vi = + wi 1 pi* + vi 1 (3.6)
dt
wi = wi 1 + wi*
Prctica 3 .- Pg. 3
Prcticas de Robtica utilizando Matlab
Debe notarse que la velocidad angular del sistema de referencia wi es igual a la suma de
la velocidad angular absoluta del sistema i-1 ms la velocidad angular relativa wi* del
eslabn referida a su propio sistema de coordenadas.
d *2 pi* d * pi*
vi =
dt 2
+
w i 1 pi
*
+ 2 wi 1
dt
( )
+ wi 1 wi 1 pi* + vi 1 (3.7)
w i = w i 1 + w i* (3.8)
La aceleracin angular del sistema de referencia i (xi, yi, zi) respecto del sistema
(xi-1, yi-1, zi-1) se consigue de manera similar a la ecuacin (3.3)
d * wi*
w i* = + wi 1 wi* (3.9)
dt
d * wi*
w i = w i 1 + + wi 1 wi* (3.10)
dt
En general para un robot los sistemas de coordenadas (xi-1, yi-1, zi-1) y (xi, yi, zi) estn
unidos a los eslabones i-1 e i. La velocidad del eslabn i respecto del sistema de
coordenadas i-1 es q i . Si el eslabn es prismtico, la velocidad ser una velocidad de
traslacin relativa respecto del sistema (xi-1, yi-1, zi-1) y si es rotacional le corresponder
una velocidad rotacional relativa del eslabn i respecto del sistema (xi-1, yi-1, zi-1), por
lo tanto:
Prctica 3 .- Pg. 4
Prcticas de Robtica utilizando Matlab
Las velocidades lineales de los sistemas de referencia de cada eslabn se calculan como:
d * wi*
dt
(
pi* + wi* wi* pi* ) si el eslabn i es rotacional
d *2 pi*
= (3.16)
dt 2
zi 1qi si el eslabn i es traslacional
por lo que la velocidad lineal absoluta del sistema de coordenadas ligado a cada eslabn
se calcula como:
( )
w i pi* + wi wi pi* + vi 1 si el eslabn i es rotacional
vi = (3.18)
( )
zi 1qi + w i pi* + 2wi (zi 1q i ) + wi wi pi* + vi 1 si el eslabn i es traslacional
Prctica 3 .- Pg. 5
Prcticas de Robtica utilizando Matlab
Si se utiliza la nomenclatura de la figura 3.2 sobre un eslabn cualquiera del robot, tal y
como se muestra en la figura 3.3
ri ni+1
pi-1
Elemento i-1 pi
Elemento i+1
z0
y0
x0
Donde:
mi masa total del eslabn i,
ri posicin del centro de masa del elemento i desde el origen del
sistema de referencia de la base,
si posicin del centro de masa del elemento i desde el origen del
sistema de coordenadas (xi, yi, zi),
p i* posicin del origen de coordenadas i-simo con respecto al
sistema de coordenadas (i-1)-simo,
dri
vi = velocidad lineal del centro de masa del elemento i,
dt
dv
ai = i aceleracin lineal del centro de masa del elemento i,
dt
Fi fuerza total externa ejercida sobre el elemento i en el centro de
masa,
Ni momento total externo ejercido sobre el elemento i en el centro de
masa,
Ii matriz de inercia del elemento i respecto de su centro de masa con
respecto al sistema de coordenadas (x0, y0, z0),
Prctica 3 .- Pg. 6
Prcticas de Robtica utilizando Matlab
NOTA: Es importante que se identifiquen estas variables sobre el dibujo del robot,
para poder seguir los siguientes desarrollos.
d (mi vi )
Fi = = mi ai (3.18)
dt
d ( I i wi )
Ni = = I i w i + wi ( I i wi ) (3.19)
dt
Fi = f i f i +1 (3.20)
N i = ni ni +1 + ( pi 1 ri ) f i ( pi ri ) f i +1 (3.21)
= ni ni +1 + ( pi 1 ri ) Fi pi* f i +1 (3.22)
ri pi 1 = pi* + si (3.23)
f i = Fi + f i +1 = mi ai + f i +1 (3.24)
ni = ni +1 + pi* f i +1 + ( pi* + si ) Fi + N i (3.25)
Se observa que estas ecuaciones son recursivas y permiten obtener las fuerzas y
momentos en los elementos i =1,2,...,n para un robot de n elementos. f i +1 y ni +1
representan la fuerza y momento ejercidos por la mano del robot sobre un objeto
externo.
n Ti zi 1 + bi qi si el eslabn i es rotacional
i = (3.26)
T
f i zi 1 + bi q i si el eslabn i es traslacional
Prctica 3 .- Pg. 7
Prcticas de Robtica utilizando Matlab
Para obtener un algoritmo computacional, se debe tener en cuenta que en las anteriores
ecuaciones, las matrices de inercia I i y los parmetros del robot, ri , si , p i* estn
referenciados respecto del sistema de coordenadas de la base.
Luh y col. [1980] utilizaron las matrices de rotacin 3x3 i 1 Ri , que ya han sido
estudiadas en la prctica 2 pues corresponden a la submatriz superior izquierda de las
matrices de transformacin homognea i 1 Ai , para expresar las variables
wi , w i , vi , vi , ai , p i* , si , Fi , N i , f i , ni y i que se refieren al sistema de coordenadas de
la base como i R0 wi , i R0 w i , i R0 v i , i R0 vi , i R0 ai , i R0 p i* , i R0 si , i R0 Fi , i R0 N i , i R0 f i , i R0 ni y
i
R0 i , que estn referenciados al propio sistema de coordenadas del elemento i.
Prctica 3 .- Pg. 8
Prcticas de Robtica utilizando Matlab
i
Ri 1 ( i 1R0 wi 1 + z0 q i ) si el eslabn i es rotacional
i
R0 wi = (3.27)
i
Ri 1 ( i 1R0 wi 1 ) si el eslabn i es traslacional
i
Ri 1 [ i 1R0 w i 1 + z0 qi +( i 1R0 wi 1 ) (z 0 q i ) ] si el eslabn i es rotacional
i
R0 w i = (3.28)
i i 1
Ri 1 ( R0 w i 1 ) si el eslabn i es traslacional
[
( i R0 w i ) ( i R0 pi* ) +( i R0 w i ) ( i R0 w i ) ( i R0 pi* ) + ] si el eslabn i es rotacional
+ i Ri 1 (i 1 R0 vi 1 )
i
R0 vi = (3.29)
i i 1 i i *
Ri 1 ( z0 qi + R0 vi 1 ) +( R0 w i ) ( R0 p ) +
i
+ 2( i R0 wi ) ( i Ri 1 z0 qi ) + si el eslabn i es traslacional
[
+( i R0 wi ) ( i R0 w i ) ( i R0 pi* ) ]
i
[
R0 ai = (i R0 w i ) (i R0 si ) + (i R0 wi ) (i R0 wi ) (i R0 si ) + i R0 vi ] (3.30)
i
R0 f i = i Ri +1 ( i +1R0 f i +1 ) + mi i R0 ai (3.31)
i
R0 ni = i Ri +1 [ i +1R0 ni +1 +( i +1R0 pi* ) ( i +1R0 f i +1 ) ] +( i R0 pi* + i R0 si ) ( i R0 Fi ) +
(3.32)
[
+ (i R0 I i 0 Ri )(i R0 w i ) + (i R0 wi ) (i R0 I i 0 Ri )(i R0 wi ) ]
( i R0 n i )T ( i Ri 1 z0 ) + bi qi si el eslabn i es rotacional
i
R0 i = (3.33)
i T i
( R0 f i ) ( Ri 1 z 0 ) + bi q i si el eslabn i es traslacional
Prctica 3 .- Pg. 9
Prcticas de Robtica utilizando Matlab
Ejemplo 3.1
prctica.
Prctica 3 .- Pg. 10
Prcticas de Robtica utilizando Matlab
las funciones anteriores, fijndose en los parmetros que se le pasan a la funcin en cada
caso.
help ri0pi
utilizada para resolver la dinmica inversa del robot prismtico de 4 gdl. Realizando
help NEWTONEULER4, la funcin nos informa sobre los parmetros necesarios para
realizar los clculos.
help newtoneuler4
Es importante que el lector repare en los parmetros que se pasan en cada caso a la
funcin correspondiente.
Prctica 3 .- Pg. 11
Prcticas de Robtica utilizando Matlab
% ------------------------------------------------------------
% Parmetros Denavit-Hartenberg del robot
% ------------------------------------------------------------
teta = [q(1) 0 0 q(4)];
d = [0.4 q(2) q(3) 0.2 ];
a = [0 -0.1 0 0 ];
alfa = [0 -pi/2 0 0 ];
% ------------------------------------------------------------
% Factores de posicionamiento de los centros de gravedad
% ------------------------------------------------------------
factor1 = -0.5; factor2 = -0.5; factor3 = -0.5; factor4 = -0.5;
% ------------------------------------------------------------
% Masa de cada elemento (Kg)
% ------------------------------------------------------------
m1 = 10; m2 = 5; m3 = 5; m4 = 3;
% ------------------------------------------------------------
% Coeficiente de rozamiento viscoso de cada articulacion
% ------------------------------------------------------------
b1 = 0.05; b2 = 0.05; b3 = 0.05; b4 = 0.05;
% ------------------------------------------------------------
% Matrices de Inercia (Kg-m^2)
% ------------------------------------------------------------
r10I_r01 = [0.0191 0 0;0 0.0191 0;0 0 0.0068];
r20I_r02 = [0.0031 0 0;0 0.0484 0;0 0 0.0484];
r30I_r03 = [0.0606 0 0;0 0.0053 0;0 0 0.0606];
r40I_r04 = [0.0022 0 0;0 0.0022 0;0 0 0.0014];
% ------------------------------------------------------------
% Vectores ri0pi, ri0si.
% ------------------------------------------------------------
r10p1 = ri0pi(a(1), d(1), alfa(1));
r20p2 = ri0pi(a(2), d(2), alfa(2));
r30p3 = ri0pi(a(3), d(3), alfa(3));
r40p4 = ri0pi(a(4), d(4), alfa(4));
r50p5 = zeros(3,1);
r10s1 = ri0si(a(1), d(1), alfa(1), factor1);
r20s2 = ri0si(a(2), d(2), alfa(2), factor2);
r30s3 = ri0si(a(3), d(3), alfa(3), factor3);
r40s4 = ri0si(a(4), d(4), alfa(4), factor4);
r50s5 = zeros(3,1);
Prctica 3 .- Pg. 12
Prcticas de Robtica utilizando Matlab
% ------------------------------------------------------------
% Matrices de transformacion
% ------------------------------------------------------------
r01 = dh(teta(1), alfa(1)); r10 = r01';
r12 = dh(teta(2), alfa(2)); r21 = r12';
r23 = dh(teta(3), alfa(3)); r32 = r23';
r34 = dh(teta(4), alfa(4)); r43 = r34';
r45 = eye(3); r54 = r45';
% ------------------------------------------------------------
% Velocidad angular de las articulaciones
% ------------------------------------------------------------
r00w0 = zeros(3,1);
r10w1 = ri0wi(r10, r00w0, qp(1));
r20w2 = r21*r10w1;
r30w3 = r32*r20w2;
r40w4 = ri0wi(r43, r30w3, qp(4));
r50w5 = ri0wi(r54, r40w4, 0);
% ------------------------------------------------------------
% Aceleracion angular de las articulaciones
% ------------------------------------------------------------
r00wp0 = zeros(3,1);
r10wp1 = ri0wpi(r10, r00wp0, r00w0, qp(1), qpp(1));
r20wp2 = r21*r10wp1;
r30wp3 = r32*r20wp2;
r40wp4 = ri0wpi(r43, r30wp3, r30w3, qp(4), qpp(4));
r50wp5 = ri0wpi(r54, r40wp4, r40w4, 0, 0);
% ------------------------------------------------------------
% Aceleracion lineal articular
% ------------------------------------------------------------
r00vp0 = [0; 0; g];
r10vp1 = ri0vpi_r(r10, r00vp0, r10wp1, r10w1, r10p1);
r20vp2 = ri0vpi_p(r21, r10vp1, r20wp2, r20w2, r20p2, qp(2), qpp(2));
r30vp3 = ri0vpi_p(r32, r20vp2, r30wp3, r30w3, r30p3, qp(3), qpp(3));
r40vp4 = ri0vpi_r(r43, r30vp3, r40wp4, r40w4, r40p4);
r50vp5 = ri0vpi_r(r54, r40vp4, r50wp5, r50w5, r50p5);
% ------------------------------------------------------------
% Aceleracion del centro de masa de cada elemento
% ------------------------------------------------------------
r10a1 = ri0ai(r10vp1, r10wp1, r10w1, r10s1);
r20a2 = ri0ai(r20vp2, r20wp2, r20w2, r20s2);
r30a3 = ri0ai(r30vp3, r30wp3, r30w3, r30s3);
r40a4 = ri0ai(r40vp4, r40wp4, r40w4, r40s4);
r50a5 = ri0ai(r50vp5, r50wp5, r50w5, r50s5);
% ------------------------------------------------------------
% Fuerza en el centro de masa de cada elemento
% ------------------------------------------------------------
r50f5 = ri0fi(r50a5, m5);
r40f4 = ri0fi(r40a4, m4);
r30f3 = ri0fi(r30a3, m3);
r20f2 = ri0fi(r20a2, m2);
r10f1 = ri0fi(r10a1, m1);
% ------------------------------------------------------------
% Par en el centro de masa de cada elemento
% ------------------------------------------------------------
r50n5 = ri0ni(r50wp5, r50w5, Iexter);
Prctica 3 .- Pg. 13
Prcticas de Robtica utilizando Matlab
% ------------------------------------------------------------
% Fuerzas articulares
% ------------------------------------------------------------
r50f5a = r50f5;
r40f4a = ri0fia(r45, r50f5a, r40f4);
r30f3a = ri0fia(r34, r40f4a, r30f3);
r20f2a = ri0fia(r23, r30f3a, r20f2);
r10f1a = ri0fia(r12, r20f2a, r10f1);
% ------------------------------------------------------------
% Pares articulares
% ------------------------------------------------------------
r20p1 = r21*(r10p1); r30p2 = r32*(r20p2);
r40p3 = r43*(r30p3); r50p4 = r54*(r40p4);
r50n5a = r50n5;
r40n4a = ri0nia(r45, r50n5a, r50f5a, r40n4, r40f4, r50p4, r40p4,
r40s4);
r30n3a = ri0nia(r34, r40n4a, r40f4a, r30n3, r30f3, r40p3, r30p3,
r30s3);
r20n2a = ri0nia(r23, r30n3a, r30f3a, r20n2, r20f2, r30p2, r20p2,
r20s2);
r10n1a = ri0nia(r12, r20n2a, r20f2a, r10n1, r10f1, r20p1, r10p1,
r10s1);
% ------------------------------------------------------------
% Fuerzas y pares de accionamientos
% ------------------------------------------------------------
t_1 = t_r(r10, r10n1a, qp(1), b1);
t_2 = f_p(r21, r20f2a, qp(2), b2);
t_3 = f_p(r32, r30f3a, qp(3), b3);
t_4 = t_r(r43, r40n4a, qp(4), b4);
NOTA: Debe notarse que los parmetros fsicos y geomtricos del robot se han
introducido en el cdigo. Se recuerda que los parmetros de D-H son caractersticos de
cada robot. El factor de posicin del centro de masas de cada eslabn, su masa y su
inercia son datos del robot, as como los coeficientes de rozamiento viscoso aplicables
en cada articulacin.
Prctica 3 .- Pg. 14
Prcticas de Robtica utilizando Matlab
tau =
0.0000
156.8000
0.0000
0
Ejemplo 3.2
utilizada para resolver la dinmica inversa del robot de 6 gdl. Realizando help
NEWTONEULER6, la funcin nos informa sobre los parmetros necesarios para
realizar los clculos.
% NEWTONEULER6 Dinmica inversa utilizando el mtodo de Newton-Euler.
% TAU = NEWTONEULER6(Q, QP, QPP, G, M7, IEXTER) calcula el vector
% 6x1 de pares/fuerzas de entrada a las articulaciones. Q el vector
% 6x1 de coordenadas articulares. QP es el vector 6x1 que representa
% la velocidad de cada articulacin. QPP es el vector 6x1 que indica
% la aceleracin de cada articulacin. G es el valor de la gravedad (m/s^2).
% M7 es la masa de la carga externa(Kg) que transporta el brazo robot.
% IEXTER es la matriz 3x3 de inercia de la carga exterior(Kg-m^2).
%
% See also DH, RI0PI, RI0SI, RI0WI, RI0WIP, RI0VPI_R, RI0AI, RI0FI, RI0NI,
% RI0FIA, RI0NIA, T_R.
% ------------------------------------------------------------
% Parmetros Denavit-Hartenberg del robot
% ------------------------------------------------------------
Prctica 3 .- Pg. 15
Prcticas de Robtica utilizando Matlab
teta = q;
d = [0.315 0 0 0.5 0 0.08];
a = [0 0.45 0 0 0 0 ];
alfa = [-pi/2 0 pi/2 -pi/2 pi/2 0 ];
% ------------------------------------------------------------
% Factores de posicionamiento de los centros de gravedad
% ------------------------------------------------------------
factor1 = -0.5; factor2 = -0.5; factor3 = -0.5;
factor4 = -0.5; factor5 = -0.5; factor6 = -0.5;
% ------------------------------------------------------------
% Masa de cada elemento (Kg)
% ------------------------------------------------------------
m1 = 2.78; m2 = 10.25; m3 = 0;
m4 = 5.57; m5 = 0; m6 = 1.98;
% ------------------------------------------------------------
% Coeficiente de rozamiento viscoso de cada articulacion
% ------------------------------------------------------------
b1 = 0.05; b2 = 0.05; b3 = 0.05;
b4 = 0.05; b5 = 0.05; b6= 0.05;
% ------------------------------------------------------------
% Matrices de Inercia (Kg-m^2)
% ------------------------------------------------------------
r10I_r01 = [0.0191 0 0;0 0.0191 0;0 0 0.0068];
r20I_r02 = [0.0031 0 0;0 0.0484 0;0 0 0.0484];
r30I_r03 = zeros(3,3);
r40I_r04 = [0.0606 0 0;0 0.0053 0;0 0 0.0606];
r50I_r05 = zeros(3,3);
r60I_r06 = [0.0022 0 0;0 0.0022 0;0 0 0.0014];
% ------------------------------------------------------------
% Vectores ri0pi, ri0si.
% ------------------------------------------------------------
r10p1 = ri0pi(a(1), d(1), alfa(1));
r20p2 = ri0pi(a(2), d(2), alfa(2));
r30p3 = ri0pi(a(3), d(3), alfa(3));
r40p4 = ri0pi(a(4), d(4), alfa(4));
r50p5 = ri0pi(a(5), d(5), alfa(5));
r60p6 = ri0pi(a(6), d(6), alfa(6));
r70p7 = zeros(3,1);
% ------------------------------------------------------------
% Matrices de transformacion
% ------------------------------------------------------------
r01 = dh(teta(1), alfa(1)); r10 = r01';
r12 = dh(teta(2), alfa(2)); r21 = r12';
r23 = dh(teta(3), alfa(3)); r32 = r23';
r34 = dh(teta(4), alfa(4)); r43 = r34';
r45 = dh(teta(5), alfa(5)); r54 = r45';
r56 = dh(teta(6), alfa(6)); r65 = r56';
r67 = eye(3); r76 = r67';
Prctica 3 .- Pg. 16
Prcticas de Robtica utilizando Matlab
% ------------------------------------------------------------
% Velocidad angular de las articulaciones
% ------------------------------------------------------------
r00w0 = zeros(3,1);
r10w1 = ri0wi(r10, r00w0, qp(1));
r20w2 = ri0wi(r21, r10w1, qp(2));
r30w3 = ri0wi(r32, r20w2, qp(3));
r40w4 = ri0wi(r43, r30w3, qp(4));
r50w5 = ri0wi(r54, r40w4, qp(5));
r60w6 = ri0wi(r65, r50w5, qp(6));
r70w7 = ri0wi(r76, r60w6, 0);
% ------------------------------------------------------------
% Aceleracion angular de las articulaciones
% ------------------------------------------------------------
r00wp0 = zeros(3,1);
r10wp1 = ri0wpi(r10, r00wp0, r00w0, qp(1), qpp(1));
r20wp2 = ri0wpi(r21, r10wp1, r10w1, qp(2), qpp(2));
r30wp3 = ri0wpi(r32, r20wp2, r20w2, qp(3), qpp(3));
r40wp4 = ri0wpi(r43, r30wp3, r30w3, qp(4), qpp(4));
r50wp5 = ri0wpi(r54, r40wp4, r40w4, qp(5), qpp(5));
r60wp6 = ri0wpi(r65, r50wp5, r50w5, qp(6), qpp(6));
r70wp7 = ri0wpi(r76, r60wp6, r60w6, 0, 0);
% ------------------------------------------------------------
% Aceleracion lineal articular
% ------------------------------------------------------------
r00vp0 = [0; 0; g];
r10vp1 = ri0vpi_r(r10, r00vp0, r10wp1, r10w1, r10p1);
r20vp2 = ri0vpi_r(r21, r10vp1, r20wp2, r20w2, r20p2);
r30vp3 = ri0vpi_r(r32, r20vp2, r30wp3, r30w3, r30p3);
r40vp4 = ri0vpi_r(r43, r30vp3, r40wp4, r40w4, r40p4);
r50vp5 = ri0vpi_r(r54, r40vp4, r50wp5, r50w5, r50p5);
r60vp6 = ri0vpi_r(r65, r50vp5, r60wp6, r60w6, r60p6);
r70vp7 = ri0vpi_r(r76, r60vp6, r70wp7, r70w7, r70p7);
% ------------------------------------------------------------
% Aceleracion del centro de masa de cada elemento
% ------------------------------------------------------------
r10a1 = ri0ai(r10vp1, r10wp1, r10w1, r10s1);
r20a2 = ri0ai(r20vp2, r20wp2, r20w2, r20s2);
r30a3 = ri0ai(r30vp3, r30wp3, r30w3, r30s3);
r40a4 = ri0ai(r40vp4, r40wp4, r40w4, r40s4);
r50a5 = ri0ai(r50vp5, r50wp5, r50w5, r50s5);
r60a6 = ri0ai(r60vp6, r60wp6, r60w6, r60s6);
r70a7 = ri0ai(r70vp7, r70wp7, r70w7, r70s7);
% ------------------------------------------------------------
% Fuerza en el centro de masa de cada elemento
% ------------------------------------------------------------
r70f7 = ri0fi(r70a7, m7);
r60f6 = ri0fi(r60a6, m6);
r50f5 = ri0fi(r50a5, m5);
r40f4 = ri0fi(r40a4, m4);
r30f3 = ri0fi(r30a3, m3);
r20f2 = ri0fi(r20a2, m2);
r10f1 = ri0fi(r10a1, m1);
% ------------------------------------------------------------
% Par en el centro de masa de cada elemento
% ------------------------------------------------------------
Prctica 3 .- Pg. 17
Prcticas de Robtica utilizando Matlab
% ------------------------------------------------------------
% Fuerzas articulares
% ------------------------------------------------------------
r70f7a = r70f7;
r60f6a = ri0fia(r67, r70f7a, r60f6);
r50f5a = ri0fia(r56, r60f6a, r50f5);
r40f4a = ri0fia(r45, r50f5a, r40f4);
r30f3a = ri0fia(r34, r40f4a, r30f3);
r20f2a = ri0fia(r23, r30f3a, r20f2);
r10f1a = ri0fia(r12, r20f2a, r10f1);
% ------------------------------------------------------------
% Pares articulares
% ------------------------------------------------------------
r20p1 = r21*(r10p1); r30p2 = r32*(r20p2);
r40p3 = r43*(r30p3); r50p4 = r54*(r40p4);
r60p5 = r65*(r50p5); r70p6 = r76*(r60p6);
r70n7a = r70n7;
r60n6a = ri0nia(r67, r70n7a, r70f7a, r60n6, r60f6, r70p6, r60p6,
r60s6);
r50n5a = ri0nia(r56, r60n6a, r60f6a, r50n5, r50f5, r60p5, r50p5,
r50s5);
r40n4a = ri0nia(r45, r50n5a, r50f5a, r40n4, r40f4, r50p4, r40p4,
r40s4);
r30n3a = ri0nia(r34, r40n4a, r40f4a, r30n3, r30f3, r40p3, r30p3,
r30s3);
r20n2a = ri0nia(r23, r30n3a, r30f3a, r20n2, r20f2, r30p2, r20p2,
r20s2);
r10n1a = ri0nia(r12, r20n2a, r20f2a, r10n1, r10f1, r20p1, r10p1,
r10s1);
% ------------------------------------------------------------
% Fuerzas y pares de accionamientos
% ------------------------------------------------------------
t_1 = t_r(r10, r10n1a, qp(1), b1);
t_2 = t_r(r21, r20n2a, qp(2), b2);
t_3 = t_r(r32, r30n3a, qp(3), b3);
t_4 = t_r(r43, r40n4a, qp(4), b4);
t_5 = t_r(r54, r50n5a, qp(5), b5);
t_6 = t_r(r65, r60n6a, qp(6), b6);
NOTA: Debe notarse que los parmetros fsicos y geomtricos del robot se han
introducido en el cdigo. Se recuerda que los parmetros de D-H son caractersticos de
cada robot. El factor de posicin del centro de masas de cada eslabn, su masa y su
inercia son datos del robot, as como los coeficientes de rozamiento viscoso aplicables
en cada articulacin.
Prctica 3 .- Pg. 18
Prcticas de Robtica utilizando Matlab
donde:
De la ecuacin (3.34) se observa que las fuerzas y pares en las articulaciones son
funciones lineales de las aceleraciones articulares. Se define b como un vector
equivalente a los efectos de la gravedad, las aceleraciones centrifugas y de Coriolis y las
fuerzas externas aplicadas sobre el elemento N:
H ( q) q = ( b) (3.36)
Prctica 3 .- Pg. 19
Prcticas de Robtica utilizando Matlab
F j = M j v j = M j ( z j 1 c j ) = z j 1 ( M j c j ) para j rotacional
N j = E j z j 1 (3.37)
F j = M j v j 1 para j traslacional
Nj =0 (3.38)
donde:
Puesto que Fi y Ni son cero para i<j, utilizando las ecuaciones (3.24) y (3.25) se obtiene
que:
f i = f i +1
ni = ni +1 + pi* f i +1 para i=1 ... j-1 y
(3.39)
f j = Fj
n j = N j + c j + Fj
Prctica 3 .- Pg. 20
Prcticas de Robtica utilizando Matlab
luego empezando con i=j , las ecuaciones anteriores pueden ser usadas para obtener ni y
fi para i j.
Los parmetros Mj,cj yEj utilizados en las ecuaciones (3.37) y (3.38) se calculan con las
siguientes ecuaciones:
para el elemento N:
M N = mN
c N = s N + p *N
EN = J N
y para el resto:
M j = M j +1 + m j
1
cj =
Mj
[
m j (s j + p *j ) + M j +1 (c j +1 + p *j ) ]
[ T
]
E j = E j 1 + M j 1 (c j +1 + p *j c j )* (c j +1 + p *j c j )I (c j +1 + p *j c j )(c j +1 + p *j c j ) +
[ T
+ J j + m j (s j + p *j c j )* (s j + p *j c j )I (s j + p *j c j )(c j +1 + p *j c j ) ]
donde:
Prctica 3 .- Pg. 21
Prcticas de Robtica utilizando Matlab
Ejemplo 3.3
para resolver la dinmica directa del robot prismtico de 4 gdl. Realizando help
WALKERORIN4, la funcin nos informa sobre los parmetros necesarios para realizar
los clculos.
% WALKERORIN4 Tercer mtodo de Walker & Orin.
% QPP = WALKERORIN4(Q, QP, TAU, MASAEXT, INERCIAEXT) calcula la cinemtica
% inversa del robot de 4GDL devolviendo el vector 4x1 que representa la
% aceleracin de cada articulacin utilizando el tercer mtodo de Walker y
Orin.
% Q es el vector 4x1 de variables articulares. QP es el vector 4x1 que
% representa la velocidad de cada articulacin. TAU es el vector 4x1
% que representa el par de entrada a cada articulacin. MASAEXT es
% la masa de la carga externa. INERCIAEXT es la inercia de la carga externa.
%
% See also NEWTONEULER4, H4.
% Se calcula el vector b.
b = newtoneuler4(q,qp,zeros(4,1),9.8,masaext,inerciaext);
Para comprobar el funcionamiento del cdigo presentado se sugiere al lector que realice
tanto la dinmica inversa como la directa del robot estudiado, tal y como muestra el
siguiente ejemplo.
Prctica 3 .- Pg. 22
Prcticas de Robtica utilizando Matlab
q=rand(4,1);
qp=rand(4,1);
qpp=rand(4,1);
m4=3;
iext=0.05*eye(3);
tau=newtoneuler4(q,qp,qpp,9.8,m4,iext)
tau =
0.5229
160.0619
2.0591
0.0315
acel=walkerorin4(q,qp,tau,m4,iext)
acel =
0.1389
0.2028
0.1987
0.6038
qpp
qpp =
0.1389
0.2028
0.1987
0.6038
Ejemplo 3.4
para resolver la dinmica directa del robot rotacional de 6 gdl. Realizando help
WALKERORIN6, la funcin nos informa sobre los parmetros necesarios para realizar
los clculos.
Prctica 3 .- Pg. 23
Prcticas de Robtica utilizando Matlab
% Se calcula el vector b.
b = newtoneuler6(q,qp,zeros(6,1),9.8,masaext,inerciaext);
q=rand(6,1);
qp=rand(6,1);
qpp=rand(6,1);
m7=3;
iext=0.05*eye(3);
tau=newtoneuler6(q,qp,qpp,9.8,m7,iext);
acel=walkerorin6(q,qp,tau,m7,iext)
acel =
0.8537
0.5936
0.4966
0.8998
0.8216
0.6449
qpp
qpp =
0.8537
0.5936
0.4966
0.8998
0.8216
0.6449
Prctica 3 .- Pg. 24
z0 z1 z2 z3
Prcticas de Robtica utilizando Matlab
x0 x1 x2 x3
3.4.- PRACTICA.
y
Simulacin pndulo de 3 gdl.
y0 2 1 3 y2 y3
1
Utilizando el mtodo de Walker y Orin para el clculo de la dinmica directa de
un robot, se va a simular cual sera el comportamiento de un pndulo de 3GDL, ver
figura 3.4, si no se le aplica ningn par en ninguna de las articulaciones. Los parmetros
de Denavit Hartenberg del pndulo se muestran en la tabla 3.2.
Eslabn i di ai i
1 1 0 1m 0
2 2 0 1m 0
3 3 0 1m 0
Prctica 3 .- Pg. 25
Prcticas de Robtica utilizando Matlab
Hay que destacar que para actualizar la posicin y la velocidad de cada articulacin se
utiliza el mtodo de Walker y Orin en combinacin con el mtodo de integracin de
Runge-Kutta de orden cuatro. Esto se debe a que el tercer mtodo de Walker y Orin
proporciona la aceleracin de cada articulacin, por lo que es necesario utilizar un
mtodo de integracin para obtener la posicin y la velocidad de cada articulacin. A
continuacin se muestra el cdigo en Matlab de la funcin WALKERORINRUNGE3,
que combina el mtodo de Walker y Orin junto con el de Runge-Kutta para el clculo de
la posicin y velocidad de cada articulacin:
h = (tf-t0);
% Primer termino.
t1 = t0;
q1 = qini;
qp1= qpini;
v1 = h*qpini;
w1 = h*walkerorin3(q1,qp1,par,masaext,inerciaext);
% Segundo termino.
t2 = t0 + .5*h;
q2 = qini + .5*v1;
qp2= qpini + .5*w1;
Prctica 3 .- Pg. 26
Prcticas de Robtica utilizando Matlab
v2 = h*(qpini + .5*w1);
w2 = h*walkerorin3(q2,qp2,par,masaext,inerciaext);
% Tercer termino.
t3 = t0 + .5*h;
q3 = qini + .5*v2;
qp3= qpini + .5*w2;
v3 = h*(qpini + .5*w2);
w3 = h*walkerorin3(q3,qp3,par,masaext,inerciaext);
% Cuarto termino.
t4 = t0 + h;
q4 = qini + v3;
qp4= qpini + w3;
v4 = h*(qpini + w3);
w4 = h*walkerorin3(q4,qp4,par,masaext,inerciaext);
% Formula de Runge-Kutta.
qfin = qini + (v1 + 2*v2 + 2*v3 + v4)/6;
qpfin = qpini + (w1 + 2*w2 + 2*w3 + w4)/6;
mat_q=simula3(1,0.001);
function animacion3(mat_q)
Prctica 3 .- Pg. 27
Prcticas de Robtica utilizando Matlab
% Se dibuja el robot
x = [x0 x1 x2 x3];
y = [y0 y1 y2 y3];
set(p,'XData',x,'YData',y);
% Se fuerza a MATLAB a actualizar la pantalla
drawnow;
end
animacion3(mat_q)
Prctica 3 .- Pg. 28
Prcticas de Robtica utilizando Matlab
Prctica 3 .- Pg. 29