四元数

四元数的意义与推导

基础数学理论四元数

前言

四元数是一种常见表示物体旋转状态的方式q=w+xi+yj+zkq=w+xi+yj+zk

四元数常用于各种姿态控制等各种常见应用场景

  • 比起九个数的旋转矩阵计算更快,数据量更小
  • 避开了欧拉角的万向锁问题
  • 插值特性

四元数公式推导

期望效果

对于四元数在旋转状态上的应用,我们希望用一个四元数q作用在一个三维向量v⃗\vec{v}得到的新三维向量v⃗\vec{v}能够表示原向量绕某一轴旋转角度θ后的结果。

基础理论

在四元数体系中,通过共轭乘法来达到这个效果

v′=q⋅v⋅q−1v' = q \cdot v \cdot q^{-1}

v为向量v⃗\vec{v}的四元数形式v=0+vxi+vyj+vzkv = 0 + v_x i + v_y j + v_z k

这种形式既能保留向量长度,也能把向量绕指定轴旋转到新的方向。 当 qq 是单位四元数时,q−1q^{-1} 就是它的共轭,因此这个变换不会改变向量的模长,只会改变它的方向。

更直观地说,单位四元数可以看作“旋转的编码”。左乘 q 会把向量带入一个新的旋转状态,而右乘 q−1q^{-1} 则把结果重新投回三维空间中。

详细推导

我们先设旋转抽为单位向量n^=(nx,ny,nz)\hat{n} = (n_x, n_y, n_z),旋转角为θ

1.构造单位四元数q

从上文的期望效果可知,q需要包含旋转轴的方向信息才能达到绕旋转轴这一目标,还需要一个标量来包含角度信息,就可以猜测出一个基本结构

q=α+β⋅(nxi+nyj+nzk)q = \alpha + \beta \cdot (n_x i + n_y j + n_z k)

又因为q得是一个单位量就可以进一步得到

q=cos⁡ϕ+sin⁡ϕ⋅(nxi+nyj+nzk)q = \cos \phi + \sin \phi \cdot (n_x i + n_y j + n_z k)

2.从共轭乘法及作用效果角度进一步推导

现在,我们把一个垂直于旋转轴 n^\hat{n} 的向量 v⃗⊥\vec{v}_\perp 代入共轭乘法。

设 v⊥v_\perp 是 v⃗⊥\vec{v}_\perp 对应的纯四元数。利用四元数乘法法则(特别是 i2=j2=k2=−1i^2 = j^2 = k^2 = -1 以及 ij=k,ji=−kij = k, ji = -k 等规则),可以证明一个关键的恒等式:

对于一个纯四元数 uu(即实部为0),如果它垂直于旋转轴(即 u⋅n^=0u \cdot \hat{n} = 0),那么:

n^⋅u=u⋅n^(这里的点乘是四元数乘法)\hat{n} \cdot u = u \cdot \hat{n} \quad \text{(这里的点乘是四元数乘法)}

并且 (n^)2=−1(\hat{n})^2 = -1(因为 n^\hat{n} 是单位长度的纯四元数)。

利用这些性质,我们可以计算 q⋅v⊥⋅q−1q \cdot v_\perp \cdot q^{-1}:

首先,q⋅v⊥=(cos⁡ϕ+sin⁡ϕ⋅n^)⋅v⊥=cos⁡ϕ⋅v⊥+sin⁡ϕ⋅(n^⋅v⊥)q \cdot v_\perp = (\cos \phi + \sin \phi \cdot \hat{n}) \cdot v_\perp = \cos \phi \cdot v_\perp + \sin \phi \cdot (\hat{n} \cdot v_\perp)

然后,右乘 q−1=cos⁡ϕ−sin⁡ϕ⋅n^q^{-1} = \cos \phi - \sin \phi \cdot \hat{n}:

q⋅v⊥⋅q−1=(cos⁡ϕ⋅v⊥+sin⁡ϕ⋅(n^⋅v⊥))⋅(cos⁡ϕ−sin⁡ϕ⋅n^)=cos⁡2ϕ⋅v⊥−cos⁡ϕsin⁡ϕ⋅v⊥⋅n^+sin⁡ϕcos⁡ϕ⋅(n^⋅v⊥)−sin⁡2ϕ⋅(n^⋅v⊥)⋅n^\begin{aligned} q \cdot v_\perp \cdot q^{-1} &= (\cos \phi \cdot v_\perp + \sin \phi \cdot (\hat{n} \cdot v_\perp)) \cdot (\cos \phi - \sin \phi \cdot \hat{n}) \\ &= \cos^2 \phi \cdot v_\perp - \cos \phi \sin \phi \cdot v_\perp \cdot \hat{n} + \sin \phi \cos \phi \cdot (\hat{n} \cdot v_\perp) - \sin^2 \phi \cdot (\hat{n} \cdot v_\perp) \cdot \hat{n} \end{aligned}

利用 v⊥⋅n^=−n^⋅v⊥v_\perp \cdot \hat{n} = -\hat{n} \cdot v_\perp(因为两者垂直且都是纯四元数),以及 (n^⋅v⊥)⋅n^=v⊥(\hat{n} \cdot v_\perp) \cdot \hat{n} = v_\perp(可以验证),上式化简为:

=v⊥⋅cos⁡(2ϕ)+(n^⋅v⊥)⋅sin⁡(2ϕ)\begin{aligned} &= v_\perp \cdot \cos(2\phi) + (\hat{n} \cdot v_\perp) \cdot \sin(2\phi) \end{aligned}

v⊥⋅cos⁡(2ϕ)+(n^⋅v⊥)⋅sin⁡(2ϕ)v_\perp \cdot \cos(2\phi) + (\hat{n} \cdot v_\perp) \cdot \sin(2\phi)是向量v⃗⊥\vec{v}_\perp绕旋转轴n^\hat{n}旋转角度2ϕ2\phi的三维向量旋转公式结果 由此可以得出ϕ\phi与我们期望的旋转角度θ的关系,ϕ=θ/2\phi=θ/2

总结

至此我们就完美得出了q=w+xi+yj+zkq=w+xi+yj+zk的实际含义

q=cos⁡θ2+sin⁡θ2⋅(nxi+nyj+nzk)q = \cos \frac{\theta}{2} + \sin \frac{\theta}{2} \cdot (n_x i + n_y j + n_z k)