ORB_SLAM2--迴環檢測執行緒
阿新 • • 發佈:2018-11-04
迴環檢測執行緒主要由檢測迴環、計算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();
}