4. 手眼标定问题建模:眼在手上与眼在手外

手眼标定的核心是求解机器人末端执行器(或基座)与相机坐标系之间的空间变换关系。根据相机安装位置的不同,问题被划分为两种经典构型:眼在手上(Eye-in-Hand)和眼在手外(Eye-to-Hand)。本章从数学上严格推导这两种构型的坐标系变换链,并引出经典的 AX = XB 与 AX = YB 矩阵方程。

4.1 眼在手上(Eye-in-Hand)构型

相机固定在机器人末端执行器(法兰盘)上,随机械臂一起运动。标定目标是求解相机坐标系 {C} 相对于末端坐标系 {E} 的变换矩阵 X。

4.1.1 坐标系定义与变换链

符号 含义 已知/未知
{B} 机器人基座坐标系 固定参考系
{E} 机器人末端(法兰盘)坐标系 由机器人正运动学实时给出
{C} 相机坐标系 未知(待标定)
{O} 标定板(世界点)坐标系 由标定板物理尺寸已知

在眼在手上构型中,标定板固定不动。对于机械臂的两个不同位姿 i 和 j,存在以下闭环变换关系:

B_T_E(i) · E_T_C · C_T_O(i) = B_T_E(j) · E_T_C · C_T_O(j)

其中:

  • B_T_E(i):机器人正运动学给出的末端位姿(已知)
  • C_T_O(i):相机外参,即标定板在相机坐标系下的位姿(通过PnP求解,已知)
  • E_T_C = X:待求的手眼变换矩阵

4.1.2 推导 AX = XB

将上式整理,令:

  • A = inv(B_T_E(j)) · B_T_E(i) —— 机器人末端从位姿 i 到位姿 j 的相对运动
  • B = C_T_O(j) · inv(C_T_O(i)) —— 相机观察到的标定板从位姿 i 到位姿 j 的相对运动

代入闭环方程得到:

A · X = X · B

这就是经典的 AX = XB 问题。其中 A 和 B 均为已知的 4×4 齐次变换矩阵,X 为待求的相机-末端变换矩阵。

关键点:眼在手上构型中,标定板固定,机器人移动。方程 AX = XB 的物理意义是:机器人末端运动 A 与相机运动 B 通过未知变换 X 构成闭环。
眼在手上(Eye-in-Hand)变换链与 AX = XB 闭环 基座 {B} 末端 {E} 相机 {C} 标定板 {O} B_T_E X (未知) C_T_O 闭环约束:B_T_E(i)·X·C_T_O(i) = B_T_E(j)·X·C_T_O(j)

4.2 眼在手外(Eye-to-Hand)构型

相机固定安装在机器人工作空间之外(如支架上),不随机械臂运动。标定目标是求解相机坐标系 {C} 相对于机器人基座坐标系 {B} 的变换矩阵 Y。

4.2.1 坐标系定义与变换链

符号 含义 已知/未知
{B} 机器人基座坐标系 固定参考系
{E} 机器人末端坐标系 由机器人正运动学给出
{C} 相机坐标系(固定) 未知(待标定)
{O} 标定板坐标系(固定在末端) 由相机外参给出

在眼在手外构型中,标定板固定在机器人末端,随机械臂运动。对于两个不同位姿 i 和 j:

C_T_O(i) · inv(B_T_E(i)) = C_T_O(j) · inv(B_T_E(j))

整理后得到:

C_T_O(j) · inv(C_T_O(i)) = inv(B_T_E(j)) · B_T_E(i)

4.2.2 推导 AX = YB

令:

  • A = C_T_O(j) · inv(C_T_O(i)) —— 相机观察到的标定板相对运动
  • B = B_T_E(j) · inv(B_T_E(i)) —— 机器人末端相对运动
  • X = C_T_B —— 相机到基座的变换(待求)
  • Y = E_T_O —— 末端到标定板的变换(待求)

代入闭环方程得到:

A · X = Y · B

这就是 AX = YB 问题。与 AX = XB 不同,这里有两个未知矩阵 X 和 Y,需要至少两组独立运动才能求解。

对比记忆:眼在手上 → 一个未知 X,方程 AX = XB;眼在手外 → 两个未知 X 和 Y,方程 AX = YB。后者自由度更高,求解算法也更复杂。
眼在手外(Eye-to-Hand)变换链与 AX = YB 闭环 基座 {B} 末端 {E} 标定板 {O} 相机 {C} B_T_E Y (未知) C_T_O 闭环约束:C_T_O(i)·inv(B_T_E(i)) = C_T_O(j)·inv(B_T_E(j))

4.3 两种构型对比总结

对比项 眼在手上(Eye-in-Hand) 眼在手外(Eye-to-Hand)
相机安装位置 固定在机器人末端 固定在工作空间外
标定板位置 固定在工作空间 固定在机器人末端
待求变换 相机→末端:X 相机→基座:X;末端→标定板:Y
矩阵方程 AX = XB AX = YB
未知矩阵个数 1 个 2 个
最小运动组数 2 组(两个位姿) 3 组(三个位姿)
典型求解方法 Tsai-Lenz, Park, Horaud Li, Dornaika, 两步法
工程注意:实际标定中,仅使用最小运动组数往往噪声敏感。建议采集 10~20 组不同姿态的数据,通过最小二乘或非线性优化提高标定精度。眼在手外构型由于未知参数更多,对数据质量和姿态多样性要求更高。

4.4 求解思路概述

无论是 AX = XB 还是 AX = YB,求解通常分为两步:

  1. 旋转部分求解:利用旋转矩阵的轴角表示或四元数,将方程转化为线性形式或最小二乘问题。
  2. 平移部分求解:在旋转已知后,平移向量可通过线性方程组直接解出。

OpenCV 提供了 calibrateHandEye() 函数,支持多种经典算法(Tsai-Lenz、Park、Horaud 等),直接求解 AX = XB 问题。Halcon 则通过 hand_eye_calibration 算子族,同时支持两种构型,并内置了鲁棒性优化策略。