Robot Rab

Embed Size (px)

Citation preview

1. INTRODUCCINEn nuestra vida cotidiana estamos acostumbrados a utilizar toda clase deDispositivos Electrnicosque fundamentalmente tienen la complicada misin de solucionarnos o simplificarnos una gran cantidad de dificultades o problemas que tenemos, convirtindose entonces en unaHerramienta de Trabajoms y en muchas ocasiones hasta nos permite reducir elTiempo de Trabajoo bien incrementar notoriamente laProductividadyRendimiento.

El auge tecnolgico se dio desde un principio y ha generado cambios a nivel social y demogrfico, desde el primer momento donde laMquina a Vaporse 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 constanteActualizacinTecnolgicada ms posibilidades de trabajo como tambin simplifica las tareas.

Entre estos adelantos aplicados en materia deTecnologauna de las ms conocidas y quiz esperadas es laRobtica, siendo esta la rama que se encarga de Disear,Construiry hastaOperartoda clase de Robots, algo que aparece en las pelculas deCiencia Ficcincomo una verdadera solucin a los problemas de la vida cotidiana, aunque actualmente tenemosaplicacionesmucho ms sencillas y quiz no nos damos cuenta.

De hecho, estamos en cotidiano contacto con una gran cantidad deRobots, siendo estos por definicin tanto unEnte Virtualcomo por otro lado unaEntidad Mecnicaque se encarga de realizar distintasProcesos o Actividadesen 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 unOperadorque es quien seleccionaba qu funcin realizar y mediante un avanzadoSistema Mecnicose realizaban en forma automatizada o bien monitoreadas, evolucionando luego hacia un sistema donde el robotMemorizaba 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 deRobots Inteligentes, siendo stos capaces de poder operar por s mismos (recordemos que para que funcionen, actualmente, es necesaria la presencia de unOperador) y solamente interactuando con unSer Humanoen lo que respecta aControl 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 ROBOTESLABONLiidii

10/2L1+1q1

2L202q2

3L303q3

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 INVERSOExisten 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 MATLABPara 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 MATLABPara el cdigo debemos observar los elementos que tenemos en la interfaz grficaSLIDER.- PERMITIRA VARIAS LOS VALORES DE LAS ARTICULACIONES A MEDIDA QUE EL USUARIO REALICE LA INTERRELACION CON ESTE OBJETO

CODIGO DE UN SLIDERq1=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)));endset(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 INVERSApx=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