视觉系统找到一朵香菇,告知“以相机为基准,位于 (12, −40, 380) mm”。机器人要前往该处,就必须把这个值转换为以机器人基座为基准的坐标。求解这个变换的工作,就是手眼标定。这个值如果差 1 mm,所有抓取都会偏差 1 mm。
四个坐标系与变换
变换用同时包含位置(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 采用这种方式。
提高精度的技巧
- 旋转要大且多样 — 各位姿之间的旋转轴必须差异很大。如果只做平移,X 的旋转分量就难以确定。
- 位姿要足够 — 拍摄数量要比最低要求多一些(10~20 个),以平均掉噪声。
- 用满整个视野 — 如果标定板只出现在画面中央,镜头畸变较大的边缘处的误差就会被掩盖。
- 先做相机内参标定 — 镜头畸变和焦距(内参)如果有误,手眼标定也会出错。
- 用残差验证 — 用结果 X 重新计算各位姿下标定板的位置,查看残差(RMS)。如果只有个别位姿偏差很大,就剔除该位姿后重新求解。
- 机构变动就重新标定 — 如果碰过相机支架或发生过碰撞,就重新标定。运行期间还会使用自标定,收集预测位置与实测位置之间的差异,更新小幅修正值。