外参标定与目标跟踪精度 - 第4节
手眼标定:Eye-in-Hand vs Eye-to-Hand 配置
说到手眼标定,我估计不少做机器人或自动驾驶的朋友都头疼过。说白了,就是让机器人知道「我的眼睛(相机)和我的手(机械臂/车体)之间到底是什么关系」。
你想想看,相机看到了一瓶水,机械臂要去抓它。如果不知道相机和机械臂之间的坐标变换,那看到等于白看。嗯,这就是手眼标定要解决的核心问题。
两种配置:Eye-in-Hand 与 Eye-to-Hand
先说说最常见的两种配置。我个人习惯把它们分成「眼睛长在手上」和「眼睛看着手」两种。
Eye-in-Hand(眼在手上):相机固定在机械臂末端。相机跟着机械臂一起动。
Eye-to-Hand(眼在手外):相机固定在工作空间某处。机械臂在相机视野里活动。
我在做第一个机器人抓取项目时,选的就是 Eye-in-Hand。为什么?因为相机离目标近,精度高。但后来发现一个问题——机械臂运动范围大时,相机视野容易丢失目标。这就是典型的「有利必有弊」。
两种配置的对比,我整理了一张表:
| 对比项 | Eye-in-Hand | Eye-to-Hand |
|---|---|---|
| 标定目标 | 求相机→机械臂末端的变换 | 求相机→机械臂基座的变换 |
| 标定板位置 | 固定在世界坐标系中 | 固定在机械臂末端 |
| 优点 | 近距离观测,精度高 | 视野稳定,不随机械臂移动 |
| 缺点 | 视野随机械臂变化,可能丢失目标 | 距离远,精度受限于相机分辨率 |
实际项目中怎么选?我建议你根据任务来。如果是精密装配,Eye-in-Hand 更合适。如果是大范围抓取或导航,Eye-to-Hand 更靠谱。
AX=XB 问题的数学推导
好,现在进入核心。不管哪种配置,手眼标定最终都会归结到一个方程:AX = XB。
这个方程怎么来的?我带你推一遍。
Eye-in-Hand 的推导
假设机械臂从位姿 A1 运动到位姿 A2。同时,相机从位姿 B1 运动到位姿 B2。这里:
- A1、A2:机械臂末端在基座坐标系下的位姿(已知,从机器人控制器读取)
- B1、B2:标定板在相机坐标系下的位姿(已知,通过相机标定得到)
- X:相机到机械臂末端的变换矩阵(未知,这就是我们要标定的)
关键来了。标定板在世界坐标系中是固定不动的。所以,从世界坐标系到标定板的变换是恒定的。利用这个约束,我们可以写出:
X * B1 = A1 * W (位姿1时)
X * B2 = A2 * W (位姿2时)
其中 W 是标定板在世界坐标系下的位姿(未知但恒定)。两式相减消去 W:
X * B1 * inv(B2) * inv(X) = A1 * inv(A2)
整理一下:
X * (B1 * inv(B2)) = (A1 * inv(A2)) * X
令 A = A1 * inv(A2),B = B1 * inv(B2),就得到了经典的:
AX = XB
说白了,就是两个变换矩阵的「交换律」问题。X 把 A 和 B 联系在了一起。
Eye-to-Hand 的推导
Eye-to-Hand 的情况类似,但标定板固定在机械臂末端。推导过程我就不重复了,最终也是 AX = XB 的形式。区别在于 A 和 B 的定义不同。
我的经验:不管哪种配置,核心都是采集多组机械臂位姿和对应的相机观测数据。数据质量直接决定标定精度。我曾经因为标定板反光,导致一组数据偏差很大,结果标定出来的 X 完全不能用。后来加了偏振片才解决。
Tsai法与Navy法
AX = XB 方程怎么解?最经典的就是 Tsai 法和 Navy 法。我当年读论文时,这两篇是必读的。
Tsai法(两步法)
Tsai 法的思路很巧妙——把旋转和平移分开求解。
第一步:求解旋转
从 AX = XB 中提取旋转部分:
R_A * R_X = R_X * R_B
这其实是一个矩阵方程。Tsai 把它转化成了关于旋转轴和旋转角度的方程。通过多组数据,用最小二乘法求解。
第二步:求解平移
旋转解出来后,代入原方程求解平移部分:
(R_A - I) * t_X = R_X * t_B - t_A
同样用最小二乘法。
优点:计算简单,速度快。适合实时性要求高的场景。
缺点:旋转误差会传递到平移,两步之间耦合。
Navy法(同时求解)
Navy 法(也叫 Park-Martin 法)把旋转和平移放在一起求解。它用了四元数或李代数来表示旋转,然后构建一个统一的优化问题。
核心思想:
minimize || AX - XB ||^2
同时优化旋转和平移,一次性得到 X。
优点:精度更高,旋转和平移误差不耦合。
缺点:计算量稍大,需要迭代求解。
两种方法的对比:
| 对比项 | Tsai法 | Navy法 |
|---|---|---|
| 求解方式 | 两步法(先旋转后平移) | 同时求解 |
| 数学工具 | 旋转矩阵 + 最小二乘 | 四元数/李代数 + 优化 |
| 精度 | 中等(旋转误差传递) | 较高 |
| 计算速度 | 快 | 稍慢 |
| 适用场景 | 实时标定、嵌入式系统 | 离线标定、高精度需求 |
避坑指南:我曾经在项目中直接用 Tsai 法,结果发现旋转误差很大。后来排查发现,是因为机械臂的位姿变化太小,导致旋转矩阵的估计不稳定。我的建议是:采集数据时,让机械臂做大幅度的旋转运动,覆盖各个方向。这样标定结果才可靠。
本章知识体系
下面这张图总结了本章的核心逻辑:
嗯,这张图把本章的核心逻辑串起来了。从配置选择,到方程推导,再到求解方法,每一步都有对应的知识点。
最后说一句,手眼标定这东西,理论搞懂了只是第一步。真正上手做,你会发现各种坑——标定板不平、机械臂回差、相机畸变……我建议你多动手,多试几组数据,慢慢就有感觉了。
可可精品资料库