hexagon logo

Default Math vs. Least Squares

I have a part that uses 2 cylinders as a common datum. There are multiple features positioned back to the common A-B datum. Using the default math algorithm and the simultaneous tolerance command I get all but one feature to pass. This feature is a diagonal through hole that is controlled in the X direction by a linear dimension and then in Y and Z by the cylindrical datum. Now if I change the datum math to least squares on just this feature it gives me a very good position. I am assuming this is not the correct way unless I change all the other related features to least squares datum math as well. But if I do the other features that were really good position wise with the default datum math now were failing.
I didn't mention that the 2 common datum cylinders also get ground to their final size later after the complete part is made.

Just wondering what you all think would be the best way to evaluate these features and if you can just have least squares math for one but default for the rest of the related positions.

Thanks all.
  • Most of my parts are really tight tolerance aircraft parts that come off of a lathe with an A-B datum structure.

    This is how I handle it:

    -Find part (read point, fixture alignment, whatever) and create a rough alignment thats good enough to "lock" you onto the part. Once you're good...
    -Probe Datum -A- as a cylinder (we'll call it CYL_A)
    -Create a GENERIC point at the START and another generic point at the END of CYL_A
    -Probe Datum -B- as a cylinder (we'll call it CYL_B)
    -Create a GENERIC point at the START and another generic point at the END of CYL_B
    -Construct a 3D line through the 4 points from -A- to -B- (we'll call it LIN_AB)
    -Create new alignment where you LEVEL to LIN_AB as well asset LIN_AB as two of your origins...define the rest of the alignment as you need to

    For the below code, this was a part with an A-B datum structure that had a top ID (-B-) that I could reach with a single probe at A0B0 and a bottom ID (-A-) that was below a lip so I had to measure it in 4 sections with a star probe and then construct the cylinder together



    
    MOVE/CLEARPLANE
    CYL_B =FEAT/CONTACT/CYLINDER/DEFAULT,CARTESIAN,IN,LEAST_SQR
    THEO/<0,0,-0.17313>,<0,0,1>,1.85075,0.43187
    ACTL/<0,0,-0.17313>,<0,0,1>,1.85075,0.43187
    TARG/<0,0,-0.17313>,<0,0,1>
    START ANG=4.3,END ANG=364.3
    ANGLE VEC=<1,0,0>
    DIRECTION=CCW
    SHOW FEATURE PARAMETERS=NO
    SHOW CONTACT PARAMETERS=NO
    
    CYL_A_SUB1 =FEAT/CONTACT/CYLINDER/DEFAULT,CARTESIAN,IN,LEAST_SQR
    THEO/<0,0,-1.27>,<0,0,1>,1.85075,0.47698
    ACTL/<0,0,-1.27>,<0,0,1>,1.85075,0.47698
    TARG/<0,0,-1.27>,<0,0,1>
    START ANG=45,END ANG=135
    ANGLE VEC=<1,0,0>
    DIRECTION=CCW
    SHOW FEATURE PARAMETERS=NO
    SHOW CONTACT PARAMETERS=NO
    
    CYL_A_SUB2 =FEAT/CONTACT/CYLINDER/DEFAULT,CARTESIAN,IN,LEAST_SQR
    THEO/<0,0,-1.27>,<0,0,1>,1.85075,0.47698
    ACTL/<0,0,-1.27>,<0,0,1>,1.85075,0.47698
    TARG/<0,0,-1.27>,<0,0,1>
    START ANG=45,END ANG=135
    ANGLE VEC=<0,1,0>
    DIRECTION=CCW
    SHOW FEATURE PARAMETERS=NO
    SHOW CONTACT PARAMETERS=NO
    
    CYL_A_SUB3 =FEAT/CONTACT/CYLINDER/DEFAULT,CARTESIAN,IN,LEAST_SQR
    THEO/<0,0,-1.27>,<0,0,1>,1.85075,0.47698
    ACTL/<0,0,-1.27>,<0,0,1>,1.85075,0.47698
    TARG/<0,0,-1.27>,<0,0,1>
    START ANG=45,END ANG=135
    ANGLE VEC=<-1,0,0>
    DIRECTION=CCW
    SHOW FEATURE PARAMETERS=NO
    SHOW CONTACT PARAMETERS=NO
    
    CYL_A_SUB4 =FEAT/CONTACT/CYLINDER/DEFAULT,CARTESIAN,IN,LEAST_SQR
    THEO/<0,0,-1.27>,<0,0,1>,1.85075,0.47698
    ACTL/<0,0,-1.27>,<0,0,1>,1.85075,0.47698
    TARG/<0,0,-1.27>,<0,0,1>
    START ANG=45,END ANG=135
    ANGLE VEC=<0,-1,0>
    DIRECTION=CCW
    SHOW FEATURE PARAMETERS=NO
    SHOW CONTACT PARAMETERS=NO
    
    CYL_A =FEAT/CYLINDER,CARTESIAN,IN,MAX_INSC,NO
    THEO/<0,0,-1.50849>,<0,0,1>,1.85075,0.37698
    ACTL/<0,0,-1.50849>,<0,0,1>,1.85075,0.37698
    CONSTR/CYLINDER,BFRE,HITS("CYL_A_SUB1),HITS("CYL_A_SUB2), ,HITS("CYL_A_SUB3),HITS("CYL_A_SUB4)
    
    PNT_CYL_A_START =GENERIC/POINT,DEPENDENT,CARTESIAN,$
    NOM/XYZ,<CYL_A.TX,CYL_A.TY,CYL_A.TSZ>,$
    MEAS/XYZ,<CYL_A.X,CYL_A.Y,CYL_A.SZ>,$
    NOM/IJK,<0*1,0*1,1*1>,$
    MEAS/IJK,<0*1,0*1,1*1>
    
    PNT_CYL_A_END =GENERIC/POINT,DEPENDENT,CARTESIAN,$
    NOM/XYZ,<CYL_A.TX,CYL_A.TY,CYL_A.TEZ>,$
    MEAS/XYZ,<CYL_A.X,CYL_A.Y,CYL_A.EZ>,$
    NOM/IJK,<0*1,0*1,1*1>,$
    MEAS/IJK,<0*1,0*1,1*1>
    
    PNT_CYL_B_START =GENERIC/POINT,DEPENDENT,CARTESIAN,$
    NOM/XYZ,<CYL_B.TX,CYL_B.TY,CYL_B.TSZ>,$
    MEAS/XYZ,<CYL_B.X,CYL_B.Y,CYL_B.SZ>,$
    NOM/IJK,<0*1,0*1,1*1>,$
    MEAS/IJK,<0*1,0*1,1*1>
    
    PNT_CYL_B_END =GENERIC/POINT,DEPENDENT,CARTESIAN,$
    NOM/XYZ,<CYL_B.TX,CYL_B.TY,CYL_B.TEZ>,$
    MEAS/XYZ,<CYL_B.X,CYL_B.Y,CYL_B.EZ>,$
    NOM/IJK,<0*1,0*1,1*1>,$
    MEAS/IJK,<0*1,0*1,1*1>
    
    LIN_AB =FEAT/LINE,CARTESIAN,UNBOUNDED,YES
    THEO/<0,0,-0.06198>,<0,0,1>
    ACTL/<0,0,-0.06198>,<0,0,1>
    CONSTR/LINE,BF,3D,PNT_CYL_A_START,PNT_CYL_A_END,PNT_CYL_B _END,PNT_CYL_B_START,,
    OUTLIER_REMOVAL/OFF,3
    FILTER/OFF,WAVELENGTH=0
    
    ALI_AB_CMMWCS =ALIGNMENT/START,RECALL:STARTUP,LIST=YES
    ALIGNMENT/LEVEL,ZPLUS,LIN_AB
    ALIGNMENT/ROTATE,XPLUS,TO,PLN_WCS_XP_POS1,ABOUT,ZPLUS
    ALIGNMENT/TRANS,XAXIS,LIN_AB
    ALIGNMENT/TRANS,YAXIS,LIN_AB
    ALIGNMENT/TRANS,ZAXIS,PLN_C
    ALIGNMENT/END
    
    
  • I guess I should have specified Default vs. Least Squares math in GeoTol, and if changing one feature in a simultaneous call out to least squares for the datum math would be kosher or not.
  • Thanks Dan. That is an interesting way to do it. I may use that.
  • It depends on how tight the size & form tolerance is for the datums, your point spacing / hit density and how accurate your CMM & sensor is. If you read the detailed information in the help files it explains that for cases where the uncertainty of your system is close to or exceeding the expected form values, it may be advantageous to use LSQ. This is generally the case for laser measurements for example, where there is a comparatively large uncertainty (when compared to other sensors) and high point density. This combination of "noise" in the data and high numbers of points can lead to longer calculation times and less repeatable results if DEFAULT math is chosen. LSQ will average out the noise, leading to more repeatable results and generally yields faster calculation times because it does not have to iterate through all the hits trying to optimize the fit.

    Ultimately, there is no exact answer we can give you. You need to perform your own tests to determine what is acceptable for the types of features you are measuring and how your particular system behaves.

    Obviously, if you want to fully comply to the standards you need to select DEFAULT because that is what the standards define.
  • , the standards that neil.challinor is referring to is ASME vs ISO. In my experience, ASME will refer to MAX INSCRIBED fit for internal holes and MIN CIRCUMSCRIBED for external holes/cylinders. ISO standard is LEAST SQUARES fit. This has caused me lots of grief.

    Also, I handle simultaneous differently than (not sure if it's better or worse, but just differently). **After typing out what I do, I realized that Dan's method is better, and deleted my entire comment...Blush) Now I have to change my other programs...Angry
  • Thanks everyone for the input. I have always measured to the standard (ASME) so I know DEFAULT uses the correct math. I will just have to decide what we can live with for the datums since the get turned down to their correct size after the machining process is complete. So for this case using the Least Squares math for the 2 Datum cylinders may be ok.
  • When checking runout on shafts (and the like) I always verify my measurements on V-blocks or between centers, just as a gut check. The CMM is not the end all gauge. A simple bench center and and indicator can tell you a lot about your part, and it can be done on the shop floor.
  • Thanks Neil. I have read those documents. I also was at a user group meeting last month where Rob Jensen was discussing the new algorithms that GeoTol will be using in the newest release this month. I appreciate the feedback.
  • Ok, that's great. I was due to present at that user group meeting myself but had to drop out at the last moment due to health issues. I'm sure Rob did an excellent job though, we've been working closely together for the last three or four years and I'm constantly amazed at the depth of knowledge that guy has.