ORB_SLAM2的单目SLAM提高关键帧的个数

2023-05-16

一、前言

最近在结合ORB_SLAM2和Map2DFusion,来做无人机航拍视频建图,基本完成了pipeline,但发现出来的效果没有Map2DFusion官方的效果好。

  

(第一张图是我自己处理的效果,在一些地方可以看到明显断层;第二张图是官方的效果)

我有一个想法,能不能通过提高ORB_SLAM2关键帧的个数来改善建图?

于是我开始调研如何增加ORB_SLAM2关键帧的个数。

二、调研

ORB_SLAM2的Tracking线程的NeedNewKeyFrame()函数中会经过四个条件判断,来决定是否添加关键帧:

const bool c1a = mCurrentFrame.mnId>=mnLastKeyFrameId+mMaxFrames;
const bool c1b = (mCurrentFrame.mnId>=mnLastKeyFrameId+mMinFrames && bLocalMappingIdle);
const bool c1c =  mSensor!=System::MONOCULAR && (mnMatchesInliers<nRefMatches*0.25 || bNeedToInsertClose) ;
const bool c2 = ((mnMatchesInliers<nRefMatches*thRefRatio|| bNeedToInsertClose) && mnMatchesInliers>15);
if((c1a||c1b||c1c)&&c2)
{
    ...增加关键帧...
}

我用一个单目的视频(25fps)来测试,发现一个规律:

  • c1a的值一直为0
  • c1b的值0多1少(由于mMinFrames=0,c1b本质上取决于bLocalMappingIdle。即LocalMapping线程空闲的时候,c1b = 1)
  • c1c的值一直为0(因为单目系统,这个值被置为0)
  • c2的值1多0少。(c2的判断条件是:(当前帧的跟踪点数 < 90%的参考关键帧跟踪点数 )  而且  ( 当前帧跟踪点数 > 15 ) )

我试过调整这些条件,尝试增加关键帧个数。但实际上没法做到稳定增加关键帧个数。

之后,我发现再LocalMapping线程中,有一个去除冗余关键帧的函数:KeyFrameCulling(),正是这个函数阻止了增加过多的关键帧。

KeyFrameCulling()会将那些有90%的点能够被超过三个关键帧观察到的帧认为是冗余帧,并去除。

三、实际操作

1. 在NeedNewKeyFrame(),把

if((c1a||c1b||c1c)&&c2)

改为

if(c1a)

因为mMaxFrames的数值是fps的缘故,c1a的判断相当于每1s产生一个关键帧

2. 注释掉LocalMapping线程中的KeyFrameCulling()函数,即不用剔除冗余关键帧。

四、效果

经过这两点操作后,ORB_SLAM2产生的关键帧数量大大增加,从原来的355个增加到698个(使用同一个视频做测试)。

如下图所示,第一张是原本ORB_SLAM2产生的关键帧效果(一个蓝色的框代表一个关键帧),第二张是更改过代码后产生的关键帧效果,可以看到关键帧变了密集了不少。

五、后续

虽然增加了关键帧个数,可还是没办法提高Map2DFusion的建图效果,只能另找其他突破口了......

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ORB_SLAM2的单目SLAM提高关键帧的个数 的相关文章

随机推荐

  • .NetCore swagger发布到iis时访问api出现404的解决方案

    介绍 使用netcore作为纯后端提供api已经变得越来越频繁 xff0c swagger也成为很多人的选择 通常会在代码中限制ASPNETCORE ENVIRONMENT为Production时关闭swagger 但是往往我们需要将api
  • 新手树莓派4B安装Supervised+Home Assistant及问题解决

    测试平台 xff1a 树莓派4B 4G 系统版本 xff1a Raspberry Pi OS with desktop and recommended software Release date September 22nd 2022 Sy
  • 无人机高精度定位之——RTK与PPK概念扫盲

    无人机高精度定位之 RTK与PPK概念扫盲 无人机的兴起 xff0c 已经让很多行业激动不已 xff0c 如电力巡检 应急救援 测绘 农业植保等行业 而随着高精度卫星导航技术的加持 xff0c 让无人机定位更加高效 安全 灵活 xff0c
  • 数据结构与算法--01数组:为什么大多编程语言中数组从0开始编号?

    数据结构与算法 01数组 xff1a 为什么很多编程语言中数组从0开始编号 xff1f 一 数组特性二 数组访问越界问题三 数组与容器四 回到开篇五 总结 一 数组特性 1 数组本质上是一种线性表数据结构 xff0c 用一组连续的内存空间来
  • 数据结构与算法--02链表-如何轻松写出链表代码

    数据结构与算法 02链表 如何轻松写出链表代码 写好链表并不是件容易的事情 xff0c 尤其是一些复杂的链表操作 xff0c 如链表反转 有序链表合并等等 即使能够写出代码 xff0c 但及其容易出错 所以付出一定量的精力是前提条件 xff
  • QT for Windows安装配置总结及采坑问题汇总

    QT for Windows安装配置总结及采坑问题汇总 一 安装包下载二 安装三 Qt Creator配置四 遇到的问题 一 安装包下载 1 Qt官方下载地址 xff1a http download qt io archive qt xff
  • IOS系统历届版本大回顾(<iOS7)

    APPLE xff0c 一种常见的水果 xff0c 但在人类的进化史上扮演了2次拯救世界的角色 第一次是在1666年一个夏末的傍晚 xff0c 在英格兰林肯郡的乌尔斯索普 xff0c 当一个年轻人坐在树下 xff0c 埋头读书的时候 xff
  • 总结-虚拟机安装OS X系统步骤及遇到的问题

    一 安装步骤 1 创建一个文件夹 xff0c 用于向虚拟机系统共享文件 xff0c 如 xff1a work 2 下载好所需的安装包 xff1a a VMware虚拟机安装包 xff08 包含unlocker软件 xff0c 用于解锁VMw
  • Git-回退到指定版本

    Git 回退到指定版本 1 方法一 xff1a git reset2 方法二 xff1a git commit amend 1 方法一 xff1a git reset 直接回退到指定版本 xff0c 目标版本之后的提交将被删除 情况一 xf
  • 我的2011--快乐最重要

    呵呵 xff0c 听着郭德纲和于谦老师的相声 xff0c 开始写这篇文章 xff0c 刚毕业不到六个月 xff0c 就换了一份工作 xff0c 很多事情都在意料之外 xff0c 很多事情又在意料之中 xff0c 总之 xff0c 以后回忆到
  • 如何在github的wiki中添加新的图片

    本文简单介绍在github的wiki中添加新的图片对方法 在github的wiki中 xff0c 可以展现图片 xff0c 可是 xff0c 怎么添加图片 xff0c 从网页上展示的信息来看 xff0c 不是很清楚 添加图片 xff0c 基
  • iOS-AppStore上传应用更新之——Xcode上传ipa

    iOS AppStore上传应用更新之 Xcode上传ipa 一 App Store Connect添加新版本配置二 Xcode验证IPA有效性三 生成IPA包 xff0c 通过xcode直接上传至AppStore四 注意事项 好久没有打包
  • CSDN博客搬家至掘金

    博客搬家说明 xff1a 作为一名程序员 xff0c 掘金是目前最适合我们的一个平台 xff0c 所以决定将CSDN博客搬迁至掘金 xff01 CSDN是我第一个接触的博客平台 xff0c 你将成为我最美的回忆 xff0c 永远爱你 xff
  • 机器人学习之项目- Project1 : Go Chase it!(一)

    1 项目简介 任务概述 在这个项目中 xff0c 在catkin ws src中创建两个ROS包 drive bot和ball chaser 下面是设计机器人的步骤 xff0c 把它安置在一个设定的世界里 xff0c 并编程让它追逐白色的球
  • R6002-floating point not loaded 的问题解决方法

    最近项目的要计算浮点数据 xff0c 为了调试方便 xff0c 输出计算结果值到DEBUG信息 xff0c 结果却出现 R6002 错误 Google了一下 xff0c MSDN上对于R6002的描述信息是 xff1a 错误消息 未加载浮点
  • Eclipse 创建spring Boot 项目pom.xml报错处理

    1 最首先检查版本问题 xff0c 需要的话更新maven插件 点击help Install New Software Work with输入如下地址 https otto takari io content sites m2e extra
  • python如何查看函数或者模块的源代码

    查看函数的源代码 xff1a 一般来说 xff0c 一个python函数会自带一个 code 变量 xff0c 其中包含了该函数源码的文件路径 以 os path exists 函数为例 xff0c 打印它的源代码文件位置 xff1a im
  • SUN RGB-D数据集的理解

    SUN RGB D数据集是普灵斯顿大学的 Vision amp Robotics Group 公开的一个有关场景理解的数据集 官方介绍在此 xff0c 其中有视频介绍 视频介绍已经很详细了 xff0c 建议先看懂视频 此博客仅仅列出个人认为
  • ORB_SLAM2--源码编译

    前言 学习ORB SLAM2 xff0c 从编译源码开始 ORB SLAM2的github地址 https github com raulmur ORB SLAM2 一 准备工作 1 安装依赖库 sudo apt install cmake
  • ORB_SLAM2的单目SLAM提高关键帧的个数

    一 前言 最近在结合ORB SLAM2和Map2DFusion xff0c 来做无人机航拍视频建图 xff0c 基本完成了pipeline xff0c 但发现出来的效果没有Map2DFusion官方的效果好 xff08 第一张图是我自己处理