5.0ORB-SLAM3之回环检测线程概述

1.简介

本篇对ORBSLAM3中的回环检测线程大致过程进行一个简单的概述,对ORB-SLAM回环检测的主要模块进行介绍。

ORBSLAM3回环检测主要基于词袋向量进行位置识别,这一过程类似于重定位。因为使用了多地图系统,在ORBSLAM3中存在回环的地方主要有两种,一种是回环关系存在于当前活跃子地图中,此时就可以使用值钱的方法对回环边进行融合;另一种是回环关系存在于不同的子地图中,需要基于回环约束将两个子地图进行融合。

回环检测方法基于词袋向量实现,通过计算当前关键帧和关键帧数据库中关键帧的相似性得分可以得到存在回环可能或者子地图融合可能的候选关键帧,通过对候选关键帧进行几何相似性验证和时序几何验证,根据验证结果判定当前区域是否存在回环情况或者地图融合的可能,并根据不同的情况进行回环矫正或者是地图融合。

  • 检测与其他子地图是否存在共视区域NewDetectCommonRegions
  • 如果检测到的是回环,进行回环矫正
  • 如果检测到的是地图融合区域,进行地图融合

2 检测与其他子地图是否存在共视区域NewDetectCommonRegions

已经知道对于每张图像可以由一个个单词组成的词袋向量进行表示,如[1 0 1 1 0 0 1 1 0],其中1表示该帧图像包含某个单词,0表示该帧图像不包含某个单词,向量的维数由词袋树上单词的数量决定。

通过计算两个关键帧之间词袋向量的L1范数,可以得到两帧的相似性得分,当相似得分大于一定阈值时会将该关键帧判定为当前关键帧的回环候选关键帧(分别针对回环和地图融合两种情况,各取相似性比较强的3帧)。由于回环或者融合关键帧一定存在于距离当前关键帧较远的某处,因此确定回环候选关键帧时还需要排除和当前当前帧存在连接关系的那部分。

当检测到共视区域的出现后根据是否和当前关键帧属于同一子地图判定是回环情况还是地图融合情况,然后对候选关键帧进行共视几何验证时序几何验证

具体的内容见博客《回环检测之检测是否存共视区域》

3 回环矫正与子地图融合

在2.1节已经检测到了回环的候选帧,并得到了最佳回环候选帧与当前关键帧之间的相似变换。根据这个相似变换关系可以将当前帧的位姿以及当前帧的共视关键帧位姿进行一个硬调整,直接在原来位姿的基础上乘以一个相似变换。

然后对参与融合的关键帧地图点进行相应的替换和添加。对于存在闭环关系的当前关键帧和回环关键帧,原则上讲对于相互匹配的特征点会对应到同一个地图点(如下图),由于累计误差和漂移的存在相互匹配的一对特征点对应的地图点可能不一致,因此需要替换。考虑到匹配的地图点是经过一系列操作后比较精确的,现有的地图点很可能有累计误差,因此对于当前关键帧如果有重复的MapPoint,则用匹配的地图点代替现有的。

最后对参与闭环的回环关键帧、当前关键帧、当前关键帧的一级共视帧和二级共视帧进行本质图优化,以及局部BA优化,矫正回环处的累计误差和尺度漂移。

对于子地图融合部分,和回环正相反,是将旧地图(非活跃地图)中的关键帧和地图点通过之前的回环候选帧与当前关键帧之间的相似变换,全部转移到当前子地图坐标系中,然后再进行位姿矫正和位姿图优化。特别的,如果是IMU模式,在调整位姿前会提前对IMU进行初始化,并在地图融合后进行视觉+惯导的联合BA优化。

4.一点思考:回环检测新思路

回环检测的本质是位置识别,即在车体运行一段时间后当再次回到以前运行到的位置时,基于一些方法可以再次识别这些位置。因为是处于同一位置,因此车辆的位置在理论上是极为接近的。由于累计误差和尺度漂移的情况存在,使得再次经过相同位置时车辆的位姿会差异比较大。根据这一原理可以对同一位置下不同时刻的关键帧建立约束关系,认为以前的关键帧位姿是可信的,并将当前帧及其附近时刻的位姿进行矫正,使得轨迹保持全局的一致性。

设计到位置识别,可以借助语义分割的一些结果增加回环检测的精度,或者提高回环检测的速度。参考ORBSLAM将一副图像表示为一个由单词的有无和权重组成的词袋向量,那么是否可以基于语义分割结果更具象化地表示一副图像呢?这时词袋向量的长度不再是单词的数量,而是语义分割模型的数量。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值