I believe that offsets between contact and cmmv are usually about 0,02 mm, when you use a rotated head. (deviation calculated on center of a pin, at different angles).
If you have a mate (or dull ?) sphere, you can calibrate angles on it, by measuring a point, a circle, construct a sphere and then use "calibrate single tip".
Here is the prog :
LOADPROBE/CMM_VE TIP/T1A0B0, SHANKIJK=0, 0, 1, ANGLE=0 TEMPCOMP/ORIGIN=0,0,0,Material Coeff=0.0000113,Reference Temp=20 ,Hi Threshold=40,Lo Threshold=10,Sensor num=9 ,X Axis Temp=20.4168,Y Axis Temp=20.2186,Z Axis Temp=20.3639,Part Temp=20.4065 AUTOCALIBRATE/PROBE, PARAMETER_SET=A0B0, QUALTOOL_MOVED=NO, SHOW_SUMMARY=NO, OVERWRITE_RESULTSFILE=NO MODE/DCC ASSIGN/V1=QUALTOOLDATA("xyz","sphere_matte") ASSIGN/RADIUS=QUALTOOLDATA("diam","sphere_matte")/2 F1 =GENERIC/POINT,DEPENDENT,CARTESIAN,$ NOM/XYZ,<V1.X,V1.Y,V1.Z>,$ MEAS/XYZ,<V1.X,V1.Y,V1.Z>,$ NOM/IJK,<0,0,1>,$ MEAS/IJK,<0,0,1> REF1 =ALIGNMENT/START,RECALL[emoticon:6D505171FAA4497C85C5CA27290C555D]ÉMARRAGE,LIST=YES ALIGNMENT/TRANS,XAXIS,F1 ALIGNMENT/TRANS,YAXIS,F1 ALIGNMENT/TRANS,ZAXIS,F1 ALIGNMENT/END CLEARP/ZPLUS,350,ZPLUS,0,ON MOVE/CLEARPLANE ASSIGN/ANGLE_A=90 MOVE/CLEARPLANE V2 =LOOP/START,ID=YES,NUMBER=10,START=1,SKIP=, OFFSET:XAXIS=0,YAXIS=0,ZAXIS=0,ANGLE=0 MOVE/CLEARPLANE ASSIGN/STYLET="T1A"+ANGLE_A+"B90" TIP/STYLET, SHANKIJK=0, 0, 1, ANGLE=90 RECALL/ALIGNMENT,INTERNAL, ASSIGN/V3=PROBEDATA("vector") ASSIGN/V4=V1+RADIUS*V3 MOVE/CLEARPLANE PT1 =FEAT/VISION/SURFACE POINT/DEFAULT,CARTESIAN THEO/<V4.X,V4.Y,V4.Z>,<V3.I,V3.J,V3.K> ACTL/<891.406,607.9994,-826.756>,<0.0002228,0.0000678,1> TARG/<V4.X,V4.Y,V4.Z>,<V3.I,V3.J,V3.K> SHOW FEATURE PARAMETERS=NO SHOW_VISION_PARAMETERS=NO ASSIGN/V5=MPOINT(0,-1,0) ASSIGN/V6=CROSS(V4,V5) IF/ANGLE_A>46 ASSIGN/V14=-45 ASSIGN/V15=225 END_IF/ IF/ANGLE_A<46 ASSIGN/V14=0 ASSIGN/V15=360 END_IF/ ASSIGN/V7=PT1.XYZ-RADIUS*V3 CE7 =FEAT/VISION/CIRCLE/DEFAULT,CARTESIAN,OUT,LEAST_SQR THEO/<V7.X,V7.Y,V7.Z>,<V3.I,V3.J,V3.K>,2*RADIUS,V14,V15 ACTL/<891.3937,607.9798,-839.2507>,<0.0002228,0.0000678,1>,24.9905,0.1342,278.6304 TARG/<V7.X,V7.Y,V7.Z>,<V3.I,V3.J,V3.K> ANGLE VEC=<0,-1,0> SHOW FEATURE PARAMETERS=NO SHOW_VISION_PARAMETERS=NO ASSIGN/V8=CE7.XYZ+(RADIUS*V3) PT3 =FEAT/VISION/SURFACE POINT/DEFAULT,CARTESIAN THEO/<V8.X,V8.Y,V8.Z>,<V3.I,V3.J,V3.K> ACTL/<891.3965,607.9806,-826.7523>,<0.0002228,0.0000678,1> TARG/<V8.X,V8.Y,V8.Z>,<V3.I,V3.J,V3.K> SHOW FEATURE PARAMETERS=NO SHOW_VISION_PARAMETERS=NO ASSIGN/V16=PT3.XYZ-(RADIUS*V3) CE6 =FEAT/VISION/CIRCLE/DEFAULT,CARTESIAN,OUT,LEAST_SQR THEO/<V16.X,V16.Y,V16.Z>,<V3.I,V3.J,V3.K>,2*RADIUS,V14,V15 ACTL/<891.3959,607.9791,-839.2474>,<0.0002228,0.0000678,1>,24.9922,90,90 TARG/<V16.X,V16.Y,V16.Z>,<V3.I,V3.J,V3.K> ANGLE VEC=<0,-1,0> SHOW FEATURE PARAMETERS=NO SHOW_VISION_PARAMETERS=NO MOVE/CLEARPLANE SCN1 =FEAT/SET,CARTESIAN THEO/<220.9567,121.2539,-270.002>,<0,0,1> ACTL/<892.8373,609.2642,-839.2239>,<0,0,1> CONSTR/SET,BASIC,CE6.HIT[1..CE6.NUMHITS],PT3,, SPH1 =FEAT/SPHERE,CARTESIAN,OUT,LEAST_SQR,YES THEO/<V1.X,V1.Y,V1.Z>,<0.0000905,0.9999994,-0.0010979>,2*RADIUS ACTL/<891.3959,607.9791,-839.2484>,<0,0,1>,24.9922 CONSTR/SPHERE,BF,SCN1,, DIM LOC1= LOCATION OF SPHERE SPH1 UNITS=MM ,$ GRAPH=OFF TEXT=OFF MULT=10.00 OUTPUT=BOTH HALF ANGLE=NO AX NOMINAL +TOL -TOL MEAS DEV OUTTOL X V1.X 0.0500 -0.0500 891.3959 -0.0073 0.0000 ---#----- Y V1.Y 0.0500 -0.0500 607.9791 -0.0195 0.0000 --#------ Z V1.Z 0.0500 -0.0500 -839.2484 0.0208 0.0000 ------#-- D 2*RADIUS 0.0500 -0.0500 24.9922 -0.0078 0.0000 ---#----- END OF DIMENSION LOC1 CALIBRATE ACTIVE TIP WITH FEAT_ID=SPH1, QUALTOOL_ID=sphere_matte, MOVED=NO AXIS THEO MEAS DEV STD DEV X <V1.X 891.3959 0.0073 Y V1.Y 607.9791 0.0195 Z V1.Z> -839.2484 0.0208 DIAM 2*RADIUS 24.9922 0.0078 0.0010 ASSIGN/ANGLE_A=ANGLE_A-10 LOOP/END RECALL/ALIGNMENT,INTERNAL,REF1
Using "probedata("vector")" and "qualtooldata("XYZ",sphere_matte")" needs to work in startup alignment...
The lateral deviation decrease from 28µm to 8 µm, the focus from 5µm to 1.5µm (average of deviations between contact as reference and optical )measurement)