Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1
Cinematica Inversa Doble Pendulo
Se observa que la articulación 2 y 3 representan un doble pendulo, cuya solución fue hallada en clase.
2
Cinematica Inversa Articulación 1
Realizando la sustitución
Despejando u, se obtiene que . Con ello, se puede obtener y y por tanto los demas ángulos.
3
Comprobación con cinematica directa
Se halla el modelo de cinematica directa para comprobar los resultados con una configuración arbitraria.
L1 = 2;
L2 = 1;
L3 = 1;
D = 1;
%DH parameters
a = [0;L2;L3];
alpha = [90;0;0] * pi/180;
d = [L1;0;-D];
theta = [0;0;0];
sigma = zeros(3,1);
offset = [-90;90;0]* pi/180;
Robot =
+---+-----------+-----------+-----------+-----------+-----------+
| j | theta | d | a | alpha | offset |
+---+-----------+-----------+-----------+-----------+-----------+
| 1| q1| 2| 0| 1.571| -1.571|
| 2| q2| 0| 1| 0| 1.571|
| 3| q3| -1| 1| 0| 0|
+---+-----------+-----------+-----------+-----------+-----------+
Robot.name = "Robot";
PlotRobot(Robot,[20 30 -45])
view(15,30)
4
T_0T = Robot.fkine(deg2rad([20 30 -45]))
T_0T = 4×4
0.0885 -0.3304 -0.9397 0.8572
-0.2432 0.9077 -0.3420 0.5687
0.9659 0.2588 0.0000 3.8320
0 0 0 1.0000
xp = T_0T(1,4);
yp = T_0T(2,4);
zp = T_0T(3,4);
ra = sqrt(D^2 + L1^2)
ra = 2.2361
alpha = atan(L1/D)
alpha = 1.1071
u = 2×1
0.4361
0.1763
sin_theta1 = (2.*u)./(1+u.^2)
5
sin_theta1 = 2×1
0.7328
0.3420
theta1 = asin(sin_theta1)
theta1 = 2×1
0.8224
0.3491
theta1 = theta1(2);
rad2deg(theta1)
ans = 20.0000
p1 = [(xp-ra*cos(alpha)*cos(theta1))*sin(theta1) - (yp-ra*cos(alpha)*sin(theta1))*cos(theta1);
zp-ra*sin(alpha)]
p1 = 2×1
-0.2412
1.8320
theta3 = [atan2(sin_theta3,cos_theta3);atan2(-sin_theta3,cos_theta3)]
theta3 = 2×1
0.7854
-0.7854
theta3 = theta3(2)
theta3 = -0.7854
rad2deg(theta3)
ans = -45.0000
k1 = L2+L3*cos(theta3);
k2 = L3*sin(theta3);
theta2 = atan2(p1(2),p1(1))-atan2(k2,k1)
theta2 = 2.0944
rad2deg(theta2)
ans = 120.0000
6
Se resta para corresponder con el ángulo de articulación.
theta2 =theta2-pi/2
theta2 = 0.5236
rad2deg(theta2)
ans = 30.0000
theta = 1×3
20.0000 30.0000 -45.0000
Este mecanismo tiene 4 posibles soluciones, ya que hay 2 valores diferentes para y
7
Cinematica Directa
%DH parameters
a = [0;0;0];
alpha = [-30;-60;0] * pi/180;
d = [0;0;0];
theta = [0;0;-90]*pi/180;
sigma = [0;0;1];
offset = [0;0;1];
Robot =
+---+-----------+-----------+-----------+-----------+-----------+
| j | theta | d | a | alpha | offset |
+---+-----------+-----------+-----------+-----------+-----------+
8
| 1| q1| 0| 0| -0.5236| 0|
| 2| q2| 0| 0| -1.047| 0|
| 3| -1.571| q3| 0| 0| 1|
+---+-----------+-----------+-----------+-----------+-----------+
syms q1 q2 d3
A1 = trotz(0)*transl(0,0,d(1))*transl(a(1),0,0)*trotx(alpha(1))
A1 = 4×4
1.0000 0 0 0
0 0.8660 0.5000 0
0 -0.5000 0.8660 0
0 0 0 1.0000
A2 = trotz(q2)*transl(d(2),0,0)*transl(a(2),0,0)*trotx(alpha(2))
A2 =
A3 = (trotz(theta(3))*transl(0,0,1+d3)*transl(a(3),0,0)*trotx(alpha(3)))
A3 =
H_BT = A1*A2*A3;
H_BT(1:3,4) = [-6;5;sqrt(3)]
H_BT =
9
Se invierte la primera MTH para obtener la primera ecuación.
H13_1 = vpa(simplify(A1\H_BT),5)
H13_1 =
H13_2 = vpa(A2*A3,5)
H13_2 =
D3 = 7
D3 = 7
10
Podemos obtener otra ecuación al reemplazar el valor anterior en la misma MTH.
H13_1 = (simplify(A1\H_BT))
H13_1 =
H13_2 = simplify(subs(A2*A3,d3,D3))
H13_2 =
Se obtiene la ecuación
eq = -4*sqrt(3)*cos(q2) == -2*sqrt(3)
eq =
sol=solve(eq,q2)
sol =
Q2 = pi/3
Q2 = 1.0472
11
Se repite el procedimiento teniendo en cuenta
A1 = trotz(q1)*transl(0,0,d(1))*transl(a(1),0,0)*trotx(alpha(1))
A1 =
H_BT = A1*A2*A3;
H_BT(1:3,4) = [-6;5;sqrt(3)]
H_BT =
H13_1 = simplify(A1\H_BT)
H13_1 =
12
H13_2 = simplify(A2*A3)
H13_2 =
eq = H13_1(1:3,4) == H13_2(1:3,4)
eq =
sol_q1 =
sol_q2=sol.q2
sol_q2 =
sol_d3=sol.d3
13
sol_d3 =
En este caso, las soluciones validas son las que no son imaginarias, es decir, y
Cinematica Directa
syms theta1 theta2 theta3 theta4 theta5 theta6 a2 a3 d3 d4
T01=trotz(theta1)*transl([0 0 0])*transl([0 0 0])*trotx(pi/2)
T01 =
T12 =
T23 =
14
T34=trotz(theta4)*transl([0 0 d4])*transl([0 0 0])*trotx(pi/2)
T34 =
T45 =
T56 =
T06=T01*T12*T23*T34*T45*T56
T06 =
15
16
Cinematica Inversa
syms O A T
rotO=rotz(O)
rotO =
rotA=roty(A)
rotA =
rotT=rotz(T)
rotT =
raux=[0 1 0;
0 0 -1;
-1 0 0]
raux = 3×3
0 1 0
0 0 -1
-1 0 0
syms nx ny nz sx sy sz ax ay az
R =
izq=simplify(R*inv(rotT))
izq =
17
der=rotO*raux*rotA
der =
Tn=solve(izq(3,2)==der(3,2),T, "Real",true)
Tn =
SA=-izq(3,3)
SA =
CA=-izq(3,1)
CA =
A=(atan2(SA,CA))
A =
A=subs(A,T,Tn(1))
A =
CO=izq(1,2)
CO =
SO=izq(2,2)
SO =
O=atan2(SO,CO)
18
O =
O=subs(O,T,Tn(1))
O =
19
Cinematica Directa
L1 = 2;
L2 = 1;
L3 = 0;
L4 = 0;
D1 = 3;
%DH parameters
a = [L1;L2;0;0];
alpha = [0;-180;0;0] * pi/180;
d = [D1;0;0;L4];
theta = [0;0;0;0];
sigma = [0;0;1;0];
offset = [0;0;L3;0];
Robot =
+---+-----------+-----------+-----------+-----------+-----------+
| j | theta | d | a | alpha | offset |
+---+-----------+-----------+-----------+-----------+-----------+
| 1| q1| 3| 2| 0| 0|
| 2| q2| 0| 1| -3.142| 0|
| 3| 0| q3| 0| 0| 0|
| 4| q4| 0| 0| 0| 0|
+---+-----------+-----------+-----------+-----------+-----------+
20
0 0 1 0 0 0 1 0 0
9.81 0 0 1 0 0 0 1 0
0 0 0 1 0 0 0 1
Robot.name = "Robot1";
figure()
Robot.plot([pi/4 0 0 0],'workspace',[-3 3 -3 3 0 4],'jointdiam',0.5,'nobase')
view(15,30)
T_0T = 4×4
0.7660 0.6428 -0.0000 2.5222
0.6428 -0.7660 0.0000 1.4501
-0.0000 -0.0000 -1.0000 3.7854
0 0 0 1.0000
Cinematica Inversa
La cinematica de las 2 primeras articulaciones corresponde nuevamente a un pendulo doble, por lo que se
usan las mismas ecuaciones anteriores.
Para establecer una rotación de grados del marco de herramienta con respecto al de base, se tiene que:
21
Existen dos soluciones para este robot correspondientes a codo arriba y codo abajo.
Grados de libertad
Se aplica la ecuación de mobilidad:
Esto significa que el robot SCADA tiene 4 grados de libertad. Estos corresponden a 3 grados de libertad para
moverse en los 3 ejes y un grado de libertad para rotar respecto al eje z de la base.
function PlotRobot(Robot,q)
figure()
Robot.plot(q,'nobase','notiles')
zlim([0 5])
end
22