ORB-SLAM3 GetCurrentMap

ORB-SLAM3 GetCurrentMap

Atlas::GetCurrentMap()是 ORB-SLAM3 中一个获取当前活跃地图指针的成员函数,其具体实现位于Atlas.cc源文件中。

📝 函数实现

根据源码,GetCurrentMap()的定义非常简洁,直接返回了成员变量mpCurrentMap

cpp

Map* Atlas::GetCurrentMap() { // 返回当前活跃地图的指针 return mpCurrentMap; }

🗺️mpCurrentMap的作用

mpCurrentMapAtlas类中一个关键的成员变量,类型为Map*。它指向的是Atlas(地图集)当前正在使用的唯一活动地图

  • 唯一性:在 ORB-SLAM3 的多地图(Atlas)系统中,虽然可以保存多个地图(存储在mspMaps集合中),但任何时候都只有一个地图是“当前”活跃的

  • 切换与管理

    • 当系统初始化时,会通过Atlas的构造函数创建第一个地图并设为当前地图。

    • 当需要创建新地图时(例如跟踪失败后),CreateNewMap()函数会将旧地图标记为“已存储”,然后新建一个Map对象并赋值给mpCurrentMap

    • 也可以使用ChangeMap(Map* pMap)函数将指定地图切换为当前地图。

🔧 典型调用场景

通过获取当前地图指针,系统可以在多个核心模块中对当前地图进行操作,例如:

  • 跟踪线程(Tracking):向当前地图中添加新的关键帧(AddKeyFrame)或地图点(AddMapPoint)。

  • 初始化:在单目初始化时,会将初始化的两帧作为关键帧插入到当前地图中(mpAtlas->AddKeyFrame)。

  • 界面显示FrameDrawer类会持有Atlas指针,用于绘制当前地图的信息。

简单来说,Atlas::GetCurrentMap()是 ORB-SLAM3 多地图管理机制中的一个基础接口,它确保了系统的各个部分能够准确地访问和操作当前正在构建或跟踪的那张地图