Você está na página 1de 9

Diseo de Brazo robotico de 5 grados de libertad

con soliwork y enlazado con matlab

1.-objetivos. aplicar los conocimientos aprendidos en la materia de robtica


aprender el manejo de programa matlab para la orientacin y traslacin de
un punto en el espacio.
2.-Introduccin.La robtica es la rama de la tecnologa que se dedica al diseo, construccin,
operacin, disposicin estructural, manufactura y aplicacin de los robots. Dichos
robots tienen mltiples aplicaciones en casi todas las actividades modernas del
hombre
Cinemtica directa.
El problema cinemtico directo se reduce a encontrar una matriz de
transformacin homognea T que relacione la posicin y orientacin del extremo
del robot, respecto al sistema de referencia fijo situado en su base; como se
mencion anteriormente, esto resulta de la multiplicacin de las matrices
homogneas que componen el robot.

Algunos mtodos para obtener el modelo


cinemtico directo son: matrices de
transformacin homognea, mtodos
geomtricos y el algoritmo Denavith
Hartemberg (D-H)

Cinemtica Inversa
El objetivo del problema cinemtico inverso consiste en encontrar los valores que
deben adoptar las coordenadas articulares del robot q = (q1, q2,qn), para que su
extremo se posicione y oriente segn una determinada localizacin espacial.

Mtodo geomtrico.Necesitamos saber muy bien nuestras constantes y parmetros de partida.

Cinemtica directa (ngulos a posicin).


Datos de entrada:
Longitud de cada eslabn (elemento).
ngulo de cada articulacin.
Datos de salida:
Posicin de cualquier punto (es decir, las coordenadas (x, y, z)).

Cinemtica Inversa (posicin a ngulos).


Datos de entrada:
Longitud de cada eslabn.
Posicin de un punto en el robot.

Datos de salida:
ngulos de cada articulacin necesarios para obtener esa posicin.

3.-Descripcin del brazo;


Presenta 5 grados de libertad.
Con longitudes L1=175; L2=200; L3=150; L4=50
ngulos de reposo con respecto a su punto de articulacin:
Parmetros de D-H
Q1=0
Q2=0
Q3=0
Q4=0
Q5=0

N
1
2
3
4
5

di
175
0
0
0
50

90
0
0
90
0

a
0
200
150
0
0

1
2
3
4
5

Restricciones.Longitud mxima en

x=+350; y=+-350

Altura mxima

z=576

4.-Desarrollo.La estructura fue Diseado en solidworks y luego enlazado al matlab para su


simulacin

Procedimiento.Se dise la estructura y se procedi a ensamblarlo para luego guardarlo como un


complemento del matlab que es el simmechanic(que es en extencion.xml) para
vincularlo al matlab .
La programacin se utilizo el editor de matlab, guide y tambin se utiliz el
simulink de matlab.

Procedimiento
Se procedi a dar las ganancias a las articulaciones donde se coloc para cada
articulacin una constante, ganancia, velocidad, aceleracin todo esto se lleva a
un actuador y lo llevamos a la articulacin. Esto se repite par cada articulacin.
Para el tablero de control se utilizo el guide de matlab.

se procedi a elaborar el tablero de control parte por parte, para colocar cada
componente (slider, edit., tex, pussbuttoon, popupmenu), finalmente ingresamos al
callbak de cada componente para ver el cdigo.

Cdigo.Para slider 1
q1=get(handles.slider1,'Value');
set(handles.eq1,'String',fix(q1));
Q1=str2double(get(handles.eq1,'String'));
q2=get(handles.slider2,'Value');
set(handles.eq2,'String',fix(q2));
Q2=str2double(get(handles.eq2,'String'));
q3=get(handles.slider3,'Value');
set(handles.eq3,'String',fix(q3));
Q3=str2double(get(handles.eq3,'String'));
q4=get(handles.slider4,'Value');
set(handles.eq4,'String',fix(q4));
Q4=str2double(get(handles.eq4,'String'));
q5=get(handles.slider5,'Value');
set(handles.eq5,'String',fix(q5));
Q5=str2double(get(handles.eq5,'String'));
set_param('ensamblaje/Gain','Gain',num2str(Q1));
set_param('ensamblaje/Gain1','Gain',num2str(Q2));
set_param('ensamblaje/Gain2','Gain',num2str(Q3));
set_param('ensamblaje/Gain3','Gain',num2str(Q4));
set_param('ensamblaje/Gain4','Gain',num2str(Q5));
L1=175;L2=200;L3=150;L4=51;
A11=cosd(Q1)*cosd(Q2+Q3+Q4)*cosd(Q5)+sind(Q1)*sind(Q5);
A12=-cosd(Q1)*cosd(Q2+Q3+Q4)*sind(Q5)+sind(Q1)*cosd(Q5);
A13=cosd(Q1)*sind(Q2+Q3+Q4);
px=cosd(Q1)*(L4*sind(Q2+Q3+Q4)+L3*cosd(Q2+Q3)+L2*cosd(Q2))
A21=sind(Q1)*cosd(Q2+Q3+Q4)*cosd(Q5)+cosd(Q1)*sind(Q5);
A22=-sind(Q1)*cosd(Q2+Q3+Q4)*sind(Q5)-cosd(Q1)*cos(Q5);
A23=sind(Q1)*sind(Q2+Q3+Q4);
py=sind(Q1)*(L4*sind(Q2+Q3+Q4)+L3*cosd(Q2+Q3)+L2*cosd(Q2));
A31=sind(Q2+Q3+Q4)*cosd(Q5);
A32=-sind(Q2+Q3+Q4)*sind(Q5);
A33=-cosd(Q2+Q3+Q4);
pz=L1-L4*cosd(Q2+Q3+Q4)+L3*sind(Q2+Q3)+L2*sind(Q2);
set(handles.a11,'String',A11);
set(handles.a12,'String',A12);
set(handles.a13,'String',A13);
set(handles.a21,'String',A21);
set(handles.a22,'String',A22);
set(handles.a23,'String',A23);

set(handles.a31,'String',A31);
set(handles.a32,'String',A32);
set(handles.a33,'String',A33);
set(handles.PX,'String',px);
set(handles.PY,'String',py);
set(handles.PZ,'String',pz);
px=str2double(get(handles.qc1,'String'));
py=str2double(get(handles.qc2,'String'));
pz=str2double(get(handles.qc3,'String'));
cab=str2double(get(handles.tt1,'String'));

Para los siguientes slider es lo mismo.

Para el pushbutton1 que es la CINEMATICA DIRECTA


function pushbutton1_Callback(hObject, eventdata, handles)
Q1=str2double(get(handles.qd1,'String'));
Q2=str2double(get(handles.qd2,'String'));
Q3=str2double(get(handles.qd3,'String'));
Q4=str2double(get(handles.qd4,'String'));
Q5=str2double(get(handles.qd5,'String'));
set_param('ensamblaje/Gain','Gain',num2str(Q1));
set_param('ensamblaje/Gain1','Gain',num2str(Q2));
set_param('ensamblaje/Gain2','Gain',num2str(Q3));
set_param('ensamblaje/Gain3','Gain',num2str(Q4));
set_param('ensamblaje/Gain4','Gain',num2str(Q5));
L1=175;L2=200;L3=150;L4=51;
A11=cosd(Q1)*cosd(Q2+Q3+Q4)*cosd(Q5)+sind(Q1)*sind(Q5);
A12=-cosd(Q1)*cosd(Q2+Q3+Q4)*sind(Q5)+sind(Q1)*cosd(Q5);
A13=cosd(Q1)*sind(Q2+Q3+Q4);
px=cosd(Q1)*(L4*sind(Q2+Q3+Q4)+L3*cosd(Q2+Q3)+L2*cosd(Q2))
A21=sind(Q1)*cosd(Q2+Q3+Q4)*cosd(Q5)+cosd(Q1)*sind(Q5);
A22=-sind(Q1)*cosd(Q2+Q3+Q4)*sind(Q5)-cosd(Q1)*cos(Q5);
A23=sind(Q1)*sind(Q2+Q3+Q4);
py=sind(Q1)*(L4*sind(Q2+Q3+Q4)+L3*cosd(Q2+Q3)+L2*cosd(Q2));
A31=sind(Q2+Q3+Q4)*cosd(Q5);
A32=-sind(Q2+Q3+Q4)*sind(Q5);
A33=-cosd(Q2+Q3+Q4);
pz=L1-L4*cosd(Q2+Q3+Q4)+L3*sind(Q2+Q3)+L2*sind(Q2);
set(handles.a11,'String',A11);
set(handles.a12,'String',A12);
set(handles.a13,'String',A13);

set(handles.a21,'String',A21);
set(handles.a22,'String',A22);
set(handles.a23,'String',A23);
set(handles.a31,'String',A31);
set(handles.a32,'String',A32);
set(handles.a33,'String',A33);
set(handles.PX,'String',px);
set(handles.PY,'String',py);
set(handles.PZ,'String',pz);
px=str2double(get(handles.qc1,'String'));
py=str2double(get(handles.qc2,'String'));
pz=str2double(get(handles.qc3,'String'));

Para el pushbutton2 que es la CINEMATICA INVERSA


function pushbutton4_Callback(hObject, eventdata, handles)
L1=175;L2=200;L3=150;L4=51;
px=str2double(get(handles.Xo,'String'));
py=str2double(get(handles.Yo,'String'));
pz=str2double(get(handles.Zo,'String'));
cab=str2double(get(handles.tt1,'String'));
q1=atand(py/px)
r1=real(q1)
P1=round(r1)
q1=atand(py/px)
r1=real(q1)
P1=round(r1)
q2=atand(abs(pz-L1-L4*sind(cab))/((sqrt(px^2+py^2))L4*cosd(cab)))+acosd((-L2^2-((sqrt(px^2+py^2)-L4*cosd(cab))^2+((pz-L1)L4*sind(cab))^2)+L3^2)/(-2*L2*sqrt((sqrt(px^2+py^2)-L4*cosd(cab))^2+((pzL1)-L4*sind(cab))^2)))
q3=acosd((-L2^2-L3^2+(((sqrt(px^2+py^2))-L4*cosd(cab))^2+((pz-L1)L4*sind(cab))^2))/(-2*L2*L3))-90
q4=cab+q1+q2
r3=real(q3)*-1
P3=round(r3)
r2=real(q2)
P2=round(r2)
r4=real(q4)
P4=round(r4)
set(handles.An1,'String',fix(P1));
set(handles.An2,'String',fix(P2));
set(handles.An3,'String',fix(P3));
set(handles.An3,'String',fix(P3));
set_param('ensamblaje/Gain','Gain',num2str(P1));
set_param('ensamblaje/Gain1','Gain',num2str(P2));
set_param('ensamblaje/Gain2','Gain',num2str(P3));
set_param('ensamblaje/Gain3','Gain',num2str(P4));

UNIVERSIDAD MAYOR DE SAN SIMON


FACULTAD DE CIENCIAS Y TECNOLOGIA
DEPARTAMENTO DE ELECTROMECANICA

INFORME
SIMULACION DE BRAZO ROBOTICO DE
5 GRADOS DE LIBERTAD

Nombre: ACUA VELARDE NELSON BORIS


Materia: ROBOTICA
Carrera: ELECTROMECANICA
Docente: ING. ARANCIBIA MARCO

COCHABAMBA-BOLIVIA