四元数与旋转矩阵

                     

贡献者: addis; JierPeter

预备知识 旋转矩阵的导数,四元数,罗德里格旋转公式、绕轴旋转矩阵

   四元数可以用来简洁地表示三维空间中的旋转,极大地减少了计算量。所有模长为 $1$ 的四元数 $q$ 与所有可能的(绕原点的)三维旋转存在一一对应关系。

   三维空间中的一个向量表示为标部为 $0$ 的四元数:$ \begin{pmatrix}0, \boldsymbol{\mathbf{v}} \end{pmatrix} $,简记为 $ \boldsymbol{\mathbf{v}} $。如果我们绕着一个单位向量 ${ \hat{\boldsymbol{\mathbf{n}}} }$ 把 $ \boldsymbol{\mathbf{v}} $ 旋转一个角度 $\theta$,所得的结果应该是哪个向量呢?任意模长为 $1$ 的四元数都可以表示为

\begin{equation} q = \left(\cos{\frac{\theta}{2}},\ { \hat{\boldsymbol{\mathbf{n}}} }\sin{\frac{\theta}{2}} \right) ~. \end{equation}
那么旋转后的向量 $ \boldsymbol{\mathbf{v}} '$ 就可以表示为
\begin{equation} \boldsymbol{\mathbf{v}} ' = q \boldsymbol{\mathbf{v}} q^{-1} = q \boldsymbol{\mathbf{v}} \tilde q~. \end{equation}
其中 $q^{-1}$ 表示 $q$ 的逆,$\tilde q$ 表示 $q$ 的共轭(定义 2 ),满足 $qq^{-1} = q^{-1}q = (1,0,0,0)$,易证
\begin{equation} q^{-1} = \tilde q = (\cos{\frac{-\theta}{2}},\ { \hat{\boldsymbol{\mathbf{n}}} }\sin{\frac{-\theta}{2}}) = (\cos{\frac{\theta}{2}},\ -{ \hat{\boldsymbol{\mathbf{n}}} }\sin{\frac{\theta}{2}})~, \end{equation}
表示绕 $ \hat{\boldsymbol{\mathbf{n}}} $ 旋转 $-\theta$。

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

证明

   直接计算式 2 得(使用连续叉乘的化简 以及三角降幂公式):

\begin{equation} \begin{aligned} q \boldsymbol{\mathbf{v}} q^{-1}&= (\cos{\frac{\theta}{2}}, { \hat{\boldsymbol{\mathbf{n}}} }\sin{\frac{\theta}{2}})\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\theta\ \boldsymbol{\mathbf{v}} + (1-\cos\theta) \hat{\boldsymbol{\mathbf{n}}} ( \hat{\boldsymbol{\mathbf{n}}} \boldsymbol\cdot \boldsymbol{\mathbf{v}} ) + \sin\theta\ \hat{\boldsymbol{\mathbf{n}}} \boldsymbol\times \boldsymbol{\mathbf{v}} )~, \end{aligned} \end{equation}
这正是直接使用罗德里格旋转公式(式 1 )使 $ \boldsymbol{\mathbf{v}} $ 绕 ${ \hat{\boldsymbol{\mathbf{n}}} }$ 旋转 $\theta$ 的结果。

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

   再来证明 $q$ 和三维旋转的一一对应关系:若 $q_1,q_2$ 表示同一个旋转,那么对任意 $ \boldsymbol{\mathbf{v}} $ 都有

\begin{equation} q_1 \boldsymbol{\mathbf{v}} \tilde q_1 = q_2 \boldsymbol{\mathbf{v}} \tilde q_2~. \end{equation}
也就是对任意 $ \boldsymbol{\mathbf{v}} $ 都有
\begin{equation} \boldsymbol{\mathbf{v}} = (\tilde q_1q_2) \boldsymbol{\mathbf{v}} \widetilde{(\tilde q_1q_2)}~, \end{equation}
所以必定有 $\tilde q_1q_2 = 1$,即 $q_2 = \tilde q_1^{-1} = q_1$。证毕。

1. 旋转的复合

   四元数的乘法运算(式 3 )可以把两次旋转合并为一次旋转。注意 $q_2q_1$ 表示先做 $q_1$ 的旋转,再做 $q_2$ 的旋转。另外易证 $(q_2q_1)^{-1} = q_1^{-1} q_2^{-1} = \tilde q_1\tilde q_2$。

   由于一般来说四元数乘法不满足交换律,所以两次旋转也一般不能交换,除非两次转动的转轴(两四元数的矢部)共线。

   证明:令 $ \boldsymbol{\mathbf{v}} $ 经过 $q_1$ 旋转变为 $ \boldsymbol{\mathbf{v}} '$,再经过 $q_2$ 旋转变为 $ \boldsymbol{\mathbf{v}} ''$,则

\begin{equation} \boldsymbol{\mathbf{v}} '' = q_2 \boldsymbol{\mathbf{v}} 'q_2^{-1} = q_2(q_1 \boldsymbol{\mathbf{v}} q_1^{-1}) q_2^{-1} = (q_2q_1) \boldsymbol{\mathbf{v}} (q_1^{-1} q_2^{-1}) = (q_2q_1) \boldsymbol{\mathbf{v}} (q_2q_1)^{-1}~, \end{equation}
证毕。

2. 旋转矩阵

   令四元数 $q = (s, \boldsymbol{\mathbf{v}} )$ 表示绕 $ \hat{\boldsymbol{\mathbf{v}}} $ 方向以右手定则旋转 $\theta$ 的矩阵,其中

\begin{equation} s = \cos\frac{\theta}{2} ~,\qquad \left\lvert \boldsymbol{\mathbf{v}} \right\rvert = \sin\frac{\theta}{2}~. \end{equation}
则对应的三维旋转矩阵(式 3 )可以表示为
\begin{equation} \boldsymbol{\mathbf{R}} = \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}
特殊地,$\theta = 0$ 时,四元数为 $(1,0,0,0)$,对应单位矩阵,无任何旋转。另外由上一节的分析可知,若 $q_i$ 的旋转矩阵为 $ \boldsymbol{\mathbf{R}} _i$,那么 $q_1q_2$ 对应的旋转矩阵就是 $ \boldsymbol{\mathbf{R}} _1 \boldsymbol{\mathbf{R}} _2$。

3. 时间导数

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

\begin{equation} \dot{ \boldsymbol{\mathbf{R}} } = \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}} $ 对应的四元数为 $q(t)$,则
\begin{equation} \dot {q} = \frac12 (0, \boldsymbol{\mathbf{\omega}} ) q~, \end{equation}
这里的 $\dot{q}$ 表示对四个标量中的每个分别求导。

   推导:把 ${q}(t+\Delta t)$ 分解为 ${q}(t)$ 和 ${q}_1(\Delta t)$ 两次旋转,

\begin{equation} \dot {q} = \lim_{\Delta t\to 0}\frac{{q}(t+\Delta t) - {q}(t)}{\Delta t} = \lim_{\Delta t\to 0}\frac{{q}_1(\Delta t) - (1,0,0,0)}{\Delta t}q(t)~. \end{equation}
其中 ${q}_1(t)$ 相当于以瞬时角速度 $ \boldsymbol{\mathbf{\omega}} $ 旋转时间 $t$
\begin{equation} {q_1}(t) = (\cos\frac{\omega t}{2},\ \ \hat{\boldsymbol{\mathbf{\omega}}} \sin\frac{\omega t}{2})~. \end{equation}
注意 $q_1(0) = (1,0,0,0)$,所以式 13 中的极限就是
\begin{equation} \lim_{t\to 0}\frac{{q}_1(t) - {q}_1(0)}{\Delta t} = \dot{q}_1(0) = \frac{1}{2}(0, \boldsymbol{\mathbf{\omega}} )~. \end{equation}
代入式 13 式 12


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

                     

友情链接: 超理论坛 | ©小时科技 保留一切权利