Anexo2 Programas del Robot

Anuncio
Integración de sistema de visión artificial y robot en aplicación tipo Pick&Place
A2 Listado de programas del robot
A2 Listado de programas del robot
A2.1 Programa MAIN.prg
10 OVRD 100
20 ACCEL 50,50
25 CNT 1
30 'LOADSET 1,1
40 'OADL ON
50 '
55 TRCLR
56 '
60 IF M_PSA(2)=0 THEN GOTO *SLOT2RUN
70 XLOAD 2,"COM"
' Carga programa COM es SLOT 2
80 WAIT C_PRG(2)="COM"
' Espera que el programa COM este cargado en SLOT 2
90 XRUN 2
' Arranca programa en SLOT 2
100 *SLOT2RUN
110 'IF M_PSA(3)=0 THEN GOTO *SLOT3RUN
120 ' XLOAD 3,"ROB2"
130 ' WAIT C_PRG(3)="ROB2"
140 'XRUN 3
150 '*SLOT3RUN
160
WHILE(1)
170
DATABUF=M_TRBFCT
' Para monitorizacion rapida en Variables de Program
Monitor
180
WAIT M_TRBFCT>0
190
GOSUB *TRACKING
200 WEND
210 *TRACKING
220 TRRD PV,MV#
' Extrae de Buffer posicion respecto de P_PRGV y encoder en
el momento de la foto
230 ESPERA=1
240 WHILE ESPERA=1
250 PORGVYA=TRWCUR(1,P_ORGV,MV#) ' Origen de sistema de referencia actualizado
segun encoder
255 PACTUAL=PORGVYA*PV ' Posicion de pieza actualizada segun encoder
260 IF (POSCQ(PACTUAL))=1 THEN ESPERA=0 ' La pieza entra en zona de trabajo
270 WEND
280 'DLY 1
300 TRK ON,P_ORGV,MV#
' Inicia TRACKING con origen de referencia P_ORGV
310 MOV PV,+100
' Mueve hacia PACTUAL*P_ZERO/P_ZERO*PV=PACTUAL*PV
315 CNT 0
320 MOV PV,-10
325 M_OUT(4)=1
330 MOV PV,+100
' Sube un poco
340 TEMP#=P_ENCDLT.X ' para comprobar resolucion de decimales
345 CNT 1
360 TRK OFF
370 MOV PSUELTA
371 MOV PSUELTA,-15
375 M_OUT(4)=0
390 RETURN
PV=(+50.338,-69.844,+0.000,+0.000,+0.000,+0.000)(0,0)
PORGVYA=(+445.920,+186.979,+154.392,+0.000,+0.000,+0.000,+0.000,+0.000)(4,0)
P_ORGV=(+571.037,+468.513,+157.575,+0.000,+0.000,+0.000,+0.000,+0.000)(4,0)
Ingeniería en Automática y Electrónica Industrial
A2-1
Integración de sistema de visión artificial y robot en aplicación tipo Pick&Place
A2 Listado de programas del robot
PACTUAL=(+496.258,+117.135,+154.392,+0.000,+0.000,+0.000,+0.000,+0.000)(4,0)
PSUELTA=(+395.579,+262.056,+214.300,+0.000,+0.000,+33.629,+0.000,+0.000)(4,0)
PESPERA=(+329.030,+411.254,+229.303,+0.000,+0.000,+34.507,+0.000,+0.000)(4,0)
A2.2 Programa COM.prg
10 '############################################################################
20 ' COMUNICACION CON EL SISTEMA DE VISION ARTIFICAL
30 ' ROTACION DE COORDENADAS DEL SISTEMA DE VISION RESPECTO DEL ROBOT
40 ' ORDENADO Y ALMACENAMIENTO EN BUFFER PARA TRACKING
50 '############################################################################
55 DIM PARRAY(20) ' Array para ordenar las posiciones recibidas, no se esperan
mas de 10 o 12
56 DIM MAVANCE(20) 'Array de valores de avance, criterio utilizados para ordenar
las piezas
60 '
70 ' Al inicio el Robot debe tener el Buffer vacío, ya que al terminar un
programa se cierran los puertos abiertos en el mismo
80 M_E_CORR=300
90 '
100 OPEN "COM3:" AS #1 ' COMDEV[2]=OPT13 (COM3=OPT13); NETPORT[3]=10003 (Puerto
asignado); CPRCE13=2 (modo DataLink)
110 '
120 *WAITCOM
130 INPUT #1,CORDEN$,CNCICLOS$,VX,VY,VTHETA,NPIEZA,NPZAS ' Espera comando del
PC
140 IF CORDEN$="PCTrigger" THEN GOSUB *TRIGGER ' Procesamiento de PCTrigger
150 IF CORDEN$="Datos" THEN GOSUB *DATOS ' Procesamiento de datos recibidos
160 IF CORDEN$="Cero" THEN GOSUB *CERO ' Procesamiento cero, se almacena en
buffer M_ENC y posición=(0,0), para test
170 GOTO *WAITCOM
180 '
190 '
200 *TRIGGER
210 NTRIG=NTRIG+1 ' Contador para depuracion
220 MCAP#=M_ENC-M_E_CORR ' Captura encoder, con corrección por software si
procede
230 CRESP$="ACKPCTrigger"+CNCICLOS$ ' Respuesta compuesta con el nº de ciclo
para que PC confirme sincronismo comunicaciones
240 PRINT #1,CRESP$ ' Confirma al PC la recepción y procesamiento de "PCTrigger"
250 RETURN
260 '
270 '
280 *DATOS
290 NDAT=NDAT+1 ' Contador para depuracion
300 PROBOT=P_ZERO
310 PROBOT.X=COS(M_RVBETA)*VX+SIN(M_RVBETA)*VY ' ROTACION del sistema de vision
respecto del robot
320 PROBOT.Y=SIN(M_RVBETA)*VX-COS(M_RVBETA)*VY ' ROTACION del sistema de vision
respecto del robot
325 PARRAY(NPIEZA)=PROBOT ' Guarda posiciones en array. NPIEZA viene numerado
desde 1, justamente como trabaja el robot
340 IF NPIEZA=NPZAS THEN ' El robot confirma recepcion del paquete cuando recibe
la ultima pieza
350
PRINT #1,"ACKDatos" ' Confirma al PC la recepcion correcta de datos
355
GOSUB *ORDENA
360 ENDIF
370 RETURN
Ingeniería en Automática y Electrónica Industrial
A2-2
Integración de sistema de visión artificial y robot en aplicación tipo Pick&Place
A2 Listado de programas del robot
380 '
390 '
400 *CERO
410 NCER=NCER+1 ' Contador para depuracion
420 PROBOT=P_ZERO
430 PROBOT.X=0
440 PROBOT.Y=0
450 TRWRT PROBOT,M_ENC
460 RETURN
470 '
500 *ORDENA
510 IF NPZAS=1 THEN
520
TRWRT PROBOT,MCAP# ' La posicion (x,y) y el valor de encoder asociado a
la captura se guardan en buffer
530 ENDIF
550 IF NPZAS>1 AND NPZAS<30 THEN ' Segunda condicion es de seguridad
552
FOR N=1 TO NPZAS ' calcula las variables de medida utilizadas para
ordenar
554
MAVANCE(N)=P_ENCDLT.X*PARRAY(N).X+P_ENCDLT.Y*PARRAY(N).Y
556
NEXT
560
FOR VUELTAS=1 TO NPZAS ' Vueltas para segurar que todas las posiciones
se mueven como deben, creo que sobra una
570
FOR M=1 TO NPZAS-1 ' Recorrido del array hasta el penúltimo
580
N=M+1
590
IF MAVANCE(M)<MAVANCE(N) THEN ' A
permutaaaaaaaaaaaaaaaaarrrrrrrr
600
PTEMP=PARRAY(M)
605
MTEMP=MAVANCE(M)
610
PARRAY(M)=PARRAY(N)
620
MAVANCE(M)=MAVANCE(N)
630
PARRAY(N)=PTEMP
640
MAVANCE(N)=MTEMP
650
ENDIF
660
NEXT
670
NEXT
672
FOR N=1 TO NPZAS ' Solo queda enviar el array ordenado al buffer de
tracking
673
PAUX=PARRAY(N)
674
TRWRT PAUX,MCAP# ' La posicion (x,y) y el valor de encoder asociado
a la captura se guardan en buffer
676
NEXT
680 ENDIF
690 RETURN
PARRAY(1)=(+21.128,-134.564,+0.000,+0.000,+0.000,+0.000,+0.000,+0.000)(0,0)
PARRAY(2)=(+50.338,-69.844,+0.000,+0.000,+0.000,+0.000,+0.000,+0.000)(0,0)
PARRAY(3)=(+124.382,-72.575,+0.000,+0.000,+0.000,+0.000,+0.000,+0.000)(0,0)
PARRAY(4)=(+0.000,+0.000,+0.000,+0.000,+0.000,+0.000,+0.000,+0.000)(0,0)
PARRAY(5)=(+0.000,+0.000,+0.000,+0.000,+0.000,+0.000,+0.000,+0.000)(0,0)
PARRAY(6)=(+0.000,+0.000,+0.000,+0.000,+0.000,+0.000,+0.000,+0.000)(0,0)
PARRAY(7)=(+0.000,+0.000,+0.000,+0.000,+0.000,+0.000,+0.000,+0.000)(0,0)
PARRAY(8)=(+0.000,+0.000,+0.000,+0.000,+0.000,+0.000,+0.000,+0.000)(0,0)
PARRAY(9)=(+0.000,+0.000,+0.000,+0.000,+0.000,+0.000,+0.000,+0.000)(0,0)
PARRAY(10)=(+0.000,+0.000,+0.000,+0.000,+0.000,+0.000,+0.000,+0.000)(0,0)
PARRAY(11)=(+0.000,+0.000,+0.000,+0.000,+0.000,+0.000,+0.000,+0.000)(0,0)
PARRAY(12)=(+0.000,+0.000,+0.000,+0.000,+0.000,+0.000,+0.000,+0.000)(0,0)
PARRAY(13)=(+0.000,+0.000,+0.000,+0.000,+0.000,+0.000,+0.000,+0.000)(0,0)
PARRAY(14)=(+0.000,+0.000,+0.000,+0.000,+0.000,+0.000,+0.000,+0.000)(0,0)
PARRAY(15)=(+0.000,+0.000,+0.000,+0.000,+0.000,+0.000,+0.000,+0.000)(0,0)
Ingeniería en Automática y Electrónica Industrial
A2-3
Integración de sistema de visión artificial y robot en aplicación tipo Pick&Place
A2 Listado de programas del robot
PARRAY(16)=(+0.000,+0.000,+0.000,+0.000,+0.000,+0.000,+0.000,+0.000)(0,0)
PARRAY(17)=(+0.000,+0.000,+0.000,+0.000,+0.000,+0.000,+0.000,+0.000)(0,0)
PARRAY(18)=(+0.000,+0.000,+0.000,+0.000,+0.000,+0.000,+0.000,+0.000)(0,0)
PARRAY(19)=(+0.000,+0.000,+0.000,+0.000,+0.000,+0.000,+0.000,+0.000)(0,0)
PARRAY(20)=(+0.000,+0.000,+0.000,+0.000,+0.000,+0.000,+0.000,+0.000)(0,0)
PROBOT=(+21.128,-134.564,+0.000,+0.000,+0.000,+0.000,+0.000,+0.000)(0,0)
PTEMP=(+50.338,-69.844,+0.000,+0.000,+0.000,+0.000,+0.000,+0.000)(0,0)
PAUX=(+50.338,-69.844,+0.000,+0.000,+0.000,+0.000,+0.000,+0.000)(0,0)
A2.3 Programa CLE1.prg
10
'###############################################################################
##
20 ' CALIBRACION DEL ENCODER DE BANDA :
PASO 1
30 ' 1) CLE1.prg: Posición A para obtener P_ENCDLT
40 ' 2) CLE2.prg: Posición B para obtener P_ENCDLT
50
'###############################################################################
##
60 '
70 '
Con la banda parada, colocar una pieza en la misma y llevar el Robot
hasta situarlo en la pieza
80 IF M_CLEST<>0 AND M_CLEST<>2 THEN ERROR 9100 ' Control de estado para
asegurar el orden correcto de los pasos
85 '
90 M_CLEA=M_ENC 'Captura lectura de encoder en posición A
100 P_CLEA=P_FBC 'Captura posicion A de robot en base a feedback de servos
120 '
140 M_CLEST=1 ' Paso 1 realizado
220 HLT
P_CLEA=(+534.251,+117.527,+153.202,+0.000,+0.000,-6.596,+0.000,+0.000)(4,0)
P30=(-0.003,-0.039,+0.000,+0.000,+0.000,+0.000)(4,0)
P31=(-0.003,-0.039,+0.000,+0.000,+0.000,+0.000,+0.000,+0.000)
PA=(+347.140,+318.769,+158.405,+0.000,+0.000,+0.099)(4,0)
PB=(+309.082,-118.517,+155.235,+0.000,+0.000,+0.004)(4,0)
A2.4 Programa CLE2.prg
10
'###############################################################################
##
20 ' CALIBRACION DEL ENCODER DE BANDA :
PASO 2
30 ' 1) CLE1.prg: Posici¢n A para obtener P_ENCDLT
40 ' 2) CLE2.prg: Posici¢n B para obtener P_ENCDLT
50
'###############################################################################
##
60 '
70 ' Previamente se debe haber realizado el paso 1 (CLE1.prg)
80 ' Desplazar la banda, llevar el robot hasta la pieza, y ejecutar este
programa
90 IF M_CLEST<>1 THEN ERROR 9100 ' Control de estado para asegurar el orden
correcto de los pasos
100 '
110 '
120 M_CLEB=M_ENC 'Captura lectura de encoder en posicion B
130 P_CLEB=P_FBC 'Captura posicion B de robot en base a feedback de servos
Ingeniería en Automática y Electrónica Industrial
A2-4
Integración de sistema de visión artificial y robot en aplicación tipo Pick&Place
A2 Listado de programas del robot
140 '
150 MENCDIF#=M_CLEB-M_CLEA ' MENCDIF# es el avance del encoder
160 ' Corrección de MENCDIF#, aunque lo mejor es mover la banda al arranque para
alejarse del límite del rango
165 RANGO#=M_ENCMAX-M_ENCMIN ' Fondo de escala del contador de encoder
170 IF MENCDIF#<(-RANGO#/2) THEN MENCDIF#=MENCDIF#+RANGO#+M_ENCMIN ' Corrección
movimiento decremental encoder
171 IF MENCDIF#>(RANGO#/2) THEN MENCDIF#=MENCDIF#-RANGO#-M_ENCMIN ' Corrección
movimiento incremental encoder
180 '
190 P_ENCDLT=(P_CLEB-P_CLEA)/(MENCDIF#) ' Calculo de P_ENCDLT
195 P_ENCDLT.C=0 ' Si al pasar de A a B se ha cambiado la orientación de la
herramienta, se desprecia
200 '
210 M_CLEST=2 ' Paso 2 y último realizado
220 HLT
P_CLEB=(+330.230,-341.555,+148.012,+0.000,+0.000,-34.542,+0.000,+0.000)(4,0)
P_CLEA=(+534.251,+117.527,+153.202,+0.000,+0.000,-6.596,+0.000,+0.000)(4,0)
P30=(-0.003,-0.039,+0.000,+0.000,+0.000,+0.000)(4,0)
P31=(-0.003,-0.039,+0.000,+0.000,+0.000,+0.000,+0.000,+0.000)
PA=(+347.140,+318.769,+158.405,+0.000,+0.000,+0.099)(4,0)
PB=(+309.082,-118.517,+155.235,+0.000,+0.000,+0.004)(4,0)
A2.5 Programa CLV1.prg
10 '##########################################################################
20 ' CALIBRACION DE POSICION DEL SISTEMA VISION :
PASO 1
30 ' 1) CLV1.prg: Posicion A para obtener P_ORGV (origen de sistema de vision)
40 ' 2) CLV2.prg: Posicion B para obtener P_ORGV (origen de sistema de vision)
50 ' 3) CLV3.prg: Posicion A para obtener M_RVBETA (rotacion de sistema de
vision)
60 ' 4) CLV4.prg: Posicion B para obtener M_RVBETA (rotacion de sistema de
vision)
70 ' IMPORTANTE: previamente debe haberse calibrado encoder para tener P_ENCDLT
80 '##########################################################################
90 '
100 ' Con la banda parada, Colocar pieza en el ORIGEN (arriba izquierda) del
campo de vision y ejecutar este programa
130 '
140 M_CLV1A=M_ENC
' Captura lectura de encoder en posicion A
145 '
150 M_CLVST=1
' Paso 1 realizado
160 HLT
A2.6 Programa CLV2.prg
10 '##########################################################################
20 ' CALIBRACION DE POSICION DEL SISTEMA VISION :
PASO 1
30 ' 1) CLV1.prg: Posicion A para obtener P_ORGV (origen de sistema de vision)
40 ' 2) CLV2.prg: Posicion B para obtener P_ORGV (origen de sistema de vision)
50 ' 3) CLV3.prg: Posicion A para obtener M_RVBETA (rotacion de sistema de
vision)
60 ' 4) CLV4.prg: Posicion B para obtener M_RVBETA (rotacion de sistema de
vision)
70 ' IMPORTANTE: previamente debe haberse calibrado encoder para tener P_ENCDLT
80 '##########################################################################
90 '
100 ' Previamente se debe haber realizado el paso 1 (CLV1.prg)
Ingeniería en Automática y Electrónica Industrial
A2-5
Integración de sistema de visión artificial y robot en aplicación tipo Pick&Place
A2 Listado de programas del robot
110 '
Desplazar la banda, llevar el robot a la pieza con la orientacion
deseada, y ejecutar este programa
120 '
130 IF M_CLVST<>1 THEN ERROR 9100 ' Control de estado para segurar el orden de
los pasos correctos
140 '
150 M_CLV1B=M_ENC
' Captura lectura de encoder en posicion B
160 P_CLV1B=P_FBC
' Captura posicion B de robot en base a feedback de
servos
170 '
180 MENCDIF#=M_CLV1B-M_CLV1A
' MENCDIF es el avance del encoder
190 P_CLV1A=P_CLV1B-P_ENCDLT*MENCDIF# ' Mediante P_ENCDLT se obtiene la
posicion A respecto al robot
200 P_ORGV=P_CLV1A
' Finalmente se obtiene el origen del sistema de
vision, para utilizarlo con TRK
210 P_ORGV.A=0
220 P_ORGV.B=0
230 P_ORGV.C=0 ' Orientaciones nulas puesto que P_ORGV será el sistema de
refencia relativo durante tracking
240 '
250 M_CLVST=2
' Paso 2 realizado
260 HLT
P_CLV1B=(+239.501,-277.500,+149.140,+0.000,+0.000,-14.506,+0.000,+0.000)(4,0)
P_CLV1A=(+571.037,+468.513,+157.575,+0.000,+0.000,-14.506,+0.000,+0.000)(4,0)
P_ORGV=(+571.037,+468.513,+157.575,+0.000,+0.000,+0.000,+0.000,+0.000)(4,0)
A2.7 Programa CLV3.prg
10 '##########################################################################
20 ' CALIBRACION DE POSICION DEL SISTEMA VISION :
PASO 3
30 ' 1) CLV1.prg: Posicion A para obtener P_ORGV (origen de sistema de vision)
40 ' 2) CLV2.prg: Posicion B para obtener P_ORGV (origen de sistema de vision)
50 ' 3) CLV3.prg: Posicion A para obtener M_RVBETA (rotacion de sistema de
vision)
60 ' 4) CLV4.prg: Posicion B para obtener M_RVBETA (rotacion de sistema de
vision)
70 ' IMPORTANTE: previamente debe haberse calibrado encoder para tener P_ENCDLT
80 '##########################################################################
90 '
110 '
Poner una pieza en el campo de vision del robot, ejecutar este
programa, y desde PC "Enviar (X,Y) al robot"
140 '
150 OPEN "COM3:" AS #1
160 INPUT #1,VXA,VYA
' Respecto de V (vision), recibe posiciones X e Y, de A
170 M_CLV2A=M_ENC
' Captura lectura de encoder en posicion A
175 P_VA=P_ZERO
176 P_VA.X=VXA
177 P_VA.Y=VYA
180 '
190 M_CLVST=3
' Paso 3 realizado
200 HLT
P_VA=(+167.000,+125.000,+0.000,+0.000,+0.000,+0.000,+0.000,+0.000)(0,0)
A2.8 Programa CLV4.prg
10 '##########################################################################
20 ' CALIBRACION DE POSICION DEL SISTEMA VISION :
PASO 1
30 ' 1) CLV1.prg: Posicion A para obtener P_ORGV (origen de sistema de vision)
Ingeniería en Automática y Electrónica Industrial
A2-6
Integración de sistema de visión artificial y robot en aplicación tipo Pick&Place
A2 Listado de programas del robot
40 ' 2) CLV2.prg: Posicion B para obtener P_ORGV (origen de sistema de vision)
50 ' 3) CLV3.prg: Posicion A para obtener M_RVBETA (rotacion de sistema de
vision)
60 ' 4) CLV4.prg: Posicion B para obtener M_RVBETA (rotacion de sistema de
vision)
70 ' IMPORTANTE: previamente debe haberse calibrado encoder para tener P_ENCDLT
80 '##########################################################################
90 '
100 ' Previamente se debe haber realizado el paso 3 (CLV3.prg)
110 '
Desplazar la banda, llevar el robot a la pieza con cualquier
orientacion, y ejecutar este porograma
120 '
130 IF M_CLVST<>3 THEN ERROR 9100 ' Control de estado para segurar el orden de
los pasos correctos
140 '
150 M_CLV2B=M_ENC
' Captura lectura de encoder en posicion B
160 P_CLV2B=P_FBC
' Captura posicion B de robot en base a feedback de
servos
170 '
180 MENCDIF#=M_CLV2B-M_CLV2A
' MENCDIF es el avance del encoder
190 P_CLV2A=P_CLV2B-P_ENCDLT*MENCDIF# ' Mediante P_ENCDLT se obtiene la
posicion A respecto al robot
200 XREL=P_CLV2A.X-P_ORGV.X ' Posicion X relativa
210 YREL=P_CLV2A.Y-P_ORGV.Y ' Posicion Y relativa
215 AUXHOR=XREL*P_VA.X-YREL*P_VA.Y
216 AUXVER=XREL*P_VA.Y+YREL*P_VA.X
220 M_RVBETA=ATN2(AUXVER,AUXHOR) ' Se obtienen la rotación del sistema de visión
respecto del sistema del robot
230 M_RVBETG=DEG(M_RVBETA) ' Valor en grados para monitorización
240 '
250 M_CLVST=4
' Paso 4 realizado
260 HLT
P_CLV2B=(+418.417,-284.882,+149.513,+0.000,+0.000,-32.846)(4,0)
P_CLV2A=(+673.448,+288.980,+156.002,+0.000,+0.000,-32.846,+0.000,+0.000)(4,0)
P_ORGV=(+571.037,+468.513,+157.575,+0.000,+0.000,+0.000,+0.000,+0.000)(4,0)
P_VA=(+167.000,+125.000,+0.000,+0.000,+0.000,+0.000,+0.000,+0.000)(0,0)
Ingeniería en Automática y Electrónica Industrial
A2-7
Descargar