Calibration
Transformation data are stored and passed using our open-source Python library motion3d, which handles, e.g., the conversion between different transformation representations or the conversion between motions and poses.
For more information, visit the motion3d repository: https://github.com/mhorn11/motion3d
Besides the available scripts, you can also check our unit tests in the test directory or our evaluation scripts in the publications directory for more examples.
Please be aware that the interfaces also might change between different version, as we are still trying to improve the usability. If you have any issues or suggestions, don’t hesitate to write an issue or to contact us directly via e-mail.
Formulations



and
.
Implementation
All supported formulations have their own base class that provides a Factory function, enabling string-based class initialization.
Further, all methods can also be initialized directory using the respective class.
Each class provides a method for setting the input data, e.g., set_transformations() for hand-eye calibration, and a calibrate() method for computing the result.
Furthermore, the configure() method makes it possible to provide additional configuration parameters.
The result contains the estimated calibration, run time, and other auxiliary data.
Furthermore, for most formulations, a corresponding RANSAC (random sample consensus) implementation is provided, which automatically handles the sampling and inlier detection. The RANSAC methods are also child classes of the respective base class of each formulation.
The following pages provide the base class and all child classes for all formulations:
Measurement Conditions
In order to achieve a unique solution, a minimum number of measurements that fulfill specific conditions is required. The following table gives an overview of all formulations:
Formulation |
Input |
Min. Meas. |
Conditions |
|---|---|---|---|
Point Set Registration |
points |
3 |
non-colinear |
Pose Set Registration |
poses |
1 |
|
Point-to-Line Matching |
points, lines |
3 |
non-coplanar points |
Point-to-Plane Matching |
points, planes |
? |
? |
Hand-Eye Calib. |
motions |
2 |
non-parallel rotation axes |
HERW Calib. |
poses |
3 |
non-parallel inter-pose rotation axes |
Especially the non-parallel rotation axes for hand-eye and hand-eye robot-world calibration can often not be achieved, e.g., when calibrating sensor mounted on vehicles with planar motion. Hence, a unique solution is not possible in this case without incorporating a priori knowledge. More details on this issue are given in [horn2023user]. The next section describes extensions that enable hand-eye and hand-eye robot-world calibration with planar motion data.
Extensions
DualQuaternionQCQPPlanarDualQuaternionQCQPDualQuaternionQCQPSignSampling,
DualQuaternionQCQPSeparableInit,
DualQuaternionQCQPSeparableRANSACInitScripts
The scripts/calibration directory provides scripts for most of the supported calibration formulations.
The inputs are provided as motion3d files.
The respective calibration method settings are provided as configuration file.
For hand-eye and hand-eye robot-world calibration with known translation norm, the required a priori knowledge is provided using an additional file.
Example configurations and norm file templates are provided in the scripts/calibration/configs directory.
The following page provides details on the output format: