详解SLAM中的李群和李代数(上)

1 概述

最近阅读高翔大神的《视觉SLAM十四讲》这本书,感觉整本书写的非常的平实,用非常接地气的语言毫无保留的介绍了视觉SLAM的相关知识,非常值得一读。不过,在第4章出现的李群和李代数的相关概念就有点令人难以费解了。其实这段不是这本书的作者故意写的晦涩难懂,而是这部分知识属于数学或者物理专业才会学习的知识,普通的理工科专业的读者没有接触过这方面的知识。笔者也是在这个地方卡了壳,因此在本文中将李群和李代数相关的知识总结一下。

2 群

在数学中,是一个基础但非常重要的代数结构,它由一个集合和一种满足特定条件的二元运算组成。具体来说,如果一个集合(G)和其上的一个二元运算(cdot)满足以下四个公理,则称((G, cdot))为一个群:

  1. 封闭性(Closure):对于(G)中任意两个元素(a)(b),它们通过运算(cdot)得到的结果也是(G)的一个元素。即,如果(a, b in G),那么(a cdot b in G)
  2. 结合律(Associativity):对于(G)中任意三个元素(a)(b)(c),它们之间的运算满足结合律。即,((a cdot b) cdot c = a cdot (b cdot c))
  3. 单位元(Identity element):存在一个(G)中的特殊元素(e)(称为单位元),使得对于(G)中的任何元素(a)都有(e cdot a = a cdot e = a)
  4. 逆元(Inverse element):对于(G)中的每一个元素(a),都存在一个(G)中的元素(b)(记作(a^{-1}),称为(a)的逆元),使得(a cdot a^{-1} = a^{-1} cdot a = e),这里(e)是上述的单位元。

概念说出来都是很抽象的,那么接下来直接举两个具体的例子。

2.1 整数集与加法运算

如果集合(G = mathbb{Z}= { dots, -2, -1, 0, 1, 2, dots }),运算(cdot = +),那么整数集与加法运算((Z,+))就是一个群,因为其符合群的四个公理:

  1. 封闭性
    对于任意两个整数(a, b in mathbb{Z})(a + b)仍然是一个整数。例如,(3 + (-5) = -2),结果仍然在(mathbb{Z})中。
    因此,封闭性成立。

  2. 结合律
    加法是结合的,即对于任意(a, b, c in mathbb{Z}),有

    [(a + b) + c = a + (b + c) ]

    因此,结合律成立。

  3. 单位元
    单位元是(e = 0),因为对于任意(a in mathbb{Z}),有

    [a + 0 = 0 + a = a ]

    因此,单位元存在。

  4. 逆元
    对于任意(a in mathbb{Z}),它的逆元是(-a),因为

[ a + (-a) = (-a) + a = 0 ]

因此,每个元素都有逆元。

2.2 非零实数集与乘法运算

如果集合(G = mathbb{R}^* = { x in mathbb{R} mid x neq 0 }),运算(cdot = times),那么非零实数集与乘法运算((mathbb{R}^*,times))就是一个群,因为其符合群的四个公理:

  1. 封闭性
    对于任意两个非零实数(a, b in mathbb{R}^*)(a times b)仍然是一个非零实数。例如,(3 times (-2) = -6),结果仍然在(mathbb{R}^*)中。
    因此,封闭性成立。

  2. 结合律
    乘法是结合的,即对于任意(a, b, c in mathbb{R}^*),有

    [(a times b) times c = a times (b times c) ]

    因此,结合律成立。

  3. 单位元
    单位元是(e = 1),因为对于任意(a in mathbb{R}^*),有

    [a times 1 = 1 times a = a ]

    因此,单位元存在。

  4. 逆元
    对于任意(a in mathbb{R}^*),它的逆元是(frac{1}{a}),因为

    [a times frac{1}{a} = frac{1}{a} times a = 1 ]

    因此,每个元素都有逆元。

这样来看的话,群的概念还是很好理解的。数学上的语言都是很抽象很概括的,我们不妨结合具体的例子来理解。那么,为什么会有群这个概念呢,因为数学家发现这种二元运算的集合有非常规律良好的性质,因此将其归纳总结了出来。

3 李群

李群是具有光滑性质的群。群的定义我们刚才论述过,那么这个“光滑”指的是一个怎么样的概念呢?要说清楚这个概念,可能需要更加专业的数学知识(比如《微分几何》),但是我们可以用简单一点的概念进行类比,那就是高数中的可导。

回忆一下高数中关于可导的定义:设(f: D to mathbb{R})是一个实值函数,定义在某个区间(D)上,并且(x_0 in D)是该区间中的一个内点。如果极限

[f'(x_0) = lim_{h to 0} frac{f(x_0+h) - f(x_0)}{h} ]

存在,则称函数(f)在点(x_0)处是可导的,这个极限称为(f)(x_0)处的导数,记作(f'(x_0))(frac{df}{dx}(x_0))

直观地说,这个极限衡量了当输入(x)发生微小变化时,输出(f(x))的变化率。如果一个函数在某区间内处处可导,那么这个函数在该区间内不仅连续,而且是“光滑”的,没有尖点或间断。这是一个非常优良的性质,它意味着这个函数的每个点都可以用切线方程来近似,从而使得复杂的问题可以通过简单的线性问题来解决,极大地简化了计算。

李群的光滑性质就类似于高数中的可导性。光滑意味着群运算是可以进行微分的,李群上的任何点都可以研究其局部变化率(即导数),并通过这些导数来分析群的性质。函数的导数就是导函数,而李群在单位元附近的局部性质的描述就是李代数,它通过切空间捕捉了李群的局部线性化信息。

SLAM中两个重要的李群是特殊正交群(SO(n))特殊欧式群(SE(n)),特殊正交群是旋转变换的集合和运算,特殊欧式群是欧式变换/刚性变换的集合和运算。旋转变换和欧式变换是SLAM中的两个重要的几何变换,要理解这两个概念,需要重点看《视觉SLAM十四讲》第3讲三维空间刚体运动的知识;或者对计算机图形学、计算机视觉中几何变换的知识有所了解。

3.1 特殊正交群(SO(3))

如果集合(G)是所有的三维旋转矩阵,运算(cdot)是矩阵乘法,这样构成的群就是特殊正交群(SO(3) = { R in mathbb{R}^{3times3} mid R^T R = I, det(R) = 1})

特殊正交群符合群的四个公理:

  • 封闭性:如果(R_1, R_2 in SO(3)),则(R_1 R_2 in SO(3))。两个旋转矩阵的乘积仍然是正交矩阵,且行列式仍为1。从图形学的角度上来说,旋转两次得到的姿态,旋转一次也可以得到。
  • 结合律:矩阵乘法本身是结合的,因此(SO(3))满足结合律。
  • 单位元:单位矩阵(I in SO(3)),因为(I^T I = I)(det(I) = +1)
  • 逆元:对于任意(R in SO(3)),其逆元是(R^{-1} = R^T)(正交矩阵的性质),且(det(R^{-1}) = 1)

特殊正交群具有光滑特性,这一点我们可以结合旋转变换本身的特性来理解。设想这样的一个场景:三维空间中有一个魔方,这个魔方以自己的中心点位置进行旋转。无论这个魔方怎么旋转,到任何位置,旋转过程都是平滑的。在计算机图形学中,很容易实现这样的一个任务:给定一个起点旋转矩阵、终点旋转矩阵以及起终点的时间差,很容易线性插值出任意时刻的旋转矩阵。能够平滑地旋转物体,也很符合我们对客观物理现象的认知。

3.2 特殊欧式群(SE(3))

如果集合(G)是所有的欧式变换(刚体变换)矩阵,运算(cdot)是矩阵乘法,这样构成的群就是特殊欧式群(SE(3)=bigg{ T = begin{bmatrix} R & t \ 0 & 1 end{bmatrix} in mathbb{R}^{4times4} mid R in SO(3) ,t in mathbb{R}^3 bigg})。在这里,(R)表示旋转矩阵,(t)是平移向量。

特殊欧式群符合群的四个公理:

  • 封闭性:如果(T_1, T_2 in SE(3)),则(T_1 T_2 in SE(3))。欧式变换是齐次变换矩阵,相乘后仍然保持旋转矩阵在左上角,平移向量在右上角的形式。从图形学的角度上来说,欧式变换两次得到的位姿,欧式变换一次也可以得到。
  • 结合律:矩阵乘法本身是结合的,因此(SE(3))满足结合律。
  • 单位元:单位矩阵(I_{4 times 4})(包含(3 times 3)单位矩阵和零平移向量)是(SE(3))的单位元。
  • 逆元:对于任意(T in SE(3)),其逆元是
[T^{-1} = begin{bmatrix} R^T & -R^T t \ 0 & 1 end{bmatrix}. ]

特殊欧式群具有光滑特性,这一点同样可以结合欧式变换本身的特性来理解。欧式变换是旋转变换与平移变换的组合,我们可以假设这样一个场景:一个照相机要拍摄一个物体,需要移动到这个物体的前方,并且要调整相机朝向,才能准确生成这张物体的照片。相机无论怎么移动位置,调整朝向,这个过程都是平滑的。在计算机图形学的场景中,经常会有这样的需求,按照一条固定的轨迹飞行,这条飞行轨迹上的任意一点都可以通过插值得到,保证相机操作的平滑性。

4 李代数

4.1 预备

在进行李代数的论述之前,我们需要先学习一些预备知识。

4.1.1 反对称矩阵

一个(n times n)实矩阵(A)反对称矩阵(或斜对称矩阵),如果它满足:

[A^T = -A. ]

也就是说,矩阵的转置等于它的负数,那么这个矩阵就是反对称矩阵。一个反对称矩阵的例子如下:

[A = begin{bmatrix} 0 & -a_3 & a_2 \ a_3 & 0 & -a_1 \ -a_2 & a_1 & 0 end{bmatrix}. ]

反对称矩阵有一个很重要的性质:每个三维向量都有唯一的反对称矩阵对应。具体来说,给定一个三维实向量:

[boldsymbol{a} = begin{bmatrix} a_1 \ a_2 \ a_3 end{bmatrix} in mathbb{R}^3, ]

我们可以唯一地构造一个(3times3)的反对称矩阵,记作:

[[boldsymbol{a}]_times = begin{bmatrix} 0 & -a_3 & a_2 \ a_3 & 0 & -a_1 \ -a_2 & a_1 & 0 end{bmatrix}. ]

这个符号([boldsymbol{a}]_times)中的(times)表示“叉乘”,因为这个矩阵的作用就等价于与(boldsymbol{a})做叉积。

等价于叉积运算是什么意思呢?设(boldsymbol{a}, boldsymbol{b} in mathbb{R}^3),那么:

[boldsymbol{a} times boldsymbol{b} = [boldsymbol{a}]_times boldsymbol{b}. ]

即:(boldsymbol{a})(boldsymbol{b})的叉积 等于 反对称矩阵([boldsymbol{a}]_times)作用在(boldsymbol{b})上的结果。

举例说明,设:

[boldsymbol{a} = begin{bmatrix}1 \ 2 \ 3end{bmatrix}, quad boldsymbol{b} = begin{bmatrix}4 \ 5 \ 6end{bmatrix}, ]

则:

[[boldsymbol{a}]_times = begin{bmatrix} 0 & -3 & 2 \ 3 & 0 & -1 \ -2 & 1 & 0 end{bmatrix} ]

[[boldsymbol{a}]_times boldsymbol{b} = begin{bmatrix} 0 & -3 & 2 \ 3 & 0 & -1 \ -2 & 1 & 0 end{bmatrix} begin{bmatrix}4 \ 5 \ 6end{bmatrix} = begin{bmatrix} -3 \ 6 \ -3 end{bmatrix} ]

而直接计算叉积:

[boldsymbol{a} times boldsymbol{b} = begin{vmatrix} mathbf{i} & mathbf{j} & mathbf{k} \ 1 & 2 & 3 \ 4 & 5 & 6 end{vmatrix} = -3mathbf{i} + 6mathbf{j} - 3mathbf{k} = begin{bmatrix} -3 \ 6 \ -3 end{bmatrix} ]

两者的结果一致。

4.1.2 函数求导

1. 乘积法则

(f(t), g(t))是两个可导的实函数,那么它们乘积的导数为:

[frac{d}{dt}(f(t)g(t)) = f'(t)g(t) + f(t)g'(t) ]

例如,设(f(t) = t^2, g(t) = sin t),则:

[(fg)' = (t^2 sin t)' = 2t sin t + t^2 cos t ]

2. 链式法则

如果(y = f(g(t))),那么:

[frac{dy}{dt} = f'(g(t)) cdot g'(t). ]

例如,令(f(u) = e^u)(u = g(t) = at),根据链式法则:

[frac{d}{dt} e^{at} = frac{d}{du} e^u cdot frac{d}{dt}(at) = e^u cdot a = e^{at} cdot a = a e^{at}. ]

即:

[frac{d}{dt} e^{at} = a e^{at} ]

4.1.3 矩阵求导

对于一个随自变量t变化的矩阵(R(t)),它的导数(frac{dR(t)}{dt})是将该矩阵的每个元素分别对自变量(t)求导得到的新矩阵。例如:

如果:

[R(t) = begin{bmatrix} r_{11}(t) & r_{12}(t) \ r_{21}(t) & r_{22}(t) end{bmatrix}, ]

那么:

[frac{dR(t)}{dt} = begin{bmatrix} frac{dr_{11}}{dt} & frac{dr_{12}}{dt} \ frac{dr_{21}}{dt} & frac{dr_{22}}{dt} end{bmatrix}. ]

所以,矩阵对自变量求导 = 矩阵中每个元素对自变量求导

通过上述概念可看出,矩阵转置运算与微分运算是可交换的。可以理解为:

  • 转置是对矩阵元素做排列;
  • 微分是对每个元素做导数;
  • 所以先转置再导数 = 先导数再转置。

公式描述就是:

[frac{d}{dt} R(t)^T = left(frac{dR(t)}{dt}right)^T. ]

4.1.4 微分方程

微分方程是数学中的一种方程,它涉及一个或多个未知函数及其导数,目标是找到满足该方程的未知函数。后面会求解一个一阶线性常微分方程如下:

[frac{dx(t)}{dt} = a x(t), quad x(0) = x_0, ]

其中(a)是常数。

先说答案,这个方程的通解是:

[x(t) = x_0 e^{at}. ]

可以把这个解代入原方程验证是否成立。对解的两边进行求导:

[frac{dx(t)}{dt} = x_0 cdot frac{d}{dt}(e^{at}) = x_0 cdot a e^{at} = a x_0 e^{at} = a x(t). ]

左边是(frac{dx(t)}{dt}),右边是(a x(t)),两者相等,所以解成立。

如果需要严格推导这个解,需要使用分离变量法

从原方程出发:

[frac{dx}{dt} = a x. ]

把变量分开:

[frac{1}{x} dx = a dt. ]

两边积分:

[int frac{1}{x} dx = int a dt \ Rightarrow ln|x| = at + C, ]

其中(C)是积分常数。

两边取指数:

[|x| = e^{at + C} = e^C e^{at}. ]

(x_0 = e^C),得:

[x(t) = x_0 e^{at}. ]

4.2 引出

前面我们介绍过,李群的光滑性质保证了是可以微分的,那我们就尝试对李群(SO(3))进行求导。假设一个刚体在三维空间中绕某个轴旋转,其旋转状态可以用一个旋转矩阵(R(t))来描述,其中(t)是时间参数。那么我们要求的就是(R(t))关于时间(t)的导数:

[frac{d}{dt} R(t) ]

由于(R(t))是正交矩阵,满足(R(t)^T R(t) = I),对两边关于(t)求导:

[frac{d}{dt} big( R(t)^T R(t) big) = frac{d}{dt} I ]

根据函数求导的乘积法则,展开左边的导数:

[frac{dR(t)^T}{dt} R(t) + R(t)^T frac{dR(t)}{dt} = 0. ]

根据预备知识,矩阵转置运算与微分运算可交换,有(frac{dR(t)^T}{dt} = big(frac{dR(t)}{dt}big)^T),因此上式可以改写为:

[bigg(frac{dR(t)}{dt}bigg)^T R(t) + R(t)^T frac{dR(t)}{dt} = 0. ]

继而:

[frac{dR(t)}{dt} R(t)^T = -bigg(frac{dR(t)}{dt}bigg)^T R(t) ]

这表明(frac{dR(t)}{dt} R(t)^T)是一个反对称矩阵,记作([boldsymbol{omega}(t)]_{times}),即:

[frac{dR(t)}{dt} = [boldsymbol{omega}(t)]_{times} R(t), ]

上式是一个一阶线性微分方程,有如下条件:

[frac{dR(t)}{dt} = [boldsymbol{omega}]_times R(t), quad R(0) = I, ]

这个方程我们在预备知识中求解过,它的解是:

[R(t) = exp([boldsymbol{omega}]_times t). ]

其中(exp)表示矩阵指数运算。(boldsymbol{omega}(t))描述了刚体在时刻(t)的瞬时旋转轴和旋转速率,其实也就是表达旋转矩阵的旋转向量,([boldsymbol{omega}(t)]_{times})是其对应的反对称矩阵。这个公式给出了从旋转向量到旋转矩阵(李群)的映射,也就是指数映射。而这个旋转向量,就是我们要论述的李代数。

如果读者熟悉计算机图形学,就会对旋转向量并不陌生,它描述了一个旋转操作的方向(旋转轴)和大小(旋转角度)。四元数就是一个与旋转向量密切相关的参数,通过罗德里格斯公式也可以将旋转向量转换成旋转矩阵。

5 结语

本篇由群引申到李群,再引出到李代数,不得不说SLAM中李群和李代数相关的知识还是很多,其中很多知识都是第一次接触到。另外,很多更基础的知识(比如高数、线代)也都忘记了,不得不一边学习新的知识一边复习旧的知识。在下一篇文章中,笔者会继续总结论述一下李代数相关的内容。

发表评论

评论已关闭。

相关文章