seleccionador de piezas por colores
TRANSCRIPT
![Page 1: Seleccionador de Piezas Por Colores](https://reader031.vdocuments.pub/reader031/viewer/2022020207/557202b14979599169a3f427/html5/thumbnails/1.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022020207/557202b14979599169a3f427/html5/thumbnails/2.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022020207/557202b14979599169a3f427/html5/thumbnails/3.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022020207/557202b14979599169a3f427/html5/thumbnails/4.jpg)
![Page 5: Seleccionador de Piezas Por Colores](https://reader031.vdocuments.pub/reader031/viewer/2022020207/557202b14979599169a3f427/html5/thumbnails/5.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022020207/557202b14979599169a3f427/html5/thumbnails/6.jpg)
FIG. 9 Circuito Electrónico unificado conexiones FIG. 10 Circuito Electrónico unificado
![Page 7: Seleccionador de Piezas Por Colores](https://reader031.vdocuments.pub/reader031/viewer/2022020207/557202b14979599169a3f427/html5/thumbnails/7.jpg)
FIG. 11 Entradas/salidas digitales IRC5 conexiones FIG. 12 Entradas/salidas digitales IRC5
![Page 8: Seleccionador de Piezas Por Colores](https://reader031.vdocuments.pub/reader031/viewer/2022020207/557202b14979599169a3f427/html5/thumbnails/8.jpg)
FIG. 13 Fuente voltaje IRC5 conexiones FIG. 14 Fuente voltaje IRC5
![Page 9: Seleccionador de Piezas Por Colores](https://reader031.vdocuments.pub/reader031/viewer/2022020207/557202b14979599169a3f427/html5/thumbnails/9.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022020207/557202b14979599169a3f427/html5/thumbnails/10.jpg)
![Page 11: Seleccionador de Piezas Por Colores](https://reader031.vdocuments.pub/reader031/viewer/2022020207/557202b14979599169a3f427/html5/thumbnails/11.jpg)
Labview (Interfaz)
![Page 12: Seleccionador de Piezas Por Colores](https://reader031.vdocuments.pub/reader031/viewer/2022020207/557202b14979599169a3f427/html5/thumbnails/12.jpg)
Labview (Código Parte 1)
![Page 13: Seleccionador de Piezas Por Colores](https://reader031.vdocuments.pub/reader031/viewer/2022020207/557202b14979599169a3f427/html5/thumbnails/13.jpg)
Labview (Código Parte 2)
![Page 14: Seleccionador de Piezas Por Colores](https://reader031.vdocuments.pub/reader031/viewer/2022020207/557202b14979599169a3f427/html5/thumbnails/14.jpg)
Labview (Código Parte 3)
![Page 15: Seleccionador de Piezas Por Colores](https://reader031.vdocuments.pub/reader031/viewer/2022020207/557202b14979599169a3f427/html5/thumbnails/15.jpg)
Labview (Código Parte 4)
![Page 16: Seleccionador de Piezas Por Colores](https://reader031.vdocuments.pub/reader031/viewer/2022020207/557202b14979599169a3f427/html5/thumbnails/16.jpg)
Labview (Código Parte 5)
![Page 17: Seleccionador de Piezas Por Colores](https://reader031.vdocuments.pub/reader031/viewer/2022020207/557202b14979599169a3f427/html5/thumbnails/17.jpg)
Labview (Código Parte 6)
![Page 18: Seleccionador de Piezas Por Colores](https://reader031.vdocuments.pub/reader031/viewer/2022020207/557202b14979599169a3f427/html5/thumbnails/18.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022020207/557202b14979599169a3f427/html5/thumbnails/19.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022020207/557202b14979599169a3f427/html5/thumbnails/20.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022020207/557202b14979599169a3f427/html5/thumbnails/21.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022020207/557202b14979599169a3f427/html5/thumbnails/22.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022020207/557202b14979599169a3f427/html5/thumbnails/23.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022020207/557202b14979599169a3f427/html5/thumbnails/24.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022020207/557202b14979599169a3f427/html5/thumbnails/25.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022020207/557202b14979599169a3f427/html5/thumbnails/26.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022020207/557202b14979599169a3f427/html5/thumbnails/27.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022020207/557202b14979599169a3f427/html5/thumbnails/28.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022020207/557202b14979599169a3f427/html5/thumbnails/29.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022020207/557202b14979599169a3f427/html5/thumbnails/30.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022020207/557202b14979599169a3f427/html5/thumbnails/31.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022020207/557202b14979599169a3f427/html5/thumbnails/32.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022020207/557202b14979599169a3f427/html5/thumbnails/33.jpg)
Guardar y Transferir al Robot
![Page 34: Seleccionador de Piezas Por Colores](https://reader031.vdocuments.pub/reader031/viewer/2022020207/557202b14979599169a3f427/html5/thumbnails/34.jpg)
Guardar y Transferir al Robot
![Page 35: Seleccionador de Piezas Por Colores](https://reader031.vdocuments.pub/reader031/viewer/2022020207/557202b14979599169a3f427/html5/thumbnails/35.jpg)
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.