4、手眼标定基础:眼在手上与眼在手外的区别与适用场景
说到手眼标定,很多刚入行的朋友第一反应就是「好难」。其实说白了,就是搞清楚相机和机器人手臂之间的位置关系。你想想看,机器人要抓一个零件,它得知道零件在哪儿。但相机看到的坐标,和机器人手臂的坐标,是两个不同的坐标系。
那怎么把这两个坐标系关联起来?这就是手眼标定要干的事。
我个人习惯把这个问题分成两类:眼在手上(Eye-in-Hand)和眼在手外(Eye-to-Hand)。这两种方式,从安装到算法,再到适用场景,差别还挺大的。
4.1 眼在手上(Eye-in-Hand)
什么叫眼在手上?相机装在机器人末端,跟着机械臂一起动。相机看到的视野,会随着机器人姿态的变化而变化。
这种配置下,标定的目标是求相机坐标系到机器人末端坐标系的变换矩阵。我一般记作 camTend 或 X。
核心公式: AX = XB
其中 A 是机器人末端的位姿变化,B 是相机观测到的标定板位姿变化。
其中 A 是机器人末端的位姿变化,B 是相机观测到的标定板位姿变化。
我在项目中遇到过不少用眼在手上的场景。比如汽车焊装线上的零件抓取,机器人需要从料筐里取零件,位置不太固定。相机装在手上,靠近了拍,精度很高。
眼在手上的优点
- 视野灵活:相机跟着机械臂走,想看哪儿就看哪儿。大零件可以分区域拍。
- 精度高:相机离目标近,图像分辨率高,定位误差小。
- 无遮挡问题:相机可以绕到目标上方或侧面,避开障碍物。
眼在手上的缺点
- 标定复杂:需要机器人带着相机走多个位姿,采集多组数据。
- 运动模糊:机器人运动时拍照,容易模糊。我一般会让机器人在拍照位短暂停顿。
- 视野变化:每次移动,视野都变,标定板可能跑出画面。
4.2 眼在手外(Eye-to-Hand)
眼在手外,相机固定安装在机器人外部,比如天花板上、支架上。相机不动,机器人动。
这种配置下,标定的目标是求相机坐标系到机器人基坐标系的变换矩阵。我记作 camTbase。
核心公式: AX = XB(形式一样,但 A 和 B 的含义不同)
这里的 A 是机器人末端到基座的变换,B 是标定板在相机坐标系下的位姿变化。
这里的 A 是机器人末端到基座的变换,B 是标定板在相机坐标系下的位姿变化。
眼在手外适合什么场景?我记得有一次做物流分拣项目,传送带上的包裹源源不断。相机固定在上方,拍一张全景图,机器人根据坐标去抓。这种场景下,眼在手外就很合适。
眼在手外的优点
- 标定一次管很久:相机固定不动,标定完成后,只要不移动相机,就不用重新标。
- 视野稳定:每次拍照,视野都一样,标定板不会跑出画面。
- 适合大范围:相机可以架高,覆盖整个工作区域。
眼在手外的缺点
- 容易遮挡:机器人或工件可能挡住相机视线。
- 精度受限:相机离目标远,像素当量(mm/pixel)大,精度不如眼在手上。
- 安装要求高:相机支架必须稳固,不能有振动。
4.3 两种方式的对比
我整理了一个表格,方便你对比。嗯,这个表格我用了很多次,每次培训都拿出来讲。
| 对比项 | 眼在手上(Eye-in-Hand) | 眼在手外(Eye-to-Hand) |
|---|---|---|
| 相机安装位置 | 机器人末端 | 机器人外部(固定) |
| 标定目标 | 相机 → 末端 | 相机 → 基座 |
| 标定频率 | 较高(换工具需重标) | 较低(一次标定长期使用) |
| 视野范围 | 小、灵活 | 大、固定 |
| 定位精度 | 高(近距拍摄) | 中等(远距拍摄) |
| 遮挡问题 | 不易遮挡 | 容易遮挡 |
| 运动模糊 | 需注意 | 无(相机静止) |
| 典型应用 | 抓取、装配、焊接 | 分拣、码垛、检测 |
4.4 如何选择?
你可能会问,那我到底该用哪种?其实没有的好坏,关键看场景。
我个人有几个判断原则:
- 看工作范围:如果目标位置分散、范围大,优先考虑眼在手外。如果目标集中、需要高精度,眼在手上更合适。
- 看遮挡情况:如果机器人动作过程中会挡住相机,那就别犹豫,用眼在手上。
- 看精度要求:需要亚毫米级精度?眼在手上。毫米级就够了?眼在手外也能干。
- 看维护成本:不想频繁标定?眼在手外。愿意花时间调参?眼在手上上限更高。
我的经验: 如果项目预算允许,我建议两种都装上。眼在手外做粗定位,眼在手上做精定位。这种「粗精结合」的方案,在3C电子装配中很常见。
4.5 知识结构图
下面这张图,是我自己画的手眼标定知识结构。你可以看到两种方式的定位关系。
4.6 避坑指南
最后,分享几个我踩过的坑。
我曾经犯过的错:
- 标定板太小:眼在手上时,标定板要足够大,保证机器人移动到任何位姿,相机都能看到完整的标定板。我第一次做的时候,标定板只有A4纸大小,结果机器人一偏,标定板就跑出视野了。
- 忽略机器人运动学误差:机器人本身的定位精度会影响标定结果。尤其是老旧的机器人,关节间隙大,标定出来的结果可能不准。
- 拍照时机不对:眼在手上时,一定要等机器人完全停止再拍照。我见过有人边运动边拍照,结果图像模糊,标定失败。
嗯,关于手眼标定的基础概念,就讲这么多。你只要记住:眼在手上求的是相机到末端的变换,眼在手外求的是相机到基座的变换。选哪种,看你的应用场景。