局部建图线程是ORB-SLAM2的核心模块之一,其主要任务是以局部关键帧为中心,维护和优化局部地图,并不断生成新的地图点,使得地图能够逐渐扩展和保持鲁棒性。以下将从具体的几个方面介绍ORB-SLAM2中的局部建图线程,包括处理新的关键帧、删除不合格的地图点、生成新的地图点、检查并融合当前关键帧与相邻帧的地图点,以及关键帧的剔除。
局部建图线程流程
处理新的关键帧
局部建图线程的核心起点是处理新生成的关键帧。新的关键帧可以为局部地图提供更多约束,并扩展地图的范围。
背景及意义
- 当跟踪线程认为当前帧是一个新的关键帧时,会将其传递给局部建图线程。
- 关键帧是地图中最重要的组成部分,它记录了相机在某些关键位置的观测信息。
- 处理新的关键帧是局部建图线程的第一步,也是局部地图更新的基础。
实现步骤
- 提取当前关键帧的特征点和地图点:
- 从当前关键帧中获取已经匹配的地图点。
- 记录当前关键帧与共视关键帧的共视关系。
- 更新局部地图的结构:
- 将新的关键帧加入局部地图,并与周围的关键帧建立连接关系。
- 更新局部关键帧的集合,选取与当前关键帧共视关系最强的若干关键帧。
删除不合格的地图点
地图点是SLAM系统中存储环境信息的核心数据结构,但其中可能存在误差较大的点,称为“不合格的地图点”。局部建图线程需要及时检测并剔除这些地图点。
背景及意义
- 不合格的地图点可能源于错误的三角化、不正确的特征匹配或动态物体的影响。
- 这些点如果不删除,会导致局部优化的误差增大,影响整个系统的精度。
删除标准
- 观测次数过少:
- 如果一个地图点仅被很少的关键帧观测到,则很可能是错误的点。
- 系统通常会设置一个最小观测次数阈值。
- 重投影误差过大:
- 通过投影该地图点到观测它的图像帧,如果投影误差过大,则认为是误差点。
- 视差太小:
- 如果地图点的三角化视差过小,则深度估计的误差较大,通常被认为是低质量的地图点。
实现步骤
- 遍历当前局部地图中的地图点。
- 根据上述标准,标记不合格的地图点。
- 从地图中剔除标记的点,释放内存并更新地图结构。
生成新的地图点
新的地图点可以通过当前关键帧和其他关键帧之间的视差进行三角化生成,为地图增加新的环境信息。
背景及意义
- 局部地图需要不断扩展,以覆盖更大的环境范围。
- 通过新的关键帧,系统能够生成更多的地图点,用于后续的跟踪和优化。
实现步骤
- 搜索匹配的特征点对:
- 在当前关键帧和共视关键帧之间,寻找匹配的ORB特征点对。
- 进行三角化:
- 使用匹配的特征点对,通过三角化方法计算其三维坐标。
- 确保新生成的地图点满足视差和深度的约束条件。
- 验证新地图点的质量:
- 新生成的地图点必须具有足够的视差,并且能够被当前帧和其他关键帧有效观测。
- 将新地图点加入局部地图:
- 将符合条件的地图点加入到局部地图中,并与相关的关键帧建立连接关系。
检查并融合当前关键帧与相邻帧的地图点
地图点的重复会增加存储开销,并可能导致优化问题,因此局部建图线程需要检查地图点之间的冗余性,并进行融合。
背景及意义
- 在实际场景中,不同关键帧可能观测到相同的三维点。
- 融合冗余地图点可以减少冗余数据,提高地图的紧凑性和一致性。
实现步骤
- 检测重复的地图点:
- 根据地图点的三维坐标,如果两个点之间的欧几里得距离小于一定阈值,则认为是重复点。
- 融合地图点:
- 对于重复点,保留质量较高的地图点,并将其他点的观测信息合并到保留的点中。
- 更新地图点的观测信息:
- 重新更新与融合点相关的关键帧观测信息。
关键帧的剔除
随着地图的不断扩展,系统中存储的关键帧数量可能会快速增长。为了控制关键帧的数量,局部建图线程需要对关键帧进行剔除。
背景及意义
- 剔除冗余关键帧可以减小计算开销,提高优化效率。
- 被剔除的关键帧通常是对地图信息贡献较小或被其他关键帧代替的帧。
剔除标准
- 覆盖率:
- 如果一个关键帧的大部分地图点都被其他关键帧观测到,则认为它是冗余的。
- 观测次数:
- 如果一个关键帧的地图点大多被其他关键帧观测,则可以剔除该关键帧。
- 连接关系:
- 关键帧的共视关系较弱时,也可能被剔除。
实现步骤
- 遍历局部地图中的关键帧。
- 根据剔除标准,标记冗余关键帧。
- 删除标记的关键帧,并更新共视图和地图点的观测关系。
局部建图线程的特点
- 动态性:
- 局部建图线程动态维护局部地图,包括添加新关键帧、新地图点、删除冗余信息等操作。
- 高效性:
- 局部建图线程利用多种剔除和融合机制,保证地图的质量与规模在可控范围内。
- 鲁棒性:
- 通过严格的地图点质量检测和局部优化,局部建图线程提高了ORB-SLAM2的跟踪稳定性和地图精度。
总结
任务 | 作用 | 实现方法 |
---|---|---|
处理新的关键帧 | 加入新的关键帧以扩展地图 | 更新局部地图、共视关系 |
删除不合格的地图点 | 保证地图点的质量和精度 | 检测观测次数、投影误差和视差 |
生成新的地图点 | 扩展局部地图,增加环境信息 | 特征匹配、三角化、质量验证 |
检查并融合地图点 | 删除冗余点,提高地图的一致性 | 检测重复点并进行融合 |
关键帧的剔除 | 减少冗余关键帧,控制系统开销 | 检测覆盖率、观测次数和连接关系 |