2. 误差来源分析

手眼标定搞了半天,结果精度就是上不去。这种事我遇到过太多次了。

说白了,标定结果不准,不是算法不行,是误差源头没管好。你想想看,一个方程里塞了三四种误差,最后解出来的参数能靠谱吗?

这一章,我就带你把这几个“捣乱分子”一个个揪出来。咱们得知道它们长什么样,才能在后续章节里对症下药。

核心观点:手眼标定的精度上限,取决于三个误差源中最差的那个。别指望算法能“变魔术”,把烂数据变成好结果。

手眼标定三大误差来源 手眼标定结果 机器人运动学误差 DH参数 / 关节零点 / 减速比 相机标定误差 内参 / 畸变 / 外参 特征点提取误差 角点 / 圆心 / 亚像素 💡 误差传递逻辑 • 机器人运动学误差 → 影响末端位姿的准确性 • 相机标定误差 → 影响空间点坐标的准确性 • 特征点提取误差 → 影响数据点的噪声水平 • 三者叠加,最终决定标定矩阵的精度上限

2.1 机器人运动学误差

这是我最头疼的一个误差源。为什么?因为它不是随机噪声,是系统性的。

机器人运动学模型,说白了就是一堆DH参数。但实际装配出来的机器人,跟图纸上的DH参数总有偏差。我见过一台六轴机器人,光零点偏移就差了0.05度,末端位置直接偏了0.3毫米。

⚠ 我曾经踩过的坑:用出厂DH参数直接做手眼标定,结果标出来的手眼矩阵在A点准,转到B点就偏了。折腾了两天,最后发现是机器人第二轴的减速比标称值跟实际差了0.1%。从那以后,我每次做手眼标定前,都会先做一遍机器人运动学标定。

常见的运动学误差包括:

  • DH参数误差:连杆长度、连杆偏距、关节转角、连杆扭角,这四个参数每个都可能偏。
  • 关节零点偏移:编码器零点跟机械零点没对齐。这个影响最大,因为所有关节角度都带了个固定偏置。
  • 减速比误差:谐波减速器或RV减速器的实际减速比跟标称值有微小差异,角度越大误差越明显。
  • 柔性与回差:重载下连杆变形、齿轮间隙,这些在精密标定场景下不能忽略。
误差类型 典型量级 对末端位姿影响 是否可补偿
DH参数误差 0.01~0.1 mm / 0.01°~0.05° 位置偏差随构型变化 是(运动学标定)
关节零点偏移 0.01°~0.1° 末端位置偏移与臂长成正比 是(零点标定)
减速比误差 0.01%~0.1% 角度越大误差越大 是(参数辨识)
柔性与回差 0.01~0.05 mm 与负载和姿态相关 部分可补偿

💡 我的个人习惯:在做手眼标定之前,先用激光跟踪仪或者拉线式测量系统,把机器人的实际运动学参数标一遍。尤其是零点偏移,这个必须搞定。你想想看,如果机器人自己都报不准自己的位置,那手眼标定还有什么意义?

2.2 相机标定误差

相机标定误差,说白了就是相机“看走眼”了。内参不准、畸变模型不对、标定板不平,都会导致空间点坐标算出来就是歪的。

我记得有一次,用张正友标定法标了一台500万像素的相机,重投影误差0.08像素,看着挺漂亮。结果放到手眼标定里,怎么算都不对。后来发现,标定板是亚克力板贴的,温度一变就翘曲了。

相机标定误差主要来自:

  • 内参标定误差:焦距、主点、畸变系数。尤其是畸变,边缘区域的畸变校正不准,会直接带偏特征点的空间坐标。
  • 标定板质量:棋盘格不平整、圆点阵列位置不准、图案印刷有偏差。我建议用陶瓷或玻璃基底的标定板,别用纸打印的。
  • 标定图像数量与分布:只拍十几张图,而且都在视野中央,那标出来的畸变参数基本是废的。
  • 光照与对焦:光照不均匀导致角点提取偏移,对焦模糊导致亚像素精度下降。

关键指标:重投影误差(Reprojection Error)。一般做到0.1像素以内算合格,0.05像素以内算优秀。但注意,重投影误差低不代表外参准,它只反映内参和畸变的自洽性。

我个人的经验是,相机标定这一步,宁可多花半小时,也别凑合。多拍几组不同角度、不同距离的图像,保证标定板覆盖整个视野。尤其是视野边缘,畸变最大的地方,一定要有标定板出现。

2.3 特征点提取误差

这个误差源,很多人容易忽略。觉得角点提取嘛,OpenCV一个函数就搞定了,能有多大误差?

其实不然。特征点提取误差,是手眼标定里最“随机”的误差源。它不像运动学误差那样有规律,也不像相机标定误差那样可以通过模型补偿。它就是纯粹的噪声,而且跟图像质量强相关。

常见的特征点提取误差包括:

  • 角点检测偏差:棋盘格角点,在图像模糊或光照不均时,亚像素定位会偏移。我测过,在低光照下,角点偏移能达到0.3像素。
  • 圆心提取误差:圆点标定板的圆心提取,受透视投影影响,圆会变成椭圆,质心跟实际圆心有偏差。
  • 图像噪声:传感器噪声、量化误差,这些在高精度标定场景下不能忽略。
  • 标定板自身特征误差:棋盘格角点不是理想的黑白交界,印刷边缘有羽化,也会引入偏差。
特征类型 典型提取精度 主要影响因素 改进方法
棋盘格角点 0.05~0.15 像素 光照、模糊、对比度 多帧平均、自适应阈值
圆点圆心 0.1~0.3 像素 透视畸变、椭圆拟合误差 透视校正、加权拟合
编码点 0.02~0.05 像素 编码点设计、解码算法 使用高精度编码点

⚠ 注意:特征点提取误差是随机的,但它在手眼标定方程里会被放大。尤其是当机器人运动范围小、标定板姿态变化不够丰富时,噪声会直接淹没信号。我曾经做过实验,把特征点噪声从0.1像素增加到0.3像素,手眼标定结果的旋转误差从0.02°飙到了0.15°。

2.4 三种误差的叠加效应

好了,三种误差都讲完了。你可能会问:它们到底谁影响最大?

我的答案是:看场景。

  • 如果机器人是旧设备、没做过运动学标定,那运动学误差是老大。
  • 如果相机是廉价工业相机、镜头畸变大,那相机标定误差是瓶颈。
  • 如果光照条件差、标定板质量差,那特征点提取误差会拖后腿。

但有一点是确定的:三种误差会叠加。运动学误差让末端位姿偏了,相机标定误差让空间点坐标偏了,特征点提取误差又给数据加了噪声。这三者凑在一起,手眼标定方程的解就会变得很不稳定。

我的建议:在做手眼标定之前,先花时间把这三个误差源分别评估一遍。用激光跟踪仪测一下机器人的重复定位精度和定位精度。用重投影误差评估相机标定质量。用多帧重复提取的方差评估特征点提取精度。只有摸清了底牌,才能制定合适的标定策略。