四元数与旋转矩阵

             

  • 本词条需要更多讲解,便于帮助理解.
  • 本词条存在未完成的内容.
预备知识 罗德里格旋转公式,旋转矩阵的导数,四元数

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

   三维空间中的一个向量表示为标部为 $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)$.

1. 证明

   取四元数 $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}}} }\\& \qquad +\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}} \\& \qquad +({ \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$.

2. 旋转矩阵

   我们可以用四元数(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}

3. 导数

   若从坐标系 B 到坐标系 A 的基底变换矩阵为 $ \boldsymbol{\mathbf{R}} $,当 B 绕原点以角速度 $ \boldsymbol{\mathbf{\omega}} $ 旋转时有(式 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}

致读者: 小时百科一直以来坚持所有内容免费无广告,这导致我们处于严重的亏损状态。 长此以往很可能会最终导致我们不得不选择会员制,大量广告,内容付费等。 因此,我们请求广大读者热心打赏 ,使网站得以健康发展。 如果看到这条信息的每位读者能慷慨打赏 10 元,我们一个星期内就能脱离亏损, 并保证网站能在接下来的一整年里向所有读者继续免费提供优质内容。 但遗憾的是只有不到 1% 的读者愿意捐款, 他们的付出帮助了 99% 的读者免费获取知识, 我们在此表示感谢。

         

© 小时科技 保留一切权利