R&D
CENTER

手眼标定:让机器人前往相机所见位置的方法

相机用自己的坐标说“在这里”,而机器人只按自己的坐标运动。本文介绍求解两者之间变换的手眼标定(Hand-Eye)的概念、流程,以及提高精度的技巧。

进阶5 分钟0 浏览
本课要点
  1. 坐标系要区分为机器人基座、机器人末端(法兰/TCP)、相机、物体四个。
  2. 相机装在机器人上称为 eye-in-hand,固定在外部称为 eye-to-hand,两者要求解的变换不同。
  3. 在多个位姿下拍摄标定物,求解 AX = XB 问题以得到变换 X。解法有 Tsai、Park 等多种。
  4. 让各位姿之间的旋转差异足够大,并用残差(RMS)验证结果,是精度的关键。

视觉系统找到一朵香菇,告知“以相机为基准,位于 (12, −40, 380) mm”。机器人要前往该处,就必须把这个值转换为以机器人基座为基准的坐标。求解这个变换的工作,就是手眼标定。这个值如果差 1 mm,所有抓取都会偏差 1 mm。

四个坐标系与变换

Base机器人基座 Flange机器人末端 Camera相机 Object物体 T_base←flange由机器人提供 X = T_flange←cam通过标定求得 T_cam←obj由视觉测量 T_base←obj = T_base←flange · X · T_cam←obj
相机装在机器人末端的 eye-in-hand 配置。只要知道连接机器人位姿与视觉测量值的 X,就能得到物体的机器人坐标。

变换用同时包含位置(3 个)和旋转(3 个)的 4×4 矩阵表示。三个变换中有两个是已知的。

  • 基座 → 末端:机器人控制器根据关节角度计算并实时提供。
  • 相机 → 物体:由视觉测量。
  • 末端 → 相机(X):取决于相机的安装方式,谁也不知道。求出这个值就是标定。

eye-in-hand 与 eye-to-hand

  • eye-in-hand — 相机装在机器人末端,随之一起运动。可以在多个位置近距离拍摄,适合大范围和精细检测。要求解的是末端 → 相机。
  • eye-to-hand — 相机固定在工作台上方。机器人运动期间也能持续拍摄。要求解的是基座 → 相机。

RoboVision 两种配置都支持。

AX = XB:为什么需要多个位姿

将标定板(棋盘格等)固定好,让机器人以多个位姿运动并拍摄标定板。设两个位姿之间机器人末端的运动量为 A,同一期间相机所见标定板的运动为 B,由于两者是在不同坐标下观察同一个刚体运动,因此 AX = XB 成立。未知量 X 有 6 个自由度,仅靠一对位姿无法求解,需要多个旋转轴互不相同的位姿。

求解这个方程的方法有很多。RoboVision 提供 OpenCV 的全部五种解法(Tsai, Park, Horaud, Andreff, Daniilidis),可以用相同数据比较结果。将旋转和平移分开求解的方法(Tsai、Park)与一次性求解的方法(Daniilidis 的对偶四元数等),对噪声的特性略有不同。

不用标定板的标定

在现场有时很难放置标定板。fineAi 也采用其他方法。

  • 基于夹爪的标定 — 不用标定板,而是用相机拍摄夹爪本身进行标定。在 RoboVision 中得到了 RMS 0.50 mm。
  • TCP 点匹配 — 在 eye-to-hand 中,把机器人末端移动到多个位置,用 3D 相机拍摄这些位置,再用 Kabsch 算法求出使两组点集重合得最好的旋转・平移。在末端装上球体并对准球心,精度会更高。Digital Twin Pick&Place 采用这种方式。

提高精度的技巧

  1. 旋转要大且多样 — 各位姿之间的旋转轴必须差异很大。如果只做平移,X 的旋转分量就难以确定。
  2. 位姿要足够 — 拍摄数量要比最低要求多一些(10~20 个),以平均掉噪声。
  3. 用满整个视野 — 如果标定板只出现在画面中央,镜头畸变较大的边缘处的误差就会被掩盖。
  4. 先做相机内参标定 — 镜头畸变和焦距(内参)如果有误,手眼标定也会出错。
  5. 用残差验证 — 用结果 X 重新计算各位姿下标定板的位置,查看残差(RMS)。如果只有个别位姿偏差很大,就剔除该位姿后重新求解。
  6. 机构变动就重新标定 — 如果碰过相机支架或发生过碰撞,就重新标定。运行期间还会使用自标定,收集预测位置与实测位置之间的差异,更新小幅修正值。