3、眼在手上(Eye-in-Hand)标定实战:标定流程、数据采集技巧、Tsai法与Park法对比、标定结果验证。
眼在手上标定,说白了就是让机器人知道:我的相机到底长在胳膊的哪个位置? 方向对不对?距离是多少?
这个关系一旦算错,后面抓取全是歪的。我在项目里见过太多人,标定结果看着挺漂亮,一抓就偏。为什么?因为数据采集阶段就埋了坑。
这一节,咱们把整个流程掰开揉碎,从采集到计算,再到验证,一步步走通。
3.1 标定流程总览
先看整体逻辑。眼在手上标定,本质是求解一个 4×4 齐次变换矩阵,把相机坐标系映射到机器人末端(法兰)坐标系。
核心方程: camHend = ?
已知量:机器人位姿(baseHend)、标定板位姿(camHobj)
未知量:camHend(手眼矩阵)
整个流程分四步走:
- 准备阶段 – 固定标定板,安装相机,确认通讯正常
- 数据采集 – 移动机器人,在不同位姿下拍照并记录
- 求解计算 – 用 Tsai 法或 Park 法解方程
- 结果验证 – 用独立数据检查精度,不达标就重采
3.2 数据采集技巧
数据采集是标定里最容易翻车的一环。我见过有人拍了 20 张照片,结果 18 张的机器人姿态几乎一样,那方程根本解不出来。
避坑: 千万不要只在同一个位置附近微调。机器人姿态变化太小,方程会病态。
我个人习惯遵循这几个原则:
- 姿态多样性 – 让机器人末端在空间里转起来,俯仰、偏航、翻滚都要有变化
- 空间覆盖 – 标定板要出现在相机视野的不同区域,别老待在正中间
- 距离变化 – 远近都要拍几张,覆盖实际工作距离
- 数量控制 – 15~25 组数据就够了,太多反而容易引入噪声
我的经验: 采集时让机器人走一个“球面轨迹”——末端指向不同方向,但相机始终对准标定板。这样姿态变化最充分。
还有一个细节:记录机器人位姿时,一定要和图像时间戳对齐。 机器人动了之后,等 0.5 秒再拍照,避免运动模糊和位姿不同步。
3.3 Tsai 法与 Park 法对比
这两种方法都是解 AX = XB 这个方程。A 是机器人两次运动的变换,B 是相机两次观测的变换,X 就是我们要的手眼矩阵。
| 对比项 | Tsai 法 | Park 法 |
|---|---|---|
| 核心思路 | 先解旋转,再解平移 | 旋转和平移同时优化 |
| 数学工具 | 四元数 + 最小二乘 | 李群 + 李代数 |
| 对噪声敏感度 | 对旋转噪声较敏感 | 整体更鲁棒 |
| 计算速度 | 快,适合嵌入式 | 稍慢,但现代 CPU 无感 |
| 适用场景 | 数据质量高、姿态变化大 | 数据有噪声、姿态变化小 |
我在实际项目中怎么选?
- 如果现场环境稳定、机器人精度高,我用 Tsai 法,速度快,结果够用
- 如果现场振动大、标定板反光、数据噪声明显,我倾向 Park 法,更稳
一句话总结: Tsai 法像快刀,Park 法像重锤。看你的数据质量选武器。
3.4 标定结果验证
算出手眼矩阵之后,别急着用。先验证,再部署。
我一般做三层验证:
- 重投影误差 – 用标定结果把 3D 点投影到图像上,看像素偏差。小于 1 像素算合格。
- 抓取测试 – 让机器人去抓一个已知位置的物体。偏差超过 2mm 就要排查。
- 交叉验证 – 留出 3~5 组数据不参与计算,专门用来验证。这个习惯帮我发现过好几次标定失败。
我曾经 遇到过一次:重投影误差只有 0.3 像素,但抓取偏差 5mm。后来发现是机器人 DH 参数有误差。所以验证不能只看重投影,一定要做实物测试。
验证通过后,把手眼矩阵保存到配置文件。我习惯同时保存一份 标定日志,记录采集时的机器人位姿、标定板位姿、最终矩阵和验证误差。方便以后回溯。
注意: 如果换了相机、换了机器人末端工具,或者拆装过相机,必须重新标定。手眼矩阵不是一劳永逸的。
好了,眼在手上标定的核心内容就这些。数据采集多花点心思,求解方法选对,验证做扎实,后面抓取才能稳。