SLAM中的四元数、李代数和李群(二)

SLAM中的四元数、李代数和李群(二)

在前一篇文章中说了,如果绕某点位向量 n = [n_{x},n_{y}, n_{z}]^{T} 旋转 \theta 角,那么由单位四元数表示的旋转为:

q = [cos\frac{\theta}{2},n_{x}sin\frac{\theta}{2},n_{y}sin\frac{\theta}{2}, n_{z}sin\frac{\theta}{2}]^{T}

那么就有疑问了,为什么旋转的是 \theta 角,在四元数中就变成了 \frac{\theta}{2} 呢,下面就从3维空间的旋转说起,来解释为什么四元数中的角度是三空间旋转角度的一半。

  • 空间三维向量的旋转:

首先我们来看下这样一个场景:一个3D向量绕轴单位向量 u 旋转 \phi 的例子:

x_{||},x_{\bot} 分别表示与向量 u 平行和垂直的向量

假设有两个互相垂直的正交基:  \{e_{1},e_{2}\} , x_{\bot} = e_{1}

由于 x^{'} = x_{||} + x_{\bot}^{'} ,所以:

  • 三维旋转群 SO3

SO3就是李群了,李群具有的性质这里就不在讲述。还有个经常跟李群一起出现的李代数,李代数 so_{3} (知乎不知道怎么打那符号,只好以小写的so3代替了)。李代数是什么呢,李代数可以简单理解就是普通三维空间的3D向量写成的反对称的矩阵形式 \left[ w\right]_{\times} ,李群和李代数的关系就是李群是李代数的指数映射 R = exp([w]_{\times}) ,可以由下图说明他们之间的关系:

\left[ w\right]_{\times} 写成反对称的矩阵形式就是:

至于为什么是指数映射,继续往下看:

那么 R^{\top}\dot{R} 就是一个3*3的反对称矩阵, det(R)=1 ,则有:

\dot{R} = R[w]_{\times}

R = I ,则有: \dot{R} = [w]_{\times} ,可以认为李代数是李群的速度空间,也叫切空间。

再看一个指数对时间 t 求导的等式, v 可以认为是速度,:

\dot e^{vt} = e^{vt}\cdot v

与上式的R的导数是不是很像,凭感觉好像李群李代数刚好就是一个指数关系(仅直观感觉,没有严谨的证明,感兴趣可以自行去追根溯源):

R = e^{[V]_{\times}}, V=w\Delta t

  • 旋转矩阵与旋转向量的关系:

定义旋转向量 V = \phi u ,写成叉乘的形式: [V]_{\times} = \phi[u]_{\times} ,于是写成相应的李代数的旋转矩阵有:

由于 u 是单位向量,于是有:

最后由带入正弦、余弦的泰勒展开式,可得到 Rodrigues等式:

也可以写成:

由以上两个等式,我们就可以由三维空间的旋转向量 v 得到李群空间的旋转矩阵 R 了。

那么我们怎么由 R\rightarrow V 呢,直接给出下面公式:

对于一个向量 x ,绕着单位轴 u 旋转 \phi 度, , R = exp([\phi u]_{\times}) 则新的向量 :

  • 旋转群与四元数的关系:

上一篇文章(一)里提到了纯四元数的指数形式为:

而对于单位四元素的定义:

所以可以简单理解为一个纯四元数的指数就等于一个单位四元数。对于三维空间的旋转向量 V = \phi u

q = e^{\phi u} = cos\frac{\phi}{2} + usin\frac{\phi}{2} = \left[ \begin{matrix} cos\frac{\phi}{2} \\ usin\frac{\phi}{2}\\ \end{matrix}\right]

证明:对于一个3D向量 x , 可写成纯四元数的形式:

使用四元数来旋转 x , 绕 u ,旋转角度为 \phi 角度:

这个式子的结果与上面 x^{’} = Rx 相同,那么四元数中的角度是3D空间角度的一半,也就是说,如果我们要用四元数来旋转一个3D向量,将这个向量绕轴 u 旋转的角度是 \phi ,那么我们构建的单位四元数应该是:

q = cos\frac{\phi}{2} + usin\frac{\phi}{2} = \left[ \begin{matrix} cos\frac{\phi}{2} \\ usin\frac{\phi}{2}\\ \end{matrix}\right]

那么旋转群与四元数的关系就是:

所以使用四元数对向量 x 旋转,首先把 x 构建成纯虚四元数,然后对 x 分别要左乘四元数 q 和右乘四元数的共轭 q^{*} , 就像做了两次角度为 \frac{\phi}{2} 的旋转。

实际上我们对于这些常规操作,其实很多库已经帮我们实现好,并不需要我们再去实现一遍,只需要直接调用即可。

最后贴一张四元数李群李代数的表格,方便查阅他们之间的关系:


结尾:由于本人水平有限,某些观点可能不严谨,或者有表述错误的地方请大家见谅。

发布于 2018-06-15

文章被以下专栏收录