You are on page 1of 59

Instituto Politécnico Nacional

UPIITA

Brazo Robótico tipo SCARA


Instituto Politécnico Nacional
UPIITA
Índice

Summary ..............................................................................................................¡Error! Marcador no definido.


1 Aplicación.............................................................................................................................................................5
Objetivo general .................................................................................................................................................5
Objetivos particulares ........................................................................................................................................5
Justificación ........................................................................................................................................................5
2 Especificaciones técnicas .................................................................................................................................6
3 Diseño mecánico ................................................................................................................................................7
Estructura ............................................................................................................................................................7
Pedestal ..............................................................................................................................................................8
Eslabones ...........................................................................................................................................................9
Gripper .............................................................................................................................................................. 17
4 Selección de componentes eléctricos .......................................................................................................... 19
Etapa de potencia ........................................................................................................................................... 19
Microcontrolador ............................................................................................................................................. 19
Fuente de alimentación.................................................................................................................................. 20
Cámara ............................................................................................................................................................. 20
Interfaz USB .................................................................................................................................................... 21
5 Selección de componentes mecánicos........................................................................................................ 22
Material ............................................................................................................................................................. 22
Rodamientos.................................................................................................................................................... 22
Motores............................................................................................................................................................. 23
Cremallera........................................................................................................................................................ 24
6 Control ............................................................................................................................................................... 25
7 Programación ................................................................................................................................................... 26
9 Pruebas ............................................................................................................................................................. 43
Funcionamiento de los motores ....................................................................................................................... 43
Se probaron los motores, montados en la estructura accionándolos en directo; observamos que los
motores soportaron los eslabones, y como es que estos se desplazaban con facilidad ........................ 43
Resistencia del material ..................................................................................................................................... 43
Durante el accionamiento de los motores por un periodo de 3 minutos observamos que el material
soporto los esfuerzos a los cuales habíamos previsto. ................................................................................ 43
Visión artificial...................................................................................................................................................... 43

Brazo Robótico tipo SCARA


Instituto Politécnico Nacional
UPIITA
Pareciese ser la sección del sistema que mejor funciono fue el software, el sistema reconoció los
apuntadores exitosamente, y cálculo la posición de estos con éxito. Las simulaciones de
posicionamiento y accionamiento de los motores también resultaron eficientes y suficientes para el
correcto control del sistema .............................................................................................................................. 43
10 Robotica .......................................................................................................................................................... 44
Cinemática directa .......................................................................................................................................... 44
Cinemática inversa ......................................................................................................................................... 46
Cinemática diferencial .................................................................................................................................... 48
11 Simulaciones .................................................................................................................................................. 49
12 Análisis de costos.......................................................................................................................................... 52
13 Conclusiones.................................................................................................................................................. 56

Brazo Robótico tipo SCARA


Instituto Politécnico Nacional
UPIITA
Introducción

Entendamos a la ingeniería Mecatrónica como la integración de las 4 grandes ramas de la ingeniería


control, informática, mecánica y electrónica. Sabiendo esto, las posibilidades de aplicación de la
ingeniería Mecatrónica son vastas teniendo así la capacidad de implantar sistemas automatizados en
casi cualquier área de trabajo, como en la medicina reduciendo y hasta evitando los errores
cometidos en la práctica de esta.
Por ello hemos tomado la tarea de desarrollar un brazo robótico controlado con visión artificial, el cual
ayudara a el tratado de muestras medicas, teniendo una eficiente labor reduciendo costos, personal y
tiempo en los laboratorios clínicos.

Abstrac

We understand to engineering Mechatronics like integration of the 4 great branches of engineering


control, computer science, mechanics and electronics. Knowing this, the possibilities of application of
engineering Mechatronics are vast having therefore the capacity to implant systems automated in
almost any work area, like in the medicine reducing and until avoiding the errors committed actually of
this. For that reason we have taken the task of developing a controlled robótico arm with artificial
vision, which helped the treaty of medical samples, having an efficient work reducing costs, personnel
and time in the clinical laboratories.

Brazo Robótico tipo SCARA


Instituto Politécnico Nacional
UPIITA
1 Aplicación

Objetivo general
Desarrollar un robot tipo SCARA, capaz de manipular manual y automáticamente muestras médicas;
en este caso particular, tubos de ensaye.

Objetivos particulares
Implementar el uso de un robot tipo SCARA en el área medica, reducir costos y tiempos en la
manipulación y procesado de muestras.

Implementación de los conocimiento adquiridos en la carrera de ingeniería Mecatrónica para


el desarrollo de un sistema mecatronico.

Crear y desarrollar un sistema de control el cual su retroalimentación este basada en visión


artificial.

Justificación
Los robot tipo SCARA son implementados en la industria por su alta precisión y velocidad, son
utilizados en especial cuando el desplazamiento de los elementos y el área de trabajo son reducidos.
Teniendo en cuenta su eficiencia es que su desplazamiento es virtualmente en el plano horizontal
facilitando su programación y control.

Muchos de estos tipos de sistemas están controlados o asistidos por un software de tratamiento
digital de imágenes; dando la posibilidad de una manipulación de los objetos más precisa, puesto que
siempre podremos saber la posición de los elementos a controlar y teniendo la posibilidad de
autocorregirse y seguir con su labor automática. En este caso hemos implementado un sistema de
control basado en Visión artificial, que nos entrega la posición de nuestro robot.

Hoy en día existen infinidad de procesos que se realizan dentro de los laboratorios, desde un análisis
de alguna sustancia, hasta el estudio de las diferentes reacciones químicas que surgen al combinar
diferentes elementos que pueden ser peligrosas para el ser humano.

No obstante el riesgo que esto puede traer, el hombre en su afán de ampliar sus conocimientos y
lograr a través de la experimentación encontrar la solución a diferentes situaciones, realiza
investigaciones en las cuales con frecuencia suele ser desconocida la peligrosidad que pueden
acarrear.

Por lo anterior, es que decidimos crear un mecanismo que permita al personal dentro de un
laboratorio realizar sus investigaciones con el menor riesgo posible para su persona, así como la
mínima existencia de errores, lo que permitirá hacer más eficientes los procesos y con ello acortar
tiempos e incluso disminuir considerablemente las horas hombre inactivas para poder ocupar este
tiempo en más investigaciones y, por qué no, ocuparlo para darle una calidad de vida diferente a esos
trabajadores.

La implementación de los robots en la rama de la medicina se ha venido dando desde hace ya un


tiempo, puesto que estos brindan la posibilidad de optimizar la labor de los médicos, reducir o asta
evitar errores cometidos por ellos. Cuántas veces hemos escuchado que el laboratorista comente un
error con las muestras tomadas, ya sea la mala manipulación de estas o la confusión de las mismas.
Teniendo lo anterior en cuenta justificamos nuestra implementación y desarrollo de un robot tipo
SCARA, el cual manipulara y realizara los procesos que sean necesarios en un hospital o laboratorio;
lográndose de este modo la optimización en los procesos y reducción de costos y tiempo.

Brazo Robótico tipo SCARA


Instituto Politécnico Nacional
UPIITA
2 Especificaciones técnicas

Especificaciones técnicas

Peso 4.25 Kg

Carga máxima 350 gr

Alimentación 20 Vdc
80 w

Apertura de las tenazas 5 cm

Rango de operación eje1 +eje2 330mm


eje z 346mm
Giro +/- 360

Velocidad de 0.3 m/s


operación(max)

Configuración Robot Scara de tres grados de libertad

Sistema de control Control por visión artificial

Parámetros de los motores Vdc Par Corriente


Motor 1 24 V 5 kgf-cm 2A
Motor 2 12 V 2 kgf-cm 1A
Motor 3 12 V 4.6 kgf-cm 2A
Motor 4 5 V 2 kgf-cm 700 mA

Condiciones de Temperatura 5°C - 40°C


operación Humedad 10%-70%

Tabla2.1 Especificaciones técnicas del robot SCARA

Brazo Robótico tipo SCARA


Instituto Politécnico Nacional
UPIITA
3 Diseño mecánico

Estructura

El material utilizado para la construcción de toda la estructura es acrílico, los datos requeridos para la
realización de los cálculos necesarios son:

Módulo de Elasticidad: 2.24 a 3.29 GPa


Densidad: 1.19 gr/cm3

El acrílico es un material usado ampliamente en la industria puesto que su resistencia al impacto es


alta, 10 veces la del vidrio; tiene una resistencia a la intemperie y a los rayos ultravioleta bastante alta
ya que no se aprecia envejecimiento hasta después de más de diez años de ataque constante de
estos elementos. Es de fácil mecanización haciendo un material bastante eficiente al momento de
crear y hasta corregir las piezas.

La estructura del robot se muestra a continuación

Figura 3.1Estructura robot SCARA

Brazo Robótico tipo SCARA


Instituto Politécnico Nacional
UPIITA
Pedestal

El pedestal es un tubo construido con acrílico con un diámetro de de 7.5’’, siendo la sección más
fuerte del robot puesto que tiene que soportar el peso y el corte que crea la inercia de las extensiones
del brazo.
Se escogió un tubo y no una viga puesto que mientras el material este más alejado del centro de este
el corte de las fuerzas de torsión se reducen, evitando la fractura de este

Figura 3.2 Plano Pedestal

Brazo Robótico tipo SCARA


Instituto Politécnico Nacional
UPIITA
Eslabones

Con objeto de lograr la respuesta más rápida posible para un movimiento dado y un sistema de
accionamiento, los eslabones que forman las estructura deben de mantenerse lo más ligeros
posibles, los eslabones deben también ser tan rígidos como sea posible.

Eslabon1:

Figura 3.3 Plano Eslabon1

Brazo Robótico tipo SCARA


Instituto Politécnico Nacional
UPIITA

Figura 3.4.1 Análisis de Esfuerzos Eslabón 1

10

Brazo Robótico tipo SCARA


Instituto Politécnico Nacional
UPIITA

Figura 3.4.2 Análisis de Esfuerzos Eslabón 1

11

Brazo Robótico tipo SCARA


Instituto Politécnico Nacional
UPIITA

Figura 3.4.3 Análisis de Esfuerzos Eslabón 1

12

Brazo Robótico tipo SCARA


Instituto Politécnico Nacional
UPIITA
Eslabon2

Figura 3.5 Planos Eslabón 2

13

Brazo Robótico tipo SCARA


Instituto Politécnico Nacional
UPIITA

Figura 3.6.1 Análisis de Esfuerzos Eslabón 2

14

Brazo Robótico tipo SCARA


Instituto Politécnico Nacional
UPIITA

Figura 3.6.2 Análisis de Esfuerzos Eslabón 2

15

Brazo Robótico tipo SCARA


Instituto Politécnico Nacional
UPIITA

Figura 3.6.3 Análisis de Esfuerzos Eslabón 2

16

Brazo Robótico tipo SCARA


Instituto Politécnico Nacional
UPIITA
Gripper

Para nuestro efector final, hemos utilizado una combinación de mecanismos.


Para la sujeción utilizamos un juego de dos engranes planos conectado a un motoreductor-mini
mediante un tornillo sin fin, de este modo, el movimiento giratorio se transmite a las tenazas; las
cuales en su parte final tiene un material de mediana adherencia y en ellas un arreglo de pequeños
push-botton, los cuales nos señalan cuando se a sujetado algún elemento a tratar.
Para le movimiento vertical se utiliza sistema piñón-cremallera impulsado por un motor reductor con
una capacidad de 2,5kg, en esta parte un arreglo de push-botton nos indicara la altura a la que se
encuentra nuestro efector final.

Figura 3.7 Planos Gripper

17

Brazo Robótico tipo SCARA


Instituto Politécnico Nacional
UPIITA

Figura 3.8.1 Gripper

Figura 3.8.1 Gripper

18

Brazo Robótico tipo SCARA


Instituto Politécnico Nacional
UPIITA
4 Selección de componentes eléctricos

Etapa de potencia

Para la etapa de potencia se utilizaran cuatro circuitos integrados L298, este circuito integrado es un
controlador dual de motores que soporta altos voltajes (hasta 50v) y altas corrientes (hasta 4A). Estos
puentes H están controlados mediante visión artificial utilizando un programa creado en opencv. EL
circuito integrado se utilizo en la configuración en paralelo, esto significa que solo controlara un solo
motor pero en esta configuración el circuito integrado puede manejar más corriente, hasta 4 A. En el
diseño de este circuito se tuvieron que implementar diodos que pudieran manejar la corriente
necesaria además de utilizar disipadores en los circuitos integrados.

Figura 4.1 Esquemático del puente H.

Microcontrolador

El microcontrolador que se utilizo es un microcontrolador ATMEGA8535, el AVR se utilizara para


controlar el sentido de giro del motor y su velocidad con la información que se obtiene de la visión
artificial. El ATMEGA8535 es un microcontrolador de económico de ocho bits, 8Kb de memoria
interna y tiene cuatro puertos de ocho bits además es muy robusto y de implementación sencilla, es
decir no requiere de muchos elementos externos para poder funcionar, simplemente una alimentación
estable de 5 volts además de que no requiere de cristal externo. Además de estas ventajas, el
lenguaje de programación es dominado perfectamente y su confiabilidad está plenamente
demostrada.
Al microcontrolador llegaran las instrucciones necesarias provenientes del sistema de control por
visión artificial, este decodificara la información y enviara los pulsos necesarios para controlar las
etapas de potencia.

Figura 4.2 ATMEGA8535.

19

Brazo Robótico tipo SCARA


Instituto Politécnico Nacional
UPIITA
Fuente de alimentación

La fuente que utilizaremos es una fuente compacta de 20 v y hasta 4 amperes, la fuente es


compacta proporciona la tensión y corriente necesarias.

Figura 4.3 Esquemático Fuente de Alimentación

Cámara

La cámara es un componente fundamental del control por lo que la selección de cámara fue algo
minucioso. La cámara que cumplió con nuestros requisitos es una cámara Microsoft Vx-700, cuyas
características principales son una resolución de 2.0 mega pixeles, resolución de 640X480, conexión
USB y se escogió por proveer una imagen nítida, sin curvaturas, ser compacta y por su
compatibilidad. La cámara se monta en una estructura de altura variable para poder ajustar a la altura
necesaria sobre el robot.

Figura 4.4 WebCam Microsoft Vx-700.


20

Brazo Robótico tipo SCARA


Instituto Politécnico Nacional
UPIITA
Interfaz USB

La interfaz utiliza un pic 18f2550, es un microcontrolador pequeño que integra la comunicación USB,
lo que facilita en gran medida su programación. La comunicación USB está configurada para
funcionar como un puerto serial, es decir se comporta como un puerto COM. El puerto B está
configurada como salida (8 bits) y el puerto A esta configurada como entrada de datos (7 bits).
El microcontrolador utiliza un cristal de 20 MHz y una alimentación de 5v que es suministrada por el
mismo puerto de la computadora.

Figura 4.5. Esquemático de la interfaz USB.

21

Brazo Robótico tipo SCARA


Instituto Politécnico Nacional
UPIITA
5 Selección de componentes mecánicos

Material

El material utilizado para la construcción de toda la estructura es acrílico transparente de 6mm de


espesor, las especificaciones para este material son las siguientes:

Módulo de Elasticidad: 2.24 a 3.29 GPa


Densidad: 1.19 gr/cm3

El acrílico es un material que se puede manipular fácilmente, resistente, aunque no es económico, el


acrílico nos brinda la estética que buscamos.
También se utilizo aluminio, por ser un metal blando maquinarlo es sencillo, el aluminio es ligero y
resistente, y solo se utilizo en los ejes de los motores.

Rodamientos

Para que la transmisión de movimiento a los eslabones sea óptima, no sufra deslizamientos, sea más
fiel al movimiento del motor y el motor no sufra cargas de tipo axial, se colocaron rodamientos en las
primeras dos articulaciones (entiéndase que las articulaciones se enumeran a partir de la base hasta
llegar al elemento terminal), que es donde se necesita mayor par en los motores.
Los rodamientos se escogieron de tipo axial de bolas, debido a que las cargas que se manejan en
nuestro sistema no son de grandes magnitudes (como se verá más adelante) comparadas con otras
aplicaciones en los que es necesario utilizar un rodamiento de agujas o uno de rodillos esféricos,
además es de simple efecto puesto que sólo se aplicará una carga axial sobre el elemento.
Se acudió a los catálogos de SKF y se eligió el siguiente rodamiento, el cual cumple con nuestras
especificaciones de diseño tanto en cargas como en dimensiones.

Tabla 5.1 tabla característica Rodamientos axiales de bolas, de simple efecto

Figura 5.1 Imagen y Planos Rodamiento

22

Brazo Robótico tipo SCARA


Instituto Politécnico Nacional
UPIITA
Motores

Los motores elegidos para el robot son cuatro motos reductores, el motor principal es un
motoreductor de 24 volts, su juego de engranes brinda el suficiente par para mover los dos eslabones
y el gripper sin problemas. El motor dos es un motor reductor de 2 Kgf-cm, es compacto y ligero para
que el eslabón no sufra de esfuerzos innecesarios.
En el tercer eslabón hay dos motoreductores, uno es similar al motor dos pero de 4.7 kgf-cm, este
motor es utilizado para mover el gripper en el eje z, el último motoreductor es un minimotoreductor
que se utiliza para la apertura del gripper. Ambos motoreductores tienen par suficiente para manipular
los tubos de ensayo sin problema.

Figura 5.2 Motoreductor 1

Figura 5.3 Motorreductor 2 y 3

Figura 5.4 Motorreductor 4

23

Brazo Robótico tipo SCARA


Instituto Politécnico Nacional
UPIITA
Cremallera

Para lograr el movimiento vertical del robot, utilizamos un sistema de piñón-cremallera; la cremallera
fabricada con una sección recortada de una banda de motor de automóvil adherida a dos placas
empalmadas de acrílico, a esta cremallera va adherido el gripper.

Figura 5.5 Planos Cremallera

24

Brazo Robótico tipo SCARA


Instituto Politécnico Nacional
UPIITA
6 Control

Nuestro sistema de control está basado en software de tratamiento de imágenes, este controlara la
posición, dirección y trayectorias del robot, ahorrándonos de este modo sensores que nos indiquen la
posición de los efectores.

Los objetivos que se cumplen con el sistema de control:

Se captura una imagen


Se inicia procesamientos de la imagen
Se segmentación de la imagen
Se localizan los apuntadores
Se calculan los ángulos y las posición de los efectores
Se inicia la toma de decisiones
Se activan los motores 1 y 2, cambiando de posición los efectores
Se censa la altura y apertura de las tenazas del gripper
Se activan los motores 3 y 4 que controlan el movimiento del gripper
Se vuelve a captura una imagen

Figura 6 Diagrama de Control

25

Brazo Robótico tipo SCARA


Instituto Politécnico Nacional
UPIITA
7 Programación

El programa muestra al usuario un menú que le permite elegir entre el tipo de cinemática y una
trayectoria curva. Luego captura un frame de video y lo procesa. Para esto, primero recorta la imagen
para que esta quede de 480x480 pixeles, más tarde lo convierte a formato HVL. Cuando lo tiene se
segmenta para obtener únicamente los objetos de interés en la imagen, en este caso los círculos en
los eslabones. Cuando se tiene la segmentación se procede a realizar un algoritmo de chain code
para obtener el centroide de los objetos en la escena; este programa también elimina el ruido y
ordena los objetos por tamaño.

Después se procede a la elección de la ejecución de la rutina que el usuario eligió, se hacen los
cálculos pertinentes para obtener los ángulos necesarios mediante su respectiva función (ver
programa).

Después de tener definidos los ángulos destino, estos se comparan con los que tienen actualmente
los eslabones del robot y se mandan vía puerto serie las órdenes pertinentes a los motores para que
los eslabones lleguen al ángulo destino.

#include<highgui.h>
#include<cv.h>
#include<math.h>
#include<unistd.h>
#include<termios.h>
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#include <fcntl.h>

#define pi 3.1416

//-------------------------------------------Funciones----------------------------------------------------------

int serial_open(char *serial_name, speed_t baud);


void serial_send(int serial_fd, char *data, int size);
void serial_close(int fd);
int sacar_dato(char c[1]);
int chainCode(IplImage* img,int centfil[],int centcol[],int verde, int rojo, int azul);
void cin_directa(void);
void cin_inversa(void);
void sec_circ(void);
void recortar( IplImage* img);
void segment(IplImage* img,int verde,int rojo, int azul);
//--------------------------------------------------------------------------------------------------------------------

//----------------------------------Variables globales--------------------------------------------------------
int s_fd;
bool directa=false;
bool inversa=false;
bool sec=false;
bool bucle=false;
bool sig=true;

26

Brazo Robótico tipo SCARA


Instituto Politécnico Nacional
UPIITA
bool sigm1=false;
bool sigm2=false;
float q1[2],q2[2],l1,l2,px,py,r,puntos[2][100];
int k;
//--------------------------------------------------------------------------------------------------------------------

int main(int argc, char** argv)


{
system("clear");
double dist;

px=0;
py=0;
l1=120;
l2=120;
int fil[20],col[20];
int i,j,opcion,nfigs;
char motor1[1],motor2[1],salida[1];
char c;
CvPoint p1,p2;
uchar* ptr;
CvCapture* cam=cvCreateCameraCapture(0);//Inicia la captura de la camara
IplImage* frame;//Guarda los frames de la captura
IplImage* ejes;//Apunta hacia la dirección de memoria de frame
cvNamedWindow("WebCam",1);//Crea una ventana
q1[0]=0*3.1416/180;
q2[0]=0*3.1416/180;
//-----------------------------------------------Menú-------------------------------------------------------
menu:
printf("\n1=Cinematica directa\n2=Cinematica Inversa\n3=Trayectoria curva");
printf("\nElija la opcion que usted desee: ");
scanf("%d",&opcion);
system("clear");
printf("\nOpcion eleginda= %d",opcion);
switch(opcion){
case 1:
directa=true;
inversa=false;
sec=false;
break;
case 2:
directa=false;
inversa=true;
sec=false;
break;
case 3:
directa=false;
inversa=false;
sec=true;
break;
default:
printf("\nOpcion no valida\nElija otra\n\n\n");
goto menu;

27

Brazo Robótico tipo SCARA


Instituto Politécnico Nacional
UPIITA
break;

}
//-------------------------------------------------------------------------------------------------------------------------
-----------
//-----------Se inicia el procesamiento de cada frame de captura
while(1){
frame=cvQueryFrame(cam); //Obtiene un frame de la captura
IplImage* hsl=cvCreateImage(cvGetSize(frame),IPL_DEPTH_8U,3); //convierte a
frame de RGB a HSL y lo almacena en hsl
if(!frame) break;
recortar(hsl); //Se recorta la imagen para que sea de 480x480
segment(hsl,100,100,800);
ejes=cvCreateImageHeader(cvSize(frame->width,frame->height),frame-
>depth,frame->nChannels); //se crea la cabecera de miagen eje
//Se establecen las referencias de la cabecera para que apunten hacia frame
ejes->origin=frame->origin;
ejes->widthStep=frame->widthStep;
ejes->imageData=frame->imageData;
//-------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------
//----------Se trazan los ejes cartecianos
cvLine(ejes,cvPoint(0,ejes->height/2),cvPoint(ejes->width,ejes-
>height/2),cvScalar(0,0,0),1,8,0);
cvLine(ejes,cvPoint(ejes->width/2,0),cvPoint(ejes->width/2,ejes-
>height),cvScalar(0,0,0),1,8,0);

/*nfigs=chainCode(frame,fil,col,100,100,800)+1; //Segmenta la imagen, obtiene el


centroide y ordena los objetos de mayor a menor
//eliminando el
ruido.

//--------------------Se definen las longitudes de los eslabones y las posiciones en el


plano (x,y) de los eslabones
int x1=-1*(320-col[0]);
int y1=-1*(240-fil[0]);
int x2=-1*(320-col[1]);
int y2=-1*(240-fil[1]);
l1=sqrt(pow(x1,2)+pow(y1,2));
l2=sqrt(pow((x2-x1,2)+pow(y2-y1,2));
//------------------------------------------------------------------------------------------------------
--------------------------------
//-----------------------------------Se calculan los angulos para conocer la posición del
brazo.-----------------------------------
if(x1==0&&y1>0) ;
q1[0]=(float)pi/2;
else if(x1==0&&y1<0)
q1[0]=(float)3*pi/2;
else{
q1[0]=atan((float)y1/x1);
if(x1<0) q[0]=q[0]*-1;
}

28

Brazo Robótico tipo SCARA


Instituto Politécnico Nacional
UPIITA
q2[0]=acos((float)(pow(x2,2)+pow(y2,2)-pow(l1,2)-pow(l1,2))/(2*l1*l2));*/
//------------------------------------------------------------------------------------------------------
--------------------------------------

//----------Se accede a la opción elegida y se envía al programa a la funcion pertinente-


-------------------------------------
if(directa==true) cin_directa();//Cinemática directa.
else if(inversa==true) cin_inversa();//Cinemática inversa.
else if(sec==true) {//Secuencia
sec_circ();
}
if(bucle==true){
for(i=0;i<65;i++){//se dibujan los puntos de la circunferencia
cvCircle(ejes,cvPoint(puntos[0][i]+ejes->width/2,-puntos[1][i]+ejes-
>height/2),1,cvScalar(0,0,255),2,8,0);
}
}
else{
cvCircle(ejes,cvPoint(px+ejes->width/2,py+ejes-
>height/2),1,cvScalar(0,0,255),2,8,0);
}
//------------------------------------------------------------------------------------------------------
---------------------------------------------------
//--------------------Se estabñecen los puntos donde se encuentran los eslabones para
poder dibujarlos y se dibujan
p1=cvPoint((l1*cos(-q1[0])),(l1*sin(-q1[0])));
p2=cvPoint((l2*cos(-q2[0]-q1[0])),(l2*sin(-q2[0]-q1[0])));
cvLine(ejes,cvPoint(ejes->width/2,ejes->height/2),cvPoint(p1.x+ejes-
>width/2,p1.y+ejes->height/2),cvScalar(255,0,0),3,8);
cvLine(ejes,cvPoint(p1.x+ejes->width/2,p1.y+ejes-
>height/2),cvPoint(p2.x+p1.x+ejes->width/2,p2.y+p1.y+ejes->height/2),cvScalar(0,255,0),3,8);
//------------------------------------------------------------------------------------------------------
----------------------------------------------------

cvShowImage("WebCam",hsl); //Despliega la imagen en la ventana creada

//--------------Se compara la posición con la posición deseada para enviar información


a los motores,
//--------------qx[0] es la posición del robot y qx[1] es la posición deseada segun la
rutina elegida.
if(q1[1]-q1[0]<=pi){
if(q1[0]<q1[1]){
q1[0]+=0.01;
motor1[0]='\x1';//Información enviada al motor 1 para girar hacia la
izquierda
if(q1[0]>2*pi) q1[0]=0;
}
else{
motor1[0]='\x0';//Detener motor1
sigm1=true;
}
}
else{

29

Brazo Robótico tipo SCARA


Instituto Politécnico Nacional
UPIITA
if(q1[1]<q1[0]+2*pi){
q1[0]-=0.01;
motor1[0]='\x2';//Información enviada al motor 1 para gira a la
derecha
if(q1[0]>2*pi) q1[0]=0;
}
else{
motor1[0]='\x0';//Detener motor 1
sigm1=true;
}
}

if(q2[1]-q2[0]<=pi){
if(q2[0]<q2[1]){
q2[0]+=0.01;
motor1[0]='\x4';//Información enviada al motor 2 para girar hacia la
izquierda
if(q2[0]>2*pi) q2[0]=0;
}
else{
motor2[0]='\x0';//Detener motor 2
sigm2=true;
}
}
else{
if(q2[1]<q2[0]+2*pi){
q2[0]-=0.01;
motor2[0]='\x8';////Información enviada al motor 2 para girar hacia la
derecha
if(q2[0]>2*pi) q2[0]=0;
}
else{
motor2[0]='\x0';//Dtener motor 2
sigm2=true;
}
}

salida[0]=motor1[0]|motor2[0];//Se juntan los bits de ambos motores para ser


enviados por el puerto serie
//sacar_dato(salida);//se envía la información al puerto serie para ser entregada a los
motores.
c=cvWaitKey(10);
if(c==27) break;
}
cvDestroyWindow("WebCam");
cvReleaseCapture(&cam);
}

//-------------------------------------------Función para la cinemática directa---------------------


void cin_directa(void)
{
system("clear");

30

Brazo Robótico tipo SCARA


Instituto Politécnico Nacional
UPIITA
printf("\nIntroduzca el valor del Angulo 1: ");
scanf("%f",&q1[1]);
if(q1[1]<0) q1[1]=360+q1[1];
q1[1]=(float)q1[1]*pi/180;
printf("\nIntroduzca el valor del Angulo 2: ");
scanf("%f",&q2[1]);
if(q2[1]<0) q2[1]=360+q2[1];
q2[1]=(float)q2[1]*pi/180;
printf("\nAngulos q1= %f q2= %f\n",q1[1],q2[1]);
directa=false;
}
//-------------------------------------------Función para la cinemática inversa---------------------

void cin_inversa(void)
{
system("clear");
printf("\nIntroduzca el valor de Px entre (-240 y 240): ");
scanf("%f",&px);
printf("\nIntroduzca el valor de Py (-240 y 240): ");
scanf("%f",&py);
//Ecuaciones para conocer los ángulos necesario para alcanzar los puntos deseados--------------
------------------------------------
q2[1]=acos((float)(pow(px,2)+pow(py,2)-pow(l1,2)-pow(l1,2))/(2*l1*l2));
q1[1]=atan((float)py/px)-atan((float)l2*sin(q2[1])/(l1+l2*cos(q2[1])));
//---------------------------------------------------------------------------------------------------------------
----------------
//Se acomodan los puntos para que sean dibujados de manera correcta en la ventana
if(px<0) q1[1]=q1[1]+pi;
px=px;
py=-py;
printf("\nAngulos q1= %f q2= %f\n",q1[1],q2[1]);
if(q1[1]<0) q1[1]=2*pi+q1[1];
if(q2[1]<0) q2[1]=2*pi+q2[1];
inversa=false;
}
//------------------------------------------Secuencia circular-----------------------------
void sec_circ(void)
{
int i;
float j;
if(bucle==false&&sig==true){
system("clear");
printf("\nIntroduzca el valor del radio: ");
scanf("%f",&r);
k=0;
j=0;
for(i=0;i<63;i++){//Se generan los puntos atraves de la ecuacipn de la circunferencia.
puntos[0][i]=(float)r*cos(j);
puntos[1][i]=(float)r*sin(j);
j+=.1;
}
bucle=true;
}

31

Brazo Robótico tipo SCARA


Instituto Politécnico Nacional
UPIITA
if(bucle==true&&sigm1==true&&sigm2==true){
q1[0]=q1[1];
q2[0]=q2[1];
px=puntos[0][k];
py=puntos[1][k];
k++;
if(k>64) {
bucle=false;
sig=false;
}
//printf("\nk= %d\n",k);
q2[1]=acos((float)(pow(px,2)+pow(py,2)-pow(l1,2)-pow(l1,2))/(2*l1*l2));
q1[1]=atan((float)py/px)-atan((float)l2*sin(q2[1])/(l1+l2*cos(q2[1])));
if(px<0) q1[1]=q1[1]+pi;
px=px;
py=-py;
if(q1[1]<0) q1[1]=2*pi+q1[1];
if(q2[1]<0) q2[1]=2*pi+q2[1];
sigm1=false;
sigm2=false;
}
}

/*********************************************************************/
/* */
/* */
/* */
/* */
/* Otras Funciones */
/* */
/* */
/* */
/* */
/*********************************************************************/

//serial_open abre el puerto serie y lo configura


int serial_open(char *serial_name, speed_t baud)
{
struct termios newtermios;
int fd;

// Abre el puerto serie


fd = open(serial_name,O_RDWR | O_NOCTTY);

// Se configuran los atributos del puerto sere


// -- Sin paridad
// -- 8 bits de datos
// -- otras cosas...
newtermios.c_cflag= CBAUD | CS8 | CLOCAL | CREAD;
newtermios.c_iflag=IGNPAR;
newtermios.c_oflag=0;
newtermios.c_lflag=0;

32

Brazo Robótico tipo SCARA


Instituto Politécnico Nacional
UPIITA
newtermios.c_cc[VMIN]=1;
newtermios.c_cc[VTIME]=0;

// Se establece la velocidad de emisión y recepción


cfsetospeed(&newtermios,baud);
cfsetispeed(&newtermios,baud);

// se vacia el buffer de entrada


if (tcflush(fd,TCIFLUSH)==-1) {
return -1;
}

// se vacía el buffer de salida


if (tcflush(fd,TCOFLUSH)==-1) {
return -1;
}

//-- Se ha configura el puerto serie


if (tcsetattr(fd,TCSANOW,&newtermios)==-1) {
return -1;
}

//-- Se regresa el descriptor de fichero


return fd;
}

/*****************************************************************/
//serial_send envia undato al puerto serie
void serial_send(int serial_fd, char *data, int size)
{
write(serial_fd, data, size);
}

/*******************************************************************/
//serial_close cierra el puerto serie
void serial_close(int fd)
{
close(fd);
}

/*******************************************************************************/
//sacar_dato saca un caracter por el puerto ttyACM0

int sacar_dato(char c[1])


{
char tty[]="/dev/ttyACM0";

//-- Open the serial port


s_fd=serial_open(tty,B9600);
//-- Error checking
if (s_fd==-1) {
printf ("Error opening the serial device: %s\n",tty);
perror("OPEN");

33

Brazo Robótico tipo SCARA


Instituto Politécnico Nacional
UPIITA
exit(0);
}
serial_send(s_fd,c,1);

serial_close(s_fd);
return 0;
}

/****************************************************************************/
//chainCode obtiene el centroide de las figuras en escena a travez del código cadena
int chainCode(IplImage* img,int centfil[],int centcol[],int verde, int rojo, int azul)
{
int i,j;
int inc=0;
int nfig=-1;
int tamvect=0;
uchar* ptr1;
uchar* ptr2;
uchar* ptr3;
uchar* ptr4;
int length[20];
bool a=false;
IplImage* copy=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,3);
IplImage* borde=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);
cvSetZero(borde);
cvCopy(img,copy,NULL);
for(i=0;i<copy->height;i++){
ptr1=(uchar*)(copy->imageData+i*copy->widthStep);
for(j=0;j<copy->width; j++){
if(ptr1[3*j+1]>verde&&ptr1[3*j+2]>rojo&&ptr1[3*j+3]>azul){
ptr1[3*j+1]=255;
ptr1[3*j+2]=255;
ptr1[3*j+3]=255;

}
else{
ptr1[3*j+1]=0;
ptr1[3*j+2]=0;
ptr1[3*j+3]=0;
}
}
}
cvSaveImage("segment.jpg",copy);
for(i=1;i<copy->height-1;i++){
ptr1=(uchar*)(copy->imageData+i*copy->widthStep);
ptr2=(uchar*)(copy->imageData+(i-1)*copy->widthStep);
ptr3=(uchar*)(copy->imageData+(i+1)*copy->widthStep);
ptr4=(uchar*)(borde->imageData+i*borde->widthStep);
for(j=1;j<copy->width-1; j++){
if(ptr1[j*3+1]==255&&(ptr1[j*3-
2]==0||ptr1[j*3+4]==0||ptr2[j*3+1]==0||ptr3[j*3+1]==0)){
ptr4[j]=255;
tamvect++;

34

Brazo Robótico tipo SCARA


Instituto Politécnico Nacional
UPIITA
}
else
ptr4[j]=0;
}

}
int cx[tamvect],cy[tamvect];
cvSaveImage("borde.jpg",borde);
for(i=1;i<borde->height-1;i++){
ptr1=(uchar*)(borde->imageData+i*borde->widthStep);
ptr2=(uchar*)(borde->imageData+(i-1)*borde->widthStep);
ptr3=(uchar*)(borde->imageData+(i+1)*borde->widthStep);
for(j=1;j<borde->width;j++){
if(ptr1[j]==255){
nfig++;
int dim=0;
a=true;
while(a==true){
ptr1[j]=0;
if(ptr1[j+1]==255){
cx[inc]=j;
cy[inc]=i;
i=i;
j++;
ptr1=(uchar*)(borde->imageData+i*borde-
>widthStep);
ptr2=(uchar*)(borde->imageData+(i-1)*borde-
>widthStep);
ptr3=(uchar*)(borde->imageData+(i+1)*borde-
>widthStep);
inc++;
dim++;
}
else if(ptr3[j+1]==255){
cx[inc]=j;
cy[inc]=i;
i++;
j++;
ptr1=(uchar*)(borde->imageData+i*borde-
>widthStep);
ptr2=(uchar*)(borde->imageData+(i-1)*borde-
>widthStep);
ptr3=(uchar*)(borde->imageData+(i+1)*borde-
>widthStep);
inc++;
dim++;
}
else if(ptr3[j]==255){
cx[inc]=j;
cy[inc]=i;
i++;
j=j;
ptr1=(uchar*)(borde->imageData+i*borde-

35

Brazo Robótico tipo SCARA


Instituto Politécnico Nacional
UPIITA
>widthStep);
ptr2=(uchar*)(borde->imageData+(i-1)*borde-
>widthStep);
ptr3=(uchar*)(borde->imageData+(i+1)*borde-
>widthStep);
inc++;
dim++;
}
else if(ptr3[j-1]==255){
cx[inc]=j;
cy[inc]=i;
i++;
j--;
ptr1=(uchar*)(borde->imageData+i*borde-
>widthStep);
ptr2=(uchar*)(borde->imageData+(i-1)*borde-
>widthStep);
ptr3=(uchar*)(borde->imageData+(i+1)*borde-
>widthStep);
inc++;
dim++;
}
else if(ptr1[j-1]==255){
cx[inc]=j;
cy[inc]=i;
i=i;
j--;
ptr1=(uchar*)(borde->imageData+i*borde-
>widthStep);
ptr2=(uchar*)(borde->imageData+(i-1)*borde-
>widthStep);
ptr3=(uchar*)(borde->imageData+(i+1)*borde-
>widthStep);
inc++;
dim++;
}
else if(ptr2[j-1]==255){
cx[inc]=j;
cy[inc]=i;
i--;
j--;
ptr1=(uchar*)(borde->imageData+i*borde-
>widthStep);
ptr2=(uchar*)(borde->imageData+(i-1)*borde-
>widthStep);
ptr3=(uchar*)(borde->imageData+(i+1)*borde-
>widthStep);
inc++;
dim++;
}
else if(ptr2[j]==255){
cx[inc]=j;
cy[inc]=i;

36

Brazo Robótico tipo SCARA


Instituto Politécnico Nacional
UPIITA
i--;
j=j;
ptr1=(uchar*)(borde->imageData+i*borde-
>widthStep);
ptr2=(uchar*)(borde->imageData+(i-1)*borde-
>widthStep);
ptr3=(uchar*)(borde->imageData+(i+1)*borde-
>widthStep);
inc++;
dim++;
}
else if(ptr2[j+1]==255){
cx[inc]=j;
cy[inc]=i;
i--;
j++;
ptr1=(uchar*)(borde->imageData+i*borde-
>widthStep);
ptr2=(uchar*)(borde->imageData+(i-1)*borde-
>widthStep);
ptr3=(uchar*)(borde->imageData+(i+1)*borde-
>widthStep);
inc++;
dim++;
}
else
{
a=false;
if(dim<20&&nfig==0)
nfig=-1;
else if(dim<10&&nfig>0)
nfig--;
else
length[nfig]=inc;
}
}
}
}
}
int sumcol[nfig+1],sumfil[nfig+1],auxx,auxy;

for(i=0;i<=nfig;i++){
if(i==0){
for(j=0;j<length[i];j++){
if(j==0) {
sumcol[i]=cx[j];
sumfil[i]=cy[j];
}
else{
auxx=sumcol[i];
sumcol[i]=cx[j]+auxx;
auxy=sumfil[i];
sumfil[i]=cy[j]+auxy;

37

Brazo Robótico tipo SCARA


Instituto Politécnico Nacional
UPIITA
}
}
}
else{
for(j=length[i-1];j<length[i];j++){
if(j==length[i-1]){
sumcol[i]=cx[j];
sumfil[i]=cy[j];
}
else{
auxx=sumcol[i];
sumcol[i]=cx[j]+auxx;
auxy=sumfil[i];
sumfil[i]=cy[j]+auxy;
}
}
}

float col[nfig+1],fil[nfig+1];
//int centcol[nfig+1],centfil[nfig+1];
for(i=0;i<=nfig;i++){
if(i==0){
col[i]=(float)sumcol[i]/length[i];
centcol[i]=col[i];
fil[i]=(float)sumfil[i]/length[i];
centfil[i]=fil[i];
}
else{
col[i]=(float)sumcol[i]/(length[i]-length[i-1]);
centcol[i]=col[i];
fil[i]=(float)sumfil[i]/(length[i]-length[i-1]);
centfil[i]=fil[i];
}
cvCircle(img,cvPoint(centcol[i],centfil[i]),1,cvScalar(255,255,255),1,8,0);
}
int tam[nfig+1];
int aux[2][2],tamaux[2];
for(i=0;i<=nfig;i++){
if(i==0) tam[i]=length[i];
else tam[i]=length[i]-length[i-1];
//printf("\n%d\n",tam[i]);
}

for(i=0;i<nfig;i++){
if(tam[i]<tam[i+1]){
aux[0][0]=centcol[i];
aux[0][1]=centcol[i+1];
aux[1][0]=centfil[i];
aux[1][1]=centfil[i+1];
tamaux[0]=tam[i];
tamaux[1]=tam[i+1];

38

Brazo Robótico tipo SCARA


Instituto Politécnico Nacional
UPIITA
tam[i]=tamaux[1];
tam[i+1]=tamaux[0];
centcol[i]=aux[0][1];
centcol[i+1]=aux[0][0];
centfil[i]=aux[1][1];
centfil[i+1]=aux[1][0];
i=-1;
}
else{
centcol[i]=centcol[i];
centfil[i]=centfil[i];
}
}

return(nfig);

cvReleaseImage(&copy);
cvReleaseImage(&borde);
}

/**********************************************************************/
//recortar recorta una imagen 80 pixeles por la izquierda y 80 por la derecha

void recortar( IplImage* img)


{

int i,j;
for(i=0;i<img->height;i++){
uchar* ptr=(uchar*)(img->imageData+i*img->widthStep);
for(j=0;j<80;j++){
ptr[j*3+1]=0;
ptr[j*3+2]=0;
ptr[j*3+3]=0;
}
for(j=560;j<img->width;j++){
ptr[j*3+1]=0;
ptr[j*3+2]=0;
ptr[j*3+3]=0;
}
}
}

/****************************************************/
//segment elimina los valores inferiores a los establecidos en verde, rojo y azul

void segment(IplImage* img,int verde,int rojo, int azul)


{
int i,j;
for(i=0;i<img->height;i++){
uchar* ptr=(uchar*)(img->imageData+i*img->widthStep);
for(j=0;j<img->width;j++){
if(ptr[j*3+1]>verde&&ptr[j*3+2]>rojo&&ptr[j*3+3]>azul){

39

Brazo Robótico tipo SCARA


Instituto Politécnico Nacional
UPIITA
ptr[3*j+1]=255;
ptr[3*j+2]=255;
ptr[3*j+3]=255;
}
else{
ptr[3*j+1]=0;
ptr[3*j+2]=0;
ptr[3*j+3]=0;
}
}
}
}

Tabla 7.1 Código Fuente control por Visión Artificial

Código fuente control de motores

'----------------------------------------------
'------Contro de Cremallera y Gripper----------
'----------------------------------------------
$regfile "m8535.dat"
$crystal = 8000000
Dim Pot As Word 'Variable donde se controla el ADC
Config Adc = Free , Prescaler = Auto , Reference = Aref 'Configuración ADC
Start Adc 'Inicio el ADC
Ddra = &B00000000 'Puerto A como entrada
Ddrb = &B00001000 'Definido como salida, el PWM del OC0
Ddrc = &B00000000 'Puerto C como entrada para la selección del sentido de giro de los motores
Ddrd = &B10110010 'Definidos como salida los PWM OC1A, OC1B y OC2
Tccr0 = &B01101001 '------------------------------------------
Tccr1a = &B10100001 'Configuración de
Tccr1b = &B00001001 'los PWM
Tccr2 = &B01101001 '------------------------------------------
Inicio:
If Pinc.0 = 1 And Pinc.1 = 0 Then
Ocr0 = 0 'Giro a la derecha motor 1
Ocr2 = 150
Elseif Pinc.0 = 0 And Pinc.1 = 1 Then
Ocr0 = 150 'Giro a la izquierda motor 2
Ocr2 = 0
Elseif Pinc.2 = 1 And Pinc.3 = 0 Then
Ocr1a = 0 'Giro a la derecha motor 1
Ocr1b = 140
Elseif Pinc.2 = 0 And Pinc.3 = 1 Then
Ocr1a = 140 'Giro a la izquierda motor 2
Ocr1b = 0
Else
Ocr0 = 0 'Paro motor 1
Ocr1a = 0
Ocr1b = 0 'Paro motor 2
Ocr2 = 0

40

Brazo Robótico tipo SCARA


Instituto Politécnico Nacional
UPIITA
End If
Pot = Getadc(0) 'Lectura del ADC en el canal 0
If Pot > 500 Then 'Condición para apertura del gripper
Portd.1 = 0
Elseif Pot <= 500 Then 'Condición para cierre del gripper
Portd.1 = 1
End If
Goto Inicio
End

'----------------------------------------------
'-----------Control de Eslabones----------------
'----------------------------------------------
$regfile "m8535.dat"
$crystal = 8000000
Ddra = &B00000000 'Puerto A como entrada
Ddrb = &B00001000 'Definido como salida, el PWM del OC0
Ddrc = &B00000000 'Puerto C como entrada para la selección del sentido de giro de los motores
Ddrd = &B10110000 'Definidos como salida los PWM OC1A, OC1B y OC2
Tccr0 = &B01101001 '--------------------
Tccr1a = &B10100001 'Configuración
Tccr1b = &B00001001 'de los PWM
Tccr2 = &B01101001 '--------------------
Inicio:
If Pinc.0 = 1 And Pinc.1 = 0 Then
Ocr0 = 0 'Giro a la derecha motor 1
Ocr2 = 100
Elseif Pinc.0 = 0 And Pinc.1 = 1 Then
Ocr0 = 100 'Giro a la izquierda motor 2
Ocr2 = 0
Elseif Pinc.2 = 1 And Pinc.3 = 0 Then
Ocr1a = 0 'Giro a la derecha motor 1
Ocr1b = 140
Elseif Pinc.2 = 0 And Pinc.3 = 1 Then
Ocr1a = 140 'Giro a la izquierda motor 2
Ocr1b = 0
Else
Ocr0 = 0 'Paro motor 1
Ocr1a = 0
Ocr1b = 0 'Paro motor 2
Ocr2 = 0
End If
Goto Inicio
End
Tabla 7.2 Código Fuente control Puentes H

41

Brazo Robótico tipo SCARA


Instituto Politécnico Nacional
UPIITA
8 Manufactura

Para el correcto funcionamiento del robot fueron llevados un conjunto de procesos, los cuales
nos dieron como resultado elementos mecánicos con las correctas dimensiones y tolerancias
adecuadas, para el buen funcionamiento del sistema.

Ejes
Para los ejes utilizamos cilindros de aluminio, los cuales fueron torneados para lograr el
diámetro necesario para reducir las fricciones y tener el mejor desplazamiento de los
eslabones. La elección de este material ayudo en el proceso de barrenado y avellanado,
puesto que es un material fácil de trabajar.

Eslabones
Puesto que nuestro robot está fabricado mayormente en acrílico, los procesos de maquinado
en este mismo fueron variados. Las piezas planas fueron fácilmente maquinadas en CNC,
dándonos piezas bellamente elaboradas y sin rayaduras, a las que estaría expuesto el
acrílico al intentar cortarlo artesanalmente.
Fue necesario calentar con un pequeño soplete las láminas de acrílico para obtener
superficies cuervas, sin que este sufriera quemaduras

Pedestal lámpara
En esta sección tuvimos que cortar un tubo de ½” el cual suspendería la cámara para su
correcto funcionamiento, también se taladro para crear pequeños saltos de sujeción

42

Brazo Robótico tipo SCARA


Instituto Politécnico Nacional
UPIITA
9 Pruebas

Funcionamiento de los motores


Se probaron los motores, montados en la estructura accionándolos en directo; observamos
que los motores soportaron los eslabones, y como es que estos se desplazaban con facilidad

Resistencia del material


Durante el accionamiento de los motores por un periodo de 3 minutos observamos que el
material soporto los esfuerzos a los cuales habíamos previsto.

Visión artificial
Pareciese ser la sección del sistema que mejor funciono fue el software, el sistema reconoció
los apuntadores exitosamente, y cálculo la posición de estos con éxito. Las simulaciones de
posicionamiento y accionamiento de los motores también resultaron eficientes y suficientes
para el correcto control del sistema

43

Brazo Robótico tipo SCARA


Instituto Politécnico Nacional
UPIITA
10 Robotica

Cinemática directa

Para encontrar la cinemática directa del robot Scara se utilizo el algoritmo de Denavit-Hartenber, a
grandes rasgos, el algoritmo es una serie de pasos que nos permite en ubicar sistemas de referencia
de acuerdo a ciertas reglas. Con estos sistemas ubicados correctamente se pueden obtener los
parámetros que son de interés para el algoritmo .
Estos valores se deben sustituir en la siguiente matriz:

(1)

Donde i es el número de grados de libertad, una vez obtenidas las matrices A se multiplican y se
obtiene la matriz de transformación T de donde obtenemos la cinemática directa

(a)

0
2 0 0
0 0 0
Tabla 1. Parámetros DH del robot Scara.

44

Brazo Robótico tipo SCARA


Instituto Politécnico Nacional
UPIITA
Sustituyendo los valores anteriores en la matriz 1 se obtiene:

Utilizando (a) se obtiene la matriz de transformación T

Cinemática directa:

(b)
(c)
(d)

Aplicando las siguientes propiedades a (b) y(c):

(e)
(f)

Se puede simplificar en la siguiente forma:

(g)
(h)
(i)

45

Brazo Robótico tipo SCARA


Instituto Politécnico Nacional
UPIITA
Cinemática inversa

Para obtener la cinemática inversa existen dos métodos: el método geométrico y el método analítico.
El primer método utiliza la forma del robot, relaciones trigonométricas para obtener la cinemática
inversa y es empleado cuando se tienen pocos grados de libertad. El segundo método se vale de la
matriz de transformación T para obtener mediante despejes las ecuaciones de cinemática inversa. De
tal forma que:

(j)

Donde n es el número de grados de libertad, para obtener la cinemática inversa

Se repite todo de manera iterativa hasta

Para nuestro Robot Scara la cinemática inversa se obtendrá mediante el método geométrico

Aplicando la ley de cosenos

(k)
(l)

(m)

A continuación se encuentra

(o)

Y también se calcula

(p)

46

Brazo Robótico tipo SCARA


Instituto Politécnico Nacional
UPIITA
Entonces podemos obtener

(q)

Por último

(r)

La cinemática inversa queda representada por las ecuaciones (m), (q) y (r).

47

Brazo Robótico tipo SCARA


Instituto Politécnico Nacional
UPIITA
Cinemática diferencial

Para obtener el jacobiano directo nos valemos de la cinemática directa

(s)
(t)
(u)

La matriz jacobiana queda de la siguiente forma:

Para obtener el jacobiano inverso se obtiene el determinante de la matriz anterior

Lo que nos permite identificar que los puntos singulares se dan cuando

48

Brazo Robótico tipo SCARA


Instituto Politécnico Nacional
UPIITA
11 Simulaciones

Diseño mecánico
Se simulo la estructura mecánica, con el objetivo de ver si existían discrepancias en las dimensiones del robot,
el video de dichas pruebas se encuentra en el Anexo A

Visión Artificial
Mediante el procesamiento de iamgenes hemos eliminado la necesidad de sensores que nos
indicaran la posicion de los motores, de este modo hemos podido crear un sistema de control, el cual
nos entrega la posicion de lso efectores un plano xy. Procesando la imagen mediante deteccion de
circulos y sus dimenciones.

Figura 11.1 procesamiento de imagen n HSL

49

Brazo Robótico tipo SCARA


Instituto Politécnico Nacional
UPIITA

Figura 11.2 Segmentacion

Figura 11.3 Detección de bordes

50

Brazo Robótico tipo SCARA


Instituto Politécnico Nacional
UPIITA
Control de motores

Con la ayuda de Proteus pudimos simular el funcionamiento de nuestro sistema de control de los
motores, con la ayuda de un puente H, lo cual no hace ver que este tiene un funcionamiento
correcto; de este modo, teniendo la seguridad de que nuestros circuitos serán elaborados
eficientemente

Figura 11.4 Esquemático del control de motores de los eslabones.

Figura 11.5 Esquemático del control de los eslabones y gripper.

51

Brazo Robótico tipo SCARA


Instituto Politécnico Nacional
UPIITA
12 Análisis de costos

La fuerte competencia actual, la globalización y los embates económicos obligan a la industria


nacional a buscar la manera de reducir costos en sus líneas de producción mediante la
automatización de procesos que se traduce en un aumento de producción, reducción de tiempos
muertos, mejor calidad entre muchos otros beneficios. Sin embargo automatizar es una inversión
bastante costosa al no existir la tecnología necesaria en México y se deba importar dicha tecnología,
aunado a la falta de financiamiento, el empresario mexicano pierde interés y prefiere seguir utilizando
procesos arcaicos y costosos lo que se traduce en pérdida de competitividad. Por ello es necesario
incentivar la producción nacional de tecnología y crear opciones de financiamiento, para este caso el
análisis de costos nos permite determinar el precio de salida de nuestro producto, la inversión inicial
necesaria .Los costos de producción incluyen el costo de materiales, mano de obra y otros gastos. El
principal objetivo es diseñar un robot que además de útil sea financieramente viable, además se
incentive la creación de tecnología nacional y utilicemos en la medida de lo posible mano de obra y
materiales nacionales.

Una característica particular de este robot y que reduce significativamente el precio del robot es la
utilización de software libre dicho de otro modo software por el cual no es necesario pagar ningún tipo
de licencias. El control del robot está basado en opencv, opencv es un conjunto de librerías de visón
artificial muy poderoso y de libre distribución. El entorno de programación es Linux, en especifico la
distribución debían, se decidió utilizar una plataforma libre siguiendo la tendencia mundial a reducir
costos de software utilizando software de licencia libre, además de que es una plataforma más
flexible.

Las materias primas que utilizamos son fáciles de obtener y existen productores nacionales que
garantizan el abasto de materiales necesario, por lo que tenemos la ventaja de que no dependamos
de proveedores extranjeros. En cuanto al material electrónico utilizamos microcontroladores de
empresas bien establecidas y conocidas (atmel y microchip), lo que nos garantiza una excelente
calidad y confiabilidad en esos componentes, todos los precios utilizados aquí son precios al
menudeo ya que se considera un volumen de producción pequeño en un principio.

El precio de la mano de obra es de $ 57.46 por ocho horas de trabajo, este es el salario mínimo
vigente en la zona geográfica A, que es la zona donde se encuentra la ciudad de México, además de
que es el salario mínimo vigente más alto en el país. Los costos de manufactura tienen un costo
adicional, ya que adquirir un CNC y un torno es una inversión muy fuerte por lo que en una primera
fase esa parte se derogara a terceros.

52

Brazo Robótico tipo SCARA


Instituto Politécnico Nacional
UPIITA
Costos de producción

Materias primas Cantidad Precio unitario Costo total


Tornillería* - $ 150.00 $ 150.00
Acrílico(placa) 1(50x50 cm) $ 600.00 $ 600.00
Triplay 1(70x80 cm) $ 50.00 $ 50.00
Tubo de ½ 1(2m) $ 50.00 $ 50.00
Baleros de carga 2 $ 60.00 $ 120.00
axial
Subtotal $ 970.00

Electrónica
ATMEGA8535 1 $ 67.00 $ 67.00
LS198 4 $ 42.00 $ 168.00
PIC18F2550 1 $ 113.00 $ 113.00
Motoreductor de24 1 $ 150.00 $ 150.00
v
Minimotoreductor 1 $ 150.00 $ 150.00
Motoreductor de 5v 2 $ 50.00 $ 100.00
Webcam 1 $ 270.00 $ 270.00
Varios** - $ 300 $ 300.00
Subtotal $ 1318.00
Total materiales $ 2168.00

Mano de obra Horas/hombre Costo/hora Total


Diseño mecánico 172 $ 7.18 $ 1234.96
Interfaz USB 20 $ 7.18 $143.60
Etapa de potencia 48 $ 7.18 $ 344.64
control por visión 120 $ 7.18 $ 861.6
artificial
Manufactura 270 $ 7.18 $ 1938.60
Bases y soportes 32 $ 7.18 $ 229.76
Organización y 105 $ 7.18 $ 753.90
planeación
Diseño gripper 66 $ 7.18 $ 473.88
Pintura y estética 13 $ 7.18 $ 93.34
Ensamblado 104 $ 7.18 $ 746.72
Subtotal 6821.00
Total mano de obra 6821.00

Otro gastos Total


Transporte $ 300.00
Manufactura $ 700.00
Varios*** $ 100.00
Comunicación $ 350.00
Subtotal $ 1450.00
Tabla 12.1 Costos de producción.

*Comprende los tornillos y pijas utilizados. **Comprende cables, diodos, resistencias, conectores,
placas, soldadura, sensores, entre otros***Comprende pegamentos, solventes, pinturas.

53

Brazo Robótico tipo SCARA


Instituto Politécnico Nacional
UPIITA
Herramientas

Herramientas Cantidad Costo Total Depreciación


Mototool Dremel 1 $ 760.00 $ 266.00
Laptop 3 $ 30 000.00 $ 10500.00
Taladro 1 $ 500.00 $ 175.00
Brocas 5 $ 69.00 $ 24.15
Multímetro 1 $ 360.00 $ 126.00
Desarmadores 5 $ 110.00 $ 38.50
Segueta 1 $ 90.00 $ 31.50
Cautín 2 $ 118.00 $ 41.30
Vernier 1 $ 110.00 $ 38.50
Pinzas de corte 2 $ 178 $ 62.30
Total $ 32295.00 $ 11303.25
Tabla 12.2. Costos de Herramientas.

Mediante la Tabla dos y tres es posible determinar el costo total de producción del robot Scara
utilizando la siguiente ecuación:

Donde CV es el costo variable (materiales, electrónica, mano de obra directa etcétera) y CF es el


costo fijo (transporte, depreciaciones etcétera). Una vez determinado el costo podemos determinar el
precio y conociendo nuestra inversión inicial podemos hacer la proyección necesaria para conocer el
tiempo de retorno de nuestra inversión.
El costo de producción unitario total es la cantidad de dinero necesario para crear una sola unidad de
producto. Entonces el costo total de producción es:

Ahora bien nuestra inversión inicial está dada por la siguiente tabla

Inversión inicial
Concepto Cantidad
Mano de obra $ 6821.00
Insumos $ 2168.00
Herramientas $ 32295.00
Permisos $ 10000.00
Renta $ 2300.00
Total $ 53584.00
Tabla 12.3 Inversión inicial.

54

Brazo Robótico tipo SCARA


Instituto Politécnico Nacional
UPIITA
Para solventar los gastos de operación, y recuperar la inversión inicial se estima un sobreprecio de 23
%, es decir una ganancia por robot de $ 4565.87, el precio final de cada unidad producida es de $
26308.12. Se estima una producción mensual de 10 unidades aumentando la producción conforme la
demanda, se estima un aumento de 20 % anual en la demanda y un aumento en los insumos del 5 %
entonces a cinco años tenemos que:

Proyección a cinco años

Año 1 2 3 4 5
Producción 120 144 172 206 247
Ventas $ 3156974.00 $ 3788369.28 $ 4524996.64 $ 5419472.72 $ 6498105.64
Utilidad $ 726104.11 $ 871324.93 $ 1040749.22 $ 1246478.72 $ 1494564.29
Tabla 12.4. Proyección a cinco años.

55

Brazo Robótico tipo SCARA


Instituto Politécnico Nacional
UPIITA
13 Conclusiones

El diseño del robot requirió mejoras pues existieron problemas que en el reporte pasado
no se contemplaron, lo cual nos obligo a modificar ciertas cosas al ensamblarse el
mecanismo. Otro problema fue la iluminación en el programa que controla los motores,
pero se solucionó cambiando el formato de la imagen de RGB a HVL para evitar que nos
afectaran las variaciones de luz. En cuanto a los circuitos se buscó que fueran lo más
sencillos posibles y se optó por utilizar el AVR para superar la limitante de bits que
entrega nuestra interfaz.
González Escañuela Aldo

Luego del primer diseño se realizaron una gran cantidad de cambios, se cambio el
esquema de control y se cambio los actuadores, sin embargo el diseño fundamental
permaneció igual. El diseño del gripper significo un gran reto, al tener que partir de cero y
adecuarlo a nuestras necesidades, en cuanto a la cinemática no tuvimos mayores
problemas ya que teníamos las herramientas necesarias, tal vez la dificultad más grande
fue la visión artificial ya que es difícil obtener la iluminación adecuada para que la cámara
detecte los colores de forma adecuada. El control de los motores supuso otro reto, ya
que coordinar los motores no fue tan sencillo como se esperaba. Este proyecto implico
para todo un gran reto, trabajo en equipo y mucha inventiva para solucionar los
problemas que teníamos de último momento.
Denicia Aguilar Enrique

Por medio de este tipo de proyectos, se denotan las carencias de conocimientos en


algunas áreas, las cuales hay que tener muy en cuenta para reforzarlas.
El diseño de un sistema mecatrónico, requiere de tomar en cuenta demasiados factores,
empezando en primera instancia con la parte mecánica, la cual si se realiza de forma
apropiada, nos va a casi garantizar un éxito en el funcionamiento total del sistema. Una
vez realizada esta etapa del desarrollo, se tiene eligen los actuadores que le
proporcionaran el movimiento al sistema, como también los sensores que nos servirán de
referencia para poder retroalimentar el control del sistema. Después llevar de forma
paralela el diseño de los circuitos de potencia, como los circuitos de control y el diseño
del software para que se pueda implementar en la circuitería, pensando dependiendo de
la aplicación a realizar, ahorrar el mayor hardware posible, compensándolo con software
para no gastar en ciertos recursos. Finalmente integrar todos estos elementos para
construir netamente el sistema mecatrónico (en nuestro caso el robot Scara), y poder
realizar pruebas para su calibración.
Todo esto suena hasta un cierto punto difícil de realizar si no se cuenta con un equipo de
trabajo, aunque considero que lo más difícil de todo, es poder coordinar a todas estas
personas que forman parte del equipo, para obtener resultados satisfactorios y sin
contratiempos.
Por último todo lo aprendido durante la construcción de este proyecto, nos apoyará para
el Trabajo Terminal que deberemos de presentar en su momento, como por ejemplo en
la planeación de tiempos que en la mayoría de las personas, es lo más difícil de planear
y sobre todo de llevar a cabo.
Zarco Rebollar José Antonio

56

Brazo Robótico tipo SCARA


Instituto Politécnico Nacional
UPIITA

La realización de un proyecto el cual es de carácter interdisciplinario, no es nada fácil, pero si


emocionante. Es entonces cuando vemos como es que la Mecatrónica sale a relucir, el no solo
prender un LED al presionar un botón, si no que, ser capaces de conjuntar varias ramas de la
ingeniera en un solo proyecto; dando como resultado la obtención de un sistema el cual tiene gran
alcance y versatilidad.
Comprendimos como el cálculo preciso de cada una de las partes del robot nos podría dar como
resultado un mecanismo altamente provechoso o como este termina saliendo caro en tiempo y
dinero, puesto que un eslabón mal calculado se puede romper o salir muy caro puesto que se ocupa
un material sobrado. La resistencia de materiales es un cálculo complejo pero el cual nos da la
posibilidad de reducir costos.
La implementación de la visión artificial nos hace ver cómo es que se puede reducir tremendamente
la electrónica al no tener que implementar sensores; y gracias a esta, da la posibilidad de crear un
sistema más inteligente. La visión artificial ofrece también el poder monitorear nuestros elementos
mas allá de solo ver 1 y 0s, dándonos una visión más real del entorno de trabajo.
El realizar un proyecto desde cero, nos hizo darnos cuenta que la organización del equipo de trabajo
lo es todo, ya que con una buena delegación de labores los tiempo y la calidad resultan optimizados.
Proyectos como estos logra un incremento en la competitividad laboral, ya que nos hace ver
nuestras deficiencia y aprender de los demás compañero manera nuevas para atacar un problema.
Pérez Islas Mario Alberto

De manera general, en este semestre hemos conocido los detalles del proceso de diseño que se
sigue diariamente en la industria de la ingeniería: hemos podido comprobar que la correcta elección
de los componentes, por minúsculos que estos pudieran llegar a parecer, se ve reflejada en el
momento del ensamble, la corrección de errores y la puesta en marcha del proyecto. Probablemente
los tiempos en los que fueron llegando los diferentes estudios que se nos brindaron durante estos
meses, no son exactamente congruentes con los tiempos en los cuales se nos presenta la necesidad
de elegir algún componente, con la intención de administrar el periodo de elaboración, los recursos o
las tareas particulares que los miembros ejecutarán. Sin embargo, es un hecho que las buenas o
malas experiencias que aparecieron, nos han dejado un criterio de utilidad, para los semestres
consecuentes.
Orozco De la Vega Edgar Alexis

57

Brazo Robótico tipo SCARA


Instituto Politécnico Nacional
UPIITA

La construcción del robot me dejo una gran satisfacción personal, tuvimos que enfrentar una gran
cantidad de inconvenientes. Errores de diseño, correcciones de último minuto y problemas en la
manufactura de los ejes son algunos problemas a los que nos tuvimos que enfrentar.
Sin embargo comparado a proyectos anteriores la organización y las herramientas con que ahora
contamos hicieron más fácil enfrentarnos a esas adversidades. El control por visión artificial fue difícil
de implementar y seguimos con pruebas para mejorar su exactitud, el control de los motores implico
construir etapas de potencia y un controlador constituido por un AVR para ellos. La organización fue
un poco complicado entre otras cosas por lo numeroso del equipo y la manera de pensar de cada
quien.
Enríquez Olguín Abraham Christian

En la realización de este proyecto nos enfrentamos a GRANDES retos en áreas como: mecánica,
control, electrónica. Encontrando el mayor muro a vencer en lo mecánico debido a nuestra poca
experiencia en el maquinado de piezas mecánicas en cualquier material. Por otra parte el haber
tomado las clases de “resistencia de materiales” y “diseño de mecanismos” nos ayudo a calcular si
nuestras piezas resistían las fuerzas que en ella se aplicaban y asi tener la seguridad que las piezas
que maquinamos serian las adecuadas para nuestra aplicación.
En lo que retroalimentación de control refiere utilizamos una cámara web (algo que nunca había
utilizado), aplicando asi los conocimientos de la materia “visión artificial”, algo que reafirma e integra
los conocimientos que en la escuela adquirimos y que además entiendo es utilizado en la industria.
Para finalizar me gustaría expresar lo útil que fue este proyecto para la integración del conocimiento
de todos los integrantes del equipo ya que unos saben mas cosas que otros y al trabajar en equipo
nos dieron un poco de ese conocimiento de sobra.
Gutiérrez Cepeda Francisco Javier

58

Brazo Robótico tipo SCARA


Instituto Politécnico Nacional
UPIITA
Bibliografía

Barrientos, Antonio. Fundamentos De Robótica. McGraw-Hill, 2007.

Spong, W. Mark, Hutchinson, Seth y Vidyasagar, M. Robot Modeling and Control. John Wiley & Sons,
2005.

Morales Méndez José Silvestre, Fundamentos De Economía. Mcgraw-Hill, 2009.

Bradsky Gary y Kaeble Adrian, Learnin Open cv: Computer Vision with the Opencv Library.
O’Reilly,2008.

59

Brazo Robótico tipo SCARA

You might also like