外参标定与目标跟踪精度 - 第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 法,结果发现旋转误差很大。后来排查发现,是因为机械臂的位姿变化太小,导致旋转矩阵的估计不稳定。我的建议是:采集数据时,让机械臂做大幅度的旋转运动,覆盖各个方向。这样标定结果才可靠。

本章知识体系

下面这张图总结了本章的核心逻辑:

手眼标定知识体系 手眼标定配置 Eye-in-Hand 眼在手上 Eye-to-Hand 眼在手外 核心方程:AX = XB Tsai法(两步法) Navy法(同时求解) 速度快,精度中等 适合实时系统 精度高,计算稍慢 适合离线标定

嗯,这张图把本章的核心逻辑串起来了。从配置选择,到方程推导,再到求解方法,每一步都有对应的知识点。

最后说一句,手眼标定这东西,理论搞懂了只是第一步。真正上手做,你会发现各种坑——标定板不平、机械臂回差、相机畸变……我建议你多动手,多试几组数据,慢慢就有感觉了。

可可精品资料库