Está en la página 1de 35

Seleccionador de piezas por colores

FIG. 2 IRB 140

Mateo Duque Solis Fabian L. Orozco Castao Santiago Londoo Arvalo Juan S. Uribe Echeverri
FIG 1. Cubo Rubrix

Logros Alcanzados
FIG 3. Arduino UNO

Optima y funcional aplicacin del software Labview y sus Toolkits para la deteccin de imgenes e identificacin de colores. Utilizacin del Robot IRB 140 como medio manipulador de piezas. Comunicacin del computador, Arduino y controlador IRC5 por medio del protocolo de comunicacin RS 232 y por medio de seales digitales.

Posibles Aplicaciones (Para trabajos Futuros)


Quien desee trabajar en un futuro en base a lo que hasta la fecha se logro, puede aspirar a desarrollar aplicaciones como: Seleccin de piezas en bandas transportadoras. Seleccin de frutas y/o vegetales en sistemas de empaque. Control de calidad de piezas pintadas.

FIG 4. Carro MAL pintado

FIG 5. Cmara Web Logitech

FIG 6. Carro BIEN pintado

FIG. 7 Acondicionador Seal Esquemtico

FIG. 8 Acondicionador Seal PCB

Este es el circuito utilizado para acondicionar las seales de entrada y salida (5v > 24v, 24v -> 5v), que comunican el computador, Arduino y el controlador del Robot IRB 140 (IRC5)

FIG. 9 Circuito Electrnico unificado conexiones

FIG. 10 Circuito Electrnico unificado

FIG. 11 Entradas/salidas digitales IRC5 conexiones

FIG. 12 Entradas/salidas digitales IRC5

FIG. 13 Fuente voltaje IRC5 conexiones

FIG. 14 Fuente voltaje IRC5

FIG. 15 Montaje cmara Web vista lateral

FIG. 16 Montaje cmara Web vista frontal

Este es el montaje utilizado para acondicionar la cmara al rea de trabajo del Robot IRB 140, se puede quitar fcilmente de la mesa simplemente halndola hacia afuera, as mismo la cmara se puede cambiar por cualquier otra simplemente quitando la tuerca y acondicionando una cmara nueva.

Labview (Interfaz)

Labview (Cdigo Parte 1)

Labview (Cdigo Parte 2)

Labview (Cdigo Parte 3)

Labview (Cdigo Parte 4)

Labview (Cdigo Parte 5)

Labview (Cdigo Parte 6)

CODIGO DE ROBOT STUDIO


El Cdigo que se presentara, se program desde dos entornos de diferentes pero dentro del mismo RobotStudio. Una primera parte que es la declaracin de variables, puntos y Herramienta de Trabajo desde el FlexPendant, y una segunda parte desde el entorno de programacin RAPID. Esto se hizo con la intensin de facilitar la correcta programacin del cdigo.

! Se Crea la Herramienta de Trabajo: ! 1. ABB ! 2. Movimiento ! 3. Herramienta ! 4. Nuevo

FLEXPENDANT Declaracin de la Herramienta

! Se Define La Nueva Herramienta Por Medio del TCP: ! 1. Editar y Definir... ! 2. Reorientar el robot y Click en Modificar ! 3. Repetir hasta llenar los cuatro puntos

FLEXPENDANT Declaracin de la Herramienta

Luego de esto. En RAPID debe aparecer asi:

TASK PERS tooldata festo:=[TRUE,[[10.3046,41.7401,166.555],[1,0,0,0]],[1.387,[0,0,90.3],[1,0,0,0],0,0,0]];

FLEXPENDANT Declaracin de Puntos


! Se Crea los puntos de Trabajo p10,: ! 1. En Movimiento Asegurar que la herramienta seleccionada sea FESTO ! 2. ABB y Editor de Programa ! 3. Aadir Instruccion Common MoveJ o MoveL ! 4. Dicha Accin guarda la posicion actual del Robot.

CONST robtarget p10:=[[-63.00,-734.97,63.62],[0.000284913,-0.719032,0.694973,0.00224617],[-2,-,1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]]; CONST robtarget p20:=[[-535.74,-174.91,60.81],[0.00139384,0.0137058,-0.999904,-0.00178478],[-2,-1,2,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]]; CONST robtarget p30:=[[-535.39,-299.21,60.81],[0.00139173,0.0137061,-0.999904,-0.0017858],[-2,-1,2,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]]; CONST robtarget p40:=[[-535.69,-458.44,60.81],[0.00139308,0.0137045,-0.999904,-0.00178361],[-2,-1,2,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];

! Declaracion de las Variables: ! 1. ABB - Editor de Programas ! 2. Aadir Instruccion Common := ! 3. Editar - Todos ! 4. Definir Variable cubo - VAR num cubo:=0;

FLEXPENDANT Declaracin de Variables Auxiliares

! 5. Continuar con las demas variables

RAPID
Abrir el Entorno de Programacion RAPID para acceder a l: 1. Click en la pestaa Fuera de Simulacion 2. Expandir las subcarpetas hasta llegar a Main Module Main, como se muestra en la figura. 3. Doble Click en main y aparecera el entorno de programacin

RAPID Declaracin
! Herramienta TASK PERS tooldata festo:=[TRUE,[[10.3046,41.7401,166.555],[1,0,0,0]],[1.387,[0,0,90.3],[1,0,0,0],0,0,0]]; ! Puntos ! Posicin Pick (p10), en donde se recogen las Piezas CONST robtarget p10:=[[-63.00,-734.97,63.62],[0.000284913,-0.719032,0.694973,0.00224617],[-2,-1,1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]]; ! Posicin Yellow (p20), en donde se depositan las piezas amarillas CONST robtarget p20:=[[-535.74,-174.91,60.81],[0.00139384,0.0137058,-0.999904,-0.00178478],[-2,-1,2,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]]; ! Posicin Blue(p30), en donde se depositan las piezas Azules CONST robtarget p30:=[[-535.39,-299.21,60.81],[0.00139173,0.0137061,-0.999904,-0.0017858],[-2,-1,2,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]]; ! Posicin Green(p40), en donde se depositan las piezas Verdes CONST robtarget p40:=[[-535.69,-458.44,60.81],[0.00139308,0.0137045,-0.999904,-0.00178361],[-2,-1,2,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]]; ! Variables VAR num cubo:=0; VAR num num_p:=0; VAR num num_y:=0; VAR num num_b:=0; VAR num num_g:=0; VAR num piezas:=0; VAR num color := 0;

! Variable que almacena la dimension de un cubo ! Variable que almacena el numero de piezas recogidas ! Variable que almacena el numero de pezas amarillas ! Variable que almacena el numero de piezas azules ! Variable que almacena el numero de piezas verdes ! Variable que almacena el numero de piezas a clasificar ! Variable que almacena el color que h identificado

RAPID Programa Principal


PROC main() Defect; ! Llama a la funcin Defect, en la cual se reinician todas las variables del programa. TPErase; ! Como voy a mostrar por pantalla (FlexPendant) como va el proceso de Clasificacin borrar o limpiar pantalla TPReadNum piezas, "Cuntos Cubos Desea Clasificar?"; ! Pregunto al Usuario Cuantas Piezas voy a Clasificar y lo almaceno en piezas FOR x FROM 1 TO piezas DO TPWrite "Cubos Amarillos = "\Num:=num_y+1; TPWrite "Cubos Azules = "\Num:=num_b+1; TPWrite "Cubos Verdes = "\Num:=num_g+1; Pick; Check; Control; ! ! ! ! ! Muestro la cantidad de cubos Amarillos, Azules y Verdes que van clasificados.

Llama la funcion Pick en la cual el robot va a la posicion especificada para recoger las piezas Llama la funcion Check en la cual se activa la seal que me activa el rpograma de identificacion de LABVIEW Llama la funcion Control en la cual dependiendo de la respuesta enviada del Programa de Labview se toma la desicion adecuada (llevar la pieza a su lugar de destino)

! Muestra el numero de piezas se han clasificado ENDFOR ! Muestra el resultado final em pantalla del numero de piezas que clasifico TPWrite "Cubos Amarillos = "\Num:=num_y+1; TPWrite "Cubos Azules = "\Num:=num_b+1; TPWrite "Cubos Verdes = "\Num:=num_g+1; ENDPROC

TPErase; TPWrite "Cubos Clasificados = "\Num:=x;

RAPID Funciones De Abrir y Cerrar el Gripper


! Funcion para Abrir El Gripper
PROC Open() ! Se conecto las entradas electricas de abrir y cerrar del gripper a las salidas digitales salida4 y DO10_3_FER respectivamente ! Primero reseteo las dos salidas, garantizando que no se bloquee el Gripper Reset salida4; Reset DO10_3_FER; WaitTime 0.6; ! Retardo de 0.6 Segundos ( necesaria para que el gripper termine su accion mecanica) Set salida4; ! Activar salida4 (Abre el Gripper) WaitTime 0.6; ENDPROC

! Funcion para Cerrar El Gripper


PROC Close() ! Primero reseteo las dos salidas, garantizando que no se bloquee el Gripper Reset salida4; Reset DO10_3_FER; WaitTime 0.6; ! Retardo de 0.6 Segundos ( necesaria para que el gripper termine su accion mecanica) Set DO10_3_FER; ! Activar DO_10_3_FER (Cierra el Gripper) WaitTime 0.6; ENDPROC

RAPID Funcin Defect


! Funcin para inicializar todas las Variables utilizadas PROC Defect() cubo := 48; ! Dimension del cubo Utilizada para relizar los Offset Necesarios ! Estas cuatro Variables se inician en -1 ya son las encargadas de en que posicion debe ir el robot ya sea para colocar o recoger los cubos ! Estas posiciones varian desde la posicion 0 hasta x-1 (x -> numero de cubos a clasificar) ! Ademas como estas variables se utilizan en funciones correspoondientes que tienen como primera instruccion incrementar dicha variable ! en 1 lo que significaria que empezaria a trabajar en la posicion 0. num_p := -1; num_y := -1; num_b := -1; num_g := -1; ! Cantidad de piezas a Clasificar piezas := 0; ! Color identificado, 1 (Verde), 2 (Amarillo), 3 (Azul) color :=0; ! Abrir Gripper Open; ENDPROC

RAPID Funcin Pick


! Funcion para recoger el cubo en la Estacin A PROC Pick() ! Incrementa el contador de la posicion de la Estacion 1 Incr num_p; ! Se mueve Articularmente al punto p10 pero esta integrado con la ! funcion offset en la que se varia en direccion y y en z ! quiere decir que cunado va a recoger la primera pieza se va a ! mover con un offset de 0,0,(48*2) en x, y, z respectivamente MoveJ Offs(p10,0,cubo * num_p,cubo*(num_p+2)), v1000, z5, festo; ! Se mueve linealmente al punto p10 con un offset en la que se ! varia en direccion y MoveL Offs(p10,0,cubo * num_p,0), v1000, fine, festo; ! Cierra Gripper Close; ENDPROC

Amarillo Azul Verde

PICK

RAPID Funcin Check


PROC Check() ! Levanta el cubo 2 mm pra no daar ni la pieza ni la mesa MoveJ Offs(p10,0,cubo * num_p,2), v1000, fine, festo; ! Muevo el Cubo a la posicion de Check, cerca a la camara MoveL Offs(p10,0,-cubo,2), v1000, fine, festo; Reset DO10_10; ! Mientras no se haya identificado que color es el robot no se movera ! Aqui partimos del hecho que solo hay tres posibles colores de salida y ! estos estan guardados como referencia (patrones) WHILE DI10_5 = 0 AND DI10_6 = 0 AND DI10_7 = 0 DO Set DO10_10; ! Activa el proceso de identificacion de ! LABVIEw WaitTime 1; ENDWHILE ! Dependiendo de la seal activada color toma el valor correspondiente IF DI10_5 = 1 THEN color:=1; ELSEIF DI10_6 = 1 THEN color:=2; ELSEIF DI10_7 = 1 THEN color:=3; ENDIF Reset DO10_10; ! Desactivar el proceso de identificacion de LABVIEW WaitTime 1; MoveJ Offs(p10,0,-cubo,cubo*2), v1000, z5, festo; ! Elevo el cubo para que se ! mueva libremente ENDPROC

Amarillo Azul Verde

PICK Cmara

RAPID Funcin Control


PROC Control() ! Dependiendo de la respuesta del programa de LABVIEW se llama a una de las ! tres posibles funciones Green, Yellow o Blue. IF color = 1 THEN Green; ELSEIF color = 2 THEN Yellow; ELSEIF color = 3 THEN Blue; ENDIF ! Se Reinicia la variable color a 0 color := 0; ENDPROC

Amarillo Azul Verde

PICK Cmara

RAPID Funciones Yellow, Blue, Green


PROC Yellow() Incr num_y; MoveJ Offs(p20,0,0,cubo * (num_p + 2)), v1000, z5, festo; MoveL Offs(p20,0,0,cubo * num_y), v1000, fine, festo; Open; MoveL Offs(p20,0,0,cubo * (num_p + 2)), v1000, z5, festo; ENDPROC PROC Blue() Incr num_b; MoveJ Offs(p30,0,0,cubo * (num_p + 2)), v1000, z5, festo; MoveL Offs(p30,0,0,cubo * num_b), v1000, fine, festo; Open; MoveL Offs(p30,0,0,cubo * (num_p + 2)), v1000, z5, festo; ENDPROC PROC Green() Incr num_g; MoveJ Offs(p40,0,0,cubo * (num_p + 2)), v1000, z5, festo; MoveL Offs(p40,0,0,cubo * num_g), v1000, fine, festo; Open; MoveL Offs(p40,0,0,cubo * (num_p + 2)), v1000, z5, festo; ENDPROC

! Estas tres funciones son muy similares la ! unica diferencia es el punto al que debe ! ir p20, p30, p40 dependiendo de la ! funcion

Guardar y Transferir al Robot


! Se Crean dos Archivos el modulo ! principal y el programa. ! Estos dos archivos se transfieren al ! Robot Por medio de una USB

Guardar y Transferir al Robot

Guardar y Transferir al Robot

Agradecimientos
Agradecemos a Andrs Felipe Posada por darnos una breve pero eficaz asesora sobre el manejo del modulo de visin en el Softwate LabView. A los profesores Mauricio Arias Correa y Fernando Vanegas por asesora en el software RobotStudio y en el manejo del manipulador robtico ABB IRB 140.