Вы находитесь на странице: 1из 13

"Año de la lucha contra la corrupción e impunidad"

UNIVERSIDAD NACIONAL DE INGENIERÍA


FACULTAD DE INGENIERÍA MECÁNICA

INFORME II: ROBOT SCARA


Análisis cinemático del brazo robotico.

PROFESOR: Msc. Ing. Iván A. Calle Flores.


CURSO/SECCIÓN: Dinámica de los Sistemas Multicuerpo.
[MT516B]

INTEGRANTES:
APELLIDOS Y NOMBRES: CODIGO UNI:

-Laura Ordoñez, Brayan Allison. 20121006D


-Lima Aroni, Ronaldo. 20163002G
-Silvera Remicio, Antonio Wenceslao. 20160118D
Universidad Nacional de Ingeniería
Facultad de Ingeniería Mecánica

[TÍTULO DEL DOCUMENTO]


CICLO: 2019-1

Tabla de contenido
ANÁLISIS CINEMÁTICO DEL MANIPULADOR SCARA.....................................3
CINEMÁTICA DIRECTA.........................................................................................4
SIMULACION EN MATLAB....................................................................................5
GUIDE MATLAB – CODIGO FUENTE..................................................................6
CÓDIGO FUENTE - ARDUINO...............................................................................9
ANALISIS DE RESTRICCIONES Y EL ESPACIO DE TRABAJO.......................10

2
Universidad Nacional de Ingeniería
Facultad de Ingeniería Mecánica

[TÍTULO DEL DOCUMENTO]

ANÁLISIS CINEMÁTICO DEL MANIPULADOR SCARA


ASIGNACIÓN DE SISTEMAS DE CORDENADAS (CONVENCIÓN DENAVIT -
HARTENBERG).
L2

z2

y2
z1
x2 z3

y1 y3
x1
L1 L3

z0 x3
q2

x0 y0

MODELO ESQUEMÁTICO:

L2

L3

MEDIDAS:

3
Universidad Nacional de Ingeniería
Facultad de Ingeniería Mecánica

[TÍTULO DEL DOCUMENTO]


L2 = 15 cm; L3 = 18 cm

CINEMÁTICA DIRECTA.
TABLA DE PARAMETROS DENAVIT – HARTENBERG.
Junta θ d a α
1 q1 q2 0 0°
π
2 0 L2 = 15 0°
2
3 q3 0 L3 = 18 0°

OBTENCION DE LA MATRIZ DE TRANSFORMACION:


La obtención de la matriz de transformación estaría dada por:
0 0 1 2
T 3 = A1∗A 2∗A3

Donde las matrices A1, A2 Y A3 se obtienen mediante la tabla de parámetros Denavit –


Hartenberg:

I−1
A I =¿

0 0
T 1 ¿ A1

0 0 1
T 2 ¿ A1∗A 2

0 0 1 2
T 2 ¿ A1∗A 2∗A 3

4
Universidad Nacional de Ingeniería
Facultad de Ingeniería Mecánica

[TÍTULO DEL DOCUMENTO]


SIMULACION EN MATLAB
Utilizaremos MATLAB para la simulación de la cinemática directa:

Creación de la función cinemática directa:

%% CODIGO MATLAB DE LA FUNCION CINEMÁTICA DIRECTA


function [T01,T02,T03]=cinematica_directa(q1,q2,q3)
%-------------------------------------------------------%
% 1. LONGITUDES DEL BRAZO
%-------------------------------------------------------%
L2 = 15
L3 = 18

%-------------------------------------------------------%
% 2. CINEMATICA
%-------------------------------------------------------%
% 2.1. SISTEMA COORDENADO {1}
theta1 = q1;
d1 = d_1;
a1 = a_1;
alpha1 = alpha_1;
% -> Matriz A1
A1 = matriz_homogenea_DH(theta1,d1,a1,alpha1);
T01 = A1;
% 2.2. SISTEMA COORDENADO {2}
theta2 = 0;
d2 = 0;
a2 = L2;
alpha2 = 0;
% -> Matriz A2
A2 = matriz_homogenea_DH(theta2,d2,a2,alpha2);
T02 = A1*A2;
% 2.3. SISTEMA COORDENADO {3}
theta3 = q3;
d3 = 0;
a3 = L3;
alpha3 = 0;
% -> Matriz A3
A3 = matriz_homogenea_DH(theta3,d3,a3,alpha3);
T03 = T02*A3;

5
Universidad Nacional de Ingeniería
Facultad de Ingeniería Mecánica

[TÍTULO DEL DOCUMENTO]


GUIDE MATLAB – CODIGO FUENTE
Los codigo fuente mas importantes son:
APERTURA DE LA COMUNICACIÓN SERIAL:

function interface_OpeningFcn(hObject, ~, handles, varargin)


clc
%--------------------------------------------------%
% ABRIMOS EL PUERTO SERIAL
%--------------------------------------------------%
s1 = serial('COM17');
fopen(s1);
handles.puerto = s1; % Guardamos el puerto

CODIGO DEL BOTON ENVIAR:

function boton_enviar_Callback(hObject, eventdata, handles)


% hObject handle to boton_enviar (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

%--------------------------------------------------%
% 1. LEEMOS EL VALOR DE LOS ANGULOS (caja de texto)
%--------------------------------------------------%
q1 = get(handles.q1, 'String');
q2 = get(handles.q2, 'String');
q3 = get(handles.q3, 'String');
q1 = str2double(q1); % Esta en sexagesimal
q2 = str2double(q2);
q3 = str2double(q3);

%--------------------------------------------------%
% 2. APLICAMOS LA CALIBRACION
% (Depende como lo han armado)
%--------------------------------------------------%
% 2.1. PARA EL MOTOR 1
q1_motor = q1;
% 2.2. PARA EL MOTOR 2
q2_motor = q2;
% 2.3. PARA EL MOTOR 3
q3_motor = q3;
% 2.4. REDONDEAMOS
q1_motor = round(q1_motor);
q2_motor = round(q2_motor);
q3_motor = round(q3_motor);
fprintf('VALORES A ENVIAR A LOS NEMAS\n');
fprintf(' q1_motor:%d\n', q1_motor);
fprintf(' q2_motor:%d\n', q2_motor);
fprintf(' q3_motor:%d\n', q3_motor);

%--------------------------------------------------%
% 3. ENVIAMOS LOS ANGULOS AL ARDUINO
%--------------------------------------------------%
s1 = handles.puerto;
fwrite(s1,[q1_motor q2_motor q3_motor],'uchar');

6
Universidad Nacional de Ingeniería
Facultad de Ingeniería Mecánica

[TÍTULO DEL DOCUMENTO]


CODIGO DE LA CINEMATICA DIRECTA:

function boton_cinematica_Callback(hObject, eventdata, handles)


% hObject handle to boton_cinematica (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

%--------------------------------------------------%
% 1. LEEMOS EL VALOR DE LOS ANGULOS (caja de texto)
%--------------------------------------------------%
q1 = get(handles.q1, 'String');
q2 = get(handles.q2, 'String');
q3 = get(handles.q3, 'String');
q1 = str2double(q1); % Esta en sexagesimal
q2 = str2double(q2);
q3 = str2double(q3);

%--------------------------------------------------%
% 2. VERIFICAMOS LIMITACIONES FISICAS
%--------------------------------------------------%
% 2.1. PARA EL MOTOR 1 - JUNTA 1
if(q2>85)
fprintf(' q2(cm):%2.4f\n', q2)
errordlg('Fuera de rango, debe ser menor a 15.85cm', 'NEMA 02')
return
end
% 2.2. PARA EL MOTOR 2 - JUNTA 2
if( q1>360)
fprintf(' q1(sexa):%2.4f\n', q1)
errordlg('Fuera de rango (0°,360°)', 'NEMA 01')
return
end
% 2.3. PARA EL MOTOR 3 - JUNTA 3
if( q3>100)
fprintf(' q1(sexa):%2.4f\n', q3)
errordlg('Fuera de rango (0°,100°)', 'NEMA 03')
return
end

%--------------------------------------------------%
% 3. HALLAMOS LA CINEMATICA
%--------------------------------------------------%
% 3.1. CONVERTIMOS LOS ANGULOS A RADIANES
q1 = q1*pi/180;
q2 = q2+0; % ES VARIABLE DE LONGITUD
q3 = q3*pi/180;

% 3.2. HALLAMOS LA CINEMATICA


[T01,T02,T03]=cinematica_directa(q1,q2,q3);
% 3.3. SACAMOS LA COORDENADA DEL PUNTO FINAL
xx = T03(1,4);
yy = T03(2,4);
zz = T03(3,4);

%--------------------------------------------------%
% 4. PONEMOS EL RESULTADO EN LA CAJA DE TEXTO
%--------------------------------------------------%
set(handles.x, 'String',round(xx*1000)/1000);
set(handles.y, 'String',round(yy*1000)/1000);

7
Universidad Nacional de Ingeniería
Facultad de Ingeniería Mecánica

[TÍTULO DEL DOCUMENTO]


set(handles.z, 'String',round(zz*1000)/1000);

CIERRE DE LA COMUNICACION SERIAL:

function figure1_CloseRequestFcn(hObject, eventdata, handles)


%--------------------------------------------------%
% CERRAMOS EL PUERTO SERIAL
%--------------------------------------------------%
s1 = handles.puerto;
fclose(s1);
disp('...cerrando ventana')

% Hint: delete(hObject) closes the figure


delete(hObject);

TAG: q1 TAG:
botón_cinemat

TAG:
botón_enviar

TAG: q2
TAG: q3
TAG: z

TAG: x TAG: y
c

Archivo del
código Matab:
C_Directa_Ma
8
Universidad Nacional de Ingeniería
Facultad de Ingeniería Mecánica

[TÍTULO DEL DOCUMENTO]


CÓDIGO FUENTE - ARDUINO

#define A_STEP 2 //ROTACIONAL (A)EJE X digitalWrite(A_STEP, HIGH);


#define A_DIR 5 delay(1);
#define B_DIR 7 //PRISMATICO (B) EJE Z digitalWrite(A_STEP, LOW);
#define B_STEP 4 delay(1); } }
#define C_DIR 6 //ROTACIONAL (C) EJEY delay(2000);
#define C_STEP 3
if(b==1){
double anguloA; digitalWrite(B_DIR, LOW);
double anguloB; for(int i = 0; i <anguloB*250; i++){
double anguloC; digitalWrite(B_STEP, HIGH);
delay(1);
double A_angle; digitalWrite(B_STEP, LOW);
double B_angle; delay(1);} }
double C_angle; else {
int a; digitalWrite(B_DIR, HIGH);
int b; for(int i = 0; i <abs(anguloB*250); i++){
int c; digitalWrite(B_STEP, HIGH);
void setup() delay(1);
{ digitalWrite(B_STEP, LOW);
pinMode(A_STEP, OUTPUT); delay(1);}}
pinMode(A_DIR, OUTPUT);
pinMode(B_STEP, OUTPUT); delay(2000);
pinMode(B_DIR, OUTPUT); if (c==1){
pinMode(C_STEP, OUTPUT); digitalWrite(C_DIR, LOW);
pinMode(C_DIR, OUTPUT); for(int i = 0; i < anguloC; i++){
Serial.begin(9600); digitalWrite(C_STEP, HIGH);
} delay(1);
digitalWrite(C_STEP, LOW);
void loop() delay(1);}
{ }
if(Serial.available()==6){ else{
; digitalWrite(C_DIR, HIGH);
anguloA=Serial.read(); for(int i = 0; i < abs(anguloC); i++){
anguloB=Serial.read(); digitalWrite(C_STEP, HIGH);
anguloC=Serial.read(); delay(1);
a=Serial.read(); digitalWrite(C_STEP, LOW);
b=Serial.read(); delay(1);}
c=Serial.read(); }
if(a==1){ delay(2000) ;
digitalWrite(A_DIR, LOW); }}
for(int i = 0; i < anguloA; i++){
digitalWrite(A_STEP, HIGH);
delay(1);
digitalWrite(A_STEP, LOW); Archivo del código arduino:
delay(1); }} C_Directa_Arduino
else{
digitalWrite(A_DIR, HIGH);
for(int i = 0; i < abs(anguloA); i++){

9
Universidad Nacional de Ingeniería
Facultad de Ingeniería Mecánica

[TÍTULO DEL DOCUMENTO]

10
ANÁLISIS DE RESTRICCIONES Y EL ESPACIO DE
TRABAJO

RESTRICCIONES

 La longitud máxima que alcanzara en el plano XY es de 32.5cm y la longitud


mínima será 16.5cm
 Se observa que no llegara a completar una vuelta completa, esto debido al
cableado entre el nema 17 de la junta prismática y el shield.

 La altura del robot escara no podrá alcanzar una distancia mayor a 15cm en la
dirección Z.
WORKSPACE
CINEMÁTICA INVERSA

Вам также может понравиться