ORB-SLAM2系统工作流程解析

需积分: 1 27 下载量 150 浏览量 更新于2024-08-04 收藏 1.38MB PDF 举报
"ORB-SLAM2程序思维导图" ORB-SLAM2 是一个开源的视觉定位和建图系统,专为单目、双目和RGB-D相机设计。该系统的核心在于三个主要线程:Tracking(追踪)、LocalMapping(局部建图)和LoopClosing(闭环检测)。下面将详细介绍这三个关键组成部分以及它们在程序中的运作方式。 1. Tracking线程: - Tracking线程负责实时处理新获取的图像帧,进行特征点提取、匹配和姿态估计。当系统启动时,首先进行初始化,判断是否为新系统或已知环境的定位。 - 如果系统处于未初始化状态(NOT_INITIALIZED),Tracking::MonocularInitialization() 将被调用,进行单目初始化。 - 当系统状态为OK或LOST时,跟踪进入常规运行。如果设置只进行追踪(mbOnlyTracking),则不执行建图操作。 - 使用ORB特征匹配,Initializer::SearchForInitialization() 在InitialFrame和CurrentFrame之间寻找匹配特征点,Initializer::Initialize() 进行初始化计算。 2. LocalMapping线程: - LocalMapping负责在追踪过程中创建新的关键帧并构建地图。当追踪到的新关键帧满足一定条件时,LocalMapping::Run() 开始工作,添加关键帧到地图,并更新地图点。 - Map::AddKeyFrame() 创建新的关键帧,并将匹配的ORB特征点对应的MapPoints(地图点)关联到关键帧。 3. LoopClosing线程: - LoopClosing线程致力于检测和纠正潜在的闭环,以减少累积误差。LoopClosing::Run() 监控系统状态,查找可能的闭环。 - 通过比较当前帧与过去的关键帧,寻找相似性,以识别是否循环回到了之前的位置。找到可能的闭环后,系统会计算基础矩阵(Fundamental Matrix)和单应性矩阵(Homography)来验证闭环。 - Initializer::FindHomography() 和 Initializer::FindFundamental() 分别计算这两种几何关系,根据重投影误差选择最佳模型。 - 确定闭环后,系统将调整关键帧的相对姿态,重新优化地图,并更新关键帧和地图点。 4. 其他重要组件: - mono_tum.cc 文件包含了针对单目系统的具体实现,如加载图像和时间戳。 - System::LoadImages() 用于加载数据集中的图像信息。 - Frame类封装了每一帧图像信息,包括图像、特征点、匹配信息等。 - Tracking::Track() 是追踪的主要逻辑,包括特征匹配、位姿估计等步骤。 ORB-SLAM2 的整个流程设计巧妙,结合了实时追踪、局部建图和全局闭环检测,实现了高效且鲁棒的SLAM解决方案。它在机器人导航、增强现实等领域有着广泛应用。