Touch Test Unsafe to perform due to Bad Hand-Eye Calibration (Meters instead of Millimeters)
Problem
The hand-eye calibration results are bad, and it is unsafe to perform the touch test.
Hand-Eye Transform |
Hand-Eye Residuals |
Projection Verification |
Touch Test |
|---|---|---|---|
Bad |
Bad |
Bad |
Unsafe |
Example of bad hand-eye calibration results
The Hand-Eye Transformation Matrix does not look correct because several of its values differ from the physical measurements by extremely large amounts that are not reasonable for this setup.
0.971 |
-0.214 |
-0.108 |
-1.683 |
-0.019 |
0.380 |
-0.925 |
375.305 |
0.239 |
0.900 |
0.365 |
457.970 |
0 |
0 |
0 |
1 |
The value 457.970 should be approximately 130 mm, and the value 375.305 should be roughly 90 mm. At this stage we ignore the sign (+/-), because it depends on the coordinate-system definitions; we focus only on the distances.
The calibration residuals are also significantly larger than expected, a couple of orders of magnitude higher.
N (Poses) |
Rot. avg (°) |
Rot. max (°) |
Trans. avg (mm) |
Trans. max (mm) |
|---|---|---|---|---|
14 |
5.247 |
12.851 |
135.333 |
760.322 |
For smaller robots, we expect the residuals to in the sub-millimeter range, while for larger robots, the residuals can be in the millimeter range. As for the rotational component of the residuals, we expect them to be in the sub-degree range.
Complete Residuals
Pose |
Rotation (°) |
Translation (mm) |
|---|---|---|
1 |
0.948 |
760.322 |
2 |
0.746 |
92.317 |
3 |
2.557 |
177.495 |
4 |
9.364 |
167.930 |
5 |
10.202 |
174.986 |
6 |
0.951 |
55.776 |
7 |
10.514 |
65.690 |
8 |
12.851 |
69.575 |
9 |
2.470 |
70.544 |
10 |
2.625 |
81.236 |
11 |
0.927 |
43.069 |
12 |
2.134 |
32.829 |
13 |
10.851 |
44.558 |
14 |
6.316 |
58.329 |
Verification by Projection fails, which suggest that the hand-eye calibration is not correct, and that the touch test will fail badly.
Potential Cause
The robot poses (translation component) for the Hand-Eye Calibration are provided in meters.
Most industrial robots use meters as the default unit for the robot poses. However, Zivid point clouds are given in millimeters. To have a correct hand-eye calibration, the robot input poses for hand-eye calibration and point clouds must expressed in the same units. Having the robot poses in meters and the point clouds in millimeters is destined to lead to a bad hand-eye calibration with completely incorrect hand-eye transformation matrix.
경고
ROS standardizes on SI units, so robot poses from ROS topics use meters. If you collect robot poses via ROS, convert the translation components to millimeters before running hand-eye calibration.
Potential Solution
Ensure the robot input poses are in millimeters.
Note: You can just divide the translation component of the robot poses by 1000 if they are in meters, to convert them to millimeters.
Repeat the hand-eye calibration using the same dataset (with robot poses in millimeters).
Verify the hand-eye calibration results (transform, residuals, projection).
Run the touch test (if the hand-eye calibration results are good).
Reproducing the Issue (Robot Pose in Meters instead of Millimeters)
Good Dataset
A hand-eye calibration was successfully performed using the dataset shown in the images below.
The calibration resulted in the following results:
0.999 |
-0.004 |
0.043 |
-55.476 |
0.004 |
1.000 |
0.013 |
-91.613 |
-0.043 |
-0.013 |
0.999 |
128.667 |
0 |
0 |
0 |
1 |
N (Poses) |
Rot. avg (°) |
Rot. max (°) |
Trans. avg (mm) |
Trans. max (mm) |
|---|---|---|---|---|
14 |
0.019 |
0.029 |
0.144 |
0.222 |
Complete Residuals
Pose |
Rotation (°) |
Translation (mm) |
|---|---|---|
1 |
0.026 |
0.071 |
2 |
0.013 |
0.218 |
3 |
0.020 |
0.146 |
4 |
0.026 |
0.222 |
5 |
0.026 |
0.181 |
6 |
0.007 |
0.114 |
7 |
0.007 |
0.128 |
8 |
0.015 |
0.066 |
9 |
0.023 |
0.110 |
10 |
0.010 |
0.113 |
11 |
0.024 |
0.149 |
12 |
0.023 |
0.175 |
13 |
0.029 |
0.184 |
14 |
0.022 |
0.132 |
The Hand-Eye calibration was verified with a touch test.
The touch test was successful, which confirms that the hand-eye calibration is correct and accurate.
Bad Dataset (robot poses in meters instead of millimeters)
To simulate the problem, translation vectors from the input robot poses in the hand-eye calibration dataset were converted from millimeters to meters. Hand-Eye calibration was performed again on the same dataset with modified robot poses.
The calibration resulted in the following results:
0.971 |
-0.214 |
-0.108 |
-1.683 |
-0.019 |
0.380 |
-0.925 |
375.305 |
0.239 |
0.900 |
0.365 |
457.970 |
0 |
0 |
0 |
1 |
N (Poses) |
Rot. avg (°) |
Rot. max (°) |
Trans. avg (mm) |
Trans. max (mm) |
|---|---|---|---|---|
14 |
5.247 |
12.851 |
135.333 |
760.322 |
Complete Residuals
Pose |
Rotation (°) |
Translation (mm) |
|---|---|---|
1 |
0.948 |
760.322 |
2 |
0.746 |
92.317 |
3 |
2.557 |
177.495 |
4 |
9.364 |
167.930 |
5 |
10.202 |
174.986 |
6 |
0.951 |
55.776 |
7 |
10.514 |
65.690 |
8 |
12.851 |
69.575 |
9 |
2.470 |
70.544 |
10 |
2.625 |
81.236 |
11 |
0.927 |
43.069 |
12 |
2.134 |
32.829 |
13 |
10.851 |
44.558 |
14 |
6.316 |
58.329 |
Verification by Projection failed, which suggests that the hand-eye calibration is not correct, and that the touch test will fail badly. Therefore, the touch test was skipped for safety reasons.
Comparisons
The results between hand-eye transformation matrices (translation values) and hand-eye calibration residuals are compared in the tables below.
Dataset |
X (mm) |
Y (mm) |
Z (mm) |
|---|---|---|---|
Good (Poses in mm) |
-55.476 |
-91.613 |
128.667 |
Bad (Poses in m) |
-1.683 |
375.305 |
457.970 |
Δ (Good - Bad) |
-53.793 |
-466.918 |
-329.303 |
Dataset |
N |
Rot. avg (°) |
Rot. max (°) |
Trans. avg (mm) |
Trans. max (mm) |
|---|---|---|---|---|---|
Good (Poses in mm) |
14 |
0.019 |
0.029 |
0.144 |
0.222 |
Bad (Poses in m) |
14 |
5.247 |
12.851 |
135.333 |
760.322 |