解决 orbslam3 纯定位模式无法重定位的问题 Relocalization issue in Localization mode

1、背景

在这里插入图片描述
orbslam3 中创建好地图后,切换为纯定位模式(即勾选 Localization Mode 选项,如上图),实测可以节省 5-10% 的 cpu,且可以避免 SLAM 模式 长时间运行内存占用缓慢上涨的问题(如下图)。
在这里插入图片描述

2、问题

但是如果在纯定位模式画面跳变(比如遮住镜头几秒)后暂时跟踪失败,根据官方代码的逻辑是无法重定位(Relocalization)成功的,还会直接导致位姿乱飞(如下图),且让纯定位模式难以在工程中使用以节省 cpu 和内存占用。
在这里插入图片描述

3、解决

在 Tracking.cc 文件中找到以下代码(根据这篇博客记录时最新的官方代码,是在 2038 行)

// Localization Mode: Local Mapping is deactivated (TODO Not available in inertial mode)
if (mState == LOST) {
    if (mSensor == System::IMU_MONOCULAR || mSensor == System::IMU_STEREO || mSensor == System::IMU_RGBD)
        Verbose::PrintMess("IMU. State LOST", Verbose::VERBOSITY_NORMAL);
    bOK = Relocalization();
}

修改为

// Localization Mode: Local Mapping is deactivated (TODO Not available in inertial mode)
// if (mState == LOST) {
if (mState == RECENTLY_LOST && !bOK) {
    if (mSensor == System::IMU_MONOCULAR || mSensor == System::IMU_STEREO || mSensor == System::IMU_RGBD)
        Verbose::PrintMess("IMU. State LOST", Verbose::VERBOSITY_NORMAL);
    bOK = Relocalization();
}

实测修改后,纯定位模式下如果画面跳变后,orbslam3 仍然可以快速重定位到地图中的正确位姿。

4、参考信息

https://github.com/UltiFix/ORB_SLAM3/commit/3e3f9ee095dd8cfc0bb7562dcf2eef4b4839ca06

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值