从零开始一起学习SLAM | 为啥需要李群与李代数?
很多刚刚接触SLAM的小伙伴在看到李群和李代数这部分的时候,都有点蒙蒙哒,感觉突然到了另外一个世界,很多都不自觉的跳过了,但是这里必须强调一点,这部分在后续SLAM的学习中其实是非常重要的基础,不信你看看大神们的论文就知道啦。
关于李群李代数,其实高翔的《视觉SLAM十四讲》里推导什么的挺清楚了,本文就在高博的基础上用比较容易理解的语言讲述一下重点。
首先,假装(也可能是真的)自己是个小白,我们假想对面坐了一个大牛师兄,下面我们开启问答模式。
为啥需要李代数?
小白:师兄,我最近在学习SLAM,看到李群、李代数这一块一直看不懂,不知所云啊,师兄能不能用通俗易懂的方式给我讲解一下?
师兄:好啊,正好这会有空,讲完正好去吃饭。
小白:我请师兄吃烧烤!
师兄:哈哈,那我必须给你讲明白啦!现在开始吧。
小白:好,先问下师兄,我在看高博的书,前面几章挺顺利的,第四章突然跳出来李群和李代数,一堆公式推导,看的我头都大了。
师兄:这部分公式是有点多,不过李群李代数是为了解决SLAM中非常实际的问题的。到后面会用到的。
小白:看来逃不过啊。。。
师兄:是的,这部分必须理解的啊。刚才说到了解决SLAM中实际问题,我展开说下。我们知道SLAM的过程就是不断的估计相机的位姿和建立地图。其中,相机位姿也就是我们所说的变换矩阵T。
小白:嗯嗯,是。上节课《从零开始一起学习SLAM | 三维空间刚体的旋转》中还讲了变换矩阵呢!
师兄:对~下面举个例子说明。比如你拿着相机一边移动一边拍,假设某个时刻相机的位姿是T,它观察到一个在世界坐标系中的一个空间点p,并在相机上产生了一个观测数据z,那么
z = Tp + noise
noise是观测噪声。那么观测误差就是
e = z - Tp
小白:嗯,我 知道,我们的目的就是使得误差最小咯~
师兄:对的,假设我们总共有N个这样的三维点p和观测值z,那么我们的目标就是寻找一个最佳的位姿T,使得整体误差最小化,也就是
求解此问题,就是求目标函数J对于变换矩阵T的导数。
小白:嗯,对矩阵求导?第一次 听说啊。。
师兄:听起来确实有点怪。我们先来看看变换矩阵T,我们知道T所在的SE(3)空间,对加法计算并不封闭,也就是说任意两个变换矩阵相加后并不是一个变换矩阵,这主要是因为旋转矩阵对加法是不封闭造成的,它是有约束的。
小白:旋转矩阵对加法不封闭啥意思?
师兄:嗯,这个我一会会细讲,这里你先记住好了。到后面你就知道了
小白:好的,那刚才的问题怎么解决呢?
师兄:这个问题问的好,李代数就是解决这个问题的。我们把大写SE(3)空间的T映射为一种叫做李代数的东西,映射后的李代数我们叫做小se(3)好了。它是由向量组成的,我们知道向量是对加法封闭的。这样我们就可以通过对李代数求导来间接的对变换矩阵求导了。
小白:原来如此啊!不过刚才说了那么多概念,都是什么意思啊?
李群怎么理解?
师兄:不急,我一个个说。我先说说李群吧,额,不,先说说群吧。按照数学上定义:群(group)就是一种集合加上一种运算的代数结构。群有几个运算性质,好像高博说是“凤姐咬你”
小白:(瞪大了眼睛)嗯?
师兄:哦,谐音谐音。。。就是:封闭性,结合律,幺元,还有逆。对了,比如旋转矩阵和乘法就构成了旋转矩阵群,变换矩阵和乘法也构成了变换矩阵群。对了,你说,旋转矩阵和加法能构成群吗?
小白:额。。刚才好像说不行吧?
师兄:嗯,不行的 ,他们不满足封闭性。刚才没有细讲,下面仔细解释原因。我们知道旋转矩阵R本身有一定的约束:
两个旋转矩阵R1+R2的结果就不能满足上述约束了,但是R1R2满足。此外,旋转矩阵还满足结合律:R1R2=R2*R1,还有幺元是单位矩阵I,也有逆矩阵满足R乘以R的逆等于幺元(单位阵)。还有,我们在SLAM里最常说的有两个,一个是特殊正交群SO(3),也就是旋转矩阵群,还有特殊欧氏群SE(3),也就是变换矩阵群,3代表是三维的。
小白:嗯嗯,书上看了,我差不多理解群是个什么东东了,那李群呢?
师兄:李群的定义是指连续光滑的群,比如我们前面说的旋转矩阵群SO(3),你想象你拿个杯子就可以在空间中以某个支点连续的旋转它,所以SO(3)它就是李群。如果你一般旋转一边移动它,也是连续的或者说光滑的运动,所以变换矩阵群SE(3)也是李群。
李代数是李群的亲戚吗?
小白:嗯,师兄,那李代数呢,它和李群都姓李,他们什么关系?
师兄:(一脸黑线)我个人的理解是这样的,就是我们相机在三维空间中是连续的旋转或者变换的嘛,刚才说过,而我们SLAM目的就是优化求解相机的这个最佳的位姿T(变换矩阵),优化方法一般都采用迭代优化的方法,每次迭代都更新一个位姿的增量delta,使得目标函数最小。这个delta就是通过误差函数对T微分得到的。也就是说我们需要对变换矩阵T求微分(导数),我们先以SO(3)空间中的旋转矩阵 R为例来说说吧,你觉得如何对R求微分呢?
小白:矩阵怎么求。。求微分,这个能微分吗?以前没有学过啊
师兄:可以的,李群和李代数都姓李(笑),你还别说,他们之间的确存在某种微分关系。我们先把结论放这里:李代数对应李群的正切空间,它描述了李群局部的导数。
小白:也就是说,李代数对应了李群的导数?
师兄:可以这么理解,你可以去看一下十四讲中65-66页那部分的推导,我们只关注两个结论就行了
第一个结论:
看下面的公式,我们发现旋转矩阵的微分是一个反对称(也叫斜对称)矩阵左乘它本身,也印证了我前面说的,矩阵是可以微分的。对于某个时刻的R(t)(李群空间),存在一个三维向量φ=(φ1,φ2,φ3)(李代数空间),用来描述R在t时刻的局部的导数。
反对称矩阵是啥?
小白:等一下,师兄,反对称矩阵是啥?第一次听说啊
师兄:哦哦,忘记解释了。反对称矩阵英文是skew symmetric matrix,有的地方也翻译为斜对称矩阵,其实是一个东西。
小白:这个反对称矩阵是啥意思?
师兄:反对称矩阵其实是将三维向量和三维矩阵建立对应关系。它是这样定义的:如果一个3 X 3的矩阵A满足如下式子
那么A就是反对称矩阵。你看左边有个转置,右边有个负号,叫反对称矩阵,还是挺形象的。
小白:额,好像有点明白,不过这个有啥用啊?
师兄:先别急,先问你一个问题,你觉得反对称矩阵它的元素有什么特点?
小白:啊。。特点啊,我想想(一分钟过去了。。)
师兄:根据它的性质,先想想对角线元素。你看,上式等式左边矩阵A转置后,对角线元素aii是不是还在对角线上?
小白:对哦,师兄好厉害
师兄:额。。别打岔,等式右边,所有元素取负号,那么对于对角线元素aii来说,是不是满足aii=-aii?
小白:是哦,所以aii=0,也就是说反对称矩阵对角线元素都为0?
师兄:bingo!确实是这样。那么非对角线元素还有6个,它们能不能精简呢?
小白:我想想,感觉好像是有重复的,好像可以用更少的元素来表示
师兄:没错!我举个例子,等式左边第2行第1列位置的元素,是矩阵A元素a12转置后到了位置a21,等式右边原来a21变成了 -a21,所以其实对于矩阵A,元素a12 = -a21,所以用一个元素及其负数就可以表示矩阵中这两个元素,同理,其他4个元素也是这样。所以,其实矩阵A中非对角线元素只用3个元素就可以表示。也就是说反对称矩阵A只有3个自由度。
小白:嗯呢,师兄好厉害!不过。。。知道这些有啥用啊?
师兄:这个反对称矩阵只有3个自由度很重要啊,这样我们就可以把一个三维向量和一个三维矩阵建立对应关系。
小白:师兄,感觉还是很抽象啊
师兄:哦哦,那我举个栗子给你看看。我们假设有一个反对称矩阵A的定义如下:
小白:等下,我看看是否满足性质:该矩阵的转置等于该矩阵元素取负数。。
师兄:你看是不是我们前面推算的一致啊,对角线元素为0,只有3个自由度?
小白:是哦,确实没错!师兄继续。。
师兄:我们定义对应的一个三维向量:
然后我们用一个上三角符号来表示这个向量α和三维矩阵A的对应关系
小白:这个符号感觉很神奇啊
师兄:是的,通过这个符号,我们把向量和矩阵建立了对应关系。这个在后面非常重要。你再看看前面的第一个结论
就好理解很多了。
小白:嗯嗯。确实是呢。师兄继续下一个结论吧。
指数映射
师兄:好 ,下面说说第二个结论。通过高博一系列辛苦的 计算(笑),我们最终得到下面式子,它的前提是R在原点附近的一阶泰勒展开,我们看到这个向量φ=(φ1,φ2,φ3)反应了R的导数性质,故称它在SO(3)上的原点 φ0 附近的正切空间上。这个φ正是李群大SO(3)对应的李代数小so(3)。
小白:好晕啊。。
师兄:你这么理解吧,李代数小so(3)是三维向量φ的集合,每个向量φi的反对称矩阵都可以表达李群(大SO(3))上旋转矩阵R的导数,而R和φ是一个指数映射关系。也就是说,李群空间的任意一个旋转矩阵R都可以用李代数空间的一个向量的反对称矩阵指数来近似。
小白:好绕的绕口令啊。。
师兄:没事,你只要记得用旋转矩阵表示的话就是李群空间,也是我们熟悉的表示方法。而用向量的反对称矩阵表示的话就是李代数空间,这两个空间建立了联系。
小白:师兄,那这个古怪的式子
如何计算呢?
师兄:嗯,这个用大一学的微积分就行。
小白:微积分忘的差不多了。。。
师兄:没事,其实就只用到指数e的泰勒展开
小白:师兄,书上的推导好麻烦啊
师兄:先不管具体推导过程,我们先来看看结论,你说的那个指数形式的古怪的式子通过运用泰勒展开,以及反对称矩阵的性质,我们可以得到如下结果:
其中:三维向量 φ = θa,a是一个长度为1的方向向量。看到这个式子有没有觉得很神奇?
小白:好像在哪里见过啊
师兄:嗯,这个式子和罗德里格斯公式长的一模一样
小白:忘了什么是罗德里格斯公式了。。。
师兄:你还记得旋转的表示方法吗?有旋转矩阵、旋转向量、欧拉角、四元数,而罗德里格斯公式是表示从旋转向量到旋转矩阵的转换过程的
小白:师兄这么一说,我想起来了,旋转向量也有一个旋转角θ,旋转轴也是单位方向向量
师兄:其实旋转向量就是这里的李代数
小白:啊?这怎么会扯上关系?
师兄:你可能有点反应不过来,不过的确小so(3)的李代数空间就是由旋转向量组成的的空间,其物体意义就是旋转向量。而前面结论二中的指数映射关系就是罗德里格斯公式,他们在数学上本质是一样的
小白:真的好神奇啊
师兄:嗯,这样我们可以说旋转矩阵的导数可以由其对应的旋转向量指定,指导如何在旋转矩阵中进行微积分运算。
小白:这样就好理解多了
李群李代数之间的指数对数映射关系
师兄:嗯,反过来,用对数映射也能把大SO(3)李群空间中元素映射到小so(3)李代数空间中去。前面我们都是讲的SO(3)上的映射关系,放到SE(3)上推导类似,也是泰勒展开,旋转矩阵R映射结果和SO(3)一样,平移部分指数映射后会有稍许的不同,它前面多了一个系数矩阵,这些都可以自己证明一下(留作作业)。
小白:嗯嗯,师兄,是不是只要记住高博大神书上的对应关系图就行啦?
师兄:这个图要理解透彻
小白:对了,师兄,好像还有一个左扰动,右扰动什么的,这个是干什么用的呀
师兄:这个是用李代数解决求导问题时使用的方法。对了,李代数是对加法封闭的吗?
小白:嗯,李代数是由向量组成的,向量对加法运算是封闭的。
师兄:嗯,学的真快!你说的没错。李代数求导分两种:一种是用李代数表示位姿,然后根据李代数加法来对李代数求导。这种方法书中也推导了,结果中有复杂的雅克比公式,不是很方便。一般都用第二种,就是对李群进行左乘或者右乘微小的扰动,然后对该扰动求导。书上高博也推导了,你看结果还是挺简洁的。
小白:那我们就用扰动模型好啦
师兄:确实实际SLAM问题中,扰动模型比较实用方便。扰动模型的推导一定要自己推一遍哦
小白:嗯,我尽量。。谢谢师兄耐心解答,走,请你吃烧烤去。
以上内容参考了高博的《视觉SLAM十四讲》,SLAM入门必备,优惠购买链接
彩蛋
李群李代数部分有不少推导,其中最难理解的3个推导是SO(3)左扰动模型,SO(3)李代数求导,SE(3)左扰动模型,知识星球:从零开始学习SLAM中关于上面3个过程的推导进行了视频讲解,见下面视频:
李群李代数疑难公式详细推导
本讲练习
1、重要理论推导题
推导李代数小se(3)的指数映射。
我们知道对于大SE(3),其对应的李代数为小se(3)。其定义如下
证明1:
证明2:令ρ=θa,那么
提示:
参考《视觉SLAM十四讲》P68-71页内容。参考SO(3) 的泰勒展开,然后合并奇偶数项级数
2、编程练习
SLAM问题的目标之一就是精确的估计相机运动的轨迹(姿态),如果我们将相机运动的轨迹绘制出来,就可以直观的观察它的运动是否符合预期。给定一个轨迹文件trajectory.txt,该文件的每一行由若干个数据组成,格式为 [time, tx, ty, tz, qx, qy, qz, qw],其中 time 为时间,tx,ty,tz 为平移部分,qx,qy,qz,qw 是四元数表示的旋转部分,请完成数据读取部分的代码,绘制部分代码已经给出。
公众号菜单栏回复:“轨迹”,即可下载上面代码框架和轨迹数据。
欢迎留言讨论,更多学习视频、文档资料、参考答案等在菜单栏点击“知识星球”,进入《知识星球:从零开始一起学习SLAM》和其他学习SLAM学的伙伴一起学习交流~
相关阅读
从零开始一起学习SLAM | 为什么要学SLAM?
从零开始一起学习SLAM | 学习SLAM到底需要学什么?
从零开始一起学习SLAM | SLAM有什么用?
从零开始一起学习SLAM | C++新特性要不要学?
从零开始一起学习SLAM | 为什么要用齐次坐标?
从零开始一起学习SLAM | 三维空间刚体的旋转
零基础小白,如何入门计算机视觉?
原文链接:零开始一起学习SLAM | 为啥需要李群与李代数?
---------------------
作者:electech6
来源:CSDN
原文:https://blog.csdn.net/electech6/article/details/83579286
版权声明:本文为博主原创文章,转载请附上博文链接!
从零开始一起学习SLAM | 为啥需要李群与李代数?的更多相关文章
- 从零开始一起学习SLAM | 掌握g2o边的代码套路
点"计算机视觉life"关注,置顶更快接收消息! 小白:师兄,g2o框架<从零开始一起学习SLAM | 理解图优化,一步步带你看懂g2o代码>,以及顶点<从零开始 ...
- 从零开始一起学习SLAM | 掌握g2o顶点编程套路
点"计算机视觉life"关注,置顶更快接收消息! ## 小白:师兄,上一次将的g2o框架<从零开始一起学习SLAM | 理解图优化,一步步带你看懂g2o代码>真的很清晰 ...
- 从零开始一起学习SLAM | 理解图优化,一步步带你看懂g2o代码
首发于公众号:计算机视觉life 旗下知识星球「从零开始学习SLAM」 这可能是最清晰讲解g2o代码框架的文章 理解图优化,一步步带你看懂g2o框架 小白:师兄师兄,最近我在看SLAM的优化算法,有种 ...
- 从零开始一起学习SLAM | 点云平滑法线估计
点击公众号"计算机视觉life"关注,置顶星标更快接收消息! 本文编程练习框架及数据获取方法见文末获取方式 菜单栏点击"知识星球"查看「从零开始学习SLAM」一 ...
- 从零开始一起学习SLAM | 给点云加个滤网
对VSLAM和三维重建感兴趣的在计算机视觉life"公众号菜单栏回复"三维视觉"进交流群. 小白:师兄,上次你讲了点云拼接后,我回去费了不少时间研究,终于得到了和你给的参 ...
- 从零开始一起学习SLAM | 你好,点云
本文提纲 先热热身点云是啥你知道点云优缺点吗?点云库PCL:开发者的福音PCL安装指北炒鸡简单的PCL实践留个作业再走先热热身 小白:hi,师兄,好久不见师兄:师妹好,上周单应矩阵作业做了吗?小白:嗯 ...
- 从零开始一起学习SLAM | 神奇的单应矩阵
小白最近在看文献时总是碰到一个奇怪的词叫“homography matrix”,查看了翻译,一般都称作“单应矩阵”,更迷糊了.正所谓:“每个字都认识,连在一块却不认识”就是小白的内心独白.查了一下书上 ...
- 从零开始一起学习SLAM | 不推公式,如何真正理解对极约束?
自从小白向师兄学习了李群李代数和相机成像模型的基本原理后,感觉书上的内容没那么难了,公式推导也能推得动了,感觉进步神速,不过最近小白在学习对极几何,貌似又遇到了麻烦... 小白:师兄,对极几何这块你觉 ...
- 从零开始一起学习SLAM | 相机成像模型
上一篇文章<从零开始一起学习SLAM | 为啥需要李群与李代数?>以小白和师兄的对话展开,受到了很多读者的好评.本文继续采用对话的方式来学习一下相机成像模型,这个是SLAM中极其重要的内容 ...
随机推荐
- vue项目打包后一片空白及资源引入的路径报错解决办法
网上很多说自己的VUE项目通过Webpack打包生成的list文件,放到HBulider打包后,通过手机打开一片空白.这个主要原因是路径的问题. 1.记得改一下config下面的index.js中bu ...
- Dapper的数据库连接管理(打开、关闭)
Dapper对于数据库连接的管理:如果已经打开,它会关闭连接.如果你只是做一个快速查询-让Dopter自己处理它. 如果你做了很多事情,你应该自己打开连接,并在最后关闭连接,所有的查询在中…只是从效率 ...
- tensorflow的assgin方法
官网API是这么说的 This operation outputs a Tensor that holds the new value of 'ref' after the value has bee ...
- Search,look for,find,seek(找)用法
舉個例子 ----> 你可以幫我找我的眼鏡嗎? SEARCH Search是仔細.徹底尋找/搜尋的意思. 比較少人會說 Can you help me search for my glasses ...
- 关于richtextbox改变字体颜色,加下划线
参考了三份有用的资料: 1.关于richtextbox设置字体颜色的问题 http://biancheng.dnbcw.net/c/180381.html 2.C#Winform使用扩展方法自定义富文 ...
- 剑指Offer题解(Python版)
https://blog.csdn.net/tinkle181129/article/details/79326023# 二叉树的镜像 链表中环的入口结点 删除链表中重复的结点 从尾 ...
- 内核ipc机制
内核版本:linux2.6.22.6 硬件平台:JZ2440 驱动源码 block_ipc_poll_key_int_drv.c : #include <linux/module.h> # ...
- python练习题-day2
1.判断下列逻辑语句的True,False 1)1 > 1 or 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6 True ...
- vs 2017 集成python
官网:https://docs.microsoft.com/en-us/visualstudio/python/installation
- 回文字符串 NYOJ
# include<iostream> # include<string> # include<string.h> # include<queue> # ...