Академический Документы
Профессиональный Документы
Культура Документы
Grupo: 8RV2
NDICE GENERAL
CAPITULO I GENERALIDADES.............................................................................. 3
1.1 OBJETIVO................................................................................................... 3
1.1.1
1.2
OBJETIVOS ESPECFICOS.................................................................3
JUSTIFICACIN....................................................................................... 3
1.3 INTRODUCCIN........................................................................................... 4
1.4 MARCO TERICO........................................................................................ 5
1.4.1 ALGORITMO.......................................................................................... 5
1.4.2 PLANEACIN DE MOVIMIENTO..............................................................7
1.4.3 ESPACIO DE LAS CONFIGURACIONES...................................................8
1.4.4 CAMPO DE POTENCIAL ARTIFICIAL.......................................................8
CAPITULO II FUNDAMENTOS TERICOS............................................................10
2.1 CONFIGURACIN DE TIPO ARTICULADO...................................................10
2.2 MOVIMIENTO DEL ROBOT..........................................................................10
2.3 CINEMTICA DEL ROBOT..........................................................................11
2.3.1 CINEMTICA DIRECTA.........................................................................11
2.3.1.1 CINEMTICA DIRECTA CON TRANSFORMACIONES HOMOGNEAS....12
2.3.2 CINEMTICA INVERSA.........................................................................12
2.4 DINMICA DEL ROBOT.............................................................................. 13
CAPITULO III DESARROLLO DE INGENIERA.......................................................14
3.1 PIEZAS, MODELADO Y ENSAMBLADO DEL BRAZO ROBTICO...................14
3.2 SERVOMOTORES...................................................................................... 16
3.3 COMUNICACIN SOFTWARE-HARDWARE..................................................17
3.4 DIAGRAMA ELECTRNICO........................................................................18
3.5 PROGRAMACION DEL ARDUINO................................................................19
3.6 PROGRAMACIN EN MATLAB....................................................................20
3.6.1 PROGRAMA PARA LA CINEMTICA DIRECTA.......................................20
3.6.2 PROGRAMA PARA LA CINEMTICA INVERSA.......................................22
3.6.3 PROGRAMA PARA LA DINMICA..........................................................28
3.7 MODELO DINMICO................................................................................... 32
CAPITULO IV CONCLUSIONES, REFERENCIAS Y ANEXOS..................................33
CAPITULO I GENERALIDADES
1.1 OBJETIVO
El objetivo principal del proyecto, es disear una estrategia a travs de un
algoritmo adecuado para la generacin de trayectorias con un brazo robtico con
una configuracin de tipo articulado de 3 grados de libertad.
1.2 JUSTIFICACIN
Ya que los robots operan en entornos reales y son capaces de interactuar en un
entorno dinmico donde tambin se encuentran otros objetos, personas y en
general con otros agentes, se presentan impresionantes resultados en su
mecnica, dinmica y en su control de movimientos.
Los robots son capaces de desarrollar diferentes tipos de tareas, as mismo, con
respecto al mundo dinmico que lo rodea, la planificacin de futuras acciones y las
tareas resultantes a evaluar son caractersticas importantes para una planeacin.
1.3 INTRODUCCIN
La planeacin de trayectorias desempea un papel muy importante en varios
campos de la investigacin. En su forma general, el objetivo es planear
trayectorias para un sistema robtico entre una configuracin de inicio y una
posicin final sobre un entorno incierto.
Hasta el da de hoy la planeacin de movimientos en manipuladores robticos
para la realizacin de tareas especficas ha dado lugar a lneas de investigacin
que buscan explotar y maximizar las capacidades de un sistema robotizado. La
planeacin de movimientos consiste en guiar automticamente a un robot
alrededor de un entorno con obstculos, esta define trayectorias libres de
colisiones.
Dado un robot con (n) grados de libertad en un ambiente con un nmero de (k)
obstculos, busca una ruta libre de colisin que conecte la configuracin actual (de
inicio) del robot con una configuracin final deseada (la meta), como es sealado
en Canny (1987); Hwang et al. (1992).
Planear trayectorias seguras implica en identificar rutas y jerarquizarlas en un
espacio abstracto parta obtener modelos simples, caracterizar el espacio vaco,
realizar esquemas sobre la planeacin de movimientos con obstculos y reducir la
complejidad del problema.
Cualquiera que sea el panorama, la planeacin considera el hecho de que el robot
interacta con sus componentes mecnicos y con elementos que obstaculizan la
realizacin de tareas, ya sea que su desempeo este en entornos estticos,
dinmicos y/o geomtricamente restringidos por maquinas u otros robots.
10
11
2.3.1.1 CINEMTICA
HOMOGNEAS
DIRECTA
CON
TRANSFORMACIONES
12
13
MODELADO
ENSAMBLADO
DEL
BRAZO
Para este proyecto se construy un robot usando cintra con una configuracin
articulada para la construccin de nuestro brazo robtico. Se utiliz el software de
solidworks para el diseo, modelado y ensamble.
14
FIG 3.2.- Modelado del primer eslabn del brazo realizado en solidworks
FIG. 3.3.- Modelado del segundo eslabn del brazo realizado en solidworks
15
Las medidas de las piezas mostradas en las figuras 3.1, 3.2 Y 3.3 pueden ser
visualizadas en los planos que vienen en el anexo (A1).
3.2 SERVOMOTORES
Se utiliz un servomotor MG995 metal gear dual ball bearing servo de alta
velocidad por cada grado de libertad, utilizamos un total de 3, para ms
informacin acerca de sus especificaciones tcnicas consultar el anexo (A2).
16
17
18
19
20
di
ai
t1=0
2.3
-90
t1=0
9.5
t1=0
4.35
GRAF. 3.2 Posicin inicial del brazo robtico con ngulos complementarios
22
clear all;
clc;
clear;clc;clf; %limpiar todo
%% declarar los parmetros
Denavit-hartenberg para robots
articulados/prismticos
%%[theta alpha a
d
sigma]
dh =[
0 -90
0
2.3 0
0
0
9.5
0 0
0
0
4.35
0 0
];
%% genera las ecuaciones para la
cinemtica directa
KD(dh);
%% variables angulares/lineales
t=[0 0 0];
%% grfico de cinemtica directa
grafrobot(t);
VS=linspace(0,1,100)';
V=VS*t;
for i=1:length(VS)
grafrobot(V(i,:));
end
q4=round(q1);
q5=round(q2);
q6=round(q3);
q5=q5*-1;
%arduino.servoWrite(9,q4)
%arduino.servoWrite(10,q5)
%arduino.servoWrite(11,q6)
t=[q1 q2 q3];
lg=max(size(t));l=hsv;k=fix(64/lg
);s=5;M='Marker';C='Color';LW='Li
neWidth';clf;
line([0 s],[0 0],[0
0],M,'.',C,'r',LW,1);
line([0 0],[0 s],[0
0],M,'.',C,'g',LW,1);
line([0 0],[0 0],[0
s],M,'.',C,'b',LW,1);
evalA=Trob(t);
pox=0;poy=0;poz=0;
for i=1:lg
line([pox evalA(10,i)],[poy
evalA(11,i)],[poz
evalA(12,i)],'MarkerEdgeColor',[0
0 0],M,'.',C,l(i*k,:),LW,3);
%Cinematica inversa%%
%%cargar arduino%%
%%arduino=arduino('COM3');%%
%%arduino.servoAttach(9);%%
%%arduino.servoAttach(10);%%
%%arduino.servoAttach(11);%%%
X=1;
Y=5;
Z=5;
X0=1;
Y0=5;
Z0=5;
d=2.3;
L2=9.5;
L3=4.35;
cont=0;
%%primera linea%%
while X<4.0
px=X;
py=Y;
pox=evalA(10,i);poy=evalA(11,i);p
oz=evalA(12,i);
line([pox evalA(1,i)+pox],
[poy evalA(2,i)+poy],[poz
evalA(3,i)
+poz],M,'.',C,'r',LW,1);
23
t=[q1 q2 q3];
lg=max(size(t));l=hsv;k=fix(64/lg
);s=5;M='Marker';C='Color';LW='Li
neWidth';clf;
line([0 s],[0 0],[0
0],M,'.',C,'r',LW,1);
line([0 0],[0 s],[0
0],M,'.',C,'g',LW,1);
line([0 0],[0 0],[0
s],M,'.',C,'b',LW,1);
evalA=Trob(t);
pox=0;poy=0;poz=0;
for i=1:lg
line([pox evalA(10,i)],[poy
evalA(11,i)],[poz
evalA(12,i)],'MarkerEdgeColor',[0
0 0],M,'.',C,l(i*k,:),LW,3);
Qt=[q4;q5;q6]
X=X+0.1 ;
pause(0.2);
end
pox=evalA(10,i);poy=evalA(11,i);p
oz=evalA(12,i);
line([pox evalA(1,i)+pox],
[poy evalA(2,i)+poy],[poz
evalA(3,i)
+poz],M,'.',C,'r',LW,1);
line([pox evalA(4,i)+pox],
[poy evalA(5,i)+poy],[poz
evalA(6,i)
+poz],M,'.',C,'g',LW,1);
line([pox evalA(7,i)+pox],
[poy evalA(8,i)+poy],[poz
evalA(9,i)
+poz],M,'.',C,'b',LW,1);
end
line([X0 X1],[Y0 Y1],[Z0
Z1],M,'.',C,'k',LW,1);
line([X1 X],[Y1 Y],[Z1
Z],M,'.',C,'k',LW,1);
view(3);
pause(1e-300);
X1=X;
Y1=Y;
Z1=Z;
%%SEGUNDA linea%%
while Y<8.0
px=X;
py=Y;
pz=Z;
b=pz-d;
h=sqrt(px^2+py^2);
h2=sqrt(b^2+h^2);
alfa=atan(b/h);
beta=acos((L2^2+h2^2-L3^2)/
(2*L2*h2));
q2=-(alfa+beta);
q1= atan(py/px);
q3=acos((L2^2-h2^2+L3^2)/
(2*L2*L3));
q1=(q1*180)/pi;
q2=(q2*180)/pi;
q3=(q3*180)/pi;
q3=-(q3-180);
Qt=[q4;q5;q6]
Y=Y+0.1 ;
pause(0.2);
end
X2=X;
Y2=Y;
q4=round(q1);
q5=round(q2);
q6=round(q3);
q5=q5*-1;
Z2=Z;
%%tercera linea%%
while X>1
px=X;
py=Y;
%arduino.servoWrite(9,q4)
%arduino.servoWrite(10,q5)
%arduino.servoWrite(11,q6)
24
line([pox evalA(7,i)+pox],
[poy evalA(8,i)+poy],[poz
evalA(9,i)
+poz],M,'.',C,'b',LW,1);
end
line([X0 X1],[Y0 Y1],[Z0
Z1],M,'.',C,'k',LW,1);
line([X1 X2],[Y1 Y2],[Z1
Z2],M,'.',C,'k',LW,1);
line([X2 X],[Y2 Y],[Z2
Z],M,'.',C,'k',LW,1);
view(3);
pause(1e-300);
Qt=[q4;q5;q6]
q4=round(q1);
q5=round(q2);
q6=round(q3);
X=X-0.1 ;
pause(0.2);
end
q5=q5*-1;
X3=X;
Y3=Y;
Z3=Z;
%arduino.servoWrite(9,q4)
%arduino.servoWrite(10,q5)
%arduino.servoWrite(11,q6)
t=[q1 q2 q3];
lg=max(size(t));l=hsv;k=fix(64/lg
);s=5;M='Marker';C='Color';LW='Li
neWidth';clf;
line([0 s],[0 0],[0
0],M,'.',C,'r',LW,1);
line([0 0],[0 s],[0
0],M,'.',C,'g',LW,1);
line([0 0],[0 0],[0
s],M,'.',C,'b',LW,1);
evalA=Trob(t);
pox=0;poy=0;poz=0;
for i=1:lg
line([pox evalA(10,i)],[poy
evalA(11,i)],[poz
evalA(12,i)],'MarkerEdgeColor',[0
0 0],M,'.',C,l(i*k,:),LW,3);
%%SEGUNDA linea%%
while Y>5
px=X;
py=Y;
pz=Z;
b=pz-d;
h=sqrt(px^2+py^2);
h2=sqrt(b^2+h^2);
alfa=atan(b/h);
beta=acos((L2^2+h2^2-L3^2)/
(2*L2*h2));
q2=-(alfa+beta);
q1= atan(py/px);
q3=acos((L2^2-h2^2+L3^2)/
(2*L2*L3));
q1=(q1*180)/pi;
q2=(q2*180)/pi;
q3=(q3*180)/pi;
q3=-(q3-180);
pox=evalA(10,i);poy=evalA(11,i);p
oz=evalA(12,i);
line([pox evalA(1,i)+pox],
[poy evalA(2,i)+poy],[poz
q4=round(q1);
q5=round(q2);
q6=round(q3);
q5=q5*-1;
evalA(3,i)
+poz],M,'.',C,'r',LW,1);
line([pox evalA(4,i)+pox],
[poy evalA(5,i)+poy],[poz
evalA(6,i)
+poz],M,'.',C,'g',LW,1);
%arduino.servoWrite(9,q4)
%arduino.servoWrite(10,q5)
25
evalA(3,i)
+poz],M,'.',C,'r',LW,1);
line([pox evalA(4,i)+pox],[poy
evalA(5,i)+poy],[poz evalA(6,i)
+poz],M,'.',C,'g',LW,1);
line([pox evalA(7,i)+pox],
[poy evalA(8,i)+poy],[poz
evalA(9,i)
+poz],M,'.',C,'b',LW,1);
end
line([X0 X1],[Y0 Y1],[Z0
Z1],M,'.',C,'k',LW,1);
line([X1 X2],[Y1 Y2],[Z1
Z2],M,'.',C,'k',LW,1);
line([X2 X3],[Y2 Y3],[Z2
Z3],M,'.',C,'k',LW,1);
line([X3 X],[Y3 Y],[Z3
Z],M,'.',C,'k',LW,1);
view(3);
pause(1e-300);
t=[q1 q2 q3];
lg=max(size(t));l=hsv;k=fix(64/lg
);s=5;M='Marker';C='Color';LW='Li
neWidth';clf;
line([0 s],[0 0],[0
0],M,'.',C,'r',LW,1);
line([0 0],[0 s],[0
0],M,'.',C,'g',LW,1);
line([0 0],[0 0],[0
s],M,'.',C,'b',LW,1);
evalA=Trob(t);
pox=0;poy=0;poz=0;
for i=1:lg
line([pox evalA(10,i)],[poy
evalA(11,i)],[poz
evalA(12,i)],'MarkerEdgeColor',[0
0 0],M,'.',C,l(i*k,:),LW,3);
pox=evalA(10,i);poy=evalA(11,i);p
oz=evalA(12,i);
line([pox evalA(1,i)+pox],
[poy evalA(2,i)+poy],[poz
Qt=[q4;q5;q6]
Y=Y-0.1 ;
pause(0.2);
end
26
end
for i=1:length(dh(:,1))
for j=1:length(dh(:,1))
for k=1:length(dh(:,1))
if k>i | j>i
eval(['U',num2str(i),num2str(j),num2str(k),' =zeros(4);']);
else if i>=j & j>=k
eval(['U',num2str(i),num2str(j),num2str(k),' =A',num2str(0),num2str(k1),'*Q',num2str(k),'*A',num2str(k-1),num2str(j-1),'*Q',num2str(j),'*A',num2str(j1),num2str(i),';']);
else if i>=k & k>=j
eval(['U',num2str(i),num2str(j),num2str(k),' =A',num2str(0),num2str(j1),'*Q',num2str(j),'*A',num2str(j-1),num2str(k1),'*Q',num2str(k),'*A',num2str(k-1),num2str(i),';']); 7
end
end
end
end
end
end
syms m1 m2 L1 L2 L3 m3
J1=[0 0 0 0;0 0 0 0;0 0 0 0;0 0 0 m1];
J2=[m2*L2^2 0 0 m2*L2;0 0 0 0;0 0 0 0;m2*L2 0 0 m2];
J3=[m3*L3^2 0 0 m3*L3;0 0 0 0;0 0 0 0;m3*L3 0 0 m3];
disp('6.- Clculo de las matrices de inercia : D = [dij]')
d11=simple(simplify(trace(U11*J1*U11.')))
+simple(simplify(trace(U21*J2*U21.')))+simple(simplify(trace(U31*J3*U31.')));
d12=simple(simplify(trace(U22*J2*U21.')))
+simple(simplify(trace(U32*J3*U31.')));
d13=simple(simplify(trace(U33*J3*U31.')));
d21=simple(simplify(trace(U21*J2*U22.')))
+simple(simplify(trace(U31*J3*U32.')));
d22=simple(simplify(trace(U22*J2*U22.')))
+simple(simplify(trace(U32*J3*U32.')));
d23=simple(simplify(trace(U33*J3*U32.')));
d31=simple(simplify(trace(U31*J3*U33.')));
d32=simple(simplify(trace(U32*J3*U33.')));
d33=simple(simplify(trace(U33*J3*U33.')));
D = [d11 d12 d13;d21 d22 d23;d31 d32 d33];
%%for i=1:length(dh(:,1))
%%for j=1:length(dh(:,1))
%%eval(['D',num2str(i),num2str(j),'=symsum(k,(simplify(trace(U11*J1*U11.'))))
+simple(simplify(trace(U21*J2*U21.'))))']);
%% end
%%end
disp('7.- Clculo del vector hikm')
h111=simplify(trace(U111*J1*U11.'))+simplify(trace(U211*J2*U21.'))
+simplify(trace(U311*J3*U31.'));
h112=simplify(trace(U212*J2*U21.'));
h113=simplify(trace(U313*J3*U31.'));
h121=simplify(trace(U221*J2*U21.'));
h122=simplify(trace(U222*J2*U21.'));
h123=simplify(trace(U323*J3*U31.'));
h131=simplify(trace(U331*J3*U31.'));
h132=simplify(trace(U332*J3*U31.'));
h133=simplify(trace(U333*J3*U31.'));
h211=simplify(trace(U211*J2*U22.'));
h212=simplify(trace(U212*J2*U22.'));
h213=simplify(trace(U313*J3*U32.'));
h221=simplify(trace(U221*J2*U22.'));
h222=simplify(trace(U222*J2*U22.'));
h223=simplify(trace(U323*J3*U32.'));
h231=simplify(trace(U331*J3*U32.'));
h232=simplify(trace(U332*J3*U32.'));
h233=simplify(trace(U333*J3*U32.'));
h311=simplify(trace(U311*J3*U33.'));
h312=simplify(trace(U312*J3*U33.'));
h313=simplify(trace(U313*J3*U33.'));
h321=simplify(trace(U321*J3*U33.'));
h322=simplify(trace(U322*J3*U33.'));
h323=simplify(trace(U323*J3*U33.'));
h331=simplify(trace(U331*J3*U33.'));
h332=simplify(trace(U332*J3*U33.'));
h333=simplify(trace(U333*J3*U33.'));
disp('8.- Clculo del vector de fuerza centrfuga y de coriolis:H=[hi]')
syms t1 t2 t3 dt1 dt2 dt3
syms g
h1=h111*t1^2+h112*t1*t2+h113*t1*t3+h121*t2*t1+h122*t2^2+h123*t2*t3
+h131*t3*t1+h132*t3*t2+h133*t3^2;
h2=h211*t1^2+h212*t1*t2+h213*t1*t3+h221*t2*t1+h222*t2^2+h223*t2*t3
+h231*t3*t1+h232*t3*t2+h233*t3^2;
h3=h311*t1^2+h312*t1*t2+h313*t1*t3+h321*t2*t1+h322*t2^2+h323*t2*t3
+h331*t3*t1+h332*t3*t2+h333*t3^2;
H=[h1;h2;h3];
disp('9.- Clculo de la matriz columna de fuerzas de gravedad:C=[ci]')
disp('--------------------------------------------------------------------')
g1=[g 0 0 0];
r11=[0;0;0;1]; % CG para el eslabon 1
r22=[0;L2;0;1]; % CG para el eslabon 2
r33=[0;0;0;1];
c1=-m1*g1*U11*r11 - m2*g1*U21*r22 - m3*g1*U31*r33;
c2=-m1*g1*U12*r11 - m2*g1*U22*r22 - m3*g1*U32*r33;
c3=-m1*g1*U13*r11 - m2*g1*U23*r22 - m3*g1*U33*r33;
C=[c1;c2;c3];
disp('10.- Ecuacin Dinmica del Robot')
tau=simplify(D*[dt1;dt2;dt3]+H+C);
disp('El torque o par para la primera articulacin revoluta: ')
T1 = tau(1) % Juntura Revoluta
disp('La fuerza para al articulacin prismtica:')
F2 = tau(2) % Juntura Prismtica
F3 = tau(3) % Juntura Prismtica
disp('Ecuacin Dinmica del Robot Manipulador RP:')
tau=[tau(1); tau(2)]