ORB-SLAM2源码深度解析:数据结构与关键变量

需积分: 0 1 下载量 71 浏览量 更新于2024-07-01 收藏 802KB PDF 举报
ORB-SLAM2是一种先进的视觉SLAM(同时定位和映射)算法,它结合了特征匹配、稠密地图构建以及回环检测技术,以实现在未知环境中进行精确的机器人导航。本篇文章由信息科学与工程学院人工智能与机器人研究所的吴博@泡泡机器人撰写,详细解析了ORB-SLAM2的源码结构和关键变量命名规则。 首先,我们关注变量命名规则,这是理解和阅读代码的关键。文章指出,作者遵循一定的命名习惯: - "p" 表示指针数据类型,用于引用或指向内存中的数据。 - "n" 代表整型(int)数据,通常用于计数或者数值存储。 - "b" 是布尔类型(bool),用于表示真假状态。 - "s" 表示集合类型(set),用于存储一组不重复的数据。 - "v" 指向向量(vector),用于动态数组,常用于有序序列的存储。 - "l" 代表列表类型(list),与vector类似,但允许元素插入和删除更为灵活。 - "m" 作为类成员变量,通常用于表示对象内部的状态或属性。 接下来,系统入口部分展示了ORB-SLAM2如何处理输入图像。它支持单目、双目和RGB-D三种传感器类型的数据获取。对于单目,有一个未初始化和已初始化两种情况的Frame构造函数,其中mpIniORBextractor提取的特征点更多,可能是为了提高初始阶段的匹配精度。双目和RGB-D数据则直接创建Frame对象,包含了灰度图像、深度图像以及ORB特征提取器。 核心的Tracking线程负责实时的SLAM过程。初始化步骤包括双目初始化(Stereoinitilization),这个过程可能涉及到特征匹配的预处理工作。在跟踪阶段,每个关键帧(KeyFrame)都会被添加到地图(mpMap)中,并与数据库(mpKeyFrameDB)进行比较,以检查是否存在回环。用户还可以通过设置mbOnlyTracking为false,使系统能够在定位和建图之间切换。 在system.cc的代码中,第37行调用了tracking.cc中的函数,具体参数2000和2000*2可能与关键帧的特征点数量相关,该数值是从外部配置文件(如Examples/Monocular/KITTI00-02.yaml)中读取的。 本文详细介绍了ORB-SLAM2源码的核心部分,包括变量命名规范和关键模块的功能,如图像抓取、特征提取、跟踪和回环检测。这对于理解并修改或扩展此SLAM系统具有重要的参考价值。