由于手眼标定不佳(单位使用了米而不是毫米),触碰测试不安全。
问题
The hand-eye calibration results are bad, and it is unsafe to perform the touch test.
手眼变换 |
手眼残差 |
投影验证 |
触碰测试 |
|---|---|---|---|
差 |
差 |
差 |
不安全 |
If robot poses were entered in meters instead of millimeters, convert them to millimeters and repeat the hand-eye calibration (see Potential Solution below).
手眼标定结果不佳的示例
手眼变换矩阵看起来不正确,因为它的几个值与物理测量值相差极大,对于这种设置来说不合理。
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 |
For this setup, the value 457.970 is expected to be approximately 130 mm, and the value 375.305 is expected to be roughly 90 mm (the expected values depend on your camera-to-calibration-object geometry). At this stage we ignore the sign (+/-), because it depends on the coordinate-system definitions; we focus only on the distances.
标定的残差也明显大于预期,高出几个数量级。
N(位姿) |
平均旋转角度(°) |
最大旋转角度(°) |
平均平移残差(mm) |
最大平移残差(mm) |
|---|---|---|---|---|
14 |
5.247 |
12.851 |
135.333 |
760.322 |
For smaller robots, we expect the residuals to be 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.
全部的残差数据
位姿 |
旋转角度(°) |
平移量(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 |
通过投影验证失败,这表明手眼标定不正确,触碰测试将会严重失败。
潜在原因
用于手眼标定的机器人位姿(平移分量)以 米 为单位提供。
大多数工业机器人默认使用米作为机器人位姿单位。然而,Zivid 点云的单位是毫米。为了获得正确的手眼标定结果,用于手眼标定的机器人位姿和点云必须使用相同的单位。如果机器人位姿单位为米,而点云单位为毫米,则必然会导致手眼标定结果不佳,并生成完全错误的手眼变换矩阵。
警告
ROS 使用国际单位制 (SI),因此 ROS 主题中返回的机器人位姿数据以 米 为单位。如果您通过 ROS 采集机器人位姿数据,请在运行手眼标定之前将位移分量转换为毫米。
潜在解决方案
请确保机器人输入位姿的单位为 毫米 。
Note: You can divide the translation component of the robot poses by 1000 if they are in meters, to convert them to millimeters.
使用相同的数据集(机器人位姿以毫米为单位)重复手眼标定。
验证手眼标定结果(变换矩阵、残差、投影)。
运行触碰测试(如果手眼标定结果良好)。
重现问题(机器人位姿单位显示为米而不是毫米)
良好的数据集
使用下图所示的数据集成功进行了手眼标定。
标定结果如下:
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(位姿) |
平均旋转角度(°) |
最大旋转角度(°) |
平均平移残差(mm) |
最大平移残差(mm) |
|---|---|---|---|---|
14 |
0.019 |
0.029 |
0.144 |
0.222 |
全部的残差数据
位姿 |
旋转角度(°) |
平移量(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 |
通过触碰测试验证了手眼标定。
触碰测试成功,证实了手眼标定的正确性和准确性。
错误数据集(机器人位姿单位为米而非毫米)
为了模拟该问题,将手眼标定数据集中输入机器人位姿的平移向量从毫米转换为米。然后,使用修改后的机器人位姿对同一数据集再次进行手眼标定。
标定结果如下:
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(位姿) |
平均旋转角度(°) |
最大旋转角度(°) |
平均平移残差(mm) |
最大平移残差(mm) |
|---|---|---|---|---|
14 |
5.247 |
12.851 |
135.333 |
760.322 |
全部的残差数据
位姿 |
旋转角度(°) |
平移量(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.
比较
下表比较了手眼变换矩阵(平移值)和手眼标定残差之间的结果。
数据集 |
X (mm) |
Y (mm) |
Z (mm) |
|---|---|---|---|
好(位姿单位为毫米) |
-55.476 |
-91.613 |
128.667 |
差(位姿以米为单位) |
-1.683 |
375.305 |
457.970 |
Δ(好 - 差) |
-53.793 |
-466.918 |
-329.303 |
数据集 |
N |
平均旋转角度(°) |
最大旋转角度(°) |
平均平移残差(mm) |
最大平移残差(mm) |
|---|---|---|---|---|---|
好(位姿单位为毫米) |
14 |
0.019 |
0.029 |
0.144 |
0.222 |
差(位姿以米为单位) |
14 |
5.247 |
12.851 |
135.333 |
760.322 |