深蓝学院-视觉SLAM课程-第3讲笔记-李群和李代数
课程Github地址:https://github.com/wrk666/VSLAM-Course/tree/master
0. 内容
1. 什么是群
为什么要引入群?
因为求旋转矩阵或者变换矩阵的导数时,加法不再成立,所以求矩阵的导数需要引入其他的方法,于是就引入了群。
“群,环,域”都是是抽象代数中的东西
因为加法在整数上面呈交换群,所以2+3=3+2=5
例如:在加法上的运算,幺元为0,a+(-a)=0
在乘法上,幺元为1,a∗1a=1a* \dfrac{1}{a}=1a∗a1=1
旋转矩阵可逆,是正交的矩阵,与矩阵乘法构成群。
如果不成群的话,基本上就没什么必要去讨论了。
一般的n×nn\times nn×n的可逆矩阵就是一般线性群GL(n)
基础知识补充:《抽象代数》,《微分几何》
2. 李群与李代数
具有连续(光滑)性质的群叫做李群(Lie Group)。
基础知识补充:《微分几何》
流形的定义(我的理解):流形是一个空间。流形是低维数据映射到高维形成的一个空间。高维空间中的数据会产生维度上的冗余,但实际上这些数据只需要使用较低的维度就能够唯一表示。而之前听到过的流形学习就是:假设数据是均匀采样于一个高维的欧氏空间中的低维流形,流形学习就是从高维采样数据中恢复低维的流形结构,及找到高维空间中的低维流形,并求出相应的嵌入映射,以实现维数约简或者数据可视化。他是从观测到的现象中寻找事物的本质,已找到产生数据的内在规律。
下列图片来自参考博客
SO(3)和SE(3)只有定义良好的乘法,没有加法,所以难以及逆行取极限,求导等操作。(前面不是说是为了求出旋转矩阵的导数才引入群的吗?这里怎么还不能求呢?)
首先由SO(3)(旋转矩阵)来引入李代数。
首先对于旋转矩阵,是正交的,两侧对时间求导,整理之后得到一个反对称矩阵
R˙(t)R(t)T\dot{R}(t)R(t)^TR˙(t)R(t)T
a^表示由向量到反对称矩阵,而
表示由反对称矩阵表示向量。
可看作对R(t)求导之后,左侧多出一个ϕ(t)\phi(t)ϕ(t)^
对R(t)进行一阶泰勒展开,在t0t_0t0附近ϕ\phiϕ不变,化为微分方程,带入初始条件解之得(有一些细节没有仔细讲)
任意给定一个向量ϕ\phiϕ,能够找到一个对应关系,
eϕ^0t=R(t)e^{\hat\phi_0 t}=R(t)eϕ^0t=R(t)
其中ϕ\phiϕ是李代数,对应关系是指数映射,RRR是李群。
下面是李代数的严格定义:
给出结构带进去验证就能看是否是李代数。
[,]是李括号运算。
SO(3)是矩阵,so(3)是向量(其实矩阵和向量一一对应,都可以,但是这样更自然),李括号是作用在向量上的运算。
SE(3)的李代数是6维向量,ρ\rhoρ表示平移,ϕ\phiϕ表示旋转,而上尖尖^不再表示对称矩阵,但仍然保留记法。只是把旋转部分的ϕ\phiϕ做反对称,而平移部分不变,由(6,1)->(4,4)
3. 指数映射和对数映射
泰勒展开
通过无穷级数展开(见高数18讲P244)
ex=∑n=0∞xnn!e^x=\sum_{n=0}^\infty \frac{x^n}{n!}ex=n=0∑∞n!xn
sinx=∑n=0∞(−1)nx2n+1(2n+1)!\sin x=\sum_{n=0}^\infty (-1)^n\frac{x^{2n+1}}{(2n+1)!}sinx=n=0∑∞(−1)n(2n+1)!x2n+1
cosx=∑n=0∞(−1)nx2n(2n)!\cos x=\sum_{n=0}^\infty (-1)^n\frac{x^{2n}}{(2n)!}cosx=n=0∑∞(−1)n(2n)!x2n
其中3个展开的收敛于均为−∞<x<+∞-\infty<x<+\infty−∞<x<+∞
加上下面的性质能够处理高次幂
即可推得罗德里格斯公式。
那么说明李代数so(3)的物理意义实际上就是旋转向量(罗德里格斯公式就是旋转向量转旋转矩阵,其左侧就是旋转矩阵RRR)。反之,给定旋转矩阵就能求得旋转向量,可以使用对数映射或者下面的转换关系:
对于SE(3)
其中平移向量ρ\rhoρ和变换矩阵中的平移量 ttt 差了一个系数矩阵,即为雅可比矩阵,跟角度有关,旋转部分正好是一个so(3)。
本部分小结
李群–>指数映射–>李代数
李代数–>对数映射–>李群
4. 求导与扰动模型
还是求导,由于李群无加法,所以要求导得从李代数角度出发,在李代数上加一个小的量δϕ\delta \phiδϕ然后用指数运算变换成李群,但是问题是李代数中的加法是否等价于李群的乘法。在标量时显然成立,a,b是标量时显然成立ea∗eb=ea+be^a*e^b=e^{a+b}ea∗eb=ea+b,但是当幂是矩阵时不成立。
引入BCH公式:
矩阵两个exp然后取ln展开是一个关于李括号的一个式子,相当复杂,进行一些近似之后:
当两个矩阵其中有一个为小量时,顾略高阶做以下近似:
当左乘一个小量时,系数就是左雅可比矩阵;当左右乘一个小量时,系数就是右雅可比矩阵,常用左雅可比。
所以李代数上进行小量加法时,相当于利群上左(右)乘一个带雅可比的量。
SE(3)比SO(3)复杂,右上角的QrQ_rQr很复杂。
求导两种方法:
- 李代数上加一个小量,求变化率
- 利群上乘一个小量,求相对于李代数的变化率
导数模型:
逆用BCH公式,然后泰勒展开,二次项就为0了,所以泰勒展开就只保留前两项。
扰动模型,左(右)乘一个扰动对应的群
SE(3)的扰动模型:左乘扰动
5. Sophus实践
深蓝学院-视觉SLAM课程-第3讲笔记-李群和李代数相关推荐
- 深蓝学院-视觉SLAM课程-第1讲笔记
课程Github地址:https://github.com/wrk666/VSLAM-Course/tree/master 1. 基础知识 一些图像处理方面的工作需要借助ML方法来完成:物体识别,检测 ...
- 深蓝学院-视觉SLAM课程-第2讲笔记--三维空间刚体运动
课程Github地址:https://github.com/wrk666/VSLAM-Course/tree/master 0. 内容 C++没有矩阵的运算,用别人的库来进行矩阵运算,其中Eigen库 ...
- 深蓝学院-视觉SLAM课程-第7讲笔记
课程Gitbug地址:https://github.com/wrk666/VSLAM-Course/tree/master 0. 内容 这讲来讲后端 之前的最小二乘的方法属于批量方法,较为简单,另一种 ...
- 深蓝学院-视觉SLAM课程-第6讲笔记
课程Github地址:https://github.com/wrk666/VSLAM-Course/tree/master 0. 内容 仍然是前端的内容,估计位姿,不过不是特征点法,而是另外的方法. ...
- 深蓝学院-视觉SLAM课程-第2讲作业
课程Github地址:https://github.com/wrk666/VSLAM-Course/tree/master 1. 基础知识 需要复习现代和矩阵论的知识. 特征值,特征向量有啥用? 有了 ...
- 深蓝学院-视觉SLAM课程-第7讲作业:SLAM中g2o入门详解,直接法BA
1. 引言 在SLAM中,BA是个重要的部分,前后端很多地方都用得到,而g2o是一个很重要的使用图优化求解优化问题的库,所以有必要熟练掌握,尽管有了些C++的底子,但是看g2o的代码还是比较吃力,所以 ...
- 深蓝学院-视觉SLAM课程-第6讲作业
课程Github地址:https://github.com/wrk666/VSLAM-Course/tree/master 第6讲作业 2. T2 2.1 光流文献综述 文献还没读完,这部分参考博客 ...
- 深蓝学院-视觉SLAM课程学习课后题
一. 第一节课习题# 标题 1.熟悉linux (1)可以通过 sudo apt-get install <软件名>的方式安装软件 当自己下载了软件压缩包之后(tar.gz文件),可以解压 ...
- 深蓝视觉SLAM课程第四讲--相机模型,非线性优化(G2O)
课程Github地址:https://github.com/wrk666/VSLAM-Course/tree/master 0. 内容 对应于十四讲中的第5讲和第6讲 回顾十四讲P24-26 1. 针 ...
最新文章
- MSSQL 漏洞利用与提权
- 在即将发布的Camel 2.21版本中改进了使用Apache Camel和ActiveMQ Artemis处理大型消息的功能...
- 在CockroachDB上运行Flowable
- 【Elasticsearch】es Elasticsearch HQ 介绍
- react16-reactDom.render流程分析
- OpenCV探索之路(零):HighGUI——使用imwrite调整保存的图片质量
- Go语言程序的命令行参数
- 奇门遁甲鸣法 第五章 辅格
- vue中的传参的两种方式
- hive经典习题50题
- codeblocks怎么编程c语言,如何能使用Codeblocks进行C语言编程操作.doc
- 松下伺服电机uvw接线图_松下Panasonic伺服电机电源线选择与接线方法
- 大数据之oracle:next_day函数
- python做估值模型_通证估值模型-费雪模型与净现值模型详解
- 再看《西游记》——吴承恩眼中的现实社会是如何折射到《西游记》中的
- 反击爬虫,前端工程师的脑洞可以有多大?
- 程控交换机程序故障处理
- iOS【彻底清空APP缓存】
- 用互联网思维去做事之-(1)互联网思维
- Java基础学习系列--(五)【迭代器,数据结构,List,Set ,TreeSet集合,Collections工具类】