.PROGRAM cam2shot() ; ptm = 5.8 ; pixel to mm conversion with camera 1 calibriation AREA0.DAT ; ENABLE V.CENTROID, V.2ND.MOMENTS, V.MIN.MAX.RADII, V.SHOW.RECOG, V.SHOW.VERIFY, V.SHOW.BOUNDS, V.SHOW.EDGES, V.PERIMETER PARAMETER V.THRESHOLD[2] = 90 PARAMETER V.MAX.AREA[2] = 100000 PARAMETER V.MIN.AREA[2] = 10000 ; VDEF.AOI 2001 = 3, 10, 20, 620, 450, 0 VDISPLAY (2) 1, 1 ; ; WAIT SIG(1002) TIMER (1) = 0 WAIT TIMER(1) > 1 ; A short delay for the peg to arrive under camera TYPE "Stopping at", TIMER(1), " second." SIGNAL 2 TYPE ; WAIT TIMER(1) > 1.3 VPICTURE (2) 1, 1 WAIT TIMER(1) > 1.5 SIGNAL -2 VWINDOW (2) 2001 ; VLOCATE (2, 2) "?", obj.loc ; IF NOT VFEATURE(1) GOTO 30 ; x = DX(obj.loc) y = DY(obj.loc) min.rad = VFEATURE(46) max.rad = VFEATURE(47) min.rz = VFEATURE(44) ; max.rz = VFEATURE(45) ; IF min.rad > 0.8*max.rad GOTO 20 ; 10 TYPE "Detected a square peg. " dr = min.rz GOTO 25 20 TYPE "Detected a circular peg. " dr = 0 25 dx = x/ptm dy = y/ptm diag = max.rad*2/ptm side = min.rad*2/ptm ; dr = dr+360 dr = dr MOD 90 IF dr < 45 GOTO 28 dr = dr-90 ; 28 TYPE "at x =", dx, " y =", dy, " min.rz =", min.rz TYPE "Diagonal =", diag, " Side =", side, " Grip angle =", dr RETURN 30 TYPE "No object detected." RETURN .END