3.9ORB-SLAM3之浅谈代码中的纯定位模式

文章详细介绍了ORB-SLAM3算法中的纯定位模式,该模式依赖于恒速运动模型进行定位,并在跟踪失败时通过重定位来找回。纯定位在特征点匹配不足时会触发重定位,且在没有先验地图时可能无效。此外,文章指出纯定位模式对环境稳定性要求高,且在有先验地图情况下,SLAM模式可能是更好的选择。
摘要由CSDN通过智能技术生成

0总述

Tracking线程中,当系统初始化完成后就会正式进入跟踪环节。在ORB-SLAM3算法代码中提供了两种模式,一种是纯定位模式,一种是定位建图的SLAM模式。

对于纯定位模式,在源码中由成员变量mbOnlyTracking控制,这个变量是通过UI界面进行控制改变的。
在这里插入图片描述

可以由上图看到,纯定位模式和SLAM模式主要是在与第一阶段的处理方式不同,由于纯定位模式不进行关键帧的创建,因此,在存在加载先验地图时使用纯定位模式比较合适,不然VO的轨迹会漂的非常厉害。

1.定位

根据代码中的逻辑,纯定位模式主要依托于跟踪运动模型TrackWithMotionModel()实现定位,即根据论文中的恒速运动模型先获取一个当前帧的初始位姿。后面会根据这个初始位姿进行匹配优化,最终得到优化后的位姿。

mCurrentFrame.SetPose(mVelocity * mLastFrame.GetPose());

在跟踪恒速运动模型过程中,如果是纯定位模式会有一个更严苛一点的判断,如果通过当前帧特征点恢复出的3D内点的数量较少mbVO = nmatchesMap<10;,认为系统即将要跟踪失败,在下一帧就要考虑重定位了。

2.重定位

纯定位模式下,如果跟踪失败了是通过重定位进行找回的。对于纯定位模式的重定位,当系统跟踪快要失败时以及系统已经跟踪失败时,都会进入到重定位模式中。

如果上一帧只是跟踪质量较差,其实还是有恒速模型存在,则重定位会首先进行一次跟踪恒速模型

    if(mbVelocity)
    {
        bOKMM = TrackWithMotionModel();
        vpMPsMM = mCurrentFrame.mvpMapPoints;
        vbOutMM = mCurrentFrame.mvbOutlier;
        TcwMM = mCurrentFrame.GetPose();
    }

接着还会进行一次重定位,重定位的主要思想是通过遍历当前关键帧数据库中的所有关键帧,寻找和当前帧存在匹配关系的关键帧,通过关键帧和当前帧之间的匹配计算当前帧位姿,这个过程和回环检测有点相似,简单地说也是位置识别。

如果重定位找不回来VO就宣告失败了,接下来会一直陷入到重定位的逻辑里,直到找到匹配关系。所以说VO模式需要先验地图作为保障,VO本身是不创建关键帧的,在跟踪失败时如果没有先验关键帧,重定位就没有意义。

3.小结

在实测过程中,对于纯定位模式的使用,需要保证当前运行的环境保持稳定,也不能出现较为恶劣的环境,比如运动模糊和光线变化导致的过曝欠曝,这些都会导致纯定位的不稳定,出现位姿漂移甚至跟踪失败。总的来说,ORB-SLAM3中的纯定位模式有些鸡肋,而且在加载先验地图的情况下也可以运行SLAM模式,根据实测统计,VO的跟踪时间并没有比SLAM模式跟踪时间有所降低。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值