工程数学 --- 手眼标定 Hand-Eye Calibration

手眼标定本质

手眼标定是机器人视觉应用的基石,所有相机看到的物体像素坐标/3D坐标,最终都要转换到机器人基坐标系才能控制机械臂运动。

它的核心任务只有一个:

求解机器人本体坐标系 与 相机光学坐标系之间,唯一固定不变的刚性齐次变换矩阵

X=[Rt01×31],X∈SE(3) \mathbf{X}= \begin{bmatrix} \mathbf{R}&\mathbf{t}\\ \mathbf{0}_{1\times3}&1 \end{bmatrix} ,\quad \mathbf{X}\in SE(3) X=[R01×3t1],X∈SE(3)

关键常识:

  • 这个变换矩阵一旦标定完成就是常数,除非相机支架松动、机器人TCP改变,否则终身不变;
  • 机械臂运动只是为了构造数学约束解方程,不是因为变换关系会动;
  • 手眼标定必须先做相机内参标定,内参错误则外参(手眼结果)完全无效;
  • 全世界手眼标定只有两种构型:眼在手上 EiH、眼在手外 EtH,数学模型统一为 AX=XB\mathbf{AX}=\mathbf{XB}AX=XB。

1. 标准坐标系体系与变换规则

工程上手眼标定90%的错误,都来自坐标系定义混乱、变换方向搞反。

本文使用工业机器人通用标准,所有推导基于这套体系。

1.1 四大核心坐标系

(1)基坐标系 {B}\{B\}{B} Base
  • 机器人绝对静止的基准坐标系;
  • ABB:底座中心,Z轴竖直向上;
  • UR:底座法兰中心;
  • FANUC:J1轴轴线在地面的投影点;
  • 机器人控制器输出的所有末端位姿,均相对于 {B}\{B\}{B}。
(2)末端执行器坐标系 {E}\{E\}{E} End-Effector
  • 通常为机器人法兰中心坐标系(默认TCP);
  • 若安装夹爪、相机支架、焊枪,需额外做TCP标定修正;
  • {E}\{E\}{E} 相对 {B}\{B\}{B} 的位姿由机器人正运动学 DH 模型直接给出。
(3)相机光学坐标系 {C}\{C\}{C} Camera

严格遵循针孔相机模型:

  • 原点:相机光心(镜头中心);
  • X轴:向右;
  • Y轴:向下;
  • Z轴:沿光轴向前(指向拍摄场景);
  • 相机内参标定完成后,可通过 PnP 求解出靶标在 {C}\{C\}{C} 下的6DOF位姿。
(4)标定靶标坐标系 {T}\{T\}{T} Target
  • 载体:棋盘格、AprilTag、ChArUco 板;
  • 原点:棋盘格左上角角点 / Tag 中心;
  • Z轴:垂直靶标平面向外;
  • 约束:要么固连工作台(EiH),要么固连末端(EtH),相对刚体无相对运动。

1.2 齐次变换矩阵严格定义

统一符号规则:
TAB \mathbf{T}_{AB} TAB

表示:将点从坐标系{B}\{B\}{B} 变换到 坐标系{A}\{A\}{A}

数学关系:
PA=TAB⋅PB P_A = \mathbf{T}_{AB} \cdot P_B PA=TAB⋅PB

逆变换规则(工程高频使用)
TAB−1=TBA=[RABT−RABTtAB01] \mathbf{T}{AB}^{-1} = \mathbf{T}{BA}= \begin{bmatrix} \mathbf{R}{AB}^T & -\mathbf{R}{AB}^T \mathbf{t}_{AB}\\ \mathbf{0}&1 \end{bmatrix} TAB−1=TBA=[RABT0−RABTtAB1]
旋转矩阵正交,逆=转置;平移部分做反向映射。

2. 两种手眼构型:物理安装+约束链路

手眼标定只分两类,区别仅在相机装在哪、靶标装在哪,数学最终统一。

2.1 Eye-in-Hand(EiH)眼在手上

安装方式

相机刚性固定在机器人末端执行器上,和法兰/夹爪一起运动,无相对位移。

约束关系

标定板 {T}\{T\}{T} 固定在工作台/地面,与基坐标系 {B}\{B\}{B} 固连:
TBT=Constant \mathbf{T}_{BT} = \text{Constant} TBT=Constant

待求量 X\mathbf{X}X:末端坐标系 → 相机坐标系 的固定变换
X=TEC \mathbf{X}=\mathbf{T}_{EC} X=TEC

完整坐标变换链路

基坐标系到靶标的路径只有一条:
TBT=TBE⋅TEC⋅TCT \mathbf{T}{BT} = \mathbf{T}{BE} \cdot \mathbf{T}{EC} \cdot \mathbf{T}{CT} TBT=TBE⋅TEC⋅TCT

翻译:

基坐标系 → 末端 → 相机 → 靶标

2.2 Eye-to-Hand(EtH)眼在手外

安装方式

相机固定在机器人外部支架,与地面固连,完全不随机械臂运动。

约束关系

标定板 {T}\{T\}{T} 刚性固定在机器人末端 {E}\{E\}{E},随臂运动:
TET=Constant \mathbf{T}_{ET}=\text{Constant} TET=Constant

待求量 X\mathbf{X}X:基坐标系 → 相机坐标系 的固定变换
X=TBC \mathbf{X}=\mathbf{T}_{BC} X=TBC

完整坐标变换链路

靶标位姿有两条等价路径:
TBC⋅TCT=TBE⋅TET \mathbf{T}{BC}\cdot\mathbf{T}{CT} = \mathbf{T}{BE}\cdot\mathbf{T}{ET} TBC⋅TCT=TBE⋅TET

翻译:

基→相机→靶标 = 基→末端→靶标

3. AX=XB\mathbf{AX=XB}AX=XB 方程完整严格推导

手眼标定的数学灵魂就是这个方程,两种构型分别推导,无任何简化。

所有现成的手眼标定求解库(如 OpenCV cv2.calibrateHandEye、ROS easy_handeye、MATLAB handEyeCalibration),输入接口都是标准 AX=XB 形式,要求 A 是末端相对变换、B 是靶标相对变换

3.1 通用变量定义

机械臂运动到两个不同位姿:

  • 位姿1:末端位姿 TBE1\mathbf{T}{BE1}TBE1,相机观测靶标 TCT1\mathbf{T}{CT1}TCT1
  • 位姿2:末端位姿 TBE2\mathbf{T}{BE2}TBE2,相机观测靶标 TCT2\mathbf{T}{CT2}TCT2

定义相对运动:

机器人末端相对运动矩阵 A\mathbf{A}A

A=TE1E2=TBE2⋅TBE1−1 \mathbf{A}=\mathbf{T}{E1E2}=\mathbf{T}{BE2}\cdot\mathbf{T}_{BE1}^{-1} A=TE1E2=TBE2⋅TBE1−1

描述:机械臂从位姿1运动到位姿2,末端自身的相对变换。

相机观测靶标相对运动矩阵 B\mathbf{B}B

B=TT1T2=TCT2⋅TCT1−1 \mathbf{B}=\mathbf{T}{T1T2}=\mathbf{T}{CT2}\cdot\mathbf{T}_{CT1}^{-1} B=TT1T2=TCT2⋅TCT1−1

描述:相机看到的靶标相对变换。

3.2 EiH 构型推导 AX=XB\mathbf{AX=XB}AX=XB

由 EiH 变换链路,机械臂在两个位姿下均满足坐标约束:
{TBT=TBE1⋅X⋅TCT1(1)TBT=TBE2⋅X⋅TCT2(2) \begin{cases} \mathbf{T}{BT}=\mathbf{T}{BE1}\cdot\mathbf{X}\cdot\mathbf{T}{CT1} \quad (1)\\ \mathbf{T}{BT}=\mathbf{T}{BE2}\cdot\mathbf{X}\cdot\mathbf{T}{CT2} \quad (2) \end{cases} {TBT=TBE1⋅X⋅TCT1(1)TBT=TBE2⋅X⋅TCT2(2)

令式 (1) = 式 (2),消去恒定不变的 TBT\mathbf{T}_{BT}TBT:

TBE1⋅X⋅TCT1\mathbf{T}{BE1}\cdot\mathbf{X}\cdot\mathbf{T}{CT1}TBE1⋅X⋅TCT1 = TBE2⋅X⋅TCT2\mathbf{T}{BE2}\cdot\mathbf{X}\cdot\mathbf{T}{CT2}TBE2⋅X⋅TCT2

等式两侧左乘 TBE2−1\mathbf{T}_{BE2}^{-1}TBE2−1右乘 TCT1−1\mathbf{T}_{CT1}^{-1}TCT1−1,整理可得:

TBE2−1⋅TBE1⋅X\mathbf{T}{BE2}^{-1}\cdot\mathbf{T}{BE1}\cdot\mathbf{X}TBE2−1⋅TBE1⋅X = X⋅TCT2⋅TCT1−1\mathbf{X}\cdot\mathbf{T}{CT2}\cdot\mathbf{T}{CT1}^{-1}X⋅TCT2⋅TCT1−1

将前文定义的相对运动矩阵 A\mathbf{A}A、B\mathbf{B}B 代入:
A−1⋅X=X⋅B \mathbf{A}^{-1}\cdot\mathbf{X}=\mathbf{X}\cdot\mathbf{B} A−1⋅X=X⋅B

最终整理为手眼标定标准方程形式:
AX=XB \mathbf{AX}=\mathbf{XB} AX=XB

共轭关系的核心是「两个刚体变换在不同坐标系下的等价表示」,因此变换的方向(A/A⁻¹、B/B⁻¹)不影响共轭关系的存在性,只是坐标系的观测方向反过来了,因此可以等价转换为标准 AX=XB 形式

3.3 EtH 构型推导 AX=XB\mathbf{AX=XB}AX=XB

由 EtH 变换链路:
{X⋅TCT1=TBE1⋅TET(1)X⋅TCT2=TBE2⋅TET(2) \begin{cases} \mathbf{X}\cdot\mathbf{T}{CT1}=\mathbf{T}{BE1}\cdot\mathbf{T}{ET}\quad(1)\\ \mathbf{X}\cdot\mathbf{T}{CT2}=\mathbf{T}{BE2}\cdot\mathbf{T}{ET}\quad(2) \end{cases} {X⋅TCT1=TBE1⋅TET(1)X⋅TCT2=TBE2⋅TET(2)

(1)、(2) 同时左乘 X−1\mathbf{X}^{-1}X−1:
{TCT1=X−1TBE1TETTCT2=X−1TBE2TET \begin{cases} \mathbf{T}{CT1}=\mathbf{X}^{-1}\mathbf{T}{BE1}\mathbf{T}{ET}\\ \mathbf{T}{CT2}=\mathbf{X}^{-1}\mathbf{T}{BE2}\mathbf{T}{ET} \end{cases} {TCT1=X−1TBE1TETTCT2=X−1TBE2TET

联立消去 TET\mathbf{T}{ET}TET:
TCT2=X−1TBE2TBE1−1XTCT1\mathbf{T}
{CT2}=\mathbf{X}^{-1}\mathbf{T}{BE2}\mathbf{T}{BE1}^{-1}\mathbf{X}\mathbf{T}_{CT1}TCT2=X−1TBE2TBE1−1XTCT1

右乘 TCT1−1\mathbf{T}_{CT1}^{-1}TCT1−1:

TCT2TCT1−1=X−1TBE2TBE1−1X\mathbf{T}{CT2}\mathbf{T}{CT1}^{-1}= \mathbf{X}^{-1}\mathbf{T}{BE2}\mathbf{T}{BE1}^{-1}\mathbf{X}TCT2TCT1−1=X−1TBE2TBE1−1X

代入 A\mathbf{A}A、B\mathbf{B}B:
B=X−1AX \mathbf{B}=\mathbf{X}^{-1}\mathbf{A}\mathbf{X} B=X−1AX

最终同样得到:
AX=XB \mathbf{AX=XB} AX=XB

3.4 核心结论

  • EiH 和 EtH 数学模型完全一致,都是解 AX=XB\mathbf{AX=XB}AX=XB;
  • 区别仅在于:
    • EiH:X=TEC\mathbf{X}=\mathbf{T}_{EC}X=TEC
    • EtH:X=TBC\mathbf{X}=\mathbf{T}_{BC}X=TBC
  • 多组位姿才能构造超定方程,单组位姿有无穷多解。

4. AX=XB\mathbf{AX=XB}AX=XB 求解完整细节(旋移解耦+算法)

AX=XB\mathbf{AX=XB}AX=XB 是李群方程,不能直接线性求解,工业通用流程:

先解旋转 RX\mathbf{R}_XRX → 再代入解平移 tX\mathbf{t}_XtX

4.1 矩阵解耦拆分

将 A、B、X\mathbf{A、B、X}A、B、X 拆分为旋转+平移:
A=[RAtA01],B=[RBtB01],X=[RXtX01] \mathbf{A}= \begin{bmatrix} \mathbf{R}_A&\mathbf{t}_A\\ 0&1 \end{bmatrix},\quad \mathbf{B}= \begin{bmatrix} \mathbf{R}_B&\mathbf{t}_B\\ 0&1 \end{bmatrix},\quad \mathbf{X}= \begin{bmatrix} \mathbf{R}_X&\mathbf{t}_X\\ 0&1 \end{bmatrix} A=[RA0tA1],B=[RB0tB1],X=[RX0tX1]

代入 AX=XB\mathbf{AX=XB}AX=XB 展开,得到两个独立方程:

(1)旋转方程(SO(3))

RARX=RXRB \mathbf{R}_A \mathbf{R}_X = \mathbf{R}_X \mathbf{R}_B RARX=RXRB

(2)平移方程(R3\mathbb{R}^3R3)

RAtX+tA=RXtB+tX \mathbf{R}_A \mathbf{t}_X + \mathbf{t}_A = \mathbf{R}_X \mathbf{t}_B + \mathbf{t}_X RAtX+tA=RXtB+tX

4.2 旋转部分求解

4.2.1 Horn 四元数法(最通用)
  • 把旋转矩阵转为单位四元数;
  • 构造 4×44\times44×4 线性方程组 Mq=0\mathbf{M}\mathbf{q}=0Mq=0;
  • 对 M\mathbf{M}M 做 SVD,最小奇异值对应的右奇异向量为最优四元数;
  • 归一化后转回旋转矩阵。

优点:线性求解、无迭代、速度快、精度均衡。

4.2.2 Tsai-Lenz 轴角法(工业控制器常用)
  • 用旋转向量(轴角)表示旋转;
  • 转化为叉乘线性方程;
  • 最小二乘求解旋转向量。

优点:计算量极小,适合嵌入式/实时系统;

缺点:对噪声敏感,小姿态运动精度差。

4.2.3 Daniilidis 对偶四元数法(精度最高)
  • 用对偶四元数统一表示 SE(3) 变换;
  • 旋移耦合求解,不需要解耦;
  • 全局最优,抗噪声能力最强。

工业高精度场景首选(精密抓取、装配)。

4.3 旋转矩阵正交化强制修正

求解出的 RX\mathbf{R}_XRX 受噪声影响,不再满足正交性:
RTR≠I \mathbf{R}^T\mathbf{R}\neq\mathbf{I} RTR=I

必须做 SVD 正交化:
SVD(Rraw)=UΣVTRopt=UVT \text{SVD}(\mathbf{R}{raw})=\mathbf{U}\mathbf{\Sigma}\mathbf{V}^T\\ \mathbf{R}{opt}=\mathbf{U}\mathbf{V}^T SVD(Rraw)=UΣVTRopt=UVT

若 det⁡(Ropt)=−1\det(\mathbf{R}_{opt})=-1det(Ropt)=−1,乘 diag(1,1,−1)\text{diag}(1,1,-1)diag(1,1,−1) 恢复右手系。

这一步不做,平移一定会出现系统性偏差。

4.4 平移部分求解(超定最小二乘)

将已求出的 RX\mathbf{R}_XRX 代入平移方程,整理:
(RA−I)tX=RXtB−tA (\mathbf{R}_A-\mathbf{I})\mathbf{t}_X = \mathbf{R}_X \mathbf{t}_B - \mathbf{t}_A (RA−I)tX=RXtB−tA

  • 单组数据:3个方程;
  • N组数据:3N个方程,构成超定线性方程组;
  • 用 SVD / QR 分解做最小二乘,得到最优 tX\mathbf{t}_XtX。

⚠️ 工程致命注意:

相机单位(米)与机器人单位(毫米)必须统一,否则平移差1000倍。

5. 工业级完整标定流程

5.1 前置标定(缺一不可)

相机内参+畸变标定

张正友标定,采集15~20张不同角度棋盘格,重投影误差<0.3px合格。

机器人TCP标定

保证末端坐标系 {E}\{E\}{E} 精准。

靶标安装

优先 ChArUco,平面度<0.01mm,哑光防反光。

5.2 数据采集(精度决定性步骤)

  • 采集组数:20~30组;
  • 姿态要求:
    • 覆盖工作空间上下左右前后(机械臂六个移动方向都要动一动);
    • 禁止纯平移、纯旋转、靶标与光轴垂直(退化);
    • 姿态随机无规律,充分激励6自由度;
  • 同步要求:机器人到位稳停100ms再采图,避免运动模糊;
  • 每组数据:机器人6D位姿 + 相机解算靶标6D位姿。

5.3 数据预处理

  • 统一单位(米/毫米);
  • 剔除角点检测失败、重投影误差过大的坏点;
  • 计算两两相对变换 Ai、Bi\mathbf{A}_i、\mathbf{B}_iAi、Bi。

5.4 求解与验证

  • 对偶四元数求解 X\mathbf{X}X;
  • 旋转矩阵正交化;
  • 平移最小二乘;
  • 验证指标:
    • 重投影误差<0.5px;
    • 独立位姿三维误差<0.2mm;
    • 实际抓取成功率>99%。

6. 误差来源全溯源与优化

6.1 主要误差项

  • 相机内参/畸变残留误差;
  • 角点检测噪声;
  • 机器人重复定位误差;
  • 采集姿态退化(秩亏,每次没有充分利用六个方向的移动,只动了较少的方向);
  • 坐标系/变换方向错误;
  • 单位不统一;
  • 旋转未正交化。

6.2 工程优化手段

  • 用高分辨率工业相机+远心镜头;
  • 采集姿态"杂乱无章";
  • 多组数据平均,剔除异常值;
  • 算法选用对偶四元数;
  • 定期复检标定(高温/振动环境)。

7. 视觉定位→机器人控制

7.1 EiH 在线转换

相机观测物体位姿 TCO\mathbf{T}{CO}TCO:
TBO=TBE⋅X⋅TCO \mathbf{T}
{BO}=\mathbf{T}{BE}\cdot\mathbf{X}\cdot\mathbf{T}{CO} TBO=TBE⋅X⋅TCO

7.2 EtH 在线转换

相机观测物体位姿 TCO\mathbf{T}{CO}TCO:
TBO=X⋅TCO \mathbf{T}
{BO}=\mathbf{X}\cdot\mathbf{T}_{CO} TBO=X⋅TCO

得到 TBO\mathbf{T}_{BO}TBO 后,机器人即可做轨迹规划与抓取。

8. 排错指南

  • 变换方向搞反
    TAB\mathbf{T}{AB}TAB 与 TBA\mathbf{T}{BA}TBA 混用,坐标完全错位。
  • A、B\mathbf{A、B}A、B 顺序写反
    求解出镜像矩阵,抓取完全偏。
  • 姿态采集退化
    纯平移/纯旋转,方程秩亏,求解发散。
  • 单位不统一
    米/毫米混用,平移差1000倍。
  • 未做旋转正交化
    平移出现固定偏差。
  • 相机Z轴方向搞反
    深度为负,定位完全错误。

9. 进阶拓展

  • 多相机手眼标定
    多相机分别标定 TBC\mathbf{T}_{BC}TBC,融合提升定位精度;
  • 动态手眼标定
    卡尔曼滤波在线更新 X\mathbf{X}X,适应振动、热形变;
  • 2D 平面手眼标定
    平面抓取简化为相似变换,计算量极低;
  • 无靶标自标定
    利用场景物体特征,无需专用标定板;
  • 手眼+运动学联合标定
    同时修正 DH 参数与手眼变换。

总结

  • 手眼标定本质:求一组固定不变的 SE(3) 变换 X\mathbf{X}X;
  • 只有两种构型,数学统一为 AX=XB\mathbf{AX=XB}AX=XB;
  • 求解流程:旋转求解 → 正交化 → 平移最小二乘;
  • 工程核心:相机内参 + 规范姿态采集 + 鲁棒算法;
  • 所有视觉抓取、装配、分拣,最终都依赖这一个矩阵。
相关推荐
光锥智能2 小时前
擎天租李一言:从“租”到“用”将构筑机器人商用完整生态
机器人
YJlio3 小时前
2026年4月19日60秒读懂世界:从学位扩容到人形机器人夺冠,今天最值得关注的6个信号
python·安全·ios·机器人·word·iphone·7-zip
沫儿笙20 小时前
库卡焊接机器人氩气节气装置
人工智能·机器人
kobesdu1 天前
【ROS2实战笔记-6】RobotPerf:机器人计算系统的基准测试方法论
笔记·机器人·ros
敢敢のwings1 天前
NVIDIA Isaac GR00T与Cosmos:重塑机器人学习的合成数据革命
学习·机器人
程序员老邢1 天前
【技术底稿 17】DevOps 监控告警实战踩坑复盘 —— 企微机器人告警 + Milvus 向量库监控全流程验证
运维·机器人·企业微信·devops·milvus
weixin_513449962 天前
PCA、SVD 、 ICP 、kd-tree算法的简单整理总结
c++·人工智能·学习·算法·机器人
这个昵称叫什么好呢2 天前
nvidia显卡驱动升级造成的无法开机(黑屏)问题
机器人
施努卡机器视觉2 天前
阴极铜机器人剥片:SNK施努卡的双线并行自动化解决方案
运维·机器人·自动化