ORB-SLAM2代码笔记(四):Map
2019-07-21 本文已影响0人
liampayne_66d0
Map
成员变量
-
vector<KeyFrame*> mvpKeyFrameOrigins;
最初关键帧 -
std::mutex mMutexMapUpdate;
当更新地图时的互斥量.回环检测中和局部BA后更新全局地图的时候会用到这个 -
std::mutex mMutexPointCreation;为了避免地图点id冲突设计的互斥量
-
std::set<MapPoint*> mspMapPoints;
地图点 -
std::set<KeyFrame*> mspKeyFrames;
关键帧 -
std::vector<MapPoint*> mvpReferenceMapPoints;
参考地图点 -
long unsigned int mnMaxKFid;
当前地图中具有最大ID的关键帧 -
std::mutex mMutexMap;
类的成员函数在对类成员变量进行操作的时候,防止冲突的互斥量
成员函数
- void Map::AddKeyFrame(KeyFrame *pKF)在地图中Haru关键帧,同时更新关键帧最大id。
unique_lock<mutex> lock(mMutexMap);
mspKeyFrames.insert(pKF);
if(pKF->mnId>mnMaxKFid)
mnMaxKFid=pKF->mnId;
插入地图点AddMapPoint(MapPoint *pMP)实现类似
- void Map::EraseMapPoint(MapPoint *pMP)
删除地图点
mspMapPoints.erase(pMP);
删除关键帧类似
- 还有获取所有关键帧,所有地图点;获取地图点数目、关键帧数目;获取参考地图点、获取地图中最大的关键帧id,实现方法都很简单
- void Map::clear()清空地图中数据
for(set<MapPoint*>::iterator sit=mspMapPoints.begin(), send=mspMapPoints.end(); sit!=send; sit++)
delete *sit;
for(set<KeyFrame*>::iterator sit=mspKeyFrames.begin(), send=mspKeyFrames.end(); sit!=send; sit++)
delete *sit;
mspMapPoints.clear();
mspKeyFrames.clear();
mnMaxKFid = 0;
mvpReferenceMapPoints.clear();
mvpKeyFrameOrigins.clear();
分别遍历关键帧和地图点进行delete,然后对关键帧、地图点、参考地图点、初始关键帧clear(都是vector),关键帧最大id设为0.