4. 手眼标定数学模型:AX=XB 问题推导
好,咱们进入正题。手眼标定,说白了就是解一个方程——AX = XB。这个方程看着简单,但背后藏着不少门道。我当年第一次接触时,心想这不就是个矩阵方程嘛,直接求逆不就完了?结果被现实狠狠教育了一顿。
为什么?因为 A 和 B 都是刚体变换矩阵,属于 SE(3) 群,不是随便一个线性方程就能解的。咱们得从数学上把它拆开,再根据不同的机器人构型来建模。
4.1 核心方程:AX = XB 的由来
先说说这个方程是怎么来的。你想想看,手眼标定要解决的核心问题是:相机坐标系和机器人末端(或基座)坐标系之间的变换关系。这个关系是固定的,我们记作 X。
对于一次运动,机器人末端从位姿 1 移动到 位姿 2,我们有两个信息源:
- 机器人运动学:告诉我们末端坐标系的变化,记作 A(4x4 齐次矩阵)。
- 视觉测量:通过标定板,告诉我们相机看到的目标坐标系变化,记作 B(也是 4x4 齐次矩阵)。
这两个变化,通过未知的固定变换 X 联系起来。数学推导如下:
设:
T_base_to_end1:第一次运动时,末端在基座下的位姿
T_base_to_end2:第二次运动时,末端在基座下的位姿
T_cam_to_obj1:第一次运动时,标定板在相机下的位姿
T_cam_to_obj2:第二次运动时,标定板在相机下的位姿
X:相机到末端的变换(Eye-in-Hand)或相机到基座的变换(Eye-to-Hand)
对于 Eye-in-Hand:
T_base_to_end2 = T_base_to_end1 * A
T_cam_to_obj2 = T_cam_to_obj1 * B
且 T_end_to_cam = X(固定)
推导可得:A * X = X * B
嗯,这里要注意:A 和 B 都是相对运动,不是位姿。我见过不少新手直接拿位姿往里套,结果解出来的 X 乱七八糟。
关键点:AX=XB 中的 A 和 B 必须是相对变换,即从位姿1到位姿2的运动增量。位姿不能直接代入。
4.2 两种模式的数学建模
手眼系统分两种:眼在手上(Eye-in-Hand)和眼在手外(Eye-to-Hand)。它们的数学模型略有不同,但最终都归结为 AX=XB。
4.2.1 眼在手上(Eye-in-Hand)
这种模式下,相机固定在机器人末端。相机跟着末端一起动。我们要标定的是 相机坐标系到末端坐标系的变换,记作 X_cam_to_end。
数学建模过程:
- 定义坐标系:基座坐标系 {B},末端坐标系 {E},相机坐标系 {C},标定板坐标系 {P}。
- 已知量:
- 机器人正运动学给出:BTE1 和 BTE2(末端在基座下的位姿)
- 视觉测量给出:CTP1 和 CTP2(标定板在相机下的位姿)
- 未知量:ETC = X(相机到末端的固定变换)
- 推导:
- 由运动学链:BTP = BTE * ETC * CTP
- 对于两次运动,BTP 是固定的(标定板不动),所以:
BTE1 * X * CTP1 = BTE2 * X * CTP2 - 整理得:(BTE2-1 * BTE1) * X = X * (CTP2 * CTP1-1)
- 即:A * X = X * B
我的经验:Eye-in-Hand 模式下,标定板必须固定在世界坐标系中(比如桌面上)。我曾经有一次没固定好标定板,被同事碰了一下,结果标定结果偏了 2 度,找了半天原因。
4.2.2 眼在手外(Eye-to-Hand)
这种模式下,相机固定在机器人外部(比如天花板上),看着机器人工作。我们要标定的是 相机坐标系到机器人基座坐标系的变换,记作 X_cam_to_base。
数学建模过程:
- 定义坐标系:基座坐标系 {B},末端坐标系 {E},相机坐标系 {C},标定板坐标系 {P}。
- 已知量:
- 机器人正运动学给出:BTE1 和 BTE2
- 视觉测量给出:CTP1 和 CTP2
- 未知量:CTB = X(相机到基座的固定变换)
- 推导:
- 标定板固定在机器人末端,所以 ETP 是固定的。
- 由运动学链:CTP = CTB * BTE * ETP
- 对于两次运动,ETP 固定,所以:
CTP1 = X * BTE1 * ETP
CTP2 = X * BTE2 * ETP - 消去 ETP 得:(CTP2 * CTP1-1) * X = X * (BTE2 * BTE1-1)
- 即:A * X = X * B(注意 A 和 B 的定义与 Eye-in-Hand 相反)
避坑指南:我曾经在 Eye-to-Hand 标定时,把 A 和 B 搞反了,结果解出来的 X 完全不对。记住:Eye-in-Hand 的 A 来自机器人,B 来自相机;Eye-to-Hand 的 A 来自相机,B 来自机器人。两个模式公式形式一样,但物理含义不同。
4.3 两种模式的对比
| 对比项 | 眼在手上(Eye-in-Hand) | 眼在手外(Eye-to-Hand) |
|---|---|---|
| 相机安装位置 | 固定在机器人末端 | 固定在机器人外部 |
| 标定板位置 | 固定在世界坐标系中 | 固定在机器人末端 |
| 待求变换 X | 相机 → 末端(ETC) | 相机 → 基座(CTB) |
| A 矩阵来源 | 机器人运动学(末端运动) | 视觉测量(标定板运动) |
| B 矩阵来源 | 视觉测量(标定板运动) | 机器人运动学(末端运动) |
| 应用场景 | 抓取、装配、移动操作 | 视觉引导、定位、检测 |
4.4 AX=XB 的分解求解思路
AX=XB 是一个矩阵方程,直接解比较麻烦。常用的做法是把它拆成旋转部分和平移部分。
设:
A = [R_A, t_A; 0, 1]
B = [R_B, t_B; 0, 1]
X = [R_X, t_X; 0, 1]
代入 AX = XB 得:
R_A * R_X = R_X * R_B (旋转部分)
R_A * t_X + t_A = R_X * t_B + t_X (平移部分)
这样就把一个 4x4 矩阵方程,拆成了两个子问题:
- 先解旋转:R_A * R_X = R_X * R_B。这是一个典型的矩阵李群方程,可以用 Tsai 方法、Park 方法等求解。
- 再解平移:有了 R_X 后,平移部分变成线性方程:(R_A - I) * t_X = R_X * t_B - t_A,可以用最小二乘法求解。
核心思路:先旋转后平移。旋转部分是非线性的,需要特殊处理;平移部分在旋转已知后是线性的,直接解就行。
4.5 知识结构图
下面这张图总结了本章的核心逻辑:
4.6 小结
这一章我们做了三件事:
- 推导了 AX=XB 方程:从运动学链出发,证明了两种模式都归结为同一个矩阵方程。
- 建立了两种模式的数学模型:Eye-in-Hand 和 Eye-to-Hand,明确了 A、B、X 各自的物理含义。
- 给出了求解思路:先解旋转,再解平移,把非线性问题拆成两步走。
我个人觉得,理解这个数学模型是手眼标定最关键的一步。方程本身不难,难的是搞清楚每个矩阵代表什么、从哪里来。你只要把坐标系关系理清了,后面的求解算法就是按部就班的事。