三维刚体运动,旋转矩阵,角轴,欧拉角,四元素,帮我详细的讲解-13

这是一个非常经典且核心的机器人学与计算机视觉话题。三维空间中的刚体运动(Rigid Body Motion)看似简单,但如何用数学优雅、无奇异性(Singularity)地描述旋转,一直是这门学科的难点。

刚体运动由两部分组成:平移(Translation) + 旋转(Rotation)

  • 平移很简单,用一个三维向量 就能搞定。
  • 旋转则非常复杂,因为它是非线性的。

为了描述旋转,我们有四种主流的数学工具。下面我将为你详细拆解每一种的原理、优缺点及转换关系。


1. 旋转矩阵 (Rotation Matrix)

这是最基础、最通用的表达方式。

核心概念

我们可以把旋转理解为坐标系的变换。假设有一个坐标系 相对于坐标系 进行了旋转,旋转矩阵 的每一列,其实就是 坐标系的三个主轴单位向量在 坐标系下的投影。

数学表达

它是一个 的矩阵:

重要性质 ( 群)

旋转矩阵必须满足两个严格条件,构成特殊正交群 :

  1. 正交性: (即 ,逆矩阵等于转置矩阵,计算逆变换非常快)。
  2. 行列式为 1: (如果不为1,可能包含镜像翻转或缩放)。
  • 优点

  • 描述是唯一的。

  • 可以直接用于坐标变换计算:。

  • 级联旋转就是矩阵相乘。

  • 缺点

  • 冗余:用了 9 个数来表达仅有 3 个自由度(DoF)的旋转。

  • 数值漂移:在计算机迭代计算中, 可能会逐渐失去正交性,需要经常做“正交化”修正。


2. 旋转向量 / 角轴 (Angle-Axis)

核心概念

欧拉定理告诉我们:任何三维旋转都可以看作是绕着空间中某个轴 旋转了某个角度 。

数学表达

我们用一个向量 来表示:

  • 方向:向量的单位方向 就是旋转轴。
  • 长度:向量的模长 就是旋转角度(弧度)。

罗德里格斯公式 (Rodrigues' Rotation Formula)

这是连接旋转向量旋转矩阵的桥梁。给定旋转轴 和角度 ,求矩阵 :

(注: 是向量 对应的反对称矩阵,用于表示叉乘)

  • 优点

  • 直观,物理意义明确。

  • 紧凑,只用 3 个数。

  • 缺点

  • 不方便直接进行旋转合成(不能像矩阵那样直接相乘)。

  • 存在奇异性:当旋转角度 时,旋转轴 无法确定。


3. 欧拉角 (Euler Angles)

这是最符合人类直觉的描述方式,常见于航空航天和游戏开发。

核心概念

将一次复杂的旋转分解为三次绕主轴的简单旋转。最常用的顺序是 Z-Y-X 顺序(在航空中对应 Yaw-Pitch-Roll):

  1. 绕 Z 轴转(偏航,Yaw)
  2. 绕 Y 轴转(俯仰,Pitch)
  3. 绕 X 轴转(滚转,Roll)

数学表达

致命弱点:万向锁 (Gimbal Lock)

这是欧拉角最大的坑。
当中间的轴(例如 Pitch 俯仰角)旋转 90 度时,第三个轴(Roll)会和第一个轴(Yaw)重合。
后果:你失去了一个自由度。此时无论怎么调整 Roll 或 Yaw,物体实际上都在绕同一个绝对轴旋转。系统会“锁死”在一个平面运动中,无法覆盖三维空间。

  • 优点

  • 非常直观,容易理解(比如“抬头”、“右转”)。

  • 这三个参数是解耦的,便于单独调整。

  • 缺点

  • 万向锁问题

  • 顺序依赖:先转 X 后转 Y,和先转 Y 后转 X,结果完全不同。需要严格约定旋转顺序(如 ZYX, XYZ 等,共有 12 种定义)。


4. 四元数 (Quaternion)

这是计算机图形学和SLAM(即时定位与地图构建)中的王者。虽然数学上最难理解,但对计算机最友好。

核心概念

四元数是复数的扩展。普通复数有一个实部一个虚部,四元数有一个实部 和三个虚部
用于表示旋转的是
单位四元数
(模长为 1)。

数学表达

其中虚部 满足 。

它与角轴有着紧密的联系:

为什么它最好?

四元数巧妙地解决了所有问题:

  1. 无万向锁:它不依赖轴的顺序。
  2. 计算高效:比矩阵乘法快,存储空间小(4个数)。
  3. 插值平滑:在做动画或路径规划时,四元数的球面线性插值(SLERP)能提供最短路径的平滑旋转,而欧拉角插值会让物体动作看起来很怪异。
  • 优点

  • 紧凑、无奇异性、计算快。

  • 它是目前处理 3D 旋转的标准工程方法。

  • 缺点

  • 非常不直观,人类很难看着这 4 个数字想象出物体是怎么转的。

  • 双倍覆盖: 和 表示同一个旋转。


总结与对比

特性 旋转矩阵 (Matrix) 欧拉角 (Euler) 角轴 (Angle-Axis) 四元数 (Quaternion)
直观性 ❌ (9个数字) ✅ (非常直观) ✅ (较直观) ❌ (很难理解)
无奇异性 ❌ (万向锁) ❌ (时)
紧凑性 ❌ (9个数) ✅ (3个数) ✅ (3个数) ✅ (4个数)
计算效率 低 (需三角函数)
主要用途 最终坐标变换 人机交互、面板显示 优化算法推导 底层运算、插值

建议与下一步

如果你正在做SLAM(同时定位与建图)机器人控制算法开发:

  1. 底层计算(状态估计、积分):请务必使用四元数
  2. 可视化/调试(打印日志):转换为欧拉角给自己看。
  3. 推导雅可比矩阵(优化):通常会用到李代数(是对旋转矩阵或四元数的微分描述,本质类似于角轴)

你现在是在具体处理某个算法(比如卡尔曼滤波、SLAM前端),还是在学习基础理论?
如果你需要,我可以为你演示如何用 Python (NumPy/SciPy) 实现这些表示法之间的相互转换。

posted @ 2026-01-04 10:29  jack-chen666  阅读(156)  评论(0)    收藏  举报