四元数与旋转矩阵

             

  • 本词条需要更多讲解,便于帮助理解.
  • 本词条存在未完成的内容.
Prerequisite 绕轴旋转矩阵,旋转矩阵的导数,四元数

   四元数可以用来简洁地表示三维空间中的旋转,极大地减少了计算量.

   三维空间中的一个向量表示为标部为 $0$ 的四元数:$v= \begin{pmatrix}0, \boldsymbol{\mathbf{v}} \end{pmatrix} $.如果我们绕着一个单位向量 $\hat{ \boldsymbol{\mathbf{n}} }$ 把 $ \boldsymbol{\mathbf{v}} $ 旋转一个角度 $\theta$,所得的结果应该是哪个向量呢?取四元数 $q= \begin{pmatrix}\cos{\frac{\theta}{2}}, \hat{ \boldsymbol{\mathbf{n}} }\sin{\frac{\theta}{2}}\end{pmatrix} $,那么旋转后的向量就可以表示为

\begin{equation} qvq^{-1} \end{equation}

   比如说,取 $v=(0, 1, 0, 0)$,它代表一个 $x$ 轴上的单位向量.如果想要把它绕着 $z$ 轴上的单位向量转 $\pi/2$,那么结果向量的四元数表示应该是 $(0, 0, 1, 0)$.按照我们定义的规则,旋转表示为四元数 $q=(\sqrt{2}/2, 0, 0, \sqrt{2}/2)$,按照四元数的乘法规则易得 $qvq^{-1}=(0,0,1,0)$.

证明

   取四元数 $q= \begin{pmatrix}\cos{\frac{\theta}{2}}, \hat{ \boldsymbol{\mathbf{n}} }\sin{\frac{\theta}{2}}\end{pmatrix} $ 和 $v=(0, \boldsymbol{\mathbf{v}} )$,直接计算得:

\begin{equation} \begin{aligned} qvq^{-1}&= \begin{pmatrix}\cos{\frac{\theta}{2}}, \hat{ \boldsymbol{\mathbf{n}} }\sin{\frac{\theta}{2}}\end{pmatrix} \cdot (0, \boldsymbol{\mathbf{v}} )\cdot q^{-1}\\& =(- \boldsymbol{\mathbf{v}} \cdot\hat{ \boldsymbol{\mathbf{n}} }\sin{\frac{\theta}{2}}, \boldsymbol{\mathbf{v}} \cos{\frac{\theta}{2}}+\hat{ \boldsymbol{\mathbf{n}} }\times \boldsymbol{\mathbf{v}} \sin{\frac{\theta}{2}})\cdot (\cos{\frac{\theta}{2}}, -\hat{ \boldsymbol{\mathbf{n}} }\sin{\frac{\theta}{2}})\\& =(0, \cos^2\frac{\theta}{2} \boldsymbol{\mathbf{v}} +\cos\frac{\theta}{2}\sin\frac{\theta}{2}\hat{ \boldsymbol{\mathbf{n}} }\times \boldsymbol{\mathbf{v}} +(\hat{ \boldsymbol{\mathbf{n}} }\cdot \boldsymbol{\mathbf{v}} )\sin^2\frac{\theta}{2}\hat{ \boldsymbol{\mathbf{n}} }\\&+\cos\frac{\theta}{2}\sin\frac{\theta}{2}\hat{ \boldsymbol{\mathbf{n}} }\times \boldsymbol{\mathbf{v}} -\sin^2\frac{\theta}{2}\hat{ \boldsymbol{\mathbf{n}} }\times(\hat{ \boldsymbol{\mathbf{n}} }\times \boldsymbol{\mathbf{v}} ))\\& =(0, \cos^2\frac{\theta}{2} \boldsymbol{\mathbf{v}} -\sin^2\frac{\theta}{2}\hat{ \boldsymbol{\mathbf{n}} }\times(\hat{ \boldsymbol{\mathbf{n}} }\times \boldsymbol{\mathbf{v}} )+\sin\theta\hat{ \boldsymbol{\mathbf{n}} }\times \boldsymbol{\mathbf{v}} \\&+(\hat{ \boldsymbol{\mathbf{n}} }\cdot \boldsymbol{\mathbf{v}} )\sin^2\frac{\theta}{2}\hat{ \boldsymbol{\mathbf{n}} }) \end{aligned} \end{equation}

   如果取 $ \boldsymbol{\mathbf{v}} \perp\hat{ \boldsymbol{\mathbf{n}} }$,考虑到此时 $\hat{ \boldsymbol{\mathbf{n}} }\times(\hat{ \boldsymbol{\mathbf{n}} }\times \boldsymbol{\mathbf{v}} )=- \boldsymbol{\mathbf{v}} $ 且 $\hat{ \boldsymbol{\mathbf{n}} }\cdot \boldsymbol{\mathbf{v}} =0$,那么上式可以化简为

\begin{equation} \begin{aligned} qvq^{-1}&=(0, \cos\theta \boldsymbol{\mathbf{v}} +\sin\theta\hat{ \boldsymbol{\mathbf{n}} }\times \boldsymbol{\mathbf{v}} ) \end{aligned} \end{equation}

   这正是 $ \boldsymbol{\mathbf{v}} $ 绕 $\hat{ \boldsymbol{\mathbf{n}} }$ 旋转 $\theta$ 的结果.

   如果取 $ \boldsymbol{\mathbf{v}} \parallel\hat{ \boldsymbol{\mathbf{n}} }$,考虑到此时 $\hat{ \boldsymbol{\mathbf{n}} }\times \boldsymbol{\mathbf{v}} =0$ 且 $(\hat{ \boldsymbol{\mathbf{n}} }\cdot \boldsymbol{\mathbf{v}} ) \boldsymbol{\mathbf{v}} = \boldsymbol{\mathbf{v}} $,那么上式化为

\begin{equation} \begin{aligned} qvq^{-1}&=(0, \cos^2\frac{\theta}{2} \boldsymbol{\mathbf{v}} +\sin^2\frac{\theta}{2} \boldsymbol{\mathbf{v}} )=(0, \boldsymbol{\mathbf{v}} )=v \end{aligned} \end{equation}

   这也是 $ \boldsymbol{\mathbf{v}} $ 绕 $\hat{ \boldsymbol{\mathbf{n}} }$ 旋转 $\theta$ 的结果.

   综上所述,取任意向量 $ \boldsymbol{\mathbf{v}} $,把它分为垂直和平行于旋转轴的 $ \boldsymbol{\mathbf{v}} _\perp$ 和 $ \boldsymbol{\mathbf{v}} _\parallel$,分别对应四元数 $v_\perp$ 和 $v_\parallel$,那么 $q v_\perp q^{-1}$ 和 $q v_\parallel q^{-1}$ 分别对应这两个向量旋转后的结果.故取 $v=v_\perp+v_\parallel$ 为 $ \boldsymbol{\mathbf{v}} $ 对应的四元数后可由四元数乘法分配律得到,$qvq^{-1}$ 对应 $ \boldsymbol{\mathbf{v}} $ 旋转后的向量.

   一点补充:考虑到四元数限定向量方向时退化为复数(见四元数的讨论),故 $ \boldsymbol{\mathbf{v}} \parallel\hat{ \boldsymbol{\mathbf{n}} }$ 的情况其实可以直接套用复数的交换性来得到,即 $qvq^{-1}=qq^{-1}v=v$.

旋转矩阵

   我们可以用四元数(quaternions) $ \boldsymbol{\mathbf{q}} = [s, \boldsymbol{\mathbf{v}} ]$ 来表示绕轴旋转矩阵,其中

\begin{equation} s = \cos\left(\frac{\theta}{2}\right) \qquad v = \left\lvert \boldsymbol{\mathbf{v}} \right\rvert = \sin\left(\frac{\theta}{2}\right) \hat{\boldsymbol{\mathbf{A}}} \end{equation}
则绕轴旋转矩阵可以表示为
\begin{equation} \boldsymbol{\mathbf{R}} (\theta) = \begin{pmatrix} 1 - 2v_y^2 - 2v_z^2 & 2v_xv_y - 2sv_z & 2v_x v_z + 2s v_y\\ 2v_x v_y + 2sv_z & 1 - 2v_x^2 - 2v_z^2 & 2v_y v_z - 2s v_x\\ 2v_x v_z - 2s v_y & 2v_y v_z + 2s v_x & 1 - 2v_x^2 - 2v_y^2 \end{pmatrix} \end{equation}

   四元数的乘法运算可以表示两个旋转矩阵相乘,即把两次旋转合并为一次旋转

\begin{equation} [s_1, \boldsymbol{\mathbf{v}} _1] [s_2, \boldsymbol{\mathbf{v}} _2] = [s_1 s_2 - \boldsymbol{\mathbf{v}} _1 \boldsymbol\cdot \boldsymbol{\mathbf{v}} _2, s_1 \boldsymbol{\mathbf{v}} _2 + s_2 \boldsymbol{\mathbf{v}} _1 + \boldsymbol{\mathbf{v}} _1 \boldsymbol\times \boldsymbol{\mathbf{v}} _2] \end{equation}

导数

   若从坐标系 B 到坐标系 A 的基底变换矩阵为 $ \boldsymbol{\mathbf{R}} $,当 B 绕原点以角速度 $ \boldsymbol{\mathbf{\omega}} $ 旋转时有(eq. 1

\begin{equation} \frac{\mathrm{d}{ \boldsymbol{\mathbf{R}} }}{\mathrm{d}{t}} = \boldsymbol{\mathbf{\Omega}} \boldsymbol{\mathbf{R}} \end{equation}
其中 $ \boldsymbol{\mathbf{\Omega}} $ 乘以任意位置矢量 $ \boldsymbol{\mathbf{r}} $ 等于 $ \boldsymbol{\mathbf{\omega}} \boldsymbol\times \boldsymbol{\mathbf{r}} $
\begin{equation} \boldsymbol{\mathbf{\Omega}} = \begin{pmatrix} 0 & -\omega_z & \omega_y\\ \omega_z & 0 & -\omega_x\\ -\omega_y & \omega_x & 0 \end{pmatrix} \end{equation}
若旋转矩阵 $ \boldsymbol{\mathbf{R}} $ 对应的四元数为 $ \boldsymbol{\mathbf{q}} $,则
\begin{equation} \dot { \boldsymbol{\mathbf{q}} }(t) = \frac12 [0, \boldsymbol{\mathbf{\omega}} (t)] \boldsymbol{\mathbf{q}} (t) \end{equation}

         

© 小时科技 保留一切权利