Documentos de Académico
Documentos de Profesional
Documentos de Cultura
INDUSTRIAL
2022/2023
PRÁCTICA 1
5 ENERO
1
Robot IRB 120 de ABB
Descripción
Dado el robot de tipo SCARA representado en la Figura 1, donde los rangos de las articulaciones son los
siguientes:
Ejercicio 1
Obtega los valores de DH del robot.
Art. θ(rad) d(mm) a(mm) α(rad)
1 θ1 + π/2 800 400 0
2 θ2 0 300 0
3 θ3 0 0 π
4 0 200+d4 0 0
En matlab lo escribimos de la siguiente manera:
%Parámetros DH
%L = link([alpha, a, theta, d, sigma, offset]);
L1 = link([ 0, 400, 0, 800, 0, pi/2]);
L2 = link([ 0, 300, 0, 0, 0, 0]);
L3 = link([pi, 0, 0, 0, 0, 0]);
L4 = link([ 0, 0, 0, 0, 1, 200]);
SCARA_P1 = robot({L1,L2,L3,L4});
SCARA_P1.name ='SCARA P1';
2
Vemos que evidentemente no se parece al robot que hemos definido, para ello añadimos
un eslabón inicial L0.
%Parámetros DH
%L = link([alpha, a, theta, d, sigma, offset]);
L0 = link([ 0, 0, 0, 800, 0, 0]);
L1 = link([ 0, 400, 0, 0, 0, pi/2]);
L2 = link([ 0, 300, 0, 0, 0, 0]);
L3 = link([pi, 0, 0, 0, 0, 0]);
L4 = link([ 0, 0, 0, 0, 1, 200]);
SCARA_P1 = robot({L0,L1,L2,L3,L4});
SCARA_P1.name ='SCARA P1';
3
Ejercicio 2
Indique la posición y orientación del robot para las siguientes articulaciones
Q = (20º -30º -10º 100 mm)
Nos vamos a matlab y primero comprobamos que las articulaciones sean válidas:
%Valores de las articulaciones
q1=deg2rad(20);
q2=deg2rad(-30);
q3=deg2rad(-10);
d4=100;
%Comprobamos que los valores de las articulaciones son válidos
if (q1>deg2rad(150))
disp ('ERROR, rango superado para q1')
end
4
if (q1<deg2rad(-150))
disp ('ERROR, rango superado para q1')
end
if (q2>deg2rad(150))
disp ('ERROR, rango superado para q2')
end
if (q2<deg2rad(-120))
disp ('ERROR, rango superado para q2')
end
if (q3>deg2rad(180))
disp ('ERROR, rango superado para q3')
end
if (q3<deg2rad(-180))
disp ('ERROR, rango superado para q3')
end
if (d4>200)
disp ('ERROR, rango superado para q4')
end
if (d4<0)
disp ('ERROR, rango superado para q4')
end
Una vez comprobadas hacemos la TCD con la funciójn fkine:
Q=[0 q1 q2 q3 d4]; %Añadimos ese 0 para compensar L0
TCD=fkine(SCARA_P1,Q)
TCD = 4×4
0.3420 0.9397 0.0000 -84.7136
0.9397 -0.3420 -0.0000 671.3194
0 0.0000 -1.0000 500.0000
0 0 0 1.0000
5
Nos vamos a matlab y lo hacemos:
%Definir T usanto trot y transl
A01=trotz(q1+pi/2)*transl(0,0,800) *transl(400,0,0)*trotx(0);
A12=trotz(q2) *transl(0,0,0) *transl(300,0,0)*trotx(0);
A23=trotz(q3) *transl(0,0,0) *transl(0,0,0) *trotx(pi);
A34=trotz(0) *transl(0,0,d4+200)*transl(0,0,0) *trotx(0);
T=A01*A12*A23*A34
T = 4×4
0.3420 0.9397 0.0000 -84.7136
0.9397 -0.3420 -0.0000 671.3194
0 0.0000 -1.0000 500.0000
0 0 0 1.0000
6
Ejercicio 5
A partir de la posición y orientación del extremo calculada anteriormente,
obtenga las coordenadas articulares del robot. Utilice la función ikine.
Si lo hacemos directamente, como tenemos el eslabón L0 nos devolverá un valor más,
tenemos que colocarlo como antes.
Ejercicio 6
Repita los apartados 2, 3, 4 y 5 para
Q = (20º 0º -10º 100 mm)
Por no escribir 2 veces el código guardamos el fichero como Práctica 1. Ej6 y cambiamos
los valores de la articulación.
7
%Nuevos valores de las articulaciones
q1=deg2rad(20);
q2=deg2rad(0);
q3=deg2rad(-10);
d4=100;
Q=[0 q1 q2 q3 d4]; %Añadimos ese 0 para compensar L0
TCD=fkine(SCARA_P1,Q)
TCD = 4×4
-0.1736 0.9848 0.0000 -239.4141
0.9848 0.1736 0.0000 657.7848
0 0.0000 -1.0000 500.0000
0 0 0 1.0000
%Definir T usanto trot y transl
A01=trotz(q1+pi/2)*transl(0,0,800) *transl(400,0,0)*trotx(0);
A12=trotz(q2) *transl(0,0,0) *transl(300,0,0)*trotx(0);
A23=trotz(q3) *transl(0,0,0) *transl(0,0,0) *trotx(pi);
A34=trotz(0) *transl(0,0,d4+200)*transl(0,0,0) *trotx(0);
T=A01*A12*A23*A34
T = 4×4
-0.1736 0.9848 0.0000 -239.4141
0.9848 0.1736 0.0000 657.7848
0 0.0000 -1.0000 500.0000
0 0 0 1.0000
%Indicar la orientación en los siguientes formatos
%MatriZ de rotación
R=T(1:3,1:3)
R = 3×3
-0.1736 0.9848 0.0000
0.9848 0.1736 0.0000
0 0.0000 -1.0000
%Roll-Pitch-Yaw
%Nos sirve para obener la orientación, pasa la T a ángulos de Euler
RPY=tr2rpy(T)
RPY = 1×3
-3.1416 0.0000 -1.7453
%Ángulos de Euler ZYZ
ZYZ=tr2eul(T)
ZYZ = 1×3
0 3.1416 1.3963
%Colocamos el robot con 4 eslabones
L1 = link([ 0, 400, 0, 800, 0, pi/2]);
L2 = link([ 0, 300, 0, 0, 0, 0]);
L3 = link([pi, 0, 0, 0, 0, 0]);
L4 = link([ 0, 0, 0, 0, 1, 200]);
SCARA_P1_4eslabones = robot({L1,L2,L3,L4});
Inversa=ikine(SCARA_P1_4eslabones,T)
For a manipulator with fewer than 6DOF a mask matrix argument should be specified
Inversa = 1×4
0.3491 0.0000 -0.1745 100.0000
[q1 q2 q3 d4]
ans = 1×4
0.3491 0 -0.1745 100.0000
8
Ejercicio 7
Obtenga el volumen de trabajo del robot
Para ello vamos a crear un bucle moviéndonos de límite a límite de cada articulación
%Volumen de trabajo
t = 1;
for i = deg2rad(-150) : 0.5 : deg2rad(150)
for l= 0 : 4 : 200
for j = deg2rad(-120) : 0.2 : deg2rad(120)
for k=deg2rad(-180) : 3 : deg2rad(180)
T = fkine(SCARA_P1, [0,i,j,k,l]);
p(1,t)=T(1,4);
p(2,t)=T(2,4);
p(3,t)=T(3,4);
t = t+1;
end
end
end
end
x = p(1, 1:(t-1));
y = p(2,1:(t-1));
z = p(3,1:(t-1));
plot3(x,y,z,'.')
9
Ejercicio 8
Represente al robot con la función drivebot con las siguientes articulaciones
Q = (20º -30º -10º 100 mm) y Q = (20º 0º -10º 100 mm)
Como hemos comentado en ejercicios anteriores, añadido un L0 para que la
representación geométrica del robot se ajuste a la real. Lo vamos a simular en la ventana
de comandos y no en el script, para que podamos verlo mejor.
%Valores de las articulaciones
q1=deg2rad(20);
q2=deg2rad(-30);
q3=deg2rad(-10);
d4=100;
%drivebot(SCARA_P1,[0 q1 q2 q3 d4])
10
%Valores de las articulaciones
q1=deg2rad(20);
q2=deg2rad(0);
q3=deg2rad(-10);
d4=100;
%drivebot(SCARA_P1,[0 q1 q2 q3 d4])
11