版权声明:本文为博主原创文章,未经博主允许不得转载。 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();
}