美文网首页
ORB-SLAM2代码笔记(四):Map

ORB-SLAM2代码笔记(四):Map

作者: liampayne_66d0 | 来源:发表于2019-07-21 09:13 被阅读0次

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.

相关文章

网友评论

      本文标题:ORB-SLAM2代码笔记(四):Map

      本文链接:https://www.haomeiwen.com/subject/rscmlctx.html