内容简介
第1讲 预备知识
1.1 本书讲什么
1.2 如何使用本书
1.2.1 组织方式
1.2.2 代码
1.2.3 面向的读者
1.3 风格约定
1.4 致谢和声明
第2讲 初识SLAM
2.1 引子:小萝卜的例子
2.2 经典视觉SLAM框架
2.2.1 视觉里程计
2.2.2 后端优化
2.2.3 回环检测
2.2.4 建图
2.3 SLAM问题的数学表述
2.4 实践:编程基础
2.4.1 安装Linux操作系统
2.4.2 Hello SLAM
2.4.3 使用cmake
2.4.4 使用库
2.4.5 使用IDE
第3讲 三维空间刚体运动
3.1 旋转矩阵
3.1.1 点和向量,坐标系
3.1.2 坐标系间的欧氏变换
3.1.3 变换矩阵与齐次坐标
3.2 实践:Eigen
3.3 旋转向量和欧拉角
3.3.1 旋转向量
3.3.2 欧拉角
3.4 四元数
3.4.1 四元数的定义
3.4.2 四元数的运算
3.4.3 用四元数表示旋转
3.4.4 四元数到旋转矩阵的转换
3.5 相似、仿射、射影变换
3.6 实践:Eigen几何模块
3.7 可视化演示
第4讲 李群与李代数
4.1 李群与李代数基础
4.1.1 群
4.1.2 李代数的引出
4.1.3 李代数的定义
4.1.4 李代数so(3)
4.1.5 李代数se(3)
4.2 指数与对数映射
4.2.1 SO(3)上的指数映射
4.2.2 SE(3)上的指数映射
4.3 李代数求导与扰动模型
4.3.1 BCH公式与近似形式
4.3.2 SO(3)李代数上的求导
4.3.3 李代数求导
4.3.4 扰动模型(左乘)
4.3.5 SE(3)上的李代数求导
4.4 实践:Sophus
4.5 相似变换群与李代数
4.6 小结
第5讲 相机与图像
5.1 相机模型
5.1.1 针孔相机模型
5.1.2 畸变
5.1.3 双目相机模型
5.1.4 RGB-D相机模型
5.2 图像
5.3 实践:图像的存取与访问
5.3.1 安装OpenCV
5.3.2 操作OpenCV图像
5.4 实践:拼接点云
第6讲 非线性优化
6.1 状态估计问题
6.1.1 最大后验与最大似然
6.1.2 最小二乘的引出
6.2 非线性最小二乘
6.2.1 一阶和二阶梯度法
6.2.2 高斯牛顿法
6.2.3 列文伯格—马夸尔特方法
6.2.4 小结
6.3 实践:Ceres
6.3.1 Ceres简介
6.3.2 安装Ceres
6.3.3 使用Ceres拟合曲线
6.4 实践:g2o
6.4.1 图优化理论简介
6.4.2 g2o的编译与安装
6.4.3 使用g2o拟合曲线
6.5 小结
第7讲 视觉里程计1
7.1 特征点法
7.1.1 特征点
7.1.2 ORB特征
7.1.3 特征匹配
7.2 实践:特征提取和匹配
7.3 2D-2D:对极几何
7.3.1 对极约束
7.3.2 本质矩阵
7.3.3 单应矩阵
7.4 实践:对极约束求解相机运动
7.5 三角测量
7.6 实践:三角测量
7.6.1 三角测量代码
7.6.2 讨论
7.7 3D-2D:PnP
7.7.1 直接线性变换
7.7.2 P3P
7.7.3 Bundle Adjustment
7.8 实践:求解PnP
7.8.1 使用EPnP求解位姿
7.8.2 使用BA优化
7.9 3D-3D:ICP
7.9.1 SVD方法
7.9.2 非线性优化方法
7.10 实践:求解ICP
7.10.1 SVD方法
7.10.2 非线性优化方法
7.11 小结
第8讲 视觉里程计2
8.1 直接法的引出
8.2 光流(Optical Flow)
8.3 实践:LK光流
8.3.1 使用TUM公开数据集
8.3.2 使用LK光流
8.4 直接法(Direct Method)
8.4.1 直接法的推导
8.4.2 直接法的讨论
8.5 实践:RGB-D的直接法
8.5.1 稀疏直接法
8.5.2 定义直接法的边
8.5.3 使用直接法估计相机运动
8.5.4 半稠密直接法
8.5.5 直接法的讨论
8.5.6 直接法优缺点总结
第9讲 实践:设计前端
9.1 搭建VO框架
9.1.1 确定程序框架
9.1.2 确定基本数据结构
9.1.3 Camera类
9.1.4 Frame类
9.1.5 MapPoint类
9.1.6 Map类
9.1.7 Config类
9.2 基本的VO:特征提取和匹配
9.2.1 两两帧的视觉里程计
9.2.2 讨论
9.3 改进:优化PnP的结果
9.4 改进:局部地图
9.5 小结
第10讲 后端1
10.1 概述
10.1.1 状态估计的概率解释
10.1.2 线性系统和KF
10.1.3 非线性系统和EKF
10.1.4 EKF的讨论
10.2 BA与图优化
10.2.1 投影模型和BA代价函数
10.2.2 BA的求解
10.2.3 稀疏性和边缘化
10.2.4 鲁棒核函数
10.2.5 小结
10.3 实践:g2o
10.3.1 BA数据集
10.3.2 g2o求解BA
10.3.3 求解
10.4 实践:Ceres
10.4.1 Ceres求解BA
10.4.2 求解
10.5 小结
第11讲 后端2
11.1 位姿图(Pose Graph)
11.1.1 Pose Graph的意义
11.1.2 Pose Graph的优化
11.2 实践:位姿图优化
11.2.1 g2o原生位姿图
11.2.2 李代数上的位姿图优化
11.2.3 小结
11.3 因子图优化初步
11.3.1 贝叶斯网络
11.3.2 因子图
11.3.3 增量特性
11.4 实践:gtsam
11.4.1 安装gtsam 4.0
11.4.2 位姿图优化
第12讲 回环检测
12.1 回环检测概述
12.1.1 回环检测的意义
12.1.2 方法
12.1.3 准确率和召回率
12.2 词袋模型
12.3 字典
12.3.1 字典的结构
12.3.2 实践:创建字典
12.4 相似度计算
12.4.1 理论部分
12.4.2 实践:相似度的计算
12.5 实验分析与评述
12.5.1 增加字典规模
12.5.2 相似性评分的处理
12.5.3 关键帧的处理
12.5.4 检测之后的验证
12.5.5 与机器学习的关系
第13讲 建图
13.1 概述
13.2 单目稠密重建
13.2.1 立体视觉
13.2.2 极线搜索与块匹配
13.2.3 高斯分布的深度滤波器
13.3 实践:单目稠密重建
13.4 实验分析与讨论
13.4.1 像素梯度的问题
13.4.2 逆深度
13.4.3 图像间的变换
13.4.4 并行化:效率的问题
13.4.5 其他的改进
13.5 RGB-D稠密建图
13.5.1 实践:点云地图
13.5.2 八叉树地图
13.5.3 实践:八叉树地图
13.6 TSDF地图和Fusion系列
13.7 小结
第14讲 SLAM:现在与未来
14.1 当前的开源方案
14.1.1 MonoSLAM
14.1.2 PTAM
14.1.3 ORB-SLAM
14.1.4 LSD-SLAM
14.1.5 SVO
14.1.6 RTAB-MAP
14.1.7 其他
14.2 未来的SLAM话题
14.2.1 视觉+惯性导航SLAM
14.2.2 语义SLAM
14.2.3 SLAM的未来
附录A 高斯分布的性质
附录B ROS入门
参考文献