3. 手眼标定基础

手眼标定,说白了就是让机器人知道它的「手」和「眼」之间到底是个什么关系。你想想看,相机看到了一个零件,但机器人要去抓它,这中间缺了一个坐标变换。没有这个变换,机器人根本不知道往哪儿伸手。

我刚开始做这个的时候,觉得标定就是个数学公式套一套的事。后来在产线上被坑过几次,才明白——选错标定方式、用错标定板,后面全是白干。今天咱们就把这两个核心问题聊透。

3.1 两种手眼关系:Eye-in-Hand vs Eye-to-Hand

先看一张图,把两种结构的核心逻辑理清楚。

手眼标定两种结构对比 手眼标定结构对比:Eye-in-Hand vs Eye-to-Hand Eye-in-Hand(眼在手上) 机器人基座 末端 相机 标定板 T_cam_to_end 标定板固定在世界坐标系 Eye-to-Hand(眼在手外) 机器人基座 末端 标定板 相机 T_cam_to_base 标定板固定在机器人末端

3.2 Eye-in-Hand:相机跟着手走

这种方案,相机装在机器人末端法兰上。机器人动,相机跟着动。标定要解的是 相机坐标系到末端坐标系的变换矩阵,记作 T_cam_to_end。

核心公式(AX = XB):

标定过程中,机器人移动多个位姿,在每个位姿下拍摄固定标定板。通过机器人运动学得到末端位姿变化 A,通过视觉得到相机位姿变化 B,求解 X 满足 AX = XB。

优点:

  • 相机视野随末端移动,可以近距离观察目标,精度高
  • 适合抓取、装配等需要精细定位的场景

缺点:

  • 标定板必须固定在工作空间内,不能移动
  • 机器人运动范围受限时,标定数据采集困难

我的经验: 做 Eye-in-Hand 标定时,我习惯让机器人走 15-20 个不同姿态。别只在一个平面内转,要让相机从不同角度看到标定板。平移和旋转都要覆盖,不然解出来的矩阵在某个方向上会「飘」。

3.3 Eye-to-Hand:相机固定,手在下面动

相机固定在工作空间上方,机器人末端带着标定板移动。标定要解的是 相机坐标系到机器人基座坐标系的变换矩阵,记作 T_cam_to_base。

公式形式上还是 AX = XB,但 A 和 B 的含义变了——A 是机器人末端位姿变化,B 是标定板在相机视野中的位姿变化。

优点:

  • 相机视野固定,适合大范围监控
  • 标定板固定在末端,采集数据灵活

缺点:

  • 相机离目标远,精度受分辨率限制
  • 标定板遮挡问题需要特别注意

避坑指南: 我曾经遇到过一个 Eye-to-Hand 标定失败的情况,折腾了两天才发现——标定板装反了。标定板有正反面,棋盘格或圆点阵列必须在相机视野内清晰可见。装反了,算法检测到的角点全是错的。

3.4 两种方案怎么选?

对比维度 Eye-in-Hand Eye-to-Hand
相机安装位置 机器人末端 固定支架
标定板位置 固定在工作空间 固定在机器人末端
求解变换 T_cam_to_end T_cam_to_base
视野灵活性 高,随末端移动 低,固定视野
近距离精度 高 受限于相机分辨率
标定数据采集 需机器人多姿态运动 需标定板多姿态摆放
典型应用 抓取、装配、焊接 码垛、分拣、大范围定位

我个人建议:如果你的工作空间小、目标零件小、对抓取精度要求高,选 Eye-in-Hand。如果工作空间大、机器人活动范围广、相机需要覆盖整个区域,选 Eye-to-Hand。

3.5 标定板选择与制作规范

标定板选不对,标定精度直接崩。我见过有人用 A4 纸打印棋盘格贴在纸板上,结果标定出来的矩阵误差 5 毫米以上。嗯,这种「省钱」方式,最后往往更费钱。

3.5.1 常见标定板类型

类型 特点 适用场景
棋盘格(Checkerboard) 角点检测稳定,算法成熟 通用标定,精度要求中等
圆点阵列(Circle Grid) 圆心定位精度高,抗畸变好 高精度标定,大畸变镜头
ChArUco 板 结合棋盘格与 ArUco 编码 需要自动识别标定板 ID
AprilTag 编码信息丰富,鲁棒性强 多相机系统、动态标定

我的习惯: 做 3D 视觉标定,我优先用 圆点阵列。圆心检测精度比角点高一个量级,尤其当镜头畸变较大时,圆心的亚像素定位更稳定。棋盘格在边缘畸变大的区域,角点会「跑偏」。

3.5.2 标定板制作规范

不管用哪种标定板,以下几个参数必须严格控制:

  1. 平面度: 标定板必须贴在刚性平板上,平面度误差 < 0.1 mm。陶瓷板或玻璃板最佳,亚克力板次之。
  2. 尺寸精度: 棋盘格边长或圆点间距的加工误差 < 0.05 mm。用高精度打印机或工业印刷制作。
  3. 对比度: 黑白区域反射率差异 > 80%。哑光材质,避免反光。
  4. 环境适应性: 如果产线温度变化大,选热膨胀系数低的材料(如石英玻璃)。

避坑指南: 我曾经在一条产线上做标定,白天标定结果正常,晚上就偏了。查了半天,发现是标定板用的亚克力板,晚上车间温度降了 10 度,亚克力收缩了 0.3 mm。从那以后,我要求所有标定板必须用陶瓷或玻璃基底。

3.5.3 标定板尺寸怎么定?

标定板尺寸取决于相机视野和标定距离。一个经验公式:

标定板边长 ≈ 视野短边的 1/3 ~ 1/2

举个例子:相机视野是 600 mm × 400 mm,标定板边长取 150 mm ~ 200 mm 比较合适。太小了,角点数量不够;太大了,边缘畸变影响标定精度。

相机视野(mm) 推荐标定板尺寸(mm) 棋盘格数量
300 × 200 80 ~ 100 7 × 5
600 × 400 150 ~ 200 9 × 7
1000 × 700 250 ~ 350 11 × 9
1500 × 1000 400 ~ 500 13 × 11

3.6 标定流程要点

不管 Eye-in-Hand 还是 Eye-to-Hand,标定流程都遵循以下步骤:

  1. 准备标定板: 按规范制作,测量实际尺寸输入标定程序
  2. 采集数据: 机器人走 15-20 个位姿,每个位姿记录机器人关节角和标定板图像
  3. 角点/圆心检测: 用 OpenCV 或 Halcon 提取特征点,亚像素精度
  4. 求解变换矩阵: 用 Tsai 法或 Park 法解 AX = XB
  5. 验证标定结果: 用已知点验证重投影误差,误差 < 0.5 mm 算合格

验证方法: 标定完成后,让机器人末端带一个尖点去触碰工作空间内的一个固定尖点。相机检测尖点位置,机器人根据标定结果去抓——如果偏差在 1 mm 以内,标定合格。