Está en la página 1de 11

ROBÓTICA

INDUSTRIAL
2022/2023

PRÁCTICA 1

5 ENERO

Ricardo Pérez García

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

Podemos observar la matriz de posición(3x1) y la de orientación(3x3):


0.3420 0.9397 0 −84.7135
𝑇 = (0.9397 −0.3420 0 671.3194 )
0 0 −1 500
0 0 0 1
Ejercicio 3
Obtenga la matriz T utilizando las funciones trotx, troty, troty y transl.
Dado que el producto de matrices no es conmutativo, las transformaciones se han de
realizar en el orden indicado. De este modo se tiene que:

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

Podemos ver que coinciden


Ejercicio 4
Indique la orientación del extremo en los siguientes formatos:
%Indicar la orientación en los siguientes formatos
%MatriZ de rotación
R=T(1:3,1:3)
R = 3×3
0.3420 0.9397 0.0000
0.9397 -0.3420 -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.2217
%Ángulos de Euler ZYZ
ZYZ=tr2eul(T)
ZYZ = 1×3
0 3.1416 1.9199

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.

%Obtener las coordenadas con la posición del extremo del robot


Inversa=ikine(SCARA_P1,T)
For a manipulator with fewer than 6DOF a mask matrix argument should be specified
Inversa = 1×5
0.1745 0.1745 -0.5236 -0.1745 100.0000
Lo arreglamos y tenemos
%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.5236 -0.1745 100.0000
[q1 q2 q3 d4]
ans = 1×4
0.3491 -0.5236 -0.1745 100.0000
Si lo hacemos para otros valores de articulación
%Si introducimos otros valores
Q2 = [pi/2,pi/4,pi/3,150]
Q2 = 1×4
1.5708 0.7854 1.0472 150.0000
Tfkine = fkine(SCARA_P1_4eslabones, Q2);
Inversa2 = ikine(SCARA_P1_4eslabones,Tfkine)
For a manipulator with fewer than 6DOF a mask matrix argument should be specified
Inversa2 = 1×4
7.8540 -11.7810 1.0472 150.0000

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

También podría gustarte