四元数

四元数的意义与推导

基础数学理论四元数

前言

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

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

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

四元数公式推导

期望效果

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

基础理论

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

v=qvq1v' = 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 是单位四元数时,q1q^{-1} 就是它的共轭,因此这个变换不会改变向量的模长,只会改变它的方向。

更直观地说,单位四元数可以看作“旋转的编码”。左乘 q 会把向量带入一个新的旋转状态,而右乘 q1q^{-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 代入共轭乘法。

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

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

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

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

利用这些性质,我们可以计算 qvq1q \cdot v_\perp \cdot q^{-1}

首先,qv=(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)

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

qvq1=(cosϕv+sinϕ(n^v))(cosϕsinϕn^)=cos2ϕvcosϕsinϕvn^+sinϕcosϕ(n^v)sin2ϕ(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}

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

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

vcos(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)