Está en la página 1de 9

1.

INTRODUCCIN
En nuestra vida cotidiana estamos acostumbrados a utilizar toda clase de Dispositivos Electrnicos que
fundamentalmente tienen la complicada misin de solucionarnos o simplificarnos una gran cantidad de
dificultades o problemas que tenemos, convirtindose entonces en una Herramienta de Trabajo ms y en
muchas ocasiones hasta nos permite reducir el Tiempo de Trabajo o bien incrementar notoriamente
la Productividad y Rendimiento.

El auge tecnolgico se dio desde un principio y ha generado cambios a nivel social y demogrfico, desde el
primer momento donde la Mquina a Vapor se present como una solucin a los problemas de las
diferentes industrias e increment la eficiencia de las Producciones en Serie a medida que se iba
actualizando, hasta hoy en da donde la constante Actualizacin Tecnolgica da ms posibilidades de trabajo
como tambin simplifica las tareas.

Entre estos adelantos aplicados en materia de Tecnologa una de las ms conocidas y quiz esperadas es
la Robtica, siendo esta la rama que se encarga de Disear, Construir y hasta Operar toda clase de Robots,
algo que aparece en las pelculas de Ciencia Ficcin como una verdadera solucin a los problemas de la vida
cotidiana, aunque actualmente tenemos aplicaciones mucho ms sencillas y quiz no nos damos cuenta.

De hecho, estamos en cotidiano contacto con una gran cantidad de Robots, siendo estos por definicin
tanto un Ente Virtual como por otro lado una Entidad Mecnica que se encarga de realizar distintas Procesos
o Actividades en forma automatizada, teniendo para ello en un principio la accin de un operador que es
quien da la accin o bien ajusta las distintas variables para que ste tenga el menor margen de error posible.

Los primeros Robot consistan entonces en mquinas bastante simples, que requeran la accin de
un Operador que es quien seleccionaba qu funcin realizar y mediante un avanzado Sistema Mecnico se
realizaban en forma automatizada o bien monitoreadas, evolucionando luego hacia un sistema donde el
robot Memorizaba Funciones y posteriormente las ejecutaba en forma ordenada tal como fueron indicadas
por el manipulador que inici el proceso.

Actualmente el desarrollo de la Robtica est enfocada hacia la creacin de Robots Inteligentes, siendo
stos capaces de poder operar por s mismos (recordemos que para que funcionen, actualmente, es
necesaria la presencia de un Operador) y solamente interactuando con un Ser Humano en lo que respecta
a Control y Reportes, enviando actualizaciones de estado y solo requiriendo detectar anomalas o fallas en el
sistema.

2. DISEO DEL CONTROL DE UN ROBOT PUMA 560


PARAMETROS DENAVIT-HATTENBERG DEL ROBOT
ESLABON Li i di i
1 0 /2 L1+1 q1
2 L2 0 2 q2
3 L3 0 3 q3



Donde existen los siguientes valores:
1=81.28 [mm]
L1=548.64 [mm]
2=269.24 [mm]
L2=431.8 [mm]
3=-203.2 [mm]
L3=442.214 [mm]




DESARROLLO DE LA MATRIZ DE TRANSFORMACIN HOMOGENEA












Por lo tanto se obtiene la matriz homognea:




PROBLEMA CINEMATICO INVERSO
Existen varias soluciones las cuales nos llevan a un mismo punto en el espacio variando el ngulo de las
articulaciones










CINEMATICA INVERSA POR MEDIO DEL METODO GEOMTRICO



DESARROLLO DEL PROGRAMA EN EL ENTORNO MATLAB
Para el desarrollo del programa se utiliz el complemento SimMechanics Link que se utiliza para generar un
vinculo entre el software CAD Solidworks y el programa MATLAB generando un sistema de control que se
encarga de controlar cada una de las articulaciones que posee el robot.
Tambien se utiliz GUIDE (Interfaz grafica de Usuario Matlab) en el cual cul se creo una interfaz para que el
usuario del programa tenga mejor acceso al control del robot.
Para este fin se desarrollo un interfaz de usuario que es el siguiente:










SISTEMA DE CONTROL EN SIMULINK






























CODIGO .M MATLAB
Para el cdigo debemos observar los elementos que tenemos en la interfaz grfica
SLIDER.- PERMITIRA VARIAS LOS VALORES DE LAS ARTICULACIONES A MEDIDA QUE EL USUARIO REALICE LA
INTERRELACION CON ESTE OBJETO


CODIGO DE UN SLIDER
q1=get(handles.SQ1,'value');
set(handles.EQ1,'String',fix(q1));
Q1=str2double(get(handles.EQ1,'String'));
q2=get(handles.SQ2,'value');
set(handles.EQ2,'String',fix(q2));
Q2=str2double(get(handles.EQ2,'String'));
q3=get(handles.SQ3,'value');
set(handles.EQ3,'String',fix(q3));
Q3=str2double(get(handles.EQ3,'String'));
q4=get(handles.SH,'value');
set(handles.EH,'String',fix(q4));
Q4=str2double(get(handles.EH,'String'));
q5=get(handles.SH2,'value');
set(handles.EH2,'String',fix(q5));
Q5=str2double(get(handles.EH2,'String'));
set_param('PUMA560/Gain2','Gain',num2str(fix(q1)));
set_param('PUMA560/Gain3','Gain',num2str(fix(q2)));
set_param('PUMA560/Gain4','Gain',num2str(-fix(q3)));
set_param('PUMA560/Gain5','Gain',num2str(fix(q4)));
set_param('PUMA560/Gain6','Gain',num2str(fix(q5)));
B1=81.28;L1=548.64;B2=269.24;L2=431.8;B3=-203.2;L3=442.214;
r11=cosd(Q1)*cosd(Q2+Q3);
r12=-cosd(Q1)*sind(Q2+Q3);
r13=sind(Q1);
px=((B2+B3)*(sind(Q2)))+(cosd(Q1)*((L2*cosd(Q2))+(L3*cosd(Q2+Q3))));
r21=sind(Q1)*cosd(Q2+Q3);
r22=-sind(Q1)*sind(Q2+Q3);
r23=-cosd(Q1);
py=(-(B2+B3)*cosd(Q1))+(sind(Q1)*((L2*cosd(Q2))+(L3*cosd(Q2+Q3))));
r31=sind(Q2+Q3);
r32=cosd(Q2+Q3);
r33=0;
pz=L1+B1+(L2*sind(Q2))+(L3*sind(Q2+Q3));
set(handles.R11,'String',r11);
set(handles.R12,'String',r12);
set(handles.R13,'String',r13);
set(handles.R21,'String',r21);
set(handles.R22,'String',r22);
set(handles.R23,'String',r23);
set(handles.R31,'String',r31);
set(handles.R32,'String',r32);
set(handles.R33,'String',r33);
set(handles.PX,'String',px);
set(handles.PY,'String',py);
set(handles.PZ,'String',pz);
PUSHBUTTON.- PERMITE REALIZAR UNA ACCION CUANDO EL USUARIO HAGA CLICK
SOBRE EL ELEMENTO EN EL PRIMER CASO SE OBSERVA EL BOTON IR DE LA
CINEMATICA DIRECTA


q1cd=str2double(get(handles.Q1CD,'String'));
q2cd=str2double(get(handles.Q2CD,'String'));
q3cd=str2double(get(handles.Q3CD,'String'));
if q1cd < -170
errordlg('El valor no debe ser menor a -170','Lito 2014');
set(handles.Q1CD,'String',-170);
Q1cd=get(handles.Q1CD,'String');
set_param('PUMA560/Gain2','Gain',num2str((Q1cd)));
elseif q1cd > 170
errordlg('El valor no debe ser menor a 170','Lito 2014');
set(handles.Q1CD,'String',170);
Q1cd=get(handles.Q1CD,'String');
set_param('PUMA560/Gain2','Gain',num2str((Q1cd)));
else
Q1cd=q1cd;
set_param('PUMA560/Gain2','Gain',num2str((Q1cd)));
end
if q2cd < -70
errordlg('El valor no debe ser menor a -70','Lito 2014');
set(handles.Q2CD,'String',-70);
Q2cd=get(handles.Q2CD,'String');
set_param('PUMA560/Gain3','Gain',num2str((Q2cd)));
elseif q2cd > 90
errordlg('El valor no debe ser menor a 90','Lito 2014');
set(handles.Q2CD,'String',90);
Q2cd=get(handles.Q2CD,'String');
set_param('PUMA560/Gain3','Gain',num2str((Q2cd)));
else
Q2cd=q2cd;
set_param('PUMA560/Gain3','Gain',num2str((Q2cd)));
end
if q3cd < -90
errordlg('El valor no debe ser menor a -90','Lito 2014');
set(handles.Q3CD,'String',-90);
Q3cd=get(handles.Q3CD,'String');
set_param('PUMA560/Gain4','Gain',num2str((-Q3cd)));
elseif q3cd > 90
errordlg('El valor no debe ser menor a 90','Lito 2014');
set(handles.Q3CD,'String',90);
Q3cd=get(handles.Q3CD,'String');
set_param('PUMA560/Gain4','Gain',num2str((-Q3cd)));
else
Q3cd=q3cd;
set_param('PUMA560/Gain4','Gain',num2str((-Q3cd)));
end
set(handles.SQ1,'Value',0)
set(handles.SQ2,'Value',0)
set(handles.SQ3,'Value',0)
set(handles.EQ1,'String','0')
set(handles.EQ2,'String','0')
set(handles.EQ3,'String','0')
set(handles.EH,'String','0')
set(handles.EH2,'String','0')
Q1=Q1cd;Q2=Q2cd;Q3=Q3cd;
B1=81.28;L1=548.64;B2=269.24;L2=431.8;B3=-203.2;L3=442.214;
r11=cosd(Q1)*cosd(Q2+Q3);
r12=-cosd(Q1)*sind(Q2+Q3);
r13=sind(Q1);
px=((B2+B3)*(sind(Q2)))+(cosd(Q1)*((L2*cosd(Q2))+(L3*cosd(Q2+Q3))));
r21=sind(Q1)*cosd(Q2+Q3);
r22=-sind(Q1)*sind(Q2+Q3);
r23=-cosd(Q1);
py=(-(B2+B3)*cosd(Q1))+(sind(Q1)*((L2*cosd(Q2))+(L3*cosd(Q2+Q3))));
r31=sind(Q2+Q3);
r32=cosd(Q2+Q3);
r33=0;
pz=L1+B1+(L2*sind(Q2))+(L3*sind(Q2+Q3));
set(handles.R11,'String',r11);
set(handles.R12,'String',r12);
set(handles.R13,'String',r13);
set(handles.R21,'String',r21);
set(handles.R22,'String',r22);
set(handles.R23,'String',r23);
set(handles.R31,'String',r31);
set(handles.R32,'String',r32);
set(handles.R33,'String',r33);
set(handles.PX,'String',px);
set(handles.PY,'String',py);
set(handles.PZ,'String',pz);

A CONTINUACIN OBSERVAMOS LA PROGRAMACIN DEL BOTON IR DE LA CINEMATICA INVERSA
px=str2double(get(handles.EPX,'String'));
py=str2double(get(handles.EPY,'String'));
pz=str2double(get(handles.EPZ,'String'));
set(handles.SQ1,'Value',0)
set(handles.SQ2,'Value',0)
set(handles.SQ3,'Value',0)
set(handles.EQ1,'String','0')
set(handles.EQ2,'String','0')
set(handles.EQ3,'String','0')
set(handles.EH,'String','0')
set(handles.EH2,'String','0')
B1=81.28;L1=548.64;B2=269.24;L2=431.8;B3=-203.2;L3=442.214;
q11=(atan(py/px))-atan((B2+B3)/sqrt((px^2)+(py^2)-((B2+B3)^2)));
q33=atan((sqrt(((2*L3*L2)^2)-((px^2)+(py^2)+(pz^2)-(L2^2)-
(L3^2))))/((px^2)+(py^2)+(pz^2)-(L2^2)-(L3^2)));
q22=atan((((L2+L3*cos(q33))*pz)-
(L3*sin(q33)*sqrt((px^2)+(py^2))))/((sqrt((px^2)+(py^2))*(L2+L3*cos(q33))
)+(pz*L3*sin(q33))));
q1=(q11*180)/pi; q2=(q22*180)/pi; q3=(q33*180)/pi;
set(handles.Q1CD,'String',q1)
set(handles.Q2CD,'String',q2)
set(handles.Q3CD,'String',q3)
set_param('PUMA560/Gain2','Gain',num2str((q1)));
set_param('PUMA560/Gain3','Gain',num2str((q2)));
set_param('PUMA560/Gain4','Gain',num2str((-q3)));

Tambien tenemos dos botones para ir a la posicin inicial y para ir a una
posicin cualquiera dependiendo del programa.
En el caso veremos el botn de ir a la posicin inicial


q1=0;Q1=0;
q2=0;Q2=0;
q3=0;Q3=0;
q4=0;Q4=0;
q5=0;Q5=0;
set_param('PUMA560/Gain2','Gain',num2str(fix(q1)));
set_param('PUMA560/Gain3','Gain',num2str(fix(q2)));
set_param('PUMA560/Gain4','Gain',num2str(-fix(q3)));
set_param('PUMA560/Gain5','Gain',num2str(fix(q4)));
set_param('PUMA560/Gain6','Gain',num2str(fix(q5)));
B1=81.28;L1=548.64;B2=269.24;L2=431.8;B3=-203.2;L3=442.214;
r11=cosd(Q1)*cosd(Q2+Q3);
r12=-cosd(Q1)*sind(Q2+Q3);
r13=sind(Q1);
px=((B2+B3)*(sin(Q2)))+(cosd(Q1)*((L2*cosd(Q2))+(L3*cosd(Q2+Q3))));
r21=sind(Q1)*cosd(Q2+Q3);
r22=-sind(Q1)*sind(Q2+Q3);
r23=-cosd(Q1);
py=(-(B2+B3)*cos(Q1))+(sind(Q1)*((L2*cosd(Q2))+(L3*cos(Q2+Q3))));
r31=sind(Q2+Q3);
r32=cosd(Q2+Q3);
r33=0;
pz=L1+B1+(L2*sind(Q2))+(L3*sin(Q2+Q3));
set(handles.R11,'String',r11);
set(handles.R12,'String',r12);
set(handles.R13,'String',r13);
set(handles.R21,'String',r21);
set(handles.R22,'String',r22);
set(handles.R23,'String',r23);
set(handles.R31,'String',r31);
set(handles.R32,'String',r32);
set(handles.R33,'String',r33);
set(handles.PX,'String',px);
set(handles.PY,'String',py);
set(handles.PZ,'String',pz);

Bsicamente este el cdigo utilizado para la realizacin de este programa teniendo como resultado un
grfico de movimiento del robot PUMA560