3、眼在手上(Eye-in-Hand)标定实战:标定流程、数据采集技巧、Tsai法与Park法对比、标定结果验证。

眼在手上标定,说白了就是让机器人知道:我的相机到底长在胳膊的哪个位置? 方向对不对?距离是多少?

这个关系一旦算错,后面抓取全是歪的。我在项目里见过太多人,标定结果看着挺漂亮,一抓就偏。为什么?因为数据采集阶段就埋了坑。

这一节,咱们把整个流程掰开揉碎,从采集到计算,再到验证,一步步走通。

3.1 标定流程总览

先看整体逻辑。眼在手上标定,本质是求解一个 4×4 齐次变换矩阵,把相机坐标系映射到机器人末端(法兰)坐标系。

核心方程: camHend = ?

已知量:机器人位姿(baseHend)、标定板位姿(camHobj)
未知量:camHend(手眼矩阵)

整个流程分四步走:

  1. 准备阶段 – 固定标定板,安装相机,确认通讯正常
  2. 数据采集 – 移动机器人,在不同位姿下拍照并记录
  3. 求解计算 – 用 Tsai 法或 Park 法解方程
  4. 结果验证 – 用独立数据检查精度,不达标就重采
眼在手上标定流程 准备阶段 数据采集 求解计算 结果验证 固定标定板 安装相机 通讯确认 多姿态拍照 记录位姿 覆盖工作空间 Tsai法 / Park法 求解 AX=XB 重投影误差 抓取测试 不达标 → 重新采集

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 标定结果验证

算出手眼矩阵之后,别急着用。先验证,再部署。

我一般做三层验证:

  1. 重投影误差 – 用标定结果把 3D 点投影到图像上,看像素偏差。小于 1 像素算合格。
  2. 抓取测试 – 让机器人去抓一个已知位置的物体。偏差超过 2mm 就要排查。
  3. 交叉验证 – 留出 3~5 组数据不参与计算,专门用来验证。这个习惯帮我发现过好几次标定失败。

我曾经 遇到过一次:重投影误差只有 0.3 像素,但抓取偏差 5mm。后来发现是机器人 DH 参数有误差。所以验证不能只看重投影,一定要做实物测试。

验证通过后,把手眼矩阵保存到配置文件。我习惯同时保存一份 标定日志,记录采集时的机器人位姿、标定板位姿、最终矩阵和验证误差。方便以后回溯。

注意: 如果换了相机、换了机器人末端工具,或者拆装过相机,必须重新标定。手眼矩阵不是一劳永逸的。

好了,眼在手上标定的核心内容就这些。数据采集多花点心思,求解方法选对,验证做扎实,后面抓取才能稳。