视觉SLAM十四讲笔记-第四讲 李群与李代数
目录
前提摘要:
一、群
1.1注意对象不同
1.2 概念
二、李群与李代数
2.1 李群 (Lie Group)
2.2 李代数
三、指数映射和对数映射
3.1 李代数so(3)指数映射
3.2 se(3)到SE(3)的指数映射:
3.3 对数映射
3.4 小结
四、求导与扰动模型(偏向于扰动模型)
公式汇总
五、实践:Sophus库
前提摘要:
Question:当相机位姿不太准确的时候,我们如果对位姿进行微调呢?
观测量即为R、t
或 T
:
当R、t估计值不够准确,我们需要纠正
R' = R + ΔR ,t' = t + Δt
但是R
直接相加的结果不再是旋转矩阵,因为R
本身是一个正交矩阵且行列式为1的矩阵,相加后不再满足这两个约束。
既然不能定义加法,那如果对R
求导数呢?
一样的,由于旋转矩阵加法不成立,所以这样的求导也不成立。
于是引出李群与李代数的用处:用于旋转R
和变换矩阵T
的求导
。
一、群
1.1注意对象不同
括号内是维度
特殊正交群SO(3):三维旋转矩阵;
特殊欧式群SE(3):三维变换矩阵.
1.2 概念
群是一种集合加上一种运算的代数结构,记集合为A,运算为·,当满足以下性质,则称(A,·)为群:
“凤姐要你”
二、李群与李代数
2.1 李群 (Lie Group)
具有连续且光滑性质的群,结合相机运动轨迹便于理解;
既是群也是流形;
直观上看,一个刚体能够连续在空间中运动,故SO(3)和SE(3)都是李群;
但是,SO(3)和SE(3)只有定义乘法,没有加法,故无法进行求极限、求导等操作。
2.2 李代数
与李群对应的一种结构,位于向量空间。
通常记作小写的so(3)和se(3);
事实上是李群单位的正切空间.
2.2.1 从旋转矩阵R
引出李代数
该式子说明,对于任意时间t
,都可以找到一个 R
和 ϕ
的对应关系,这种关系称为指数映射;
这里的ϕ
称为SO(3)对应的李代数.
2.2.2 李代数的性质
每个李群都有与之对应的李代数。李代数描述了李群单位元附近的正切空间性质
。
李括号:二元运算[ , ]被称为李括号(Lie Bracket)。直观上说,李括号表达了两个元素的差异。
2.2.3 李代数 so(3):
2.2.4 李代数se(3)
三、指数映射和对数映射
3.1 李代数so(3)指数映射
指数映射反映了从李代数到李群的对应关系:R=exp(ϕ^)
Question:如果ϕ^
是一个标量,那么可以使用我们平时的指数运算,但是ϕ^
是一个矩阵,对于矩阵,如何定义求指数运算?——泰勒展开
解决方案:
由于ϕ
是向量,可定义其角度和模长:
角度乘单位向量:
ϕ=θa
关于
a
,可以验证以下性质,用于化简繁琐的泰勒展开:-
泰勒展开:
结果:
可以发现结果公式与第三讲的用于将旋转向量转换为旋转矩阵的罗德里格斯公式一样。
于是我们可以得出结论:李代数so(3) 的物理意义就是旋转向量!
3.2 se(3)到SE(3)的指数映射:
3.3 对数映射
反之,给定旋转矩阵时,亦能求李代数:
但实际当中没必要这样求,在旋转向量小节已经介绍了矩阵到向量的转换关系。
3.4 小结
四、求导与扰动模型(偏向于扰动模型)
回归原始问题,李群对加法不封闭,导致导数无从定义。
Question:当在李代数中做加法时,是否等价于在李群上做乘法?
答案是不行,因为ϕ
是一个矩阵,不是标量。
解决方案:使用BCH(Baker-Campbell-Hausdorff)公式
部分展开:
当其中一个量为小量时,忽略其高阶项,BCH具有线性近似形式:
值得一提的是这里的雅可比矩阵 J
,分别有左乘和右乘,一般我们都是使用左雅可比较多
以左乘为例,在李群上左乘小量时,李代数上的加法相差左雅可比的逆
反之,李代数上进行小量加法时,相当于李群上左(右)乘一个带左(右)雅可比的量
SE(3)比SO(3)更复杂:
于是得到两种解决方法:
对 R 对应的李代数加上小量,求相对于小量的变化率(导数模型);
对 R 左乘或右乘一个小量,求相对于小量的李代数的变化率(扰动模型)。
于是得到SO(3)扰动模型(左乘):左乘小量,令其李代数为零
SE(3)上的扰动模型:
公式汇总
利用BCH线性近似,可以推导so(3)与se(3)上的导数和扰动模型;
通常情况下,扰动模型更为简洁实用.
五、实践:Sophus库
先定义一个旋转矩阵
using namespace Eigen;
//绕Z轴转90°的旋转矩阵
Matrix3d R = AngleAxisd(M_PI / 2 , Vector3d(0,0,1)).toRotationMatrix();
//四元数
Quanterniond q(R);
//构造李群S0(3)
Sophus::SO3d SO3_R(R); //可以用旋转矩阵R构造
Sophus::SO3d SO3_q(q); //也可以用四元数q构造
//上面二者是等价的
//下面利用对数映射获得对应的李代数
Vector3d so3 = SO3_R.log();
Vector3d so3 = SO3_q.log(); //二者也是等价
值得一提的是,Sophus
是基于Eigen
上创建的一个专门用于求李群李代数的库,编译时CMakelists.txt
需要添加一下内容
find_package( Sophus REQUIRED ) //找到库文件
include_directories( ${Sophus_INCLUDE_DIRS} ) //找到头文件
利用Sophus库也可以进行对轨迹误差的比较,详见《视觉SLAM十四讲》P89-91.
致谢:
《视觉SLAM十四讲》
视觉SLAM十四讲笔记-第四讲 李群与李代数相关推荐
- 视觉SLAM总结——视觉SLAM十四讲笔记整理
视觉SLAM总结--视觉SLAM十四讲笔记整理 说明 基础知识点 1. 特征提取.特征匹配 (1)Harris (2)SIFT (3)SUFT (4)ORB (5)特征匹配 2. 2D-2D:对极约束 ...
- 视觉SLAM十四讲学习笔记-第七讲-视觉里程计-三角测量和实践
专栏汇总 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第 ...
- 视觉SLAM十四讲学习笔记-第七讲-视觉里程计-对极几何和对极约束、本质矩阵、基础矩阵
专栏系列文章如下: 专栏汇总 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 视觉SLA ...
- 视觉SLAM十四讲学习笔记-第六讲学习笔记总结(1)---非线性优化原理
第六讲学习笔记如下: 视觉SLAM十四讲学习笔记-第六讲-非线性优化的状态估计问题_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第六讲-非线性优化的非线性最小二乘问题_ ...
- 视觉SLAM十四讲学习笔记-第四讲---第五讲学习笔记总结---李群和李代数、相机
第四讲---第五讲学习笔记如下: 视觉SLAM十四讲学习笔记-第四讲-李群与李代数基础和定义.指数和对数映射_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第四讲-李代数求导与扰动模 ...
- 视觉SLAM十四讲学习笔记---前三讲学习笔记总结之SLAM的作用、变换和位姿表示
经过半年学习SLAM相关知识,对SLAM系统有了一些新的认识,故回看以前的学习记录,做总结和校正. 前三讲学习笔记如下: 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉S ...
- 视觉SLAM十四讲学习笔记-第七讲-视觉里程计-特征点法和特征提取和匹配实践
专栏系列文章如下: 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习 ...
- 视觉SLAM十四讲学习笔记-第六讲-非线性优化的实践-高斯牛顿法和曲线拟合
专栏系列文章如下: 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习 ...
- 视觉SLAM十四讲学习笔记-第六讲-非线性优化的非线性最小二乘问题
专栏系列文章如下: 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习 ...
- 视觉SLAM十四讲学习笔记-第六讲-非线性优化的状态估计问题
专栏系列文章如下: 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习 ...
最新文章
- 如何把纯真ip数据库导入到MySQL数据表中
- Redis java使用
- Apollo 2.0发布前 试乘百度L3、L4级自动驾驶汽车
- 振臂高呼式的写作:谈肖亦农的《毛乌素绿色传奇》
- 个人代码库の自定义后缀名
- Win03+IIS6 部署.NetFramework4(ASP.NET4)的一点小经验
- 谷歌街景15年乾坤大挪移!带你穿越法老的金字塔
- jsp和jspx的区别
- iOS 硬件 定位 - 详解 数据的处理
- 狄拉克函数和广义函数 | 线性泛函
- 生活中,如何学会放下
- 计算机查询成绩微信公众号,怎么在微信公众号上设置查询成绩?
- 说说C/C++编译的那些事儿
- 如何扩大计算机的硬盘空间,Win7系统怎么扩大C盘空间 Win7电脑扩大硬盘C盘空间方法介绍...
- 域名系统(DNS)说明
- 【转载】一个硕士程序员的求婚日记——做开发的不是木头人!
- 绝望而沉重的爱·《致我们终将逝去的青春》
- 经典:全国老婆一览表
- Oracle触发器来记录表删除操作简单方法
- 重新开始学习编程系列Day10——超全的MySQL核心原理,从底层剖析MySQL