|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
《ORB_SLAM2 源码解析》学习手册
1. ORB-SLAM2简介
1.1 ORB-SLAM2特点
1.2 算法流程框架
主体框架
数据输入的预处理
1.3 详细安装教程
安装第三方库
安装运行ORB-SLAM2及常见问题解决办法
1.4 TUM 数据集介绍及使用
RGBD模式下在TUM数据集上的表现
TUM RGB-D 数据集 简介
RGBD模式下运行时数据预处理
1.5 可视化运行效果解析
1.6 变量命名规范
2 ORB 特征点提取
2.1 关键点和描述子
2.2 灰度质心法
2.3 特征点角度计算
2.4 金字塔的计算
2.5 特征点数量的分配计算
2.6 使用四叉树均匀分布特征点
2.7 高斯处理
2.8 特征点去畸变
2.9 近点和远点
3. 地图初始化
为什么需要地图初始化?
3.1 多视图几何基础
对极约束示意图
H矩阵求解原理
哪个奇异向量是最优解?
求解基础矩阵F
推导F矩阵约束方程
SVD
F矩阵秩为2
单目投影恢复3D点
3.2 卡方检验
为什么要引用卡方检验?
卡方分布用途?
卡方分布假设检验步骤?
一个例子:抽奖机之谜
什么是显著性水平?
卡方分布是什么?
根据自由度和显著性水平查询检验统计量临界值
ORB-SLAM2中的卡方检测剔除外点策略
3.3 单目SFM地图初始化
归一化
原理参考
为什么要归一化?
具体归一化操作
SVD分解
检查位姿的有效性
3.4 双目地图初始化:稀疏立体匹配
双目相机
稀疏立体匹配原理
亚像素插值
4. 地图点、关键帧、图结构
4.1 地图点
地图点代表性描述子的计算
地图点法线朝向的计算
地图点和特征点的区别?
生成地图点
4.2 关键帧
什么是关键帧
为什么需要关键帧
如何选择关键帧
关键帧的类型及更新连接关系
4.3 共视图 本质图 拓展树
共视图 (Covisibility Graph)
本质图(Essential Graph)
本质图优化
本质图优化和全局BA结果对比
生成树(spanning tree)
5. 特征匹配
5.1 单目初始化中的特征匹配
初始化搜索匹配
快速搜索候选匹配特征点
通过角度一致性过滤外点中的错误分析
5.2 通过视觉词袋进行特征匹配
直观理解词袋
为什么要研究BoW?
类帧差方法
词袋法
如何制作、生成BoW?
为什么 BOW一般用 BRIEF描述子?
离线训练 vocabulary tree(也称为字典)
在线图像生成BoW向量
源码解析
理解词袋向量BowVector
理解特征向量FeatureVector
词典树的保存和加载
如何保存训练好的词典树存储为txt文件?
如何加载训练好的词典树文件?
倒排索引
5.3 局部建图线程中搜索匹配三角化
5.4 闭环线程中Sim3搜索匹配
6. 跟踪线程
6.1 跟踪线程整体流程
6.2 参考关键帧跟踪
6.3 恒速模型跟踪
坐标系变换
6.4 重定位跟踪
重定位跟踪原理
EPnP 算法原理详解
背景介绍
统一变量格式:
控制点如何选取?
计算控制点系数,用控制点重新表达数据
透视投影关系构建约束
求解
近似求 初始解
高斯牛顿优化
ICP 求解位姿
总结
6.5 局部地图跟踪
7. 局部建图线程
7.1 删除地图点和关键帧
7.2 关键帧之间新生成地图点
7.3 邻域搜索
8. 闭环检测及矫正线程
8.1 闭环示意图
8.2 检测闭环候选帧
闭环连续性检测原理示例
8.3 Sim(3) 算法原理详解
为什么需要计算Sim3?
什么是SIM3变换?
热身:3对点计算旋转可以吗?
计算SIM3平移
计算SIM3尺度因子
计算旋转
迭代次数的估计
四元数到旋转向量的转换
Sim3的逆变换矩阵
ComputeSim3计算Sim3
8.4 矫正回环
9. BA优化
9.1 图优化和g2o简介
9.2 优化函数分类
9.3 局部BA中边的解析
EdgeSE3ProjectXYZ 误差计算
9.4 Sim3优化中边的解析
EdgeSim3ProjectXYZ 的误差计算
EdgeInverseSim3ProjectXYZ 的误差计算
10. CMake理论与实践
10.1 什么是CMake?
10.2 CMake有什么优缺点?
10.3 CMake如何安装?
10.4 CMake 到底多好用?
10.5 CMake使用注意事项
10.6 CMake常用指令介绍
10.7 CMake如何查询指令?
10.8 静态库和共享库
10.9 如何安装库?
10.10 如何使用库?
11. C++多线程理论与实践
11.1并发 和 并行 的区别?
11.2 理解并发
11.3 进程 vs. 线程
11.4 多线程的应用
11.5 构建子线程
11.6 多线程数据共享
什么是数据共享?
互斥量 mutex
11.7 多线程中死锁问题
11.8 ORB-SLAM2中的多线程代码解析
ORB-SLAM2的线程
ORB-SLAM2的互斥锁示例
12. 汇总:基于ORB-SLAM2的改进代码
12.1 点线特征相关
12.2 用新的特征点替代ORB
12.3 直接法代替特征点法
12.4 融合其他传感器
12.5 地图相关
12.6 动态环境
12.7 语义相关
13. ORB-SLAM2最新改进论文
13.1 GCNv2
13.2 PL-SLAM
13.3 语义特征选择
13.4 DynaSLAM
13.5 点线特征
14 稠密建图
如何修改代码?
设置点云和点云滤波器的属性
初始化点云线程配置,并且启动viewer线程;
追踪线程 中的点云更新
显示线程修改
闭环线程更改
保存点云
如何运行代码?
操作流程
常见问题及解决办法
15 八叉树地图
摘要
主要贡献
OctoMap建图框架
八叉树
概率传感器信息融合
多分辨率查询
八叉树地图的压缩
八叉树地图用于储存其他信息
八叉树的地图按子图分层构建
基于ORBSLAM2的八叉树地图构建
|
|