Seleccionador de Piezas Por Colores

Preview:

Citation preview

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

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

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

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)

FIG. 9 Circuito Electrónico unificado conexiones FIG. 10 Circuito Electrónico 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 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.

Labview (Interfaz)

Labview (Código Parte 1)

Labview (Código Parte 2)

Labview (Código Parte 3)

Labview (Código Parte 4)

Labview (Código Parte 5)

Labview (Código Parte 6)

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.

FLEXPENDANT – Declaración de la Herramienta

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

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]];

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]];

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

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

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

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

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 – 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

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

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

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

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 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.

Recommended