视觉SLAM第13讲:实践,设计SLAM系统
主要目标:
1.实际设计一个视觉里程计;
2.理解SLAM软件框架是如何搭建的。
13.1 工程框架
1.bin存在编译好的可执行程序;
2.include存放头文件,include/myslam放自己写的头文件;
3.src存放源代码文件;
4.test放测试用文件;
5.config存放配置文件;
6.cmake_modules存放第三方库的cmake文件。
13.1.1 核心算法结构
程序=数据结构+算法
系统最基本的结构,关系如下图:
(1)图像,双目相机是一对图像,统称为一帧。
(2)特征,对每帧都提取其特征
(3)路标,根据不同帧之间的相同特征点,求解路标点坐标(多次看到某个特征可用三角化方法计算3D位置)
13.1.2 两大线程:前端、后端
1.前端
(1)作用
负责计算相邻图像的特征匹配,快速处理保证实时性。
(2)运行机理
插入图像帧-提取图像中特征-与上一帧进行光流追踪-根据光流结果计算该帧定位。必要时补充新特征点做三角化,前端处理结果作为后端优化初始值。
2.后端
(1)作用
负责优化整个问题,优化关键帧以保证良好结果。
(2)运行机理
拿到前端处理过的关键帧和路标点,对其优化,返回优化结果。优化规模在一定范围内,不随时间一直增长。
3.联合运行机理
在前后端之间放一个地图模块来处理它们之间的数据流动。前端提取关键帧后往地图中添加新数据,后端检测到地图更新时运行一次优化,去掉地图中旧关键帧和地图点保持优化规模。见图。
13.1.3 其他模块
为了方便编码实现,还需要添加几个辅助模块:
(1)相机类
管理内外参、投影函数
(2)配置文件管理类
方便从配置文件中读取内容,配置文件中记录一些重要参数,方便调整
(3)Kitti数据集
按照Kitti存储格式读取图像数据
(4)可视化模块
观察系统状态。
13.2 实践
因博主在虚拟机上运行,该数据集较大,无法运行,后切换为Win+Ubuntu双系统。