ORB-SLAM3 CreateNewMap
Atlas::CreateNewMap()是 ORB-SLAM3 多地图(Atlas)系统的核心函数,负责在跟踪失败时保存当前地图并创建一个全新的活动地图。以下是该函数的源码及详细解读。📝 函数源码cppvoid Atlas::CreateNewMap() { // 1. 锁定地图集,防止多线程冲突 unique_lockmutex lock(mMutexAtlas); cout "Creation of new map with id: " Map::nNextId endl; // 2. 如果存在当前活跃地图,先将其存档 if(mpCurrentMap){ cout "Exits current map " endl; // 记录当前地图的最大关键帧ID,用于新地图初始化 if(!mspMaps.empty() mnLastInitKFidMap mpCurrentMap-GetMaxKFid()) mnLastInitKFidMap = mpCurrentMap-GetMaxKFid() + 1; // 将当前地图标记为“已存储”(非活跃状态) mpCurrentMap-SetStoredMap(); cout "Saved map with ID: " mpCurrentMap-GetId() endl; } cout "Creation of new map with last KF id: " mnLastInitKFidMap endl; // 3. 创建新的地图对象,并设为当前活跃地图 mpCurrentMap = new Map(mnLastInitKFidMap);