4、眼在手上(Eye-in-Hand)标定:原理、数学模型、标定流程、与Eye-to-Hand的区别
眼在手上(Eye-in-Hand)标定,说白了就是把相机固定在机器人末端法兰盘上。相机跟着机械臂一起动,走到哪拍到哪。我刚开始接触这个配置时,觉得它比Eye-to-Hand复杂不少——毕竟相机一直在动,坐标系关系也更绕。但做多了你会发现,它其实有它独特的优势。
这一章,我们就把Eye-in-Hand的原理、数学模型、标定流程讲透,最后再跟Eye-to-Hand做个对比。嗯,这样你以后选型时心里就有数了。
4.1 基本原理:为什么让相机“长”在手上?
Eye-in-Hand的核心思路是:相机固定在机器人末端,随末端运动。标定的目标,是求出相机坐标系到末端法兰盘坐标系的变换矩阵,记作 X = T_cam^end。
为什么要这么干?我举个例子。在精密装配或焊缝跟踪场景里,工件位置可能有偏差。如果相机装在别处,你得先让机器人摆个固定姿势去拍照,再计算偏移。但Eye-in-Hand就不一样——机械臂可以一边靠近工件一边拍照,实时修正抓取点。说白了,它更适合近距离、高精度、动态调整的任务。
核心优势:相机与末端相对固定,标定一次后,只要不拆装,变换关系就保持不变。机器人运动学越准,视觉引导就越准。
4.2 数学模型:AX = XB 问题
Eye-in-Hand的数学模型,本质上是一个经典的AX = XB问题。你想想看,机器人带着相机从姿势A1运动到姿势A2,同时相机也拍到了标定板,得到了两次相机到标定板的变换B1和B2。那么,未知的X(相机到末端的变换)必须满足:
A1 · X · B1 = A2 · X · B2
整理一下,就变成了:
(A2-1 · A1) · X = X · (B2 · B1-1)
令 A = A2-1 · A1,B = B2 · B1-1,就得到了:
A · X = X · B
这就是机器人手眼标定里最经典的方程。A是机器人末端的相对运动,B是相机看到的相对运动,X是我们要求的未知量。
我的经验:解这个方程时,我习惯先分离旋转和平移。旋转部分用四元数或罗德里格斯公式求解,平移部分再用最小二乘。直接一起解容易陷入局部最优,分开解反而更稳。
4.3 标定流程:一步一步来
Eye-in-Hand的标定流程,我总结为5步。每一步都有坑,我当年踩过不少。
- 准备标定板:棋盘格或圆点阵都行。我个人偏爱非对称圆点阵,因为角点检测更鲁棒。标定板要固定在工作空间内,不能动。
- 采集多组数据:控制机器人运动到不同姿态,每次记录机器人末端位姿(从控制器读)和相机拍摄的标定板图像。注意,姿态变化要足够大——平移和旋转都要覆盖。我见过有人只平移不旋转,结果解出来的X误差很大。
- 提取角点,计算B:对每张图像提取标定板角点,用PnP算法求出相机到标定板的变换矩阵B。
- 构建AX=XB方程组:用至少3组(建议8-12组)数据,构建A和B的相对运动对。然后求解X。
- 验证与优化:用未参与求解的数据做验证。如果重投影误差大于0.5像素,或者机器人引导抓取偏差超过1mm,就得重新采集数据或检查机器人运动学参数。
避坑指南:我曾经在一次标定中,采集了20组数据,但解出来的X始终不稳定。后来发现,机器人运动范围太小,所有姿态几乎共面。记住,姿态多样性比数量更重要。建议让机器人末端做大幅度的旋转和俯仰变化。
4.4 与Eye-to-Hand的区别
很多初学者搞不清Eye-in-Hand和Eye-to-Hand到底有什么区别。我直接给你列个表,一目了然。
| 对比项 | Eye-in-Hand | Eye-to-Hand |
|---|---|---|
| 相机安装位置 | 固定在机器人末端法兰盘 | 固定在工作空间外部(如天花板、支架) |
| 标定目标 | 求相机到末端的变换 X | 求相机到机器人基座的变换 Y |
| 数学模型 | AX = XB | AX = YB |
| 标定板位置 | 固定在工作空间内 | 固定在机器人末端 |
| 视野特点 | 视野随末端移动,可近距离观察工件 | 视野固定,适合全局观察 |
| 典型应用 | 精密装配、焊缝跟踪、抓取 | 物料分拣、码垛、大范围定位 |
| 精度影响因素 | 机器人运动学精度、相机内参 | 相机外参标定精度、机器人定位精度 |
你看,两者的核心区别在于相机跟谁走。Eye-in-Hand的相机跟着末端走,所以它适合做精细活;Eye-to-Hand的相机固定不动,适合看全局。选哪个,取决于你的任务需求。
4.5 知识结构图
下面这张图,把Eye-in-Hand标定的核心逻辑串起来了。从原理到数学模型,再到流程和对比,你可以用它做复习提纲。
4.6 一些实用建议
最后,我分享几个实战中总结的小技巧:
- 数据采集时,让机器人末端做“8”字形运动。这样能保证旋转和平移都充分变化,避免退化情况。
- 每次运动后,稍微停顿一下再拍照。机器人运动停止后,末端会有微小抖动,等它稳定了再拍,能减少运动学误差。
- 标定板不要太小。我见过有人用A4纸打印的棋盘格,结果相机离得远一点就检测不到角点。建议标定板尺寸至少占相机视野的1/3。
- 验证时,用机器人去碰一个固定点。这是最直观的验证方法——让相机识别一个尖点,然后控制机器人末端去触碰它。偏差多少,一目了然。
我的习惯:每次标定完,我都会保存一份标定日志,包括采集的姿态数量、重投影误差、验证偏差。这样下次标定时可以对比,看看是不是有退化或异常。