Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Sección: B
Lima – Perú
2018
DINÁMICA DE SISTEMAS MLTICUERPO – Segunda Práctica Calificada
ÍNDICE
1. Introducción ………………………………………….………………………….3
2. Diseño del manipulador robótico…………………………………………...……4
3. Materiales y costos……………………………………………………………...10
4. Descripción del proceso de fabricación…………………………………………11
5. Cinemática directa……………………………………………………………...13
6. Cinemática inversa……………………………………………………………...18
7. Movimiento permitido …………………………………………………………21
8. Programación………………………………………………………………...…22
8.1. Diseño de interfaz cinemática directa………………………………………24
8.2. Diseño de interfaz cinemática inversa……………………………………...27
9. Desarrollo de actividad…………………………………………………………34
pág. 2
DINÁMICA DE SISTEMAS MLTICUERPO – Segunda Práctica Calificada
INTRODUCCIÓN
En la actualidad la robótica ha adquirido una gran importancia en diferentes áreas, desde
la industria hasta un uso más personal, existiendo su vez distintas formas de realizar las
acciones deseadas, siendo una de las más comunes la implementación de un brazo
robótico en serie.
En el presente trabajo, se expone el proceso de fabricación de un brazo robótico,
incluyendo tanto el diseño de cada una de las piezas utilizadas, el diseño de los
componentes electrónicos, así como el costo de todo el proyecto, además de una
explicación de cómo fue todo este proceso.
Finalmente, tras haber finalizado el desarrollo del brazo, se espera que en un futuro este
pueda realizar las aplicaciones deseadas, pudiendo ayudar cada vez más en el desarrollo
de nuevas tecnologías.
pág. 3
DINÁMICA DE SISTEMAS MLTICUERPO – Segunda Práctica Calificada
Figura 1. Engranaje 1
Figura 2. Junta 1
pág. 4
DINÁMICA DE SISTEMAS MLTICUERPO – Segunda Práctica Calificada
Figura 3. Junta 2
Figura 4. Junta 3
Figura 5. Junta 4
pág. 5
DINÁMICA DE SISTEMAS MLTICUERPO – Segunda Práctica Calificada
pág. 6
DINÁMICA DE SISTEMAS MLTICUERPO – Segunda Práctica Calificada
pág. 7
DINÁMICA DE SISTEMAS MLTICUERPO – Segunda Práctica Calificada
pág. 8
DINÁMICA DE SISTEMAS MLTICUERPO – Segunda Práctica Calificada
pág. 9
DINÁMICA DE SISTEMAS MLTICUERPO – Segunda Práctica Calificada
MATERIALES Y COSTOS
A continuación, se presenta una lista de los materiales usados en el diseño del brazo
robótico, junto con sus respectivos costos:
pág. 10
DINÁMICA DE SISTEMAS MLTICUERPO – Segunda Práctica Calificada
pág. 11
DINÁMICA DE SISTEMAS MLTICUERPO – Segunda Práctica Calificada
dos pequeños soportes, los cuales fueron fijados en sus respectivas ranuras con la
ayuda de silicona.
A continuación, tuvieron que ser colocados tanto el brazo, el antebrazo y la
muñeca del robot, siendo el procedimiento usado en los tres bastante similar,
consistiendo en la colocación del servomotor en la ranura correspondiente,
fijándose con ayuda de 4 pernos, además de la unión de los ejes de los motores
con la placa siguiente, lo cuál se realizó con ayuda de una de las pequeñas aletas
que llegan junto al servomotor, además se tuvieron que unir las caras paralelas
con el fin de obtener una mayor estabilidad, esto se realizó con ayuda de los
alambres completamente roscados, y finalmente, a fin de unir las placas en el lado
opuesto al del eje, se decidió usar rodamientos, los cuales se fijaron gracias a la
utilización de pernos, los cuales funcionaron a modo de ejes.
Finalmente, debía de ser realizada la implementación de la garra. Esto se realizó
con la utilización de los tornillos adecuados, y la colocación de las piezas en el
lugar adecuado.
Con esto concluye el proceso de desarrollo e implementación del brazo robótico, el
cual se espera en un futuro pueda realizar las diversas operaciones para las que fue
diseñado.
pág. 12
DINÁMICA DE SISTEMAS MLTICUERPO – Segunda Práctica Calificada
CINEMÁTICA DIRECTA
Para llevar a cabo la cinemática directa, es necesario llevar a cabo una serie de pasos los
cuales son detallados a continuación: Z0
1. Asignación de los ejes z
Este paso es de vital importancia, pues nuestros cálculos se guían principalmente
de la posición y la dirección de nuestros ejes z
El eje z2 es paralelo a z1, por lo que el eje x2 sigue la línea que une ambos, lo
mismo sucede entre los sistemas 2 y 3.
Los ejes z3 y z4 son perpendiculares, por lo que el eje x4 es perpendicular al plano
formado por ambos.
Finalmente, el eje 5 es paralelo al eje 4, estando este posicionado en el punto final
del brazo.
pág. 13
DINÁMICA DE SISTEMAS MLTICUERPO – Segunda Práctica Calificada
pág. 14
DINÁMICA DE SISTEMAS MLTICUERPO – Segunda Práctica Calificada
100 mm
pág. 15
DINÁMICA DE SISTEMAS MLTICUERPO – Segunda Práctica Calificada
cos(θ4 ) 0 𝑠𝑒𝑛(θ4 ) 0
𝐴34 =(𝑠𝑒𝑛(θ4 ) 0 − cos(θ4 ) 0)
0 1 0 0
0 0 0 1
cos(θ5 ) − 𝑠𝑒𝑛(θ5 ) 0 0
𝐴45 =(𝑠𝑒𝑛(θ5 ) cos(θ5 ) 0 0 )
0 0 1 206
0 0 0 1
pág. 16
DINÁMICA DE SISTEMAS MLTICUERPO – Segunda Práctica Calificada
Donde:
𝑎33 = −cos(θ2 + θ3 + θ4 )
pág. 17
DINÁMICA DE SISTEMAS MLTICUERPO – Segunda Práctica Calificada
CINEMÁTICA INVERSA
Para llevar a cabo la cinemática inversa se realizó un esquema del brazo robótico más
sencillo para poder realizar trazos:
pág. 18
DINÁMICA DE SISTEMAS MLTICUERPO – Segunda Práctica Calificada
Posteriormente tomamos una vista en la que el eje de las abscisas sea coincidente con la
resultante de Xc e Yc de la primera parte.
De lo cual:
𝑅𝑐 = √𝑥𝑐 2 + 𝑦𝑐 2
𝑅𝑐2 = 𝑅𝑐 − 𝑙4 ∗ cos(𝜽𝒇 )
Además, debido a la utilidad que se le desea dar al brazo, se escoge el siguiente valor
constante valor constante: 𝜽𝒇 =0
pág. 19
DINÁMICA DE SISTEMAS MLTICUERPO – Segunda Práctica Calificada
𝜃3 = atan2(±√1 − 𝐷2 , 𝐷)
Si bien se pueden usar ambos signos, se prefiere trabajar con el negativo, dado que al usar
este nuestro brazo adquiere más estabilidad, debido al sentido en que se inclina el codo
Para 𝜃2 :
𝜃4 = 𝜃𝑓 − (𝜃2 + 𝜃3 )
pág. 20
DINÁMICA DE SISTEMAS MLTICUERPO – Segunda Práctica Calificada
RESTRICCIONES DE MOVIMIENTO
A continuación, se muestran los ángulos que se le permite girar a cada uno de los motores
en el brazo:
𝜃4
𝜃3
𝜃2
En la imagen se aprecia los ángulos de rotación de los motores, estos ángulos están
restringidos por la forma de nuestro brazo, definiendo así condiciones mecánicas.
Además se considerará las restricciones del primer motor, el cual no se aprecia en la
gráfica debido al ángulo en el que se enfoca.
Entonces: 𝜃1 ∈< −90, 90 >, 𝜃2 ∈< 45,135 >, 𝜃3 ∈< −90, 90 >, 𝜃4 ∈< −90, 90 >
pág. 21
DINÁMICA DE SISTEMAS MLTICUERPO – Segunda Práctica Calificada
PROGRAMACIÓN
Para poder realizar el programa en Matlab, se tuvo que realizar la siguiente secuencia de
pasos:
Se tuvo que crear funciones que nos entreguen los parámetros tanto de cinemática directa
como de inversa.
Siendo la siguiente, la función de cinemática directa:
function [T01,T02,T03,T04,T05]=cinematica_directa2(q1,q2,q3,q4,q5)
%-------------------------------------------------------%
% 1. LONGITUDES DEL BRAZO
%-------------------------------------------------------%
L1 = 0.5;
L2 = 0.86;
L3 = 0.86;
L4 = 0.85;
%-------------------------------------------------------%
%------------------------------------------------------------%
% 4. CINEMATICA DIRECTA - SISTEMAS COORDENADOS
%------------------------------------------------------------%
% Llenamos con la información de nuestro brazo %INFORMACION FIJA
q4 = pi/2+q4;
%--------------------------------------------------------------------%
% 2. DEFINICION DE SISTEMAS COORDENADOS
%--------------------------------------------------------------------%
% 2.1. SISTEMA COORDENADO 1
A1 = matriz_homogenea_DH(theta1,d1,a1,alpha1);
% 2.2. SISTEMA COORDENADO 2
A2 = matriz_homogenea_DH(theta2,d2,a2,alpha2);
% 2.3. SISTEMA COORDENADO 3
A3 = matriz_homogenea_DH(theta3,d3,a3,alpha3);
% 2.3. SISTEMA COORDENADO 4
A4 = matriz_homogenea_DH(theta4,d4,a4,alpha4);
% 2.3. SISTEMA COORDENADO 5
A5 = matriz_homogenea_DH(theta5,d5,a5,alpha5);
%--------------------------------------------------------------------%
% 3. CALCULO DE LA MATRIZ DE TRANSFORMACION DEL EFECTOR
%--------------------------------------------------------------------%
T01 = A1;
T02 = T01*A2;
T03 = T02*A3;
T04 = T03*A4;
T05 = T04*A5;
pág. 22
DINÁMICA DE SISTEMAS MLTICUERPO – Segunda Práctica Calificada
De igual manera, se desarrolló una función para poder trabajar los parámetros de
cinemática inversa:
function [q1,q2,q3,q4,FLAG]=cinematica_inversa(x,y,z,theta_f)
% FLAG=0 ... Todo OK
% FLAG=1 ... Error
FLAG = 0;
%-------------------------------------------------------%
% 1. LONGITUDES DEL BRAZO
%-------------------------------------------------------%
L1 = 1;
L2 = 0.86;
L3 = 0.80;
L4 = 2.06;
%-------------------------------------------------------%
% 3. CINEMATICA INVERSA
%------------------------------------------------------------%
% 3.1. EMPEZAMOS CON "q1=theta1"
q1 = atan2(y,x);
L = sqrt(x^2+y^2);
zp = z-L4*sin(theta_f)-L1;
Lp = L - L4*cos(theta_f);
Dp = sqrt(Lp^2 + zp^2);
%Condición de exitencia
C_num = Dp^2 - (L2^2 + L3^2);
C_den = 2*L2*L3;
C = C_num/C_den;
if(abs(C)>1)
FLAG=1;
q1=-100; q2=-100; q3=-100; q4=-100;
return
end
%Hallando los otros parámetros
q3 = atan2(-sqrt(1-C^2),C);
q2 = atan2(zp,Lp)-atan2(L3*sin(q3),L2+L3*cos(q3));
q4 = theta_f-(q2+q3);
pág. 23
DINÁMICA DE SISTEMAS MLTICUERPO – Segunda Práctica Calificada
s1 = serial('COM6');
fopen(s1);
handles.puerto = s1; % Guardamos el puerto
pág. 24
DINÁMICA DE SISTEMAS MLTICUERPO – Segunda Práctica Calificada
Verificamos las limitaciones de cada uno de los ángulos, esto también se hace
junto con pruebas físicas, para poder ver hasta donde es capaz de moverse cada
junta:
q1 = q1*pi/180;
q2 = q2*pi/180;
q3 = q3*pi/180;
q4 = q4*pi/180;
q5 = q5*pi/180;
% 3.2. HALLAMOS LA CINEMATICA
T05=cinematica_directa(q1,q2,q3,q4,q5);
% 3.3. SACAMOS LA COORDENADA DEL PUNTO FINAL
xx = T05(1,4);
yy = T05(2,4);
zz = T05(3,4);
pág. 25
DINÁMICA DE SISTEMAS MLTICUERPO – Segunda Práctica Calificada
q1 = get(handles.q1, 'String');
q2 = get(handles.q2, 'String');
q3 = get(handles.q3, 'String');
q4 = get(handles.q4, 'String');
q5 = get(handles.q5, 'String');
q1 = str2double(q1); % Esta en sexagesimal
q2 = str2double(q2);
q3 = str2double(q3);
q4 = str2double(q4);
q5 = str2double(q5);
pág. 26
DINÁMICA DE SISTEMAS MLTICUERPO – Segunda Práctica Calificada
s1 = handles.puerto;
fwrite(s1,[q1_motor q2_motor q3_motor],'uchar');
pág. 27
DINÁMICA DE SISTEMAS MLTICUERPO – Segunda Práctica Calificada
pág. 28
DINÁMICA DE SISTEMAS MLTICUERPO – Segunda Práctica Calificada
pág. 29
DINÁMICA DE SISTEMAS MLTICUERPO – Segunda Práctica Calificada
y3 = T03(2,4);
z3 = T03(3,4);
%line([x2 x3], [y2 y3], [z2 z3], 'LineWidth', 4)
set(handles.h_L3,'xdata',[x2 x3],'ydata', [y2 y3], 'zdata',
[z2 z3]);
% CUARTA LINEA
x4 = T04(1,4);
y4 = T04(2,4);
z4 = T04(3,4);
%line([x3 x4], [y3 y4], [z3 z4], 'LineWidth', 4)
set(handles.h_L4,'xdata',[x3 x4],'ydata', [y3 y4], 'zdata',
[z3 z4]);
% QUINTA LINEA
x5 = T05(1,4);
y5 = T05(2,4);
z5 = T05(3,4);
%line([x4 x5], [y4 y5], [z4 z5], 'LineWidth', 4)
set(handles.h_L5,'xdata',[x4 x5],'ydata', [y4 y5], 'zdata',
[z4 z5]);
% PARA PLOTEAR LOS SISTEMAS COORDENADOS
plot_frame(handles.h1, T01);
plot_frame(handles.h2, T02);
plot_frame(handles.h3, T03);
plot_frame(handles.h4, T04);
plot_frame(handles.h5, T05);
%--------------------------------------------------%
% 1. LEEMOS LA VARIABLE DEL PUERTO
%--------------------------------------------------%
s1 = handles.puerto;
%--------------------------------------------------%
% 2. LEEMOS EL VALOR DE LOS ANGULOS (caja de texto)
%--------------------------------------------------%
q1 = get(handles.angulo_q1_sexa, 'String');
q2 = get(handles.angulo_q2_sexa, 'String');
q3 = get(handles.angulo_q3_sexa, 'String');
q4 = get(handles.angulo_q4_sexa, 'String');
q5 = get(handles.q5, 'String');
q1 = str2double(q1); % Esta en sexagesimal
q2 = str2double(q2);
q3 = str2double(q3);
q4 = str2double(q4);
q5 = str2double(q5);
%--------------------------------------------------%
% 3. APLICAMOS LA CALIBRACION
% (Depende como lo han armado)
%--------------------------------------------------%
% 3.1. PARA EL MOTOR 1
q1_motor = q1 + 90;
% 3.2. PARA EL MOTOR 2 (Servo base_1)
q2_motor = q2 + 60;
pág. 30
DINÁMICA DE SISTEMAS MLTICUERPO – Segunda Práctica Calificada
%--------------------------------------------------%
% 4. ENVIAMOS LOS ANGULOS AL ARDUINO
%--------------------------------------------------%
s1 = handles.puerto;
fwrite(s1,[q1_motor q2_motor q3_motor, q4_motor, q5_motor,
q6_motor],'uchar');
De igual manera se debe de realizar un código de Arduino en su propia IDE para poder
enviar información desde el Matlab:
int dir = 2;
int steps = 3;
int tiempo = 5;
int n = 0;
//--------------------------------------------------------------//
// 2. RUTINA DE CONFIGURACION
//--------------------------------------------------------------//
void setup()
{
//Configuracion del Paso a Paso
pinMode(steps, OUTPUT);
pinMode(dir, OUTPUT);
pág. 31
DINÁMICA DE SISTEMAS MLTICUERPO – Segunda Práctica Calificada
pág. 32
DINÁMICA DE SISTEMAS MLTICUERPO – Segunda Práctica Calificada
pág. 33
DINÁMICA DE SISTEMAS MLTICUERPO – Segunda Práctica Calificada
DESARROLLO DE ACTIVIDAD
Finalmente se desea que el brazo sea capaz de realizar una actividad previamente
programada, en este caso se escogió que escriba la palabra UNI, realizándose de la
siguiente manera:
Primeramente, diseñamos la interfaz para poder enviar y recibir datos
provenientes del código
pág. 34
DINÁMICA DE SISTEMAS MLTICUERPO – Segunda Práctica Calificada
pág. 35
DINÁMICA DE SISTEMAS MLTICUERPO – Segunda Práctica Calificada
zf = PUNTOS(p+1,3);
% Ploteamos
plot3(xo,yo,zo,'ro','MarkerFaceColor','k','MarkerSize',4)
plot3(xf,yf,zf,'ro','MarkerFaceColor','r','MarkerSize',4)
if (p~=4 && p~=9)
line([xo xf], [yo yf],[zo zf],'Color','k','LineWidth', 3)
fprintf('LINEA %d\n', p)
end
fprintf('LINEA %d\n', p)
for i=1:STEPS
% A. CINEMATICA INVERSA
x = xo + (xf-xo)*i/STEPS;
y = yo + (yf-yo)*i/STEPS;
z = zo + (zf-zo)*i/STEPS;
[q1,q2,q3,q4,
FLAG]=cinematica_inversa(x,y,z,theta_f);
if(FLAG==1)
% Error
% - Apagar hardware, etc. Desconectar arduino, etc
error('FINALIZANDO POSICION IMPOSIBLE DE ALCANZAR')
end
% PONEMOS EL RESULTADO
set(handles.posicion_x, 'String',round(x*1000)/1000);
set(handles.posicion_y, 'String',round(y*1000)/1000);
set(handles.posicion_z, 'String',round(z*1000)/1000);
set(handles.angulo_q1, 'String',q1);
set(handles.angulo_q2, 'String',q2);
set(handles.angulo_q3, 'String',q3);
set(handles.angulo_q4, 'String',q4);
set(handles.angulo_q1_sexa, 'String',q1*180/pi);
set(handles.angulo_q2_sexa, 'String',q2*180/pi);
set(handles.angulo_q3_sexa, 'String',q3*180/pi);
set(handles.angulo_q4_sexa, 'String',q4*180/pi);
% DIBUJAMOS EL RESULTADO
axes(handles.axes_robot)
[T01,T02,T03,T04,T05]=cinematica_directa2(q1,q2,q3,q4,q5);
% PRIMERA LINEA
x1 = T01(1,4);
y1 = T01(2,4);
z1 = T01(3,4);
%line([0 x1],[0 y1],[0 z1],'LineWidth', 4)
set(handles.h_L1,'xdata',[0 x1],'ydata', [0 y1],
'zdata', [0 z1]);
% SEGUNDA LINEA
x2 = T02(1,4);
y2 = T02(2,4);
z2 = T02(3,4);
%line([x1 x2], [y1 y2], [z1 z2], 'LineWidth', 4)
set(handles.h_L2,'xdata',[x1 x2],'ydata', [y1 y2],
'zdata', [z1 z2]);
% TERCERA LINEA
x3 = T03(1,4);
y3 = T03(2,4);
z3 = T03(3,4);
%line([x2 x3], [y2 y3], [z2 z3], 'LineWidth', 4)
pág. 36
DINÁMICA DE SISTEMAS MLTICUERPO – Segunda Práctica Calificada
pág. 37
DINÁMICA DE SISTEMAS MLTICUERPO – Segunda Práctica Calificada
pág. 38