Orb-SLAM回环检测的代码思路

部分转自博客链接

一. DetectLoop() (检测回环):

LoopClosing.ccDetectLoop()函数

(1)首先从队列中取出一个关键帧,判断:如果距离上次闭环没多久(小于10帧),或者map中关键帧总共还没有10帧.如果是的话,则不进行闭环检测。在数据库里把当前关键帧加上就好了.

if(mpCurrentKF->mnId<mLastLoopKFid+10)
{
        mpKeyFrameDB->add(mpCurrentKF);
}

否则就开始回环检测,遍历所有的共视关键帧计算所有共视关键帧的得分。步骤如下:

(2)mpKeyFrameDB->DetectLoopCandidates(mpCurrentKF, minScore)这个函数就是用于选择出候选关键帧的,具体操作(包括了第3 步骤):将与当前帧相连的局部关键帧剔除然后遍历所有关键帧,找出与当前关键帧具有相同单词的关键帧,然后统计所有闭环候选帧中与当前关键帧具有共同单词最多的单词数,将最多单词的80%设置为阈值,然后找出所有单词数超过阈值,且相似度检测大于相邻关键帧最低分数的关键帧。

   在这之前的工作:

   第一小步:检测与当前帧相连的局部关键帧.保存在vector<KeyFrame*> vpConnectedKeyFrames里面.(为了找出阈值minScore)(vpConnectedKeyFrames = mpCurrentKF->GetVectorCovisibleKeyFrames();)这里跟后面不太一样

   第二小步:计算当前帧与相邻帧局部关键帧的分数找出最低值存在float minScore里面.

   第三步:跳转DetectLoopCandidates(mpCurrentKF, minScore)函数,其中mpCurrentKF是当前帧

(3)KeyFrameDatabase.cc中的 DetectLoopCan

  • 2
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值