ORB_SLAM2--回环检测线程

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_16481211/article/details/83615001

回环检测线程主要由检测回环、计算Sim3,、闭环融合以及优化Essential Graph四个大的部分所组成。

void LoopClosing::Run()
{
    mbFinished =false;

    while(1)
    {
        // 检测是否存在新的关键帧
        // Loopclosing中的关键帧是LocalMapping发送过来的,LocalMapping是Tracking中发过来的
        // 在LocalMapping中通过InsertKeyFrame将关键帧插入闭环检测队列mlpLoopKeyFrameQueue
        // 闭环检测队列mlpLSearchBySim3oopKeyFrameQueue中的关键帧不为空
        if(CheckNewKeyFrames())
        { 
	  //检测是否产生回环
            if(DetectLoop())
            {
               // Compute similarity transformation [sR|t]
               // In the stereo/RGBD case s=1 
               if(ComputeSim3())
               {
                   // Perform loop fusion and pose graph optimization
                   CorrectLoop();
               }
            }
        }       
	// 检测是否有复位请求
        ResetIfRequested();
	
        if(CheckFinish())
            break;

        usleep(5000);//检测周期大约5s
    }

    SetFinish();
}

猜你喜欢

转载自blog.csdn.net/qq_16481211/article/details/83615001