主要目标:

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双系统。

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐