由于手眼标定不佳(单位使用了米而不是毫米),触碰测试不安全。

问题

手眼标定结果很差,进行触碰测试是不安全的。

手眼变换

手眼残差

投影验证

触碰测试

不安全

手眼标定结果不佳的示例

手眼变换矩阵看起来不正确,因为它的几个值与物理测量值相差极大,对于这种设置来说不合理。

手眼变换矩阵

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

数值 457.970 应约为 130 mm,而 375.305 则大致为 90 mm。现阶段我们忽略正负号(+/-),因为它取决于坐标系的定义;我们仅关注距离大小。

../../_images/eye_in_hand_approximate_hand_eye_matrix.png

标定的残差也明显大于预期,高出几个数量级。

残差

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

通过投影验证失败,这表明手眼标定不正确,触碰测试将会严重失败。

../../_images/projection_verification_bad.png

潜在原因

用于手眼标定的机器人位姿(平移分量)以 为单位提供。

大多数工业机器人默认使用米作为机器人位姿单位。然而,Zivid 点云的单位是毫米。为了获得正确的手眼标定结果,用于手眼标定的机器人位姿和点云必须使用相同的单位。如果机器人位姿单位为米,而点云单位为毫米,则必然会导致手眼标定结果不佳,并生成完全错误的手眼变换矩阵。

警告

ROS 使用国际单位制 (SI),因此 ROS 主题中返回的机器人位姿数据以 为单位。如果您通过 ROS 采集机器人位姿数据,请在运行手眼标定之前将位移分量转换为毫米。

潜在解决方案

  1. 请确保机器人输入位姿的单位为 毫米

    注意:如果机器人位姿的平移分量以米为单位,则只需将其除以 1000 即可将其转换为毫米。

  2. 使用相同的数据集(机器人位姿以毫米为单位)重复手眼标定。

  3. 验证手眼标定结果(变换矩阵、残差、投影)。

  4. 运行触碰测试(如果手眼标定结果良好)。

../../_images/touching-test-result-aruco.jpg
重现问题(机器人位姿单位显示为米而不是毫米)

良好的数据集

使用下图所示的数据集成功进行了手眼标定。

../../_images/hand-eye-calibration-small-movements-dataset.png

标定结果如下:

手眼变换矩阵

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

通过触碰测试验证了手眼标定。

../../_images/touch_test_correct.png

触碰测试成功,证实了手眼标定的正确性和准确性。

错误数据集(机器人位姿单位为米而非毫米)

为了模拟该问题,将手眼标定数据集中输入机器人位姿的平移向量从毫米转换为米。然后,使用修改后的机器人位姿对同一数据集再次进行手眼标定。

标定结果如下:

手眼变换矩阵

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

投影验证失败,表明手眼标定不正确,触碰测试将会严重失败。因此,出于安全考虑,跳过了触碰测试。

../../_images/projection_verification_bad.png

比较

下表比较了手眼变换矩阵(平移值)和手眼标定残差之间的结果。

手眼变换矩阵中的转换值

数据集

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