Hand to eye calibration results from different methods

Hi,

I am trying to do Hand-to-eye calibration using the method calibrateHandEye().
I compared the result from different methods available in the method and the results are not consistent. I used the checker board pattern as target.

The following is the result from different methods:

Manually measured ground truth of translation vector is [0.22, 0.55, 0.92].

CALIB_HAND_EYE_TSAI: TF_cam2base: 
[-0.9800233284861961, -0.04351490022716789, -0.1940637242790549, 0.217982230472062;
 0.1985522161757132, -0.1578524110827579, -0.9672950086540677, 0.4821403501516119;
 0.01145831901067088, -0.9865034565441622, 0.1633390251956652, 0.9301016632237847;
 0, 0, 0, 1]
CALIB_HAND_EYE_PARK : TF_cam2base: 
[-0.9993732008109768, -0.01184283170367196, -0.03336094779926747, 0.1449837237004261;
 0.03467121421092781, -0.1371209755713469, -0.9899473445408721, 0.5014249460811556;
 0.007149294088673792, -0.9904835109155541, 0.1374456336099198, 0.9163866670596934;
 0, 0, 0, 1]
CALIB_HAND_EYE_HORAUD : TF_cam2base: 
[-0.9993738808041648, -0.01178355541934626, -0.03336156753064838, 0.1449803983239057;
 0.03466424921915726, -0.1372004777710426, -0.9899365730820685, 0.5014361065115749;
 0.007087749466154416, -0.9904732084822266, 0.1375230420199766, 0.9163582931605142;
 0, 0, 0, 1]
CALIB_HAND_EYE_ANDREFF : TF_cam2base: 
[-0.9993743780003499, -0.01269522783032316, -0.03301035877947404, 0.1407796830242312;
 0.0344267143431654, -0.1353541839642536, -0.9901989932447443, 0.47598388979304;
 0.008102711641635814, -0.9907159411626054, 0.1357065583910577, 0.9013789661553735;
 0, 0, 0, 1]
CALIB_HAND_EYE_DANIILIDIS : TF_cam2base: 
[-0.9991364274987548, -0.01055703026510907, -0.0401864200571095, 0.147431232948344;
 0.04139066222937648, -0.1682765227699634, -0.9848704610072653, 0.5143066184832382;
 0.003634876234282113, -0.9856832964986427, 0.168568166266143, 0.8731462125069626;
 0, 0, 0, 1]

1)Can I know why the result from different methods is different ?
2)I observe that the calibration result is wrong if the checker pattern origin is detected differently in different poses. In all poses if the same corner is detected as origin of the checkerboard only then the result is reasonable, otherwise the result is wrong. Is it a constraint for this method ?

Thank you.

Hi @shaik

  1. results are similar; they are different because they are computed with different methods. Measurements are never perfect, they never have infinite precision, and that disparity is called “error”. Each method has a different response to the error, leading to slightly different results.

  2. You should use a non symmetrical pattern. The checkerboard pattern is never an actual checkerboard. The problem with symmetrical patterns is that it is impossible to tell which one is the origin.

Hi @Alejandro_Silvestri ,

Thanks for your reply.

  1. Results are different, but the difference between shouldn’t be much. For example, value of x in translation vector from one method is 0.21 whereas other methods calculate it as 0.14.
  2. I will use a non-symmetric target.

Thanks.