Cinematic A Direct A Robot

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 29

Prcticas de Robtica utilizando Matlab

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

Siguiendo con la filosofa de este libro, se recomienda al lector que quiera


profundizar sobre la dinmica de robots, la lectura de los textos [1],[2],[3], donde se
estudian varias formulaciones clsicas como Lagrange-Euler o las ecuaciones
generalizadas de DAlembert. Hay que tener en cuenta que las ecuaciones de
movimiento obtenidas con estas formulaciones son equivalentes en el sentido que
describen la conducta dinmica del robot, sin embargo, cada una de ellas presenta
caractersticas diferentes que la hacen ms apropiada para ciertas tareas. Por ejemplo, la
formulacin de Lagrange-Euler presenta un modelo simple y elegante, dando como
resultado una serie de ecuaciones diferenciales no lineales de 2 orden acopladas tiles
para el estudio de estrategias de control en el espacio de estados de las variables
articulares del robot, pero que se presentan ineficaces para aplicaciones en tiempo real
dado el elevado tiempo de computacin que requieren las operaciones con matrices de
transformacin homognea.

Los modelos dinmicos que se estudian en esta prctica estn basados en el


algoritmo recursivo de Newton-Euler (N-E) desarrollado por Luh [1]. Aunque las
formulaciones recursivas destruyen la estructura del modelo dinmico analtico y dan
lugar a la falta de ecuaciones cerradas necesarias para el anlisis del control, la
dificultad de un anlisis clsico es enorme debido a que se obtienen expresiones
fuertemente no-lineales que constan de cargas inerciales, fuerzas de acoplo entre las
articulaciones y efectos de las cargas de gravedad, con la dificultad aadida de que los
pares/fuerzas dinmicos dependen de los parmetros fsicos del manipulador, de la
configuracin instantnea de las articulaciones, de la velocidad, de la aceleracin y de la

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.

3.2.-Dinmica inversa. La formulacin de Newton-Euler


El mtodo de Newton-Euler permite obtener un conjunto de ecuaciones
recursivas hacia delante de velocidad y aceleracin lineal y angular las cuales estn
referidas a cada sistema de referencia articular. Las velocidades y aceleraciones de cada
elemento se propagan hacia adelante desde el sistema de referencia de la base hasta el
efector final. Las ecuaciones recursivas hacia atrs calculan los pares y fuerzas
necesarios para cada articulacin desde la mano (incluyendo en ella efectos de fuerzas
externas), hasta el sistema de referencia de la base.

3.2.1. Sistemas de coordenadas en movimiento.

La formulacin de N-E se basa en los sistemas de coordenadas en movimiento


[1].

z*
P
r*
0*
y*
z0 r
h
x*

0
y0

x0

Figura 3.1. Sistemas de coordenadas en movimiento

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]

De manera similar la aceleracin general del sistema de puede describir como:

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

3.2.2. Cinemtica de los eslabones del Robot.

A partir de las ecuaciones (3.1) a (3.5) de la seccin anterior se desarrolla a


continuacin el planteamiento general para la cinemtica de los eslabones del robot [1]
zi-1

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

Figura 3.2. Relaciones vectoriales entre los sistemas de referencia 0,0* y 0

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.

La aceleracin lineal del sistema de coordenadas de la articulacin i es:

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

por lo que la ecuacin (3.8) queda como:

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:

zi 1qi si el eslabn i es rotacional


wi* = (3.11)
0 si el eslabn i es traslacional

donde q i es la magnitud de la velocidad angular del eslabn i con respecto al sistema de


coordenadas (xi-1, yi-1, zi-1). De manera similar:

zi 1qi si el eslabn i es rotacional


d * w*
= (3.12)
dt
0 si el eslabn i es traslacional

Debe notarse que el vector zi 1 es igual a (0, 0, 1)T.

Prctica 3 .- Pg. 4
Prcticas de Robtica utilizando Matlab

Las velocidades y aceleraciones de los sistemas de coordenadas ligados a cada eslabn


son absolutas y se calculan como:

wi 1 + zi 1qi si el eslabn i es rotacional


wi = (3.13)
wi 1 si el eslabn i es traslacional

w i 1 + zi 1qi + wi 1 (zi 1qi ) si el eslabn i es rotacional


w i = (3.14)
w i 1 si el eslabn i es traslacional

Las velocidades lineales de los sistemas de referencia de cada eslabn se calculan como:

wi pi* si el eslabn i es rotacional


d * pi
= (3.15)
dt
zi 1qi si el eslabn i es traslacional

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:

wi pi* + vi 1 si el eslabn i es rotacional


vi = (3.17)
zi 1q i + wi pi* + vi 1 si el eslabn i es traslacional

La aceleracin 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

3.2.3. Ecuaciones de movimiento recursivas.

A partir de las ecuaciones cinemticas del apartado anterior y aplicando el principio de


DAlembert del equilibrio esttico para todos los instantes de tiempo, se obtienen las
ecuaciones recursivas de Newton-Euler.[1]

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

Centro de masa del elemento i


O
fi p i* + s i = ri p i 1
(xi-1, yi-1, zi-1)
si
p * (xi, yi, zi)
ni i
O*
fi+1

ri ni+1
pi-1
Elemento i-1 pi
Elemento i+1

z0

y0
x0

Figura 3.3.Fuerzas y momentos sobre el elemento i

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

fi fuerza ejercida sobre el elemento i por el elemento (i-1) en el


sistema de coordenadas (xi-1, yi-1, zi-1) para soportar al elemento i
y a los elementos por encima de l,
ni momento ejercido sobre el elemento i por el elemento (i-1) en el
sistema de coordenadas (xi-1, yi-1, zi-1),

NOTA: Es importante que se identifiquen estas variables sobre el dibujo del robot,
para poder seguir los siguientes desarrollos.

Si se omiten los efectos del rozamiento viscoso en las articulaciones, y se aplica el


principio de DAlembert, se obtiene para cada eslabn:

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

realizando el balance de pares y fuerzas en la figura 3.3:

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)

que utilizando la relacin geomtrica:

ri pi 1 = pi* + si (3.23)

se obtienen las ecuaciones recursivas:

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.

Por lo tanto, el par/fuerza para cada articulacin se expresa como:

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

donde bi es el coeficiente de rozamiento viscoso de la articulacin.

Prctica 3 .- Pg. 7
Prcticas de Robtica utilizando Matlab

3.2.4. Algoritmo computacional.

En resumen de los dos apartados anteriores, las ecuaciones de N-E consisten en un


conjunto de ecuaciones recursivas [(3.13),(3.14), (3.17), (3.18)] hacia delante y
[(3.18),(3.19), (3.20), (3.21),(3.26)] hacia atrs.

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.

De esta manera, las ecuaciones recursivas de N-E quedan expresadas en la siguiente


tabla:

Prctica 3 .- Pg. 8
Prcticas de Robtica utilizando Matlab

Ecuaciones hacia delante: i = 1,2,....,n

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)

Ecuaciones hacia atrs: i =n,n-1,....,1

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

Tabla 3.1. Algoritmo recursivo de N-E

Prctica 3 .- Pg. 9
Prcticas de Robtica utilizando Matlab

NOTA: Para la utilizacin de este algoritmo en la solucin del problema dinmico


inverso de un manipulador de cadena abierta se tienen que tener en cuenta las siguientes
consideraciones:
n = nmero de elementos de la cadena.

w0 = w 0 = v0 = 0, (la base del robot se considera en reposo)


v0 = g = (g x , g y , g z ) con g = 9.8 m/s2
T

z0 = (0,0,1) lo que implica v0 = g = (0,0, g ) con g = 9.8


T T

Ejemplo 3.1

A continuacin se presenta la implementacin del algoritmo de N-E para el robot


prismtico de 4 gdl.

Cada una de las ecuaciones (3.27) a (3.33) han sido


implementadas por los autores como una funcin de
MatLab , y se proporcionarn para la realizacin de la

prctica.

La notacin que se ha utilizado en las funciones


necesarias para poder ejecutar el algoritmo se
corresponde con la siguiente tabla:

Dh Calcula la matriz de rotacin i 1


Ri
Ri0pi i
R0 p *
i
Ri0si i
R0 s i
Ri0wi i
R0 wi
Ri0wpi i
R0 w i
Ri0vpi i
R0 vi
Ri0ai i
R0 ai
Ri0fi i
R0 Fi
Ri0ni i
R0 N i
Ri0fia i
R0 f i
Ri0nia i
R0 n i
T_r i
R0 i para una articulacin rotacional
T_p i
R0 i para una articulacin prismtica

Prctica 3 .- Pg. 10
Prcticas de Robtica utilizando Matlab

NOTA: Se recomienda que desde el entorno MatLab , se consulte la ayuda de todas


las funciones anteriores, fijndose en los parmetros que se le pasan a la funcin en cada
caso.

help ri0pi

RI0PI Vector ri0pi.


Y = RI0PI(A, D, ALFA) calcula el vector 3x1 que representa la
localizacin de (xi,yi,zi) desde el origen de (xi-1,yi-1,zi-1)
con respecto al sistema de coordenadas i-simo utilizando los
parmetros de Denavit-Hartenberg A, D y ALFA.

Cdigo en MatLab . A continuacin se presenta la funcin NEWTONEULER4,


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

NEWTONEULER4 Dinmica inversa utilizando el mtodo de Newton-Euler.


TAU = NEWTONEULER4(Q, QP, QPP, G, M5, IEXTER) calcula el vector
4x1 de pares/fuerzas de entrada a las articulaciones. Q el
vector 4x1 de coordenadas articulares. QP es el vector 4x1 que
representa la velocidad de cada articulacin. QPP es el vector
4x1 que indicala aceleracin de cada articulacin. G es el valor
de la gravedad (m/s^2).
M5 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, F_P.

Es importante que el lector repare en los parmetros que se pasan en cada caso a la
funcin correspondiente.

En este ejemplo, para contabilizar los efectos de la carga exterior, se ha introducido


como un eslabn n 5. Para ello se ha necesitado definir una articulacin entre el
eslabn 4 y el 5, que puede definirse utilizando las libreras de enlace rotacional o
prismtico, dado que como condiciones de este eslabn imponen q5 = q5 = 0 , de manera
que las ecuaciones (3.27),(3.28) y (3.29) coinciden para ambas libreras.

Prctica 3 .- Pg. 11
Prcticas de Robtica utilizando Matlab

% NEWTONEULER4 Dinmica inversa utilizando el mtodo de Newton-


Euler.
% TAU = NEWTONEULER4(Q, QP, QPP, G, M5, IEXTER) calcula el vector
% 4x1 de pares/fuerzas de entrada a las articulaciones. Q el vector
% 4x1 de coordenadas articulares. QP es el vector 4x1 que representa
% la velocidad de cada articulacin. QPP es el vector 4x1 que indica
% la aceleracin de cada articulacin. G es el valor de la gravedad
(m/s^2).
% M5 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, F_P.

function tau = newtoneuler4(q,qp,qpp,g,m5,Iexter);

% ------------------------------------------------------------
% 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

r40n4 = ri0ni(r40wp4, r40w4, r40I_r04);


r30n3 = ri0ni(r30wp3, r30w3, r30I_r03);
r20n2 = ri0ni(r20wp2, r20w2, r20I_r02);
r10n1 = ri0ni(r10wp1, r10w1, r10I_r01);

% ------------------------------------------------------------
% 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);

tau = [t_1; t_2; t_3; t_4];

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.

Se recomienda que compruebe la funcin para velocidades y aceleraciones nulas,


observando los resultados que se obtienen. En el ejemplo siguiente, se introducen
velocidades y aceleraciones nulas en todas las articulaciones. Se puede comprobar como
la fuerza en la articulacin 2 (156 N) corresponde con el peso de los eslabones 2,3,4 y la
masa exterior que debe ser soportado por la articulacin.

Prctica 3 .- Pg. 14
Prcticas de Robtica utilizando Matlab

q=[0 0.5 0.4 0];


qp=[0 0 0 0];
qpp=qp;
m4=3;
iext=0.05*eye(3);
tau=newtoneuler4(q,qp,qpp,9.8,m4,iext)

tau =

0.0000
156.8000
0.0000
0

Ejemplo 3.2

Se muestra a continuacin la implementacin del algoritmo de N-E para el robot


rotacional de 6 gdl.

Se observa que a diferencia del ejemplo


anterior, en este caso solamente se utilizan las
libreras de las funciones de enlaces
rotacionales.

Cdigo en MatLab . A continuacin se presenta la funcin NEWTONEULER6,


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.

function tau = newtoneuler6(q,qp,qpp,g,m7,Iexter);

% ------------------------------------------------------------
% 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);

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 = ri0si(a(5), d(5), alfa(5), factor5);
r60s6 = ri0si(a(6), d(6), alfa(6), factor6);
r70s7 = 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

r70n7 = ri0ni(r70wp7, r70w7, Iexter);


r60n6 = ri0ni(r60wp6, r60w6, r60I_r06);
r50n5 = ri0ni(r50wp5, r50w5, r50I_r05);
r40n4 = ri0ni(r40wp4, r40w4, r40I_r04);
r30n3 = ri0ni(r30wp3, r30w3, r30I_r03);
r20n2 = ri0ni(r20wp2, r20w2, r20I_r02);
r10n1 = ri0ni(r10wp1, r10w1, r10I_r01);

% ------------------------------------------------------------
% 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);

tau = [t_1; t_2; t_3; t_4; t_5; t_6];

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

3.3.-Dinmica directa. Mtodo de Walker-Orin.


Las ecuaciones de movimiento planteadas en el apartado anterior permiten
resolver el problema de la dinmica directa.

M.W.Walker y D.E.Orin [3 ] presentaron en 1982 cuatro mtodos para la resolucin del


problema dinmico directo de una cadena cinemtica abierta utilizando la formulacin
de N-E. En el artculo se realiza una comparacin de la eficiencia computacional de los
cuatro mtodos presentados, concluyendo que el tercero de los presentados es el ms
eficiente frente al tiempo de cmputo. Para la realizacin de esta prctica los autores
han implementado el tercer mtodo de Walker-Orin. (los ficheros se proporcionan
durante la prctica).

NOTA: Se recomienda al lector interesado la lectura del artculo de M.W.Walker y


D.E.Orin, dnde se presentan el resto de mtodos que no han sido usados en este libro.

Walker y Orin resuelven la ecuacin general del robot:

H (q)q + C(q, q )q + G(q) + K (q)T k = (3.34)

donde:

H (q) Matriz no singular NxN de los momentos de inercia.


C ( q, q ) Matriz NxN que contabiliza los efectos de las aceleraciones centrfugas y
de Coriolis.
G (q) Vector Nx1 que contabiliza los efectos de la gravedad.
K (q) Matriz Jacobiana 6xN que especifica los pares (fuerzas) creados en cada
articulacin debido a las fuerzas y momentos externos aplicados sobre el
elemento N.
k Vector 6x1 de los momentos y fuerzas externas ejercidos sobre el
elemento N.
Vector Nx1 de los pares (fuerzas) de cada articulacin. (tau en los
ejemplos anteriores).
q Vector Nx1 de las variables articulares.

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:

b = C(q, q )q + G(q) + K (q)T k (3.35)

Entonces, la ecuacin (3.34) se puede poner como:

H ( q) q = ( b) (3.36)

Prctica 3 .- Pg. 19
Prcticas de Robtica utilizando Matlab

El vector b se puede calcular fcilmente utilizando la funcin NEWTONEULER del


apartado anterior. Se llama a la funcin NEWTONEULER con los parmetros q, qp,
masaext e inerciaext (efectos de las fuerzas externas) correspondientes a la
configuracin estudiada, y colocando a cero el parmetro qpp correspondiente a la
aceleracin. De la ecuacin (3.36) se observa que en este caso = b .

En el clculo de la matriz H (q) es donde los diferentes mtodos de Walker y Orin


difieren.

Para el clculo de H (q) se va a utilizar el tercer mtodo de Walker y Orin. Este


algoritmo aprovecha la simetra de la matriz H (q) para calcular la diagonal principal y
los trminos de la mitad superior. Estos componentes se calculan con el siguiente orden
HN,N, HN-1,N,....., H1,N,; HN-1,N-1, HN-2,N-1,....., H1,N-1,;.....etc. Para el clculo de la
articulacin j, los ltimos N-j+1 elementos aparecen como un cuerpo rgido, luego la
articulacin j es la nica con movimiento. En este caso, y conocida la localizacin del
centro de masas y el momento de inercia de este elemento ficticio, la fuerza total Fj y el
momento Nj ejercidos en el sistema compuesto por los elementos j hasta N se calcula
como:

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:

Mj masa total de los elementos j hasta N


v j aceleracin lineal del centro de masas del cuerpo rgido compuesto por los
elementos j hasta N
cj localizacin del c.d.m. del cuerpo rgido compuesto respecto a las coordenadas
del elemento j-1
Ej la matriz de momentos de inercia del cuerpo rgido compuesto por los elementos
j hasta N

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 componentes de la matriz de momentos de inercia a lo largo de la columna j son


iguales a los pares y fuerzas generados en las articulaciones. Luego para i j:

zi 1ni para articulacin i rotacional


H ij (3.40)
zi 1 f i para articulacin j traslacional

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:

mj masa del elemento j


sj posicin del centro de masas del elemento i respecto a las coordenadas del
elemento j
Jj matriz de momentos de inercia del elemento j
I matriz identidad 3x3

Prctica 3 .- Pg. 21
Prcticas de Robtica utilizando Matlab

Ejemplo 3.3

Se muestra a continuacin un ejemplo en el que se resuelve la dinmica directa del


robot prismtico de 4 gdl.

Cdigo en MatLab . A continuacin se presenta la funcin WALKERORIN4, utilizada


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.

function qpp = walkerorin4(q,qp,tau,masaext,inerciaext)

% Se calcula el vector b.
b = newtoneuler4(q,qp,zeros(4,1),9.8,masaext,inerciaext);

% Se calcula la matriz de momentos de inercia H.


H = h4(q,masaext,inerciaext);

% Se calcula el vector de aceleracin de cada articulacin.


qpp = inv(H)*(tau-b);

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

Se muestra a continuacin un ejemplo en el que se resuelve la dinmica directa del


robot rotacional de 6 gdl.

Cdigo en MatLab . A continuacin se presenta la funcin WALKERORIN6, utilizada


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

% WALKERORIN6 Tercer mtodo de Walker & Orin.


% QPP = WALKERORIN6(Q, QP, TAU, MASAEXT, INERCIAEXT) calcula la cinemtica
% inversa del robot de 6GDL devolviendo el vector 6x1 que representa la
% aceleracin de cada articulacin utilizando el tercer mtodo de Walker y
Orin.
% Q es el vector 6x1 de variables articulares. QP es el vector 6x1 que
% representa la velocidad de cada articulacin. TAU es el vector 6x1
% 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 NEWTONEULER6, H6.

function qpp = walkerorin6(q,qp,tau,masaext,inerciaext)

% Se calcula el vector b.
b = newtoneuler6(q,qp,zeros(6,1),9.8,masaext,inerciaext);

% Se calcula la matriz de momentos de inercia H.


H = h6(q,masaext,inerciaext);

% Se calcula el vector de aceleracin de cada articulacin.


qpp = inv(H)*(tau-b);

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.

Figura 3.4. Representacin D-H del pndulo de 3 gdl

Eslabn i di ai i
1 1 0 1m 0
2 2 0 1m 0
3 3 0 1m 0

Tabla 3.2 Parmetros de D-H para el robot cilndrico de la figura-3.1

Se ha simulado el comportamiento del pndulo suponiendo que la posicin y la


velocidad de cada articulacin son inicialmente nulas. As mismo se ha considerado que
el pndulo no posee ninguna masa externa.

A continuacin se presenta la funcin SIMULA3, que simula el comportamiento del


pndulo de 3 GDL.

% SIMULA3 Simulacin del pndulo de 3GDL.


% MAT_Q = SIMULA3(TSIM, PINT) simula el comportamiento del pndulo
% de 3 GDL suponiendo que no existe ningn par en ninguna de las
% articulaciones. TSIM indica el tiempo total de la simulacin en
% segundos. PINT es el periodo de integracin en segundos. Este
% periodo se utiliza para dividir el tiempo de simulacin en intervalos.
% En MAT_Q se devuelven las coordenadas articulares del robot, almacenadas
% por columnas, correspondientes a cada intervalo de tiempo. MAT_Q es una
% matriz de 3 filas y una columna por cada intervalo de simulacin.
%
% See also WALKERORINRUNGE3.

function mat_q = simula3(tsim, pint)

% Caractersticas de la carga externa


masaext = 0;
inerciaext = zeros(3);

% Posicin y velocidad inicial de las articulaciones del robot


q = zeros(3,1);
qp = zeros(3,1);

Prctica 3 .- Pg. 25
Prcticas de Robtica utilizando Matlab

% Vector de tiempo dividido en intervalos


t = 0:pint:tsim;
% Nmero de intervalos + 1
n = length(t);

% Inicializacin de la matriz de coordenadas articulares


mat_q(:,1) = q;

% Se calcula las coordenadas articulares del robot


% en cada intervalo de la simulacin
for i=2:n
% Se calcula la posicin y la velocidad de cada articulacin
% combinando el tercer mtodo de Walker & Orin con el mtodo
% de integracin de Runge-Kutta.
[q qp] = walkerorinrunge3(q,qp,zeros(3,1),t(i-1),t(i),masaext,inerciaext);

% Se almacenan las coordenadas articulares


mat_q(:,i) = q;
end

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:

% WALKERORINRUNGE3 Tercer mtodo de Walker & Orin.


% [QFIN, QPFIN] = WALKERORINRUNGE3(QINI, QPINI, PAR, T0, TF, MASAEXT,
% INERCIAEXT) calcula la posicin y la velocidad de cada articulacin
% del pndulo de 3 GDL combinando el tercer mtodo de Walker & Orin
% con el mtodo de integracin de Runge-Kutta de orden cuatro.
% QINI es el vector 3x1 de variables articulares en el instante de
% tiempo T0. QPINI es el vector 3x1 que representa la velocidad de
% cada articulacin en el instante de tiempo T0. PAR es el vector
% 3x1 que representa el par de entrada a cada articulacin. T0 y TF
% representan, respectivamente, los valores de inicio y de fin del
% intervalo de tiempo. MASAEXT es la masa de la carga externa.
% INERCIAEXT es la inercia de la carga externa. En QFIN y QPFIN se
% devuelven, respectivamente, los vectores 3x1 de posicin y
% velocidad de cada articulacin en el instante de tiempo TF.
%
% See also WALKERORIN3.

function [qfin, qpfin] =


walkerorinrunge3(qini,qpini,par,t0,tf,masaext,inerciaext);

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;

% Redondeo para evitar oscilacion numerica.


qfin = round(qfin*1e13)/1e13;
qpfin = round(qpfin*1e13)/1e13;

En el cdigo anterior se hacen varias llamadas a la funcin WALKERORIN3. Esta


funcin calcula la dinmica directa del pndulo de 3GDL utilizando el tercer mtodo de
Walker y Orin. Para el clculo de la dinmica directa se utilizan las funciones
NEWTONEULER3 y H3.

Para simular el comportamiento del pndulo de 3GDL durante 1 segundo considerando


un periodo de integracin de 0.001 segundos se procedera de la siguiente manera en
Matlab :

mat_q=simula3(1,0.001);

Para comprobar visualmente el comportamiento del pndulo de 3GDL se ha


desarrollado la funcin ANIMACION3. El cdigo de esta funcin se muestra a
continuacin:

% ANIMACION3 Animacin del movimiento del pndulo de 3GDL.


% ANIMACION3(MAT_Q) realiza la animacin del movimiento del
% pndulo de 3GDL a partir de las coordenadas articulares
% almacenadas en la matriz MAT_Q. MAT_Q contiene 3 filas
% y una columna para cada disposicin del robot durante el
% movimiento.

function animacion3(mat_q)

% Parmetros Denavit-Hartenberg del robot


d = [0 0 0];
a = [1 1 1];
alfa = [0 0 0];

% Vector de posicion (x, y) del sistema de coordenadas de referencia


x0 = 0; y0 = 0;

Prctica 3 .- Pg. 27
Prcticas de Robtica utilizando Matlab

% Se dibuja el sistema de coordenadas de referencia. Se asigna el modo XOR


para borrar
% slo el robot dibujado anteriormente.
p = plot(x0,y0,'EraseMode','xor');
% Se asigna una rejilla a los ejes
grid;
% Se establecen los lmites de los ejes
axis([-3.2 3.2 -3.1 1]);

% Mantiene el grfico actual


hold on;

% Nmero de columnas de la matriz


n = size(mat_q,2);

% Se dibuja la disposicin del robot correspondiente a cada columna


for i=1:n
% Variables articulares del brazo robot
teta1 = mat_q(1,i);
teta2 = mat_q(2,i);
teta3 = mat_q(3,i);

% Matrices de transformacin homognea entre sistemas de coordenadas


consecutivos
A01 = denavit(teta1, d(1), a(1), alfa(1));
A12 = denavit(teta2, d(2), a(2), alfa(2));
A23 = denavit(teta3, d(3), a(3), alfa(3));

% Matrices de transformacin del primer sistema al correspondiente


A02 = A01 * A12;
A03 = A02 * A23;

% Vector de posicion (x, y) de cada sistema de coordenadas


x1 = A01(1,4); y1 = A01(2,4);
x2 = A02(1,4); y2 = A02(2,4);
x3 = A03(1,4); y3 = A03(2,4);

% 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

Para realizar la animacin del comportamiento simulado anteriormente se procedera de


la siguiente manera en Matlab:

animacion3(mat_q)

Al ejecutar la funcin en Matlab nos aparecer una ventana similar a mostrada en la


figura 3.5 en la que se visualizar la animacin.

Prctica 3 .- Pg. 28
Prcticas de Robtica utilizando Matlab

Figura. 3.5. Aspecto de la visualizacin de la animacin del pndulo de 3GDL.

Prctica 3 .- Pg. 29

También podría gustarte