Program bbhec is a research implementation of the hand-eye calibration method described in . It also implements enhancements to the original method described in . It is written in C++ and will compile with gcc under a reasonably recent Linux distribution. The program is distributed in the hope it will be useful for research purposes, but without ANY warranty. It is covered by GNU General Public License, either version 3, or (at your option) any later version.
The current version of bbhec is 0.2 and can be downloaded as bbhec-0.2.tgz.
If you use bbhec in your scientific work, please cite as .
To compile bbhec, you will need a reasonably recent Linux distribution with gcc >= 4.0.0. The source code probably won’t compile with any other compiler. Also, it will not compile under Windows, since it uses unix specific system calls. The source code depends on several third party libraries:
To compile a dynamically linked version of bbhec switch to the root directory of the bbhec distribution and simply run
in your favorite shell. A Statically linked version can be build using
You can add compiler and linker flags by setting CPPFLAGS and LDFLAGS environment variables respectively. For finer control over the compilation process edit src/Makefile. For your convenience, two statically linked versions of bbhec are distributed with the source code. These can be found in bin directory as bbhec_static_sse2 and bbhec_static_sse4.1.
There is a couple of things to note about the source code:
bbhec does not install. Just run it from any convenient location. However, in case you are running the multi-core version, make sure that the current working directory is writable and that it is on locally mounted file system. This is because bbhec uses named pipes to communicate with the child processes and will create them in the current working directory. The pipes will be deleted once the parent process exits.
The bbhec binary takes several optional parameters followed by the name of the file containing the input data.
The hand-eye calibration method that bbhec implements requires relative robotic gripper movements and 3D image correspondences. Please see  for more details. The structure of the input file is best explained by an example. Suppose the robotic gripper was commanded into four poses, resulting into n = 3 relative movements
where determined for the first relative movement:
Analogously, m2 = 2 correspondence u21 ↔ v21 and u22 ↔ v22 were determined for the second relative movement
and m3 = 2 correspondences u31 ↔ v31 and u32 ↔ v32 where determined for the third relative movement
The input file describing this configuration should have the following structure:
This structure translates into the following input file:
The program will output the value of the optimal hand-eye calibration as rotational matrix Rx and translational vector tx. It will also output the value of the error of this solution as epsilon_min and the rotation block there this solution has been found opt.block. The following console output is an example of the output returned by bbhec on an synthetically generated experiment exp/syn_180_0.0003.txt:
This output shows the optimal hand-eye calibration