I have a rig for which I have a pretty good estimate of the static transformation between the camera and a joint based off of the CAD. It has some errors though and I was hoping to fix it by doing a hand eye calibration. So, I started off with generating some data based off of the transformation that I have already. From the papers that I have been reading, they all want to solve the $$AX = XB$$ problem by either converting $A$, $B$ to dual quaternions or simplifying the equation to something like $$ n_A = Xn_B $$ where $n_A$, $n_B$ are the eigenvectors corresponding to the eigenvalue of 1 for the $A$ and $B$ rotations.

After generating the data, I tested if my data collection was correct and I validated it by checking if $AX = XB$ for all of the $A$s and $B$s that I generated. I used the CamOdoCal library to try and solve the problem but I got this -

/hand_eye_calib_node    : 
[ 0.00196822,   -0.457069,    0.889429,    0.143463;
   -0.999965, -0.00813605, -0.00196822,    -1.74257;
  0.00813605,   -0.889394,   -0.457069,   0.0270069;
           0,           0,           0,           1]


/hand_eye_calib_node    : Actual transform
    0         0         1   0.08891
   -1         0         0 -0.070465
    0        -1         0   0.07541
    0         0         0         1

The actual transform is the one that I had based my $A$ and $B$ data on. Then I tried implementing the Tsai-Lenz and Horaud and Dornaika's Nonlinear optimization techniques using LM solver but to no avail. I do not get the correct transformation out of any of the solvers.

So, I was wondering if you could point me to a hand eye calibration library or paper that has worked.


From your data, it is not obvious where the issue is. Can you give more details?

Here is a commonly used hand eye calibration routine written in Matlab: http://lazax.com/www.cs.columbia.edu/~laza/html/Stewart/matlab/handEye.m

(Note that you also need to download the helper function quat2rot.m from the same directory.)

It implements the Tsai-Lenz method.

Generally, a common mistake in hand eye calibration is to provide inverse transformations. Maybe you re-run your routine with one set of transformations inverted?


Not the answer you're looking for? Browse other questions tagged or ask your own question.