手眼标定结果不理想(手动输入机器人位姿时出错)
问题
手眼标定结果不理想(差或勉强合格),看起来像是以下几种组合之一:
手眼变换 |
手眼残差 |
投影验证 |
触碰测试 |
|---|---|---|---|
差 |
差 |
差 |
不安全 |
合理的 |
差 |
差 |
差 |
合理的 |
尚可 |
差 |
差 |
合理的 |
好 |
欠佳 |
尚可 |
手眼标定结果不佳的示例
手眼变换矩阵看起来不正确,因为它的几个值与物理测量值相差极大,对于这种设置来说不合理。
0.609 |
0.177 |
0.773 |
-467.320 |
-0.109 |
0.984 |
-0.140 |
17.581 |
-0.785 |
0.001 |
0.619 |
794.894 |
0 |
0 |
0 |
1 |
数值 794.894 应大约为 130 mm,而 17.581 应大致为 90 mm。现阶段我们先忽略正负号(+/-),因为它取决于坐标系的定义;我们仅关注距离大小。
标定残差也明显大于预期,高出几个数量级。
N(位姿) |
平均旋转角度(°) |
最大旋转角度(°) |
平均平移残差(mm) |
最大平移残差(mm) |
|---|---|---|---|---|
11 |
2.855 |
10.677 |
102.330 |
405.720 |
对于小型机器人,我们预计残差在亚毫米范围内;而对于大型机器人,残差则在毫米范围内。至于残差的旋转分量,我们预计其在亚度范围内。
全部的残差数据
位姿 |
旋转角度(°) |
平移量(mm) |
|---|---|---|
1 |
1.685 |
405.720 |
2 |
1.816 |
90.325 |
3 |
0.215 |
74.578 |
4 |
1.901 |
143.061 |
5 |
2.296 |
21.398 |
6 |
10.678 |
94.157 |
7 |
5.541 |
102.133 |
8 |
0.235 |
40.173 |
9 |
3.979 |
48.811 |
10 |
1.894 |
76.962 |
11 |
1.177 |
28.309 |
通过投影验证失败,这表明手眼标定不正确,触碰测试将会严重失败。
临界状态的手眼标定结果示例
手眼变换矩阵看起来合理,与粗略的手动测量结果一致(见下表和图像)。
0.999 |
-0.003 |
0.040 |
-54.871 |
0.002 |
0.999 |
0.029 |
-90.920 |
-0.040 |
-0.029 |
0.999 |
128.709 |
0 |
0 |
0 |
1 |
校准残差在可接受的范围内,表明优化已成功收敛。
N(位姿) |
平均旋转角度(°) |
最大旋转角度(°) |
平均平移残差(mm) |
最大平移残差(mm) |
|---|---|---|---|---|
11 |
0.027 |
0.059 |
0.160 |
0.388 |
对于小型机器人,我们预计残差在亚毫米范围内;而对于大型机器人,残差则在毫米范围内。至于残差的旋转分量,我们预计其在亚度范围内。
全部的残差数据
位姿 |
旋转角度(°) |
平移量(mm) |
|---|---|---|
1 |
0.025 |
0.388 |
2 |
0.016 |
0.270 |
3 |
0.021 |
0.098 |
4 |
0.028 |
0.197 |
5 |
0.014 |
0.057 |
6 |
0.056 |
0.154 |
7 |
0.018 |
0.086 |
8 |
0.019 |
0.230 |
9 |
0.031 |
0.074 |
10 |
0.059 |
0.167 |
11 |
0.015 |
0.043 |
投影验证在技术上是成功的,但产生的误差仍然过大,无法接受。我们应该对投影验证持非常谨慎的态度,因为即使手眼标定不正确,投影误差也可能看起来可以接受。
触碰测试结果不理想(差或勉强合格)。
触感测试工具的尖端对 ArUco 标记施加的压力过大。
触碰测试工具的尖端轻轻按压 ArUco 标记。
潜在原因
将机器人位姿从机器人控制器复制到电脑时出现人为错误(录入错误)。
机器人位姿中的录入错误会导致位姿-图像对不一致,从而破坏手眼标定所需的几何假设。即使是一个很小的错误数字,也足以扭曲一个位姿,使整个优化过程偏离正确解,最终导致残差较大、变换不合理,以及整体标定结果不理想。
潜在解决方案
如果您要手动将机器人控制器中的位姿复制到 PC,请仔细检查数值,确保没有输入错误。
将机器人控制器输出的机器人位姿转换为 Zivid 手眼标定所需的变换矩阵时,确保使用正确的旋转约定。
使用同一数据集重复进行手眼标定。
验证手眼标定结果(变换矩阵、残差、投影)。
运行触碰测试(如果手眼标定结果良好)。
重现问题(手眼标定效果不佳)
良好的数据集
使用下图所示的数据集成功进行了手眼标定。
标定结果如下:
0.999 |
-0.002 |
0.041 |
-55.598 |
0.001 |
0.999 |
0.028 |
-90.654 |
-0.041 |
-0.028 |
0.999 |
129.044 |
0 |
0 |
0 |
1 |
N(位姿) |
平均旋转角度(°) |
最大旋转角度(°) |
平均平移残差(mm) |
最大平移残差(mm) |
|---|---|---|---|---|
11 |
0.025 |
0.054 |
0.109 |
0.192 |
全部的残差数据
位姿 |
旋转角度(°) |
平移量(mm) |
|---|---|---|
1 |
0.025 |
0.388 |
2 |
0.016 |
0.270 |
3 |
0.021 |
0.098 |
4 |
0.028 |
0.197 |
5 |
0.014 |
0.057 |
6 |
0.056 |
0.154 |
7 |
0.018 |
0.086 |
8 |
0.019 |
0.230 |
9 |
0.031 |
0.074 |
10 |
0.059 |
0.167 |
11 |
0.015 |
0.043 |
通过触碰测试验证了手眼标定。
触碰测试成功,证实了手眼标定的正确性和准确性。
错误数据集(翻译错误严重)
为了模拟人工手动输入机器人位姿时可能出现的错误,我们在良好数据集中的一个位姿处引入了一个较大的平移误差。平移向量的 X 值从 -742.58 毫米变为 -142.58 毫米(首位整数:7 → 1)。
标定结果如下:
0.609 |
0.177 |
0.773 |
-467.320 |
-0.109 |
0.984 |
-0.140 |
17.581 |
-0.785 |
0.001 |
0.619 |
794.894 |
0 |
0 |
0 |
1 |
N(位姿) |
平均旋转角度(°) |
最大旋转角度(°) |
平均平移残差(mm) |
最大平移残差(mm) |
|---|---|---|---|---|
11 |
2.855 |
10.677 |
102.330 |
405.720 |
全部的残差数据
位姿 |
旋转角度(°) |
平移量(mm) |
|---|---|---|
1 |
1.685 |
405.720 |
2 |
1.816 |
90.325 |
3 |
0.215 |
74.578 |
4 |
1.901 |
143.061 |
5 |
2.296 |
21.398 |
6 |
10.678 |
94.157 |
7 |
5.541 |
102.133 |
8 |
0.235 |
40.173 |
9 |
3.979 |
48.811 |
10 |
1.894 |
76.962 |
11 |
1.177 |
28.309 |
投影验证失败,表明手眼标定不正确,触碰测试将会严重失败。因此,出于安全考虑,跳过了触碰测试。
比较
下表比较了手眼标定矩阵(平移值)和手眼标定残差的结果。
数据集 |
X (mm) |
Y (mm) |
Z (mm) |
|---|---|---|---|
好 |
-55.598 |
-90.654 |
129.044 |
差(非常大的平移误差) |
-467.320 |
17.581 |
794.894 |
Δ(好 - 差) |
411.722 |
-108.235 |
-665.850 |
数据集 |
N |
平均旋转角度(°) |
最大旋转角度(°) |
平均平移残差(mm) |
最大平移残差(mm) |
|---|---|---|---|---|---|
好 |
11 |
0.025 |
0.054 |
0.109 |
0.192 |
差(非常大的平移误差) |
11 |
2.855 |
10.677 |
102.330 |
405.720 |
重现问题(手眼标定结果尚可)
良好的数据集
使用下图所示的数据集成功进行了手眼标定。
标定结果如下:
0.999 |
-0.002 |
0.041 |
-55.598 |
0.001 |
0.999 |
0.028 |
-90.654 |
-0.041 |
-0.028 |
0.999 |
129.044 |
0 |
0 |
0 |
1 |
N(位姿) |
平均旋转角度(°) |
最大旋转角度(°) |
平均平移残差(mm) |
最大平移残差(mm) |
|---|---|---|---|---|
11 |
0.025 |
0.054 |
0.109 |
0.192 |
全部的残差数据
位姿 |
旋转角度(°) |
平移量(mm) |
|---|---|---|
1 |
0.025 |
0.388 |
2 |
0.016 |
0.270 |
3 |
0.021 |
0.098 |
4 |
0.028 |
0.197 |
5 |
0.014 |
0.057 |
6 |
0.056 |
0.154 |
7 |
0.018 |
0.086 |
8 |
0.019 |
0.230 |
9 |
0.031 |
0.074 |
10 |
0.059 |
0.167 |
11 |
0.015 |
0.043 |
通过触碰测试验证了手眼标定。
触碰测试成功,证实了手眼标定的正确性和准确性。
错误数据集
为了模拟人工手动输入机器人位姿时出现的录入错误,我们对原始数据集进行了修改,通过三种不同的方式引入错误,从而得到了三个新的数据集:
在记录某个位姿的其中一个 Roll-Pitch-Yaw 角度时,出现了一个微小的角度误差(即小数点后的第一位数字输错)。例如,Yaw 值被错误地从 6.82° 改成了 6.22°(小数点后第一位由 8 变成了 2)。
在记录某个位姿的其中一个 Roll-Pitch-Yaw 角度时,出现了一个较大的角度误差(即整数部分的第一位数字输错)。例如,偏航 Yaw 值被错误地从 6.93° 改成了 3.93°(首位整数由 6 变成了 3)。
在记录某个位姿的平移向量时,出现了一个微小的平移误差(即小数点后的第一位数字输错)。例如,X 轴的值被错误地从 -48.81 改成了 -48.21(小数点后第一位由 8 变成了 2)。
标定结果如下:手眼矩阵和残差如下:
0.999 |
-0.002 |
0.044 |
-57.032 |
0.001 |
1.000 |
0.029 |
-90.899 |
-0.044 |
-0.029 |
0.999 |
129.580 |
0 |
0 |
0 |
1 |
0.999 |
0.005 |
0.047 |
-58.558 |
-0.006 |
1.000 |
0.029 |
-87.455 |
-0.047 |
-0.029 |
0.998 |
131.117 |
0 |
0 |
0 |
1 |
0.999 |
-0.003 |
0.040 |
-54.871 |
0.002 |
1.000 |
0.029 |
-90.920 |
-0.040 |
-0.029 |
0.999 |
128.709 |
0 |
0 |
0 |
1 |
残差
数据集 |
N |
平均旋转角度(°) |
最大旋转角度(°) |
平均平移残差(mm) |
最大平移残差(mm) |
|---|---|---|---|---|---|
小角度误差 |
11 |
0.104 |
0.536 |
0.256 |
0.877 |
全部的残差数据
位姿 |
旋转角度(°) |
平移量(mm) |
|---|---|---|
1 |
0.536334 |
0.877 |
2 |
0.055345 |
0.431 |
3 |
0.057495 |
0.189 |
4 |
0.064677 |
0.301 |
5 |
0.054738 |
0.115 |
6 |
0.059730 |
0.029 |
7 |
0.070040 |
0.238 |
8 |
0.062262 |
0.119 |
9 |
0.060767 |
0.069 |
10 |
0.060585 |
0.288 |
11 |
0.062108 |
0.160 |
数据集 |
N |
平均旋转角度(°) |
最大旋转角度(°) |
平均平移残差(mm) |
最大平移残差(mm) |
|---|---|---|---|---|---|
大角度误差 |
11 |
0.505 |
2.742 |
0.966 |
4.393 |
全部的残差数据
位姿 |
旋转角度(°) |
平移量(mm) |
|---|---|---|
1 |
2.742018 |
4.393 |
2 |
0.280878 |
1.050 |
3 |
0.269892 |
0.750 |
4 |
0.288396 |
1.053 |
5 |
0.291592 |
0.435 |
6 |
0.247856 |
0.691 |
7 |
0.315325 |
0.886 |
8 |
0.278548 |
0.410 |
9 |
0.297165 |
0.382 |
10 |
0.262904 |
0.314 |
11 |
0.285421 |
0.262 |
数据集 |
N |
平均旋转角度(°) |
最大旋转角度(°) |
平均平移残差(mm) |
最大平移残差(mm) |
|---|---|---|---|---|---|
小平移错误 |
11 |
0.027 |
0.059 |
0.160 |
0.388 |
全部的残差数据
位姿 |
旋转角度(°) |
平移量(mm) |
|---|---|---|
1 |
0.025433 |
0.388 |
2 |
0.016149 |
0.270 |
3 |
0.021316 |
0.098 |
4 |
0.027773 |
0.197 |
5 |
0.013938 |
0.057 |
6 |
0.056120 |
0.154 |
7 |
0.018387 |
0.086 |
8 |
0.019042 |
0.230 |
9 |
0.031110 |
0.074 |
10 |
0.059334 |
0.167 |
11 |
0.014671 |
0.043 |
比较
下表比较了手眼标定矩阵(平移值)和手眼标定残差的结果。
数据集 |
X (mm) |
Y (mm) |
Z (mm) |
|---|---|---|---|
好 |
-55.598 |
-90.654 |
129.044 |
差(小角度误差) |
-57.032 |
-90.899 |
129.580 |
Δ(好 - 差) |
1.434 |
0.244 |
-0.536 |
数据集 |
X (mm) |
Y (mm) |
Z (mm) |
|---|---|---|---|
好 |
-55.598 |
-90.654 |
129.044 |
差(大角度误差) |
-58.558 |
-87.455 |
131.117 |
Δ(好 - 差) |
2.960 |
-3.199 |
-2.073 |
数据集 |
X (mm) |
Y (mm) |
Z (mm) |
|---|---|---|---|
好 |
-55.598 |
-90.654 |
129.044 |
差(小平移误差) |
-54.871 |
-90.920 |
128.709 |
Δ(好 - 差) |
-0.727 |
0.265 |
0.335 |
残差
数据集 |
N |
平均旋转角度(°) |
最大旋转角度(°) |
平均平移残差(mm) |
最大平移残差(mm) |
|---|---|---|---|---|---|
好 |
11 |
0.025 |
0.054 |
0.109 |
0.192 |
差(小角度误差) |
11 |
0.104 |
0.536 |
0.256 |
0.877 |
数据集 |
N |
平均旋转角度(°) |
最大旋转角度(°) |
平均平移残差(mm) |
最大平移残差(mm) |
|---|---|---|---|---|---|
好 |
11 |
0.025 |
0.054 |
0.109 |
0.192 |
差(大角度误差) |
11 |
0.505 |
2.742 |
0.966 |
4.393 |
数据集 |
N |
平均旋转角度(°) |
最大旋转角度(°) |
平均平移残差(mm) |
最大平移残差(mm) |
|---|---|---|---|---|---|
好 |
11 |
0.025 |
0.054 |
0.109 |
0.192 |
差(小平移误差) |
11 |
0.027 |
0.059 |
0.160 |
0.388 |
触碰测试
触碰测试工具的尖端无法触及 ArUco 标记。
触感测试工具的尖端对 ArUco 标记施加的压力过大。
触接测试工具的尖端落在了 ArUco 标记的中心位置。