【ORB_SLAM2源码解读】ORB_SLAM2::LoopClosing::Run

LocalMapping::LocalMapping构造函数初始化变量的值mbAcceptKeyFrames(true)


初始化阶段是生成关键帧阶段,所以这个变量mbAcceptKeyFrames的初始值是true,LocalMapping::Run函数不执行,
void LocalMapping::Run()函数中改变mbAcceptKeyFrames的值
当执行下面语句的时候,变量mbAcceptKeyFrames的初始值是false,开始执行LocalMapping的函数,处理关键帧创建地图。
SetAcceptKeyFrames(false);
void LocalMapping::SetAcceptKeyFrames(bool flag){
    mbAcceptKeyFrames=flag;
}

第一个要执行的函数是LocalMapping::CheckNewKeyFrames
bool LocalMapping::CheckNewKeyFrames(){
    return(!mlNewKeyFrames.empty());
}
判断这个列表是否是空的
std::list<KeyFrame*> mlNewKeyFrames;
这个列表是调用下面函数生成的
void LocalMapping::InsertKeyFrame(KeyFrame *pKF){
    mlNewKeyFrames.push_back(pKF);
    mbAbortBA=true;
}
如果这个列表为空就执行 else if 后面的代码

【ORB_SLAM2源码解读】ORB_SLAM2::LoopClosing::Run_第1张图片

你可能感兴趣的:(从零开始学习SLAM,ORB_SLAM2)