ORB-SLAM2源码中文详解.pdf
需积分: 0 113 浏览量
更新于2021-01-20
收藏 879KB PDF 举报
### ORB-SLAM2 源码中文详解
#### 一、概述
ORB-SLAM2是一款基于视觉里程计的SLAM系统,它能够实时地进行环境建模与定位,支持单目、双目以及RGB-D摄像头。本文将深入探讨ORB-SLAM2的核心组成部分及其工作原理。
#### 二、代码主要结构
根据提供的文档信息,ORB-SLAM2的代码组织十分清晰,主要包括以下几个关键文件:
- **Tracking.cpp**:负责跟踪任务,包括初始化、位姿估计等。
- **LocalMapping.cpp**:负责局部地图的构建与优化。
- **LoopClosing.cpp**:负责闭环检测,消除累积误差。
- **Viewer.cpp**:负责显示系统状态,如关键帧、地图点等。
#### 三、变量命名规则
- **“p”** 表示指针数据类型。
- **"n"** 表示整型(int)数据类型。
- **“b”** 表示布尔型(bool)数据类型。
- **"s"** 表示集合(set)数据类型。
- **“v”** 表示向量(vector)数据类型。
- **"l"** 表示列表(list)数据类型。
- **“m”** 表示类成员变量。
这些命名规则有助于开发者快速理解代码逻辑和变量用途。
#### 四、系统入口
系统的主要入口函数是处理图像输入,根据不同的输入类型调用不同的函数:
- **双目输入**:`GrabImageStereo(imRectLeft, imRectRight)`
- **RGB-D输入**:`GrabImageRGBD(imRectLeft, imRectRight)`
- **单目输入**:`GrabImageMonocular(im)`
这些函数首先将输入图像转换为灰度图像,并根据输入类型构造相应的`Frame`对象。例如,双目输入会调用:
```cpp
Frame(mImGray, imGrayRight, mpORBextractorLeft, mpORBextractorRight)
```
这里`mpORBextractorLeft`和`mpORBextractorRight`分别用于从左右两幅图像中提取特征点。
#### 五、Tracking线程
**初始化阶段**:
- 双目初始化:`StereoInitialization()`
- 单目初始化:`MonocularInitialization()`
**跟踪阶段**:
- 如果`mbOnlyTracking`设置为`false`,则进行同时跟踪与定位,并且可以插入关键帧;如果设置为`true`,则仅进行跟踪,不插入关键帧。
跟踪过程包括:
- **运动模型跟踪**:`TrackWithMotionModel()`
- **参考关键帧跟踪**:`TrackReferenceKeyFrame()`
- **重定位**:`Relocalization()`
- **更新局部地图**:`UpdateLocalMap()`
- **搜索局部地图点**:`SearchLocalPoints()` —— 获得局部地图与当前帧的匹配
- **位姿优化**:`PoseOptimization()` —— 最小化投影误差优化位姿
- **更新局部关键帧**:`UpdateLocalKeyFrames()`
- **更新局部地图点**:`UpdateLocalPoints()`
#### 六、LocalMapping线程
**主要职责**:
- 检查新关键帧队列:`mlNewKeyFrames`
- 对新关键帧进行处理:`ProcessNewKeyFrame()`
- 局部BA优化:对新关键帧及其相关联的地图点进行局部BA优化
- 更新地图点与关键帧的关联:`UpdateConnections()`
- 剔除低质量的地图点:
- `IncreaseFound/IncreaseVisible < 25%`
- 观测到该点的关键帧数量过少
- 通过三角化恢复新的地图点
#### 七、LoopClosing线程(闭环检测)
**主要职责**:
- 从队列中取出关键帧:`mlpLoopKeyFrameQueue`
- 判断距离上一次闭环检测是否超过10帧
- 计算当前帧与相连关键帧之间的BoW最低得分
- 检测闭环候选帧
- 检测候选帧的连续性
- 识别与当前帧有足够的共视关系的关键帧
- 闭环修正:一旦发现闭环,系统会更新地图以修正累积的漂移
#### 八、总结
通过以上分析可以看出,ORB-SLAM2是一个高度模块化的系统,各个部分紧密协作,共同完成SLAM任务。从输入图像的处理、特征点的提取,到跟踪、局部地图构建、闭环检测等,每个环节都经过精心设计。开发者可以根据实际需求调整参数或者扩展功能,使其适应更多应用场景。
74ka
- 粉丝: 121
- 资源: 1
最新资源
- Keil C51 插件 检测所有if语句
- 各种排序算法java实现的源代码.zip
- 金山PDF教育版编辑器
- 基于springboot+element的校园服务平台源代码项目包含全套技术资料.zip
- 自动化应用驱动的容器弹性管理平台解决方案
- 各种排序算法 Python 实现的源代码
- BlurAdmin 是一款使用 AngularJs + Bootstrap实现的单页管理端模版,视觉冲击极强的管理后台,各种动画效果
- 基于JSP+Servlet的网上书店系统源代码项目包含全套技术资料.zip
- GGJGJGJGGDGGDGG
- 基于SpringBoot的毕业设计选题系统源代码项目包含全套技术资料.zip