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

1 概述

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

2 群

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

  1. 封闭性(Closure):对于GG中任意两个元素abb,它们通过运算得到的结果也是GG的一个元素。即,如果a,bG,那么abGa⋅b∈G
  2. 结合律(Associativity):对于GG中任意三个元素abbc,它们之间的运算满足结合律。即,(ab)c=a(bc)(a⋅b)⋅c=a⋅(b⋅c)
  3. 单位元(Identity element):存在一个GG中的特殊元素e(称为单位元),使得对于GG中的任何元素a都有ea=ae=ae⋅a=a⋅e=a
  4. 逆元(Inverse element):对于GG中的每一个元素a,都存在一个GG中的元素b(记作a1a−1,称为aa的逆元),使得aa1=a1a=e,这里ee是上述的单位元。

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

2.1 整数集与加法运算

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

  1. 封闭性
    对于任意两个整数a,bZa,b∈Za+ba+b仍然是一个整数。例如,3+(5)=23+(−5)=−2,结果仍然在ZZ中。
    因此,封闭性成立。

  2. 结合律
    加法是结合的,即对于任意a,b,cZa,b,c∈Z,有

    (a+b)+c=a+(b+c)(a+b)+c=a+(b+c)

    因此,结合律成立。

  3. 单位元
    单位元是e=0e=0,因为对于任意aZa∈Z,有

    a+0=0+a=aa+0=0+a=a

    因此,单位元存在。

  4. 逆元
    对于任意aZa∈Z,它的逆元是a−a,因为

a+(a)=(a)+a=0a+(−a)=(−a)+a=0

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

2.2 非零实数集与乘法运算

如果集合G=R={xRx0}G=R∗={x∈R∣x≠0},运算=×⋅=×,那么非零实数集与乘法运算(R,×)(R∗,×)就是一个群,因为其符合群的四个公理:

  1. 封闭性
    对于任意两个非零实数a,bRa,b∈R∗a×ba×b仍然是一个非零实数。例如,3×(2)=63×(−2)=−6,结果仍然在RR∗中。
    因此,封闭性成立。

  2. 结合律
    乘法是结合的,即对于任意a,b,cRa,b,c∈R∗,有

    (a×b)×c=a×(b×c)(a×b)×c=a×(b×c)

    因此,结合律成立。

  3. 单位元
    单位元是e=1e=1,因为对于任意aRa∈R∗,有

    a×1=1×a=aa×1=1×a=a

    因此,单位元存在。

  4. 逆元
    对于任意aRa∈R∗,它的逆元是1a1a,因为

    a×1a=1a×a=1a×1a=1a×a=1

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

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

3 李群

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

回忆一下高数中关于可导的定义:设f:DRf:D→R是一个实值函数,定义在某个区间DD上,并且x0D是该区间中的一个内点。如果极限

f(x0)=limh0f(x0+h)f(x0)hf′(x0)=limh→0f(x0+h)−f(x0)h

存在,则称函数ff在点x0处是可导的,这个极限称为ffx0处的导数,记作f(x0)f′(x0)dfdx(x0)dfdx(x0)

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

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

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

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

如果集合GG是所有的三维旋转矩阵,运算是矩阵乘法,这样构成的群就是特殊正交群SO(3)={RR3×3RTR=I,det(R)=1}SO(3)={R∈R3×3∣RTR=I,det(R)=1}

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

  • 封闭性:如果R1,R2SO(3)R1,R2∈SO(3),则R1R2SO(3)R1R2∈SO(3)。两个旋转矩阵的乘积仍然是正交矩阵,且行列式仍为1。从图形学的角度上来说,旋转两次得到的姿态,旋转一次也可以得到。
  • 结合律:矩阵乘法本身是结合的,因此SO(3)SO(3)满足结合律。
  • 单位元:单位矩阵ISO(3)I∈SO(3),因为ITI=IITI=Idet(I)=+1det(I)=+1
  • 逆元:对于任意RSO(3)R∈SO(3),其逆元是R1=RTR−1=RT(正交矩阵的性质),且det(R1)=1det(R−1)=1

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

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

如果集合GG是所有的欧式变换(刚体变换)矩阵,运算是矩阵乘法,这样构成的群就是特殊欧式群SE(3)={T=[Rt01]R4×4RSO(3),tR3}SE(3)={T=[Rt01]∈R4×4∣R∈SO(3),t∈R3}。在这里,RR表示旋转矩阵,t是平移向量。

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

  • 封闭性:如果T1,T2SE(3)T1,T2∈SE(3),则T1T2SE(3)T1T2∈SE(3)。欧式变换是齐次变换矩阵,相乘后仍然保持旋转矩阵在左上角,平移向量在右上角的形式。从图形学的角度上来说,欧式变换两次得到的位姿,欧式变换一次也可以得到。
  • 结合律:矩阵乘法本身是结合的,因此SE(3)SE(3)满足结合律。
  • 单位元:单位矩阵I4×4I4×4(包含3×33×3单位矩阵和零平移向量)是SE(3)SE(3)的单位元。
  • 逆元:对于任意TSE(3)T∈SE(3),其逆元是

T1=[RTRTt01].T−1=[RT−RTt01].

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

4 李代数

4.1 预备

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

4.1.1 反对称矩阵

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

AT=A.

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

A=0a3a2a30a1a2a10.A=[0−a3a2a30−a1−a2a10].

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

a=a1a2a3R3,a=[a1a2a3]∈R3,

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

[a]×=0a3a2a30a1a2a10.[a]×=[0−a3a2a30−a1−a2a10].

这个符号[a]×[a]×中的××表示“叉乘”,因为这个矩阵的作用就等价于与aa做叉积。

等价于叉积运算是什么意思呢?设a,bR3a,b∈R3,那么:

a×b=[a]×b.a×b=[a]×b.

即:aabb的叉积 等于 反对称矩阵[a]×[a]×作用在bb上的结果。

举例说明,设:

a=123,b=456,a=[123],b=[456],

则:

[a]×=032301210[a]×=[0−3230−1−210]

[a]×b=032301210456=363[a]×b=[0−3230−1−210][456]=[−36−3]

而直接计算叉积:

a×b=∣ ∣ijk123456∣ ∣=3i+6j3k=363a×b=|ijk123456|=−3i+6j−3k=[−36−3]

两者的结果一致。

4.1.2 函数求导

1. 乘积法则

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

ddt(f(t)g(t))=f(t)g(t)+f(t)g(t)ddt(f(t)g(t))=f′(t)g(t)+f(t)g′(t)

例如,设f(t)=t2,g(t)=sintf(t)=t2,g(t)=sin⁡t,则:

(fg)=(t2sint)=2tsint+t2cost(fg)′=(t2sin⁡t)′=2tsin⁡t+t2cos⁡t

2. 链式法则

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

dydt=f(g(t))g(t).dydt=f′(g(t))⋅g′(t).

例如,令f(u)=euf(u)=euu=g(t)=atu=g(t)=at,根据链式法则:

ddteat=ddueuddt(at)=eua=eata=aeat.ddteat=ddueu⋅ddt(at)=eu⋅a=eat⋅a=aeat.

即:

ddteat=aeatddteat=aeat

4.1.3 矩阵求导

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

如果:

R(t)=[r11(t)r12(t)r21(t)r22(t)],

那么:

dR(t)dt=dr11dtdr12dtdr21dtdr22dt.dR(t)dt=[dr11dtdr12dtdr21dtdr22dt].

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

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

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

公式描述就是:

ddtR(t)T=(dR(t)dt)T.ddtR(t)T=(dR(t)dt)T.

4.1.4 微分方程

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

dx(t)dt=ax(t),x(0)=x0,dx(t)dt=ax(t),x(0)=x0,

其中aa是常数。

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

x(t)=x0eat.

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

dx(t)dt=x0ddt(eat)=x0aeat=ax0eat=ax(t).dx(t)dt=x0⋅ddt(eat)=x0⋅aeat=ax0eat=ax(t).

左边是dx(t)dtdx(t)dt,右边是ax(t)ax(t),两者相等,所以解成立。

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

从原方程出发:

dxdt=ax.dxdt=ax.

把变量分开:

1xdx=adt.1xdx=adt.

两边积分:

1xdx=adtln|x|=at+C,∫1xdx=∫adt⇒ln⁡|x|=at+C,

其中CC是积分常数。

两边取指数:

|x|=eat+C=eCeat.

x0=eCx0=eC,得:

x(t)=x0eat.x(t)=x0eat.

4.2 引出

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

ddtR(t)

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

ddt(R(t)TR(t))=ddtI

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

dR(t)TdtR(t)+R(t)TdR(t)dt=0.dR(t)TdtR(t)+R(t)TdR(t)dt=0.

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

(dR(t)dt)TR(t)+R(t)TdR(t)dt=0.(dR(t)dt)TR(t)+R(t)TdR(t)dt=0.

继而:

dR(t)dtR(t)T=(dR(t)dt)TR(t)dR(t)dtR(t)T=−(dR(t)dt)TR(t)

这表明dR(t)dtR(t)TdR(t)dtR(t)T是一个反对称矩阵,记作[ω(t)]×[ω(t)]×,即:

dR(t)dt=[ω(t)]×R(t),dR(t)dt=[ω(t)]×R(t),

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

dR(t)dt=[ω]×R(t),R(0)=I,dR(t)dt=[ω]×R(t),R(0)=I,

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

R(t)=exp([ω]×t).R(t)=exp⁡([ω]×t).

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

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

5 结语

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

原创作者: charlee44 转载于: https://www.cnblogs.com/charlee44/p/18857840

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值