四元数与旋转矩阵

                     

贡献者: 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

                     

© 小时科技 保留一切权利