35
Seleccionador de piezas por colores Mateo Duque Solis Fabian L. Orozco Castaño Santiago Londoño Arévalo Juan S. Uribe Echeverri FIG. 2 IRB 140 FIG 1. Cubo Rubrix

Seleccionador de Piezas Por Colores

Embed Size (px)

Citation preview

Page 1: Seleccionador de Piezas Por Colores

Seleccionador de piezas por colores

Mateo Duque Solis Fabian L. Orozco Castaño Santiago Londoño Arévalo Juan S. Uribe Echeverri

FIG. 2 IRB 140

FIG 1. Cubo Rubrix

Page 2: Seleccionador de Piezas Por Colores

Logros Alcanzados

• Optima y funcional aplicación del software Labview y sus

Toolkits para la detección de imágenes e identificación de colores.

• Utilización del Robot IRB 140 como medio manipulador de piezas.

• Comunicación del computador, Arduino y controlador IRC5 por medio del protocolo de comunicación RS 232 y por medio de señales digitales.

FIG 3. Arduino UNO

Page 3: Seleccionador de Piezas Por Colores

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: • Selección de piezas en bandas transportadoras. • Selección de frutas y/o vegetales en sistemas de empaque. • Control de calidad de piezas pintadas.

FIG 4. Carro MAL pintado FIG 5. Cámara Web Logitech FIG 6. Carro BIEN pintado

Page 4: Seleccionador de Piezas Por Colores
Page 5: Seleccionador de Piezas Por Colores

FIG. 7 Acondicionador Señal Esquemático FIG. 8 Acondicionador Señal PCB

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

Page 6: Seleccionador de Piezas Por Colores

FIG. 9 Circuito Electrónico unificado conexiones FIG. 10 Circuito Electrónico unificado

Page 7: Seleccionador de Piezas Por Colores

FIG. 11 Entradas/salidas digitales IRC5 conexiones FIG. 12 Entradas/salidas digitales IRC5

Page 8: Seleccionador de Piezas Por Colores

FIG. 13 Fuente voltaje IRC5 conexiones FIG. 14 Fuente voltaje IRC5

Page 9: Seleccionador de Piezas Por Colores

FIG. 15 Montaje cámara Web vista lateral FIG. 16 Montaje cámara Web vista frontal

Este es el montaje utilizado para acondicionar la cámara al área de trabajo del Robot IRB 140, se puede quitar fácilmente de la mesa simplemente halándola hacia afuera, así mismo la cámara se puede cambiar por cualquier otra simplemente quitando la tuerca y acondicionando una cámara nueva.

Page 10: Seleccionador de Piezas Por Colores
Page 11: Seleccionador de Piezas Por Colores

Labview (Interfaz)

Page 12: Seleccionador de Piezas Por Colores

Labview (Código Parte 1)

Page 13: Seleccionador de Piezas Por Colores

Labview (Código Parte 2)

Page 14: Seleccionador de Piezas Por Colores

Labview (Código Parte 3)

Page 15: Seleccionador de Piezas Por Colores

Labview (Código Parte 4)

Page 16: Seleccionador de Piezas Por Colores

Labview (Código Parte 5)

Page 17: Seleccionador de Piezas Por Colores

Labview (Código Parte 6)

Page 18: Seleccionador de Piezas Por Colores

CODIGO DE ROBOT STUDIO

El Código que se presentara, se programó desde dos entornos de diferentes pero dentro del mismo RobotStudio.

Una primera parte que es la declaración de variables, puntos y Herramienta de Trabajo desde el FlexPendant, y una segunda parte desde el entorno de programación RAPID.

Esto se hizo con la intensión de facilitar la correcta programación del código.

Page 19: Seleccionador de Piezas Por Colores

FLEXPENDANT – Declaración de la Herramienta

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

Page 20: Seleccionador de Piezas Por Colores

FLEXPENDANT – Declaración 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 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]];

Page 21: Seleccionador de Piezas Por Colores

FLEXPENDANT – Declaración 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. Añadir Instruccion – Common – MoveJ o MoveL

! 4. Dicha Acción 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]];

Page 22: Seleccionador de Piezas Por Colores

FLEXPENDANT – Declaración de Variables Auxiliares ! Declaracion de las Variables:

! 1. ABB - Editor de Programas

! 2. Añadir Instruccion – Common – :=

! 3. Editar - Todos

! 4. Definir Variable cubo - “VAR num cubo:=0;”

! 5. Continuar con las demas variables

Page 23: Seleccionador de Piezas Por Colores

RAPID

Abrir el Entorno de Programacion RAPID para acceder a él: 1. Click en la pestaña 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 programación

Page 24: Seleccionador de Piezas Por Colores

RAPID – Declaración ! 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

! Posición 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]];

! Posición 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]];

! Posición 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]];

! Posición 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; ! Variable que almacena la dimension de un cubo

VAR num num_p:=0; ! Variable que almacena el numero de piezas recogidas

VAR num num_y:=0; ! Variable que almacena el numero de pezas amarillas

VAR num num_b:=0; ! Variable que almacena el numero de piezas azules

VAR num num_g:=0; ! Variable que almacena el numero de piezas verdes

VAR num piezas:=0; ! Variable que almacena el numero de piezas a clasificar

VAR num color := 0; ! Variable que almacena el color que há identificado

Page 25: Seleccionador de Piezas Por Colores

RAPID – Programa Principal PROC main()

Defect; ! Llama a la función Defect, en la cual se reinician todas las variables del programa.

TPErase; ! Como voy a mostrar por pantalla (FlexPendant) como va el proceso de Clasificación borrar o limpiar pantalla

TPReadNum piezas, "Cuántos 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; ! Muestro la cantidad de cubos Amarillos, Azules y Verdes que van clasificados.

TPWrite "Cubos Azules = "\Num:=num_b+1;

TPWrite "Cubos Verdes = "\Num:=num_g+1;

Pick; ! Llama la funcion Pick en la cual el robot va a la posicion especificada para recoger las piezas

Check; ! Llama la funcion Check en la cual se activa la señal que me activa el rpograma de identificacion de LABVIEW

Control; ! 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)

TPErase;

TPWrite "Cubos Clasificados = "\Num:=x; ! 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

Page 26: Seleccionador de Piezas Por Colores

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

Page 27: Seleccionador de Piezas Por Colores

RAPID – Función Defect ! Función 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

Page 28: Seleccionador de Piezas Por Colores

RAPID – Función Pick

! Funcion para recoger el cubo en la Estación 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

PICK

Verde Azul

Amarillo

Page 29: Seleccionador de Piezas Por Colores

RAPID – Función Check PROC Check() ! Levanta el cubo 2 mm pra no dañar 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 señal 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

PICK

Verde Azul

Amarillo

Cámara

Page 30: Seleccionador de Piezas Por Colores

RAPID – Función 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

PICK

Verde Azul

Amarillo

Cámara

Page 31: Seleccionador de Piezas Por Colores

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

Page 32: Seleccionador de Piezas Por Colores

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

Page 33: Seleccionador de Piezas Por Colores

Guardar y Transferir al Robot

Page 34: Seleccionador de Piezas Por Colores

Guardar y Transferir al Robot

Page 35: Seleccionador de Piezas Por Colores

Agradecimientos

• Agradecemos a Andrés Felipe Posada por darnos una breve pero eficaz asesoría sobre el manejo del modulo de visión en el Softwate LabView.

• A los profesores Mauricio Arias Correa y Fernando Vanegas por asesoría en el software RobotStudio y en el manejo del manipulador robótico ABB IRB 140.