四元数:从复数推广到三维旋转的数学本质#

四元数由爱尔兰数学家哈密顿于1843年提出,是复数在三维空间的自然推广。其核心价值在于通过“实部+三维虚部”的结构描述旋转,完美规避欧拉角的轴序依赖与奇异问题(如万向锁),成为机器人学、计算机图形学等领域描述三维姿态的核心工具。

1 四元数的定义与表示:实部与虚部的协同作用#

四元数(Quaternion)通常记为\( \boldsymbol{q} \),标准形式由1个实部和3个虚部组成,完整表达三维旋转的“角度”与“轴方向”信息:

\( \boldsymbol{q} = q_0 + q_1 \boldsymbol{i} + q_2 \boldsymbol{j} + q_3 \boldsymbol{k} \)

  • 实部\( q_0 \)(无方向属性,对应旋转的“角度信息”);

  • 虚部\( q_1 \boldsymbol{i} + q_2 \boldsymbol{j} + q_3 \boldsymbol{k} \)(三维向量形式,记为\( \boldsymbol{q}_v = [q_1, q_2, q_3]^T \),对应旋转的“轴方向信息”);

  • 虚数单位规则\( \boldsymbol{i}^2 = \boldsymbol{j}^2 = \boldsymbol{k}^2 = -1 \),且满足乘法不可交换:\( \boldsymbol{i}\boldsymbol{j} = \boldsymbol{k} = -\boldsymbol{j}\boldsymbol{i} \)\( \boldsymbol{j}\boldsymbol{k} = \boldsymbol{i} = -\boldsymbol{k}\boldsymbol{j} \)\( \boldsymbol{k}\boldsymbol{i} = \boldsymbol{j} = -\boldsymbol{i}\boldsymbol{k} \)

关键性质

  • 不同单位相乘不满足交换律:\( \boldsymbol{u}\boldsymbol{v} \neq \boldsymbol{v}\boldsymbol{u} \)(即非交换性);

  • 对任意两个不同单位 \( \boldsymbol{u} \neq \boldsymbol{v} \),有 \( \boldsymbol{u}\boldsymbol{v} = -\boldsymbol{v}\boldsymbol{u} \),称为反交换性

  • 三个单位满足右手螺旋循环关系:\( \boldsymbol{i} \to \boldsymbol{j} \to \boldsymbol{k} \to \boldsymbol{i} \)

这些规则可统一记为:

\( \boldsymbol{u}\boldsymbol{v} = -\boldsymbol{v}\boldsymbol{u}, \quad \text{且} \quad \boldsymbol{i}\boldsymbol{j}\boldsymbol{k} = -1 \)

1.1 实部的意义:旋转角度的“余弦映射”#

四元数的实部\( q_0 \)是连接数学表达与物理旋转的核心,仅针对单位四元数(满足\( \|\boldsymbol{q}\| = \sqrt{q_0^2 + q_1^2 + q_2^2 + q_3^2} = 1 \)),其与旋转角度\( \theta \)(绕旋转轴的旋转角度)的关系为:

\( q_0 = \cos\left(\frac{\theta}{2}\right) \)

1.1.1 数学关联:实部与角度的直接映射#

通过具体角度计算,可直观理解实部的数值含义:

  • \( \theta = 0^\circ \)(无旋转):\( \cos\left(\frac{0^\circ}{2}\right) = \cos0^\circ = 1 \),此时\( q_0 = 1 \),虚部\( q_1 = q_2 = q_3 = 0 \),四元数为\( \boldsymbol{q} = [1, 0, 0, 0]^T \)

  • \( \theta = 90^\circ \)(直角旋转):\( \cos\left(\frac{90^\circ}{2}\right) = \cos45^\circ = \frac{\sqrt{2}}{2} \approx 0.7071 \),此时\( q_0 \approx 0.7071 \),虚部模长\( \sin45^\circ \approx 0.7071 \)

  • \( \theta = 180^\circ \)(反向旋转):\( \cos\left(\frac{180^\circ}{2}\right) = \cos90^\circ = 0 \),此时\( q_0 = 0 \),四元数仅含虚部;

  • \( \theta = 270^\circ \)(逆时针旋转270°,等价于顺时针90°):\( \cos\left(\frac{270^\circ}{2}\right) = \cos135^\circ = -\frac{\sqrt{2}}{2} \approx -0.7071 \),但因四元数\( \boldsymbol{q} \)\( -\boldsymbol{q} \)等价,实际仍对应90°旋转效果。

1.1.2 物理意义:实部反映旋转“剧烈程度”#

实部数值大小可间接判断旋转的幅度:

  • \( q_0 \approx 1 \)(如\( q_0 = 0.999 \)):\( \cos\left(\frac{\theta}{2}\right) = 0.999 \),反算得\( \frac{\theta}{2} \approx \arccos0.999 \approx 5.7^\circ \),即\( \theta \approx 11.4^\circ \),在IMU实时更新的语境下,可视为“微幅旋转”,常见于IMU(惯性测量单元)的实时姿态更新;

  • \( q_0 \approx 0 \)(如\( q_0 = 0.1 \)):\( \cos\left(\frac{\theta}{2}\right) = 0.1 \),反算得\( \frac{\theta}{2} \approx \arccos0.1 \approx 84.3^\circ \),即\( \theta \approx 168.6^\circ \),属于“大幅旋转”,常见于机械臂末端姿态的快速调整。

1.1.3 工程应用:实部作为计算依据#

在机器人学实践中,实部是误差判断与插值的关键:

  • 误差判断(多传感器融合)
    设预测姿态四元数为\( \boldsymbol{q}_{pred} = [q_{p0}, q_{p1}, q_{p2}, q_{p3}]^T \),观测姿态四元数为\( \boldsymbol{q}_{obs} = [q_{o0}, q_{o1}, q_{o2}, q_{o3}]^T \)
    两者的点积为\( \cos\phi = q_{p0}q_{o0} + q_{p1}q_{o1} + q_{p2}q_{o2} + q_{p3}q_{o3} \)\( \phi \)为两姿态的角度差)。
    \( q_{p0}q_{o0} \approx 1 \)(如\( q_{p0} = q_{o0} = 0.99 \)),则\( \cos\phi \approx 1 \)\( \phi \approx 0^\circ \),说明误差极小,融合时可降低观测权重;若\( q_{p0}q_{o0} \approx 0 \),则\( \phi \approx 90^\circ \),误差极大,需重点修正。

  • SLERP插值稳定性
    机械臂姿态插值(球面线性插值,SLERP)中,若两四元数点积\( \cos\phi \approx 1 \)(如\( \phi < 5^\circ \)),可简化为线性插值(LERP)并进行归一化,计算量从SLERP的“三角函数+除法”降至“加法+乘法+归一化”,同时保持足够的精度,在典型嵌入式平台(如Cortex-M7)上实测减少约25-40%计算耗时。

标准SLERP公式:
\( \text{SLERP}(t) = \frac{\sin\left((1-t)\phi\right)}{\sin\phi} \cdot \boldsymbol{q}_s + \frac{\sin\left(t\phi\right)}{\sin\phi} \cdot \boldsymbol{q}_e \)

优化后的LERP近似(当\( \phi < 5^\circ \)时适用):
\( \boldsymbol{q}(t) = \frac{(1-t)\boldsymbol{q}_s + t\boldsymbol{q}_e}{\|(1-t)\boldsymbol{q}_s + t\boldsymbol{q}_e\|} \)

其中,\( \phi = \arccos\left(q_s \cdot q_e\right) \)\( t \in [0,1] \)\( \boldsymbol{q}_s \)为起始四元数,\( \boldsymbol{q}_e \)为目标四元数

计算量对比:

- **SLERP**:涉及$ \arccos $、$ \sin $运算及除法,计算量较高
- **LERP**:仅需加法、乘法和归一化操作,计算量较低

1.2 虚部的意义:旋转轴的“向量具象”#

四元数的虚部\( \boldsymbol{q}_v = [q_1, q_2, q_3]^T \)是旋转轴的数学载体,与旋转轴单位向量\( \boldsymbol{n} = [n_x, n_y, n_z]^T \)、旋转角度\( \theta \)的关系为:

\( \boldsymbol{q}_v = \sin\left(\frac{\theta}{2}\right) \cdot \boldsymbol{n} \)

1.2.1 数学定义:虚部的方向与模长#

  • 方向:虚部\( \boldsymbol{q}_v \)的方向与旋转轴\( \boldsymbol{n} \)完全一致(因\( \sin\left(\frac{\theta}{2}\right) > 0 \)\( \theta \in (0, 360^\circ) \));
    例:绕X轴旋转时,\( \boldsymbol{n} = [1, 0, 0]^T \),虚部\( \boldsymbol{q}_v = \left[\sin\frac{\theta}{2}, 0, 0\right]^T \);绕Y轴旋转时,\( \boldsymbol{q}_v = \left[0, \sin\frac{\theta}{2}, 0\right]^T \)

  • 模长:虚部的模长\( |\boldsymbol{q}_v| = \sqrt{q_1^2 + q_2^2 + q_3^2} = \sin\left(\frac{\theta}{2}\right) \)(因\( \boldsymbol{n} \)为单位向量,\( n_x^2 + n_y^2 + n_z^2 = 1 \));
    \( \theta = 90^\circ \)时,\( |\boldsymbol{q}_v| = \sin45^\circ \approx 0.7071 \);当\( \theta = 180^\circ \)时,\( |\boldsymbol{q}_v| = \sin90^\circ = 1 \)(在\( 0^\circ \leq \theta < 360^\circ \)范围内模长最大);当\( \theta = 0^\circ \)时,\( |\boldsymbol{q}_v| = 0 \)(无虚部)。

1.2.2 物理意义:虚部定义旋转“空间指向”#

三维旋转的核心是“绕哪个轴转”,虚部的核心作用就是定义这个轴的空间方向:

  • 若仅知实部(如\( q_0 = 0.7071 \)),只能确定旋转角度\( \theta = 90^\circ \),但无法知道是绕X、Y、Z轴还是任意空间轴旋转;

  • 结合虚部后,才能完整定义旋转:
    例1:\( \boldsymbol{q} = [0.7071, 0.7071, 0, 0]^T \)(虚部\( [0.7071, 0, 0]^T \))→ 绕X轴旋转90°;
    例2:\( \boldsymbol{q} = [0.7071, 0, 0.7071, 0]^T \)(虚部\( [0, 0.7071, 0]^T \))→ 绕Y轴旋转90°;
    例3:\( \boldsymbol{q} = [0.7071, 0, 0, 0.7071]^T \)(虚部\( [0, 0, 0.7071]^T \))→ 绕Z轴旋转90°。

1.2.3 工程应用:虚部作为姿态计算的核心载体#

在机器人学实际开发中,虚部的数值变化直接反映姿态的动态特征,是工程计算的关键:

  • IMU姿态更新(小角度近似)
    IMU输出的角速度\( \boldsymbol{\omega} = [\omega_x, \omega_y, \omega_z]^T \)(单位:rad/s),表示“瞬时旋转轴方向+旋转速率”。在短时间\( \Delta t \)(如0.001s)内,旋转角度\( \theta = \boldsymbol{\omega} \cdot \Delta t \)(小角度),此时\( \sin\left(\frac{\theta}{2}\right) \approx \frac{\theta}{2} \),虚部增量为:

\( \Delta \boldsymbol{q}_v = \frac{\boldsymbol{\omega} \cdot \Delta t}{2} \)

实部增量\( \Delta q_0 \approx 1 - \frac{(\boldsymbol{\omega} \cdot \Delta t)^2}{8} \)(小角度近似\( \cos x \approx 1 - \frac{x^2}{2} \)),增量四元数为\( \Delta \boldsymbol{q} = [\Delta q_0, \Delta \boldsymbol{q}_v]^T \),当前姿态更新公式为:

\( \boldsymbol{q}_{\text{new}} = \boldsymbol{q}_{\text{old}} \cdot \Delta \boldsymbol{q} \)

  • 姿态误差判断(旋转轴偏差分析)
    设预测姿态四元数\( \boldsymbol{q}_{pred} = [q_{p0}, q_{p1}, q_{p2}, q_{p3}]^T \),观测姿态四元数\( \boldsymbol{q}_{obs} = [q_{o0}, q_{o1}, q_{o2}, q_{o3}]^T \),计算虚部差异\( \Delta \boldsymbol{q}_v = [q_{p1}-q_{o1}, q_{p2}-q_{o2}, q_{p3}-q_{o3}]^T \)

    • \( |\Delta \boldsymbol{q}_v| < 0.01 \)(小偏差),说明旋转轴接近,误差主要来自角度(实部差异);

    • \( |\Delta \boldsymbol{q}_v| > 0.1 \)(大偏差),说明旋转轴偏差大,需通过传感器(如视觉)修正轴方向。

  • SLERP插值方向控制(最短路径插值)
    机械臂姿态插值时,若起始四元数\( \boldsymbol{q}_s \)与目标四元数\( \boldsymbol{q}_e \)的虚部点积\( \boldsymbol{q}_{sv} \cdot \boldsymbol{q}_{ev} < 0 \)(方向相反),则两四元数的角度差\( \phi > 180^\circ \),插值会绕“远路”。此时需将其中一个四元数取反(如\( \boldsymbol{q}_e' = -\boldsymbol{q}_e \)),使虚部点积\( >0 \),确保插值沿“最短路径”(\( \phi < 180^\circ \))进行。

1.3 旋转四元数的约束与等价性#

1.3.1 单位长度约束(纯旋转的前提)#

描述旋转的四元数必须满足单位长度约束

\( \|\boldsymbol{q}\| = \sqrt{q_0^2 + q_1^2 + q_2^2 + q_3^2} = 1 \)

若四元数非单位长度(如\( \|\boldsymbol{q}\| = 2 \)),则旋转向量时会引入缩放(向量长度变为原来的2倍),无法实现纯旋转。工程中需通过“归一化”确保单位长度,归一化公式为:

\( \boldsymbol{q}_{\text{norm}} = \frac{\boldsymbol{q}}{\|\boldsymbol{q}\|} = \left[\frac{q_0}{\|\boldsymbol{q}\|}, \frac{q_1}{\|\boldsymbol{q}\|}, \frac{q_2}{\|\boldsymbol{q}\|}, \frac{q_3}{\|\boldsymbol{q}\|}\right]^T \)

1.3.2 等价四元数(旋转的周期性)#

由于旋转的周期性(旋转\( \theta \)与旋转\( \theta + 360^\circ \)效果一致),单位四元数存在符号相反的等价对

\( \boldsymbol{q} = [q_0, q_1, q_2, q_3]^T \quad \text{与} \quad -\boldsymbol{q} = [-q_0, -q_1, -q_2, -q_3]^T \quad \text{描述同一旋转} \)

验证:以绕X轴旋转90°为例,\( \boldsymbol{q} = [\cos45^\circ, \sin45^\circ, 0, 0]^T \approx [0.7071, 0.7071, 0, 0]^T \),而\( -q = [-0.7071, -0.7071, 0, 0]^T \),对应的旋转角度为\( \theta' = 2\arccos(-0.7071) = 2 \times 135^\circ = 270^\circ \),但绕X轴旋转270°与旋转-90°(顺时针90°)等价,最终效果与旋转90°一致(因向量旋转方向不影响最终位置)。

2 四元数的核心运算:服务于旋转的数学工具#

四元数的运算规则需满足“姿态更新”“向量旋转”等工程需求,核心包括加法、共轭、逆、乘法,其中乘法是实现旋转复合的关键。

2.1 基础运算(以单位四元数\( \boldsymbol{q} = q_0 + \boldsymbol{q}_v \)\( \boldsymbol{r} = r_0 + \boldsymbol{r}_v \)为例)#

\( \boldsymbol{q} = [q_0, q_1, q_2, q_3]^T \)\( \boldsymbol{q}_v = [q_1, q_2, q_3]^T \)),\( \boldsymbol{r} = [r_0, r_1, r_2, r_3]^T \)\( \boldsymbol{r}_v = [r_1, r_2, r_3]^T \)),基础运算规则如下:

运算类型

数学公式

说明

加法

\( \boldsymbol{q} + \boldsymbol{r} = (q_0 + r_0) + (q_1 + r_1)\boldsymbol{i} + (q_2 + r_2)\boldsymbol{j} + (q_3 + r_3)\boldsymbol{k} \)

对应分量相加,结果仍为四元数,主要用于误差计算(如\( \Delta \boldsymbol{q} = \boldsymbol{q}_{obs} - \boldsymbol{q}_{pred} \)

共轭

\( \boldsymbol{q}^* = q_0 - q_1\boldsymbol{i} - q_2\boldsymbol{j} - q_3\boldsymbol{k} = q_0 - \boldsymbol{q}_v \)

虚部取反,用于计算逆和向量旋转

\( \boldsymbol{q}^{-1} = \boldsymbol{q}^* \)(单位四元数)

非单位四元数逆为$ \boldsymbol{q}^{-1} = \boldsymbol{q}^*/

2.2 关键运算:四元数乘法(旋转复合)#

四元数乘法不满足交换律(对应旋转的非交换性,如先绕X轴转再绕Y轴转,与先绕Y轴转再绕X轴转结果不同),其结果由“实部点积”和“虚部叉积+点积”构成,公式为:

\( \boldsymbol{q}\boldsymbol{r} = (q_0 r_0 - \boldsymbol{q}_v \cdot \boldsymbol{r}_v) + (q_0 \boldsymbol{r}_v + r_0 \boldsymbol{q}_v + \boldsymbol{q}_v \times \boldsymbol{r}_v) \)

2.2.1 场景设定#

假设我们需要计算两个旋转的复合效果:

  • 先执行旋转\( \boldsymbol{r} \)(绕X轴旋转90°),四元数为\( \boldsymbol{r} = [\cos45^\circ, \sin45^\circ, 0, 0]^T \approx [0.7071, 0.7071, 0, 0]^T \)

  • 再执行旋转\( \boldsymbol{q} \)(绕Y轴旋转90°),四元数为\( \boldsymbol{q} = [\cos45^\circ, 0, \sin45^\circ, 0]^T \approx [0.7071, 0, 0.7071, 0]^T \)

接下来通过直接乘法矩阵形式两种方法计算复合旋转\( \boldsymbol{q}\boldsymbol{r} \),并验证其物理意义。

2.2.2 直接按公式计算四元数乘法#

四元数乘法公式:

\( \boldsymbol{q}\boldsymbol{r} = \underbrace{(q_0 r_0 - \boldsymbol{q}_v \cdot \boldsymbol{r}_v)}_{\text{实部}} + \underbrace{(q_0 \boldsymbol{r}_v + r_0 \boldsymbol{q}_v + \boldsymbol{q}_v \times \boldsymbol{r}_v)}_{\text{虚部}} \)

2.2.2.1 拆分四元数结构#
  • \( \boldsymbol{q} = [q_0, q_1, q_2, q_3]^T = [0.7071, 0, 0.7071, 0]^T \),其实部\( q_0=0.7071 \),虚部\( \boldsymbol{q}_v = [q_1, q_2, q_3]^T = [0, 0.7071, 0]^T \)

  • \( \boldsymbol{r} = [r_0, r_1, r_2, r_3]^T = [0.7071, 0.7071, 0, 0]^T \),其实部\( r_0=0.7071 \),虚部\( \boldsymbol{r}_v = [r_1, r_2, r_3]^T = [0.7071, 0, 0]^T \)

2.2.2.2 计算实部#

点积\( \boldsymbol{q}_v \cdot \boldsymbol{r}_v = (0 \times 0.7071) + (0.7071 \times 0) + (0 \times 0) = 0 \),因此:

\( \text{实部} = q_0 r_0 - \boldsymbol{q}_v \cdot \boldsymbol{r}_v = 0.7071 \times 0.7071 - 0 = 0.5 \)

2.2.2.3 计算虚部#
  • \( q_0 \boldsymbol{r}_v = 0.7071 \times [0.7071, 0, 0]^T = [0.5, 0, 0]^T \)

  • \( r_0 \boldsymbol{q}_v = 0.7071 \times [0, 0.7071, 0]^T = [0, 0.5, 0]^T \)

  • 叉积\( \boldsymbol{q}_v \times \boldsymbol{r}_v = \begin{vmatrix} \boldsymbol{i} & \boldsymbol{j} & \boldsymbol{k} \\ 0 & 0.7071 & 0 \\ 0.7071 & 0 & 0 \end{vmatrix} = [0, 0, -0.5]^T \)(计算过程:\( \boldsymbol{i} \)分量为\( 0.7071 \times 0 - 0 \times 0 = 0 \)\( \boldsymbol{j} \)分量为\( -(0 \times 0 - 0 \times 0.7071) = 0 \)\( \boldsymbol{k} \)分量为\( 0 \times 0 - 0.7071 \times 0.7071 = -0.5 \))。

三者相加得虚部:

\( [0.5, 0, 0]^T + [0, 0.5, 0]^T + [0, 0, -0.5]^T = [0.5, 0.5, -0.5]^T \)

2.2.2.4 直接乘法结果#

\( \boldsymbol{q}\boldsymbol{r} = [\text{实部}, \text{虚部}]^T = [0.5, 0.5, 0.5, -0.5]^T \)

2.2.3 四元数乘法矩阵形式#

四元数乘法可转化为“左乘矩阵×向量”:\( \boldsymbol{q}\boldsymbol{r} = \boldsymbol{Q}_L \cdot \boldsymbol{r} \),其中\( \boldsymbol{Q}_L \)\( \boldsymbol{q} \)的左乘矩阵:

\( \boldsymbol{Q}_L = \begin{bmatrix} q_0 & -q_1 & -q_2 & -q_3 \\ q_1 & q_0 & -q_3 & q_2 \\ q_2 & q_3 & q_0 & -q_1 \\ q_3 & -q_2 & q_1 & q_0 \end{bmatrix} \)

2.2.3.1 代入\( \boldsymbol{q} \)的参数构造\( \boldsymbol{Q}_L \)#

\( \boldsymbol{q} = [0.7071, 0, 0.7071, 0]^T \),因此:

\( \boldsymbol{Q}_L = \begin{bmatrix} 0.7071 & 0 & -0.7071 & 0 \\ 0 & 0.7071 & 0 & 0.7071 \\ 0.7071 & 0 & 0.7071 & 0 \\ 0 & -0.7071 & 0 & 0.7071 \end{bmatrix} \)

2.2.3.2 计算\( \boldsymbol{Q}_L \cdot \boldsymbol{r} \)#

\( \boldsymbol{r} = [0.7071, 0.7071, 0, 0]^T \),矩阵乘法结果:

\( \begin{bmatrix} 0.7071 \times 0.7071 + 0 \times 0.7071 + (-0.7071) \times 0 + 0 \times 0 \\ 0 \times 0.7071 + 0.7071 \times 0.7071 + 0 \times 0 + 0.7071 \times 0 \\ 0.7071 \times 0.7071 + 0 \times 0.7071 + 0.7071 \times 0 + 0 \times 0 \\ 0 \times 0.7071 + (-0.7071) \times 0.7071 + 0 \times 0 + 0.7071 \times 0 \end{bmatrix} = \begin{bmatrix} 0.5 \\ 0.5 \\ 0.5 \\ -0.5 \end{bmatrix} \)

与直接乘法结果完全一致,验证了计算正确性。

2.2.4 解读物理意义#

四元数乘法\( \boldsymbol{q}\boldsymbol{r} \)的物理意义是“先执行\( \boldsymbol{r} \)的旋转,再执行\( \boldsymbol{q} \)的旋转”(核心是“左乘后转、右乘先转”的旋转复合规则):

  1. 初始坐标系 → 执行\( \boldsymbol{r} \)(绕X轴转90°)→ 中间状态;

  2. 中间状态 → 相对于r旋转后的随体坐标系执行\( \boldsymbol{q} \)(绕Y轴转90°)→ 最终状态。

\( \boldsymbol{q}\boldsymbol{r} = [0.5, 0.5, 0.5, -0.5]^T \)正是这一复合旋转的四元数表示,与“先X轴、后Y轴”的旋转顺序完全对应。

2.2.5 坐标系注意:固定坐标系与随体坐标系的区别#

固定坐标系(Fixed Coordinate System)

  • 定义:坐标系的轴方向固定不变,不随物体的运动或旋转而改变,是“绝对静止”的基准, 此时复合旋转用左乘,即\( \boldsymbol{q}_{\text{total}} = \boldsymbol{q}_2 \cdot \boldsymbol{q}_1 \)(先\( \boldsymbol{q}_1 \),再\( \boldsymbol{q}_2 \))。

  • 别称:全局坐标系(Global Coordinate System)、惯性坐标系(Inertial Frame),三者本质一致,只是应用场景中的称呼不同(如实验室坐标系、世界坐标系均属于固定坐标系)。

  • 旋转特点:所有旋转操作的轴(如X、Y、Z轴)都以固定坐标系为基准,即“绝对旋转”(Extrinsic Rotation)。

  • **典型应用:**描述物体在世界中的绝对姿态)。

  • 示例
    若固定坐标系为地面坐标系(X轴向东,Y轴向北,Z轴向上),则“绕固定X轴旋转”始终以地面的东西方向为轴,与物体自身朝向无关。

随体坐标系(Body-Fixed Coordinate System)

  • 定义:坐标系的原点与物体质心重合,轴方向随物体的运动或旋转一起同步运动,始终“绑定”在物体上,此时增量旋转用右乘,即\( \boldsymbol{q}_{\text{new}} = \boldsymbol{q}_{\text{old}} \cdot \Delta\boldsymbol{q} \)\( \Delta\boldsymbol{q} \)为体坐标系下的增量旋转)。

  • 别称:体坐标系(Body Coordinate System)、局部坐标系(Local Frame),二者完全等价,均随物体运动。

  • 旋转特点:所有旋转操作的轴(如X、Y、Z轴)以物体当前的自身坐标系为基准,即“相对旋转”(Intrinsic Rotation)。

  • **典型应用:**描述物体自身的相对转动(如机器人关节旋转)。

  • 示例
    若随体坐标系绑定在机器人上(X轴沿机器人前方,Y轴沿机器人左侧,Z轴向上),则“绕随体X轴旋转”是机器人绕自身前进方向的旋转(如翻滚),轴的方向会随机器人转向而改变。

2.3 核心应用:四元数旋转向量#

四元数的核心用途是“旋转三维向量”(如传感器测量的点云、关节位置向量),其原理是将向量转化为纯虚四元数,通过“三明治乘法”(sandwich product)实现旋转,再提取虚部得到结果。

2.3.1 旋转步骤(以向量\( \boldsymbol{v} = [x, y, z]^T \)、旋转四元数\( \boldsymbol{q} \)为例)#

  1. 向量转纯虚四元数:将三维向量\( \boldsymbol{v} \)转化为实部为0的纯虚四元数\( \boldsymbol{v}_q \)

\( \boldsymbol{v}_q = 0 + x\boldsymbol{i} + y\boldsymbol{j} + z\boldsymbol{k} = [0, x, y, z]^T \)

  1. 三明治乘法计算旋转后四元数:因\( \boldsymbol{q} \)是单位四元数,\( \boldsymbol{q}^{-1} = \boldsymbol{q}^* \),旋转公式为:

\( \boldsymbol{v}_q' = \boldsymbol{q} \cdot \boldsymbol{v}_q \cdot \boldsymbol{q}^* \)

  1. 提取虚部得到旋转后向量\( \boldsymbol{v}_q' \)的虚部即为旋转后的向量\( \boldsymbol{v}' = [x', y', z']^T \)

2.3.2 详细计算示例(绕Z轴旋转90°,向量\( \boldsymbol{v} = [1, 0, 0]^T \)#

场景设定

  • 旋转操作:绕Z轴(单位向量\( \boldsymbol{n} = [0, 0, 1]^T \))旋转90°(\( \theta = 90^\circ \)),假设旋转遵循右手定则,即逆时针方向为正;

  • 待旋转向量:\( \boldsymbol{v} = [1, 0, 0]^T \)(X轴正方向单位向量);

  • 目标:计算旋转后的向量\( \boldsymbol{v}' \)

2.3.2.1 步骤1:构造旋转四元数\( \boldsymbol{q} \)#

绕轴\( \boldsymbol{n} \)旋转\( \theta \)的单位四元数公式为:

\( \boldsymbol{q} = \left[ \cos\left(\frac{\theta}{2}\right), \sin\left(\frac{\theta}{2}\right) \cdot n_x, \sin\left(\frac{\theta}{2}\right) \cdot n_y, \sin\left(\frac{\theta}{2}\right) \cdot n_z \right]^T \)

代入\( \theta = 90^\circ \)\( \boldsymbol{n} = [0, 0, 1]^T \)

  • \( \cos\left(\frac{90^\circ}{2}\right) = \cos45^\circ = \frac{\sqrt{2}}{2} \approx 0.7071 \)(实部\( q_0 \));

  • \( \sin\left(\frac{90^\circ}{2}\right) = \sin45^\circ = \frac{\sqrt{2}}{2} \approx 0.7071 \),虚部分量为:
    \( q_1 = \sin45^\circ \cdot n_x = 0.7071 \times 0 = 0 \)
    \( q_2 = \sin45^\circ \cdot n_y = 0.7071 \times 0 = 0 \)
    \( q_3 = \sin45^\circ \cdot n_z = 0.7071 \times 1 = 0.7071 \)

因此,旋转四元数为:

\( \boldsymbol{q} = [0.7071, 0, 0, 0.7071]^T \)

2.3.2.2 步骤2:将向量\( \boldsymbol{v} \)转为纯虚四元数\( \boldsymbol{v}_q \)#

三维向量\( \boldsymbol{v} = [1, 0, 0]^T \)对应的纯虚四元数(实部为0)为:

\( \boldsymbol{v}_q = [0, 1, 0, 0]^T \)

2.3.2.3 步骤3:计算\( \boldsymbol{q} \cdot \boldsymbol{v}_q \)(第一步乘法)#

根据四元数乘法公式\( \boldsymbol{q}\boldsymbol{r} = (q_0 r_0 - \boldsymbol{q}_v \cdot \boldsymbol{r}_v) + (q_0 \boldsymbol{r}_v + r_0 \boldsymbol{q}_v + \boldsymbol{q}_v \times \boldsymbol{r}_v) \),其中\( \boldsymbol{q} = [q_0, \boldsymbol{q}_v] = [0.7071, [0, 0, 0.7071]] \)\( \boldsymbol{v}_q = [r_0, \boldsymbol{r}_v] = [0, [1, 0, 0]] \)

  1. 计算实部:
    \( q_0 r_0 - \boldsymbol{q}_v \cdot \boldsymbol{r}_v = 0.7071 \times 0 - (0 \times 1 + 0 \times 0 + 0.7071 \times 0) = 0 - 0 = 0 \)

  2. 计算虚部:

    • \( q_0 \boldsymbol{r}_v = 0.7071 \times [1, 0, 0]^T = [0.7071, 0, 0]^T \)

    • \( r_0 \boldsymbol{q}_v = 0 \times [0, 0, 0.7071]^T = [0, 0, 0]^T \)

    • \( \boldsymbol{q}_v \times \boldsymbol{r}_v = \begin{vmatrix} \boldsymbol{i} & \boldsymbol{j} & \boldsymbol{k} \\ 0 & 0 & 0.7071 \\ 1 & 0 & 0 \end{vmatrix} = [0 \times 0 - 0.7071 \times 0, 0.7071 \times 1 - 0 \times 0, 0 \times 0 - 0 \times 1]^T = [0, 0.7071, 0]^T \)

    • 虚部总和:\( [0.7071, 0, 0]^T + [0, 0, 0]^T + [0, 0.7071, 0]^T = [0.7071, 0.7071, 0]^T \)

  3. 第一步乘法结果:

\( \boldsymbol{q} \cdot \boldsymbol{v}_q = [0, 0.7071, 0.7071, 0]^T \)

2.3.2.4 步骤4:计算\( \boldsymbol{q}^* \)(四元数共轭)#

单位四元数的共轭为虚部取反:

\( \boldsymbol{q}^* = [q_0, -q_1, -q_2, -q_3]^T = [0.7071, 0, 0, -0.7071]^T \)

2.3.2.5 步骤5:计算\( \boldsymbol{v}_q' = (\boldsymbol{q} \cdot \boldsymbol{v}_q) \cdot \boldsymbol{q}^* \)(第二步乘法)#

\( \boldsymbol{a} = \boldsymbol{q} \cdot \boldsymbol{v}_q = [a_0, \boldsymbol{a}_v] = [0, [0.7071, 0.7071, 0]] \)\( \boldsymbol{q}^* = [b_0, \boldsymbol{b}_v] = [0.7071, [0, 0, -0.7071]] \),代入乘法公式:

  1. 计算实部:
    \( a_0 b_0 - \boldsymbol{a}_v \cdot \boldsymbol{b}_v = 0 \times 0.7071 - (0.7071 \times 0 + 0.7071 \times 0 + 0 \times (-0.7071)) = 0 - 0 = 0 \)

  2. 计算虚部:

    • \( a_0 \boldsymbol{b}_v = 0 \times [0, 0, -0.7071]^T = [0, 0, 0]^T \)

    • \( b_0 \boldsymbol{a}_v = 0.7071 \times [0.7071, 0.7071, 0]^T = [0.5, 0.5, 0]^T \)

    • \( \boldsymbol{a}_v \times \boldsymbol{b}_v = \begin{vmatrix} \boldsymbol{i} & \boldsymbol{j} & \boldsymbol{k} \\ 0.7071 & 0.7071 & 0 \\ 0 & 0 & -0.7071 \end{vmatrix} = [0.7071 \times (-0.7071) - 0 \times 0, 0 \times 0 - 0.7071 \times (-0.7071), 0.7071 \times 0 - 0.7071 \times 0]^T = [-0.5, 0.5, 0]^T \)

    • 虚部总和:\( [0, 0, 0]^T + [0.5, 0.5, 0]^T + [-0.5, 0.5, 0]^T = [0, 1, 0]^T \)

  3. 第二步乘法结果:

\( \boldsymbol{v}_q' = [0, 0, 1, 0]^T \)

2.3.2.6 步骤6:提取旋转后向量\( \boldsymbol{v}' \)#

\( \boldsymbol{v}_q' \)的虚部为\( [0, 1, 0]^T \),即旋转后的向量:

\( \boldsymbol{v}' = [0, 1, 0]^T \)

2.3.2.7 结果验证#

几何意义上,绕Z轴逆时针旋转90°后,X轴正方向的向量\( [1, 0, 0]^T \)应指向Y轴正方向\( [0, 1, 0]^T \),与计算结果一致,证明四元数旋转的正确性。

2.3.3 坐标系转换:随体系与固定系的切换#

设四元数\( \boldsymbol{q} \)表示“从随体坐标系(Body Frame,如机器人自身)到固定坐标系(World Frame,如实验室)的旋转”,则向量旋转方向需根据坐标系切换:

  • 随体系→固定系:若向量\( \boldsymbol{v} \)在随体系中,需旋转到固定系,公式为:

\( \boldsymbol{v}_{\text{world}} = \text{Im}(\boldsymbol{q} \cdot \boldsymbol{v}_{body,q} \cdot \boldsymbol{q}^*) \)

\( \text{Im}() \)表示提取虚部)

  • 固定系→随体系:若向量\( \boldsymbol{v} \)在固定系中,需旋转到随体系,公式为:

\( \boldsymbol{v}_{\text{body}} = \text{Im}(\boldsymbol{q}^* \cdot \boldsymbol{v}_{world,q} \cdot \boldsymbol{q}) \)

3 实部为\( \theta/2 \):旋转复合与数学一致性的必然#

实部取\( \cos\left(\frac{\theta}{2}\right) \)并非人为规定,而是为了满足“旋转复合的物理逻辑”、“与复数旋转的兼容性”、“与旋转矩阵的等价性”三个核心需求。

3.1 旋转复合的一致性:两次旋转叠加的数学验证#

假设四元数\( \boldsymbol{q} \)对应绕某轴旋转\( \theta \),若连续旋转两次(先转\( \theta \),再转\( \theta \)),总旋转角度为\( 2\theta \),数学上等价于四元数乘法\( \boldsymbol{q} \cdot \boldsymbol{q} \)(公式见2.2)。

步骤1:假设实部为\( \cos\theta \)(错误假设)
\( q_0 = \cos\theta \),虚部\( \boldsymbol{q}_v = \sin\theta \cdot \boldsymbol{n} \)\( \boldsymbol{n} \)为旋转轴单位向量),则:

\( \boldsymbol{q} \cdot \boldsymbol{q} = \left[\cos^2\theta - \sin^2\theta, 2\sin\theta\cos\theta \cdot \boldsymbol{n}\right] = [\cos2\theta, \sin2\theta \cdot \boldsymbol{n}] \)

看似对应\( 2\theta \)旋转,但当叠加第三次旋转时(总角度\( 3\theta \)),\( \boldsymbol{q} \cdot \boldsymbol{q} \cdot \boldsymbol{q} \)的实部为\( \cos2\theta \cdot \cos\theta - \sin2\theta \cdot \sin\theta = \cos3\theta \),虚部为\( \cos2\theta \cdot \sin\theta \cdot \boldsymbol{n} + \sin2\theta \cdot \cos\theta \cdot \boldsymbol{n} = \sin3\theta \cdot \boldsymbol{n} \),虽数学上仍成立,但在连续小角度旋转的累积模型中,这种映射会导致物理直观上的不一致(因实际旋转中,连续三次小角度旋转的累积误差与一次大角度旋转不同)。

步骤2:实部为\( \cos\left(\frac{\theta}{2}\right) \)(正确设定)
\( q_0 = \cos\left(\frac{\theta}{2}\right) \),虚部\( \boldsymbol{q}_v = \sin\left(\frac{\theta}{2}\right) \cdot \boldsymbol{n} \),则:

\( \boldsymbol{q} \cdot \boldsymbol{q} = \left[\cos^2\left(\frac{\theta}{2}\right) - \sin^2\left(\frac{\theta}{2}\right), 2\sin\left(\frac{\theta}{2}\right)\cos\left(\frac{\theta}{2}\right) \cdot \boldsymbol{n}\right] \)

根据三角恒等式\( \cos^2x - \sin^2x = \cos2x \)\( 2\sin x\cos x = \sin2x \),代入得:

\( \boldsymbol{q} \cdot \boldsymbol{q} = \left[\cos\theta, \sin\theta \cdot \boldsymbol{n}\right] \)

恰好对应“绕同一轴旋转\( \theta \)”的四元数,完美契合“两次小旋转叠加为一次大旋转”的物理逻辑,且可无限次叠加(如\( \boldsymbol{q}^k \)对应旋转\( k \cdot \frac{\theta}{2} \times 2 = k\theta \))。

3.2 与复数旋转的兼容性:从二维到三维的推广#

复数旋转是二维平面的旋转描述,四元数是三维空间的推广,两者需保持逻辑一致:

  • 二维复数旋转:旋转\( \theta \)的复数为\( z = \cos\theta + i\sin\theta \)(极坐标形式),变换公式为\( z' = z \cdot z_0 \)\( z_0 \)为原复数),因二维仅需“角度”即可定义旋转(绕垂直于平面的轴),无需额外维度;

  • 三维四元数旋转:需“旋转轴+角度”共同定义(比二维多一个维度),若仍用\( \cos\theta \)作为实部,会导致“旋转轴与角度的映射歧义”(如同一角度可能对应多个旋转轴)。
    例:若实部为\( \cos90^\circ = 0 \),虚部为\( [0, 0, 1] \)\( [0, 1, 0] \),无法区分是绕Z轴还是Y轴旋转;而实部用\( \cos\left(\frac{\theta}{2}\right) \),虚部明确指向旋转轴,可无歧义映射(如绕Z轴旋转90°的虚部为\( [0, 0, \sin45^\circ] \),绕Y轴则为\( [0, \sin45^\circ, 0] \))。

3.3 与旋转矩阵的等价性:数学推导验证#

四元数与旋转矩阵是三维旋转的两种表示,必须满足“同一旋转,两种表达结果一致”,\( \theta/2 \)是实现等价的关键。

步骤1:轴角旋转矩阵公式
绕单位轴\( \boldsymbol{n} = [n_x, n_y, n_z]^T \)旋转\( \theta \)的旋转矩阵为:

\( R(\boldsymbol{n}, \theta) = \begin{bmatrix} n_x^2(1-\cos\theta) + \cos\theta & n_xn_y(1-\cos\theta) - n_z\sin\theta & n_xn_z(1-\cos\theta) + n_ysin\theta \\ n_xn_y(1-\cos\theta) + n_z\sin\theta & n_y^2(1-\cos\theta) + \cos\theta & n_yn_z(1-\cos\theta) - n_xsin\theta \\ n_xn_z(1-\cos\theta) - n_ysin\theta & n_yn_z(1-\cos\theta) + n_xsin\theta & n_z^2(1-\cos\theta) + \cos\theta \end{bmatrix} \)

步骤2:四元数转旋转矩阵公式
单位四元数\( \boldsymbol{q} = [q_0, q_1, q_2, q_3]^T \)\( q_1 = n_x\sin\frac{\theta}{2} \)\( q_2 = n_y\sin\frac{\theta}{2} \)\( q_3 = n_z\sin\frac{\theta}{2} \))对应的旋转矩阵为:

\( R(\boldsymbol{q}) = \begin{bmatrix} 1-2q_2^2-2q_3^2 & 2q_1q_2-2q_0q_3 & 2q_1q_3+2q_0q_2 \\ 2q_1q_2+2q_0q_3 & 1-2q_1^2-2q_3^2 & 2q_2q_3-2q_0q_1 \\ 2q_1q_3-2q_0q_2 & 2q_2q_3+2q_0q_1 & 1-2q_1^2-2q_2^2 \end{bmatrix} \)

步骤3:等价性验证(以\( R_{11} \)元素为例)
\( q_1 = n_x\sin\frac{\theta}{2} \)\( q_2 = n_y\sin\frac{\theta}{2} \)\( q_3 = n_z\sin\frac{\theta}{2} \)代入\( R(\boldsymbol{q}) \)\( R_{11} \)元素:

\( R_{11} = 1 - 2q_2^2 - 2q_3^2 = 1 - 2\sin^2\frac{\theta}{2}(n_y^2 + n_z^2) \)

由于\( n_y^2 + n_z^2 = 1 - n_x^2 \),代入得:

\( R_{11} = 1 - 2\sin^2\frac{\theta}{2}(1 - n_x^2) = 1 - 2\sin^2\frac{\theta}{2} + 2\sin^2\frac{\theta}{2}n_x^2 \)

根据三角恒等式\( 1 - 2\sin^2\frac{\theta}{2} = \cos\theta \)\( 2\sin^2\frac{\theta}{2} = 1 - \cos\theta \),代入得:

\( R_{11} = \cos\theta + (1 - \cos\theta)n_x^2 \)

与轴角旋转矩阵的\( R_{11} \)元素完全一致,证明实部取\( \theta/2 \)时,四元数与旋转矩阵等价。

4 四元数的核心价值与工程意义#

四元数以“实部(角度)+虚部(轴方向)”的协同结构,通过严格的数学运算实现了三维旋转的高效、无歧义描述,其核心优势体现在:

  1. 无奇异问题:避免欧拉角的万向锁(如当俯仰角为90°时,滚转角与偏航角耦合);

  2. 计算高效:四元数乘法仅需16次乘法+12次加法,比旋转矩阵(27次乘法+18次加法)计算量减少约40%;

  3. 插值平滑:SLERP插值可实现球面平滑过渡,避免线性插值的非匀速问题。

在机器人学、无人机、VR/AR等领域,四元数是姿态描述与计算的核心工具,理解其“实部与虚部的协同关系”及“运算规则”,是实现高精度姿态控制的基础。