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。

数学建模过程:

  1. 定义坐标系:基座坐标系 {B},末端坐标系 {E},相机坐标系 {C},标定板坐标系 {P}。
  2. 已知量:
    • 机器人正运动学给出:BTE1 和 BTE2(末端在基座下的位姿)
    • 视觉测量给出:CTP1 和 CTP2(标定板在相机下的位姿)
  3. 未知量:ETC = X(相机到末端的固定变换)
  4. 推导:
    • 由运动学链: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。

数学建模过程:

  1. 定义坐标系:基座坐标系 {B},末端坐标系 {E},相机坐标系 {C},标定板坐标系 {P}。
  2. 已知量:
    • 机器人正运动学给出:BTE1 和 BTE2
    • 视觉测量给出:CTP1 和 CTP2
  3. 未知量:CTB = X(相机到基座的固定变换)
  4. 推导:
    • 标定板固定在机器人末端,所以 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 矩阵方程,拆成了两个子问题:

  1. 先解旋转:R_A * R_X = R_X * R_B。这是一个典型的矩阵李群方程,可以用 Tsai 方法、Park 方法等求解。
  2. 再解平移:有了 R_X 后,平移部分变成线性方程:(R_A - I) * t_X = R_X * t_B - t_A,可以用最小二乘法求解。

核心思路:先旋转后平移。旋转部分是非线性的,需要特殊处理;平移部分在旋转已知后是线性的,直接解就行。

4.5 知识结构图

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

手眼标定数学模型:AX=XB 推导 眼在手上(Eye-in-Hand) 眼在手外(Eye-to-Hand) 相机固定在机器人末端 相机固定在机器人外部 标定板固定在世界坐标系 标定板固定在机器人末端 待求:ETC(相机→末端) 待求:CTB(相机→基座) 统一方程:A · X = X · B (A、B 来源不同,但方程形式相同) 求解策略:先解旋转 R_X,再解平移 t_X

4.6 小结

这一章我们做了三件事:

  • 推导了 AX=XB 方程:从运动学链出发,证明了两种模式都归结为同一个矩阵方程。
  • 建立了两种模式的数学模型:Eye-in-Hand 和 Eye-to-Hand,明确了 A、B、X 各自的物理含义。
  • 给出了求解思路:先解旋转,再解平移,把非线性问题拆成两步走。

我个人觉得,理解这个数学模型是手眼标定最关键的一步。方程本身不难,难的是搞清楚每个矩阵代表什么、从哪里来。你只要把坐标系关系理清了,后面的求解算法就是按部就班的事。