ORBSLAM2的关键帧简介

  图像插入频率过高会导致信息冗余度快速增加,而这些冗余的信息对系统的精度却十分有限,甚至没有提高,反而消耗了更多的计算资源。这等于吃力不讨好。

  关键帧的目的在于,适当地降低信息冗余度,减少计算机资源的损耗,保证系统的平稳运行。

  ORBSLAM2也是沿袭PTAM的方案,将定位和建图分成两个线程,不过ORBSLAM2还增加了回环这个线程,在关键帧的问题上做了更灵活的处理,使得系统的跟踪更流畅和稳定。

  接下来我们将按照ORBSLAM2源码中的方案将内容分成两个部分进行介绍:

  1. 关键帧的筛选;

  2. 关键帧的插入。


关键帧的筛选:

  由于关键帧的筛选主要涉及一些判断条件,没有公式没有插图,读起来想必是十分枯燥的。因此笔者主要提炼大纲,让大家能够比较直观的看出,ORBSLAM2中所用的策略是什么,并根据笔者的拙见对原因进行分析,不当之处,敬请指正。

  首先是直接不插入关键帧的条件,主要有三个:

  1. 若当前处于定位模式,不插入关键帧;

    原因:定位模式是只定位不建图,只利用已有的地图点对当前相机姿态进行估计,而不更新地图点,因此没有插入关键帧的必要。

  2. 若局部地图处于全局闭环情况下,不插入关键帧;

    原因:局部地图被占用,插入关键帧会影响全局闭环的优化。

  3. 若距离上一次重定位较近,不插入关键帧;

    原因:重定位时,当前帧通过与局部关键帧匹配并进行运动估计,能够很好地恢复其运动姿态。笔者认为,因为重定位时当前帧与重定位候选帧的信息冗余度较低,所以在重定位成功后,当前帧会作为关键帧插入地图中。而新来的一帧,由于重定位时刚刚插入关键帧,所以不需要频繁插入。

  排除了上面三种情况,接下来就需要对关键帧进一步检测,才能确定是否真的需要插入关键帧。进一步检查包含一个必不可少的条件和另外三选一的条件。

  必须满足的条件:

  1. 内点数必须超过设定的最小阈值,并且重叠度不能太大;

    原因:保证关键帧跟踪的质量,同时,避免引入过多的信息冗余。

  三选一的条件:

  2.1 距离上次插入关键帧已经过去MAX帧,MAX是ORBSLAM2预设的最大值;

    原因:防止过去太多帧,跟踪丢失。

  2.2 距离上次插入关键帧至少过去MIN帧,且局部建图线程处于空闲状态,MIN是ORBSLAM2预设的最小值;

    原因:防止图像重叠度太高,并且局部建图线程有空闲处理新的关键帧。

  2.3 局部建图线程中关键帧队列的关键帧数量不超过3个;

    原因:主要也是考虑局部建图线程的处理能力,以及信息的冗余度问题吧。

  插入关键帧的条件即是必须满足条件1以及满足2.1-2.3中任意一个条件。


关键帧的插入

   确定了当前帧是关键帧,那么就需要将其输入局部建图模块以及回环检测模块。但是在输入这两个模块之前,需要将关键帧的观测信息进行更新。为了更加直观的表达关键帧插入的方法,笔者还是以列提纲的方式,为大家介绍这个过程:

  1. 中断局部建图线程,即中断处理地图点、关键帧以及优化相机位姿;

    原因:这是必须插入关键帧的情况,强制终止局部建图。

  2. 更新当前关键帧的位姿,即从 $T$ 矩阵中取出旋转矩阵 $R$ 和位移矩阵 $t$ 以及相机中心 $O$;

    原因:主要用于局部建图模块和回环检测模块中做重投影。

  3. 将当前帧所对应的地图点按深度信息进行排序;

    原因:筛除超出深度阈值的地图点。

  4. 对当前关键帧中未关联的三维点,创建新的地图点,具体包括观测信息,更新地图点的描述子以及法向量和深度;

    原因:非常平凡的创建地图点的过程。

  5. 将所创建的地图点插入地图中,最后将更新后的关键帧也插入地图中。

    原因:插入关键帧的过程最后一个步骤。

  插入关键帧的流程大体如上面五个步骤所述。大家在设计关键帧插入流程时可以参考这几种方案,当然也可以根据实际需要设计更符合要求的方案。


总结:

  终于又到了写总结的时候了,写一篇博客着实不易啊。

  本文主要介绍了ORBSLAM2对待关键帧的策略,包括关键帧的筛选和插入。

  不同的SLAM系统所采用的的关键帧策略有所不同,但是目的都是类似的:一是考虑计算资源的损耗,二是考虑信息的冗余度,最重要的是系统精度提高的可能性。在精度满足要求的前提下,寻求信息冗余度和计算资源损耗的折中。

  至此,ORBSLAM2的跟踪线程我们已经全部介绍完了,接下来我们将进入局部建图线程。

  下一讲,笔者将为大家介绍ORBSLAM地图的更新策略。

PS:

  如果您觉得我的博客对您有所帮助,欢迎关注我的博客。此外,欢迎转载我的文章,但请注明出处链接。

  对本文有任何问题可以在留言区进行评论,也可以在泡泡机器人论坛:http://paopaorobot.org/bbs/index.php?c=cate&fid=1中的SLAM技术交流模块发帖提问。

  我的github链接是:https://github.com/yepeichu123/orbslam2_learn

(五)ORBSLAM关键帧的筛选和插入的更多相关文章

  1. WPF中的动画——(五)关键帧动画

    与 From/To/By 动画类似,关键帧动画以也可以以动画形式显示目标属性值. 和From/To/By 动画不同的是, From/To/By 动画只能控制在两个状态之间变化,而关键帧动画则可以在多个 ...

  2. (四)ORBSLAM运动估计

    ORBSLAM2的运动估计简介 ORBSLAM2中的运动估计核心方法就是3D-2D的PNP,而在跟踪过程主要分为三种类型: 无运动模型的跟踪,即基于参考帧的跟踪: 基于匀速运动模型的跟踪: 重定位: ...

  3. 模拟美萍加密狗--Rockey2虚拟狗(五)

    虚拟狗开源后很多网友询问有关使用方法的问题,其实看我前四篇文章就应该了解怎样使用了,但还是写篇教程吧 [一].安装DSF (驱动模拟环境): 运行DSFx86Runtime.msi 如需改变安装目录请 ...

  4. {MySQL完整性约束}一 介绍 二 not null与default 三 unique 四 primary key 五 auto_increment 六 foreign key 七 作业

    MySQL完整性约束 阅读目录 一 介绍 二 not null与default 三 unique 四 primary key 五 auto_increment 六 foreign key 七 作业 一 ...

  5. 表示层设计模式:Intercepting Filter(截取筛选器)模式

     上下文  问题  影响因素  解决方案  变体  示例  结果上下文  相关模式  致谢  上下文 对于任何一个曾经从头建立 Web 应用程序的人来说,他们都会有这样的体会:这项任务所需要的独立完成 ...

  6. ORB-SLAM3论文阅读:ORB-SLAM3: An Accurate Open-Source Library for Visual, Visual-Inertial and Multi-Map SLAM

    简介 ORB-SLAM3是第一个能在单目.双目.RGBD鱼眼相机和针孔相机模型下运行视觉.视觉-惯导以及多地图SLAM的系统.其贡献主要包括两方面:提出了完全依赖于最大后验估计的紧耦合视觉-惯导SLA ...

  7. 十分钟玩转 jQuery、实例大全

    一.简介 定义 jQuery创始人是美国John Resig,是优秀的Javascript框架: jQuery是一个轻量级.快速简洁的javaScript库.源码戳这 jQuery对象 jQuery产 ...

  8. jquery简介和实例

    一.简介 定义 jQuery创始人是美国John Resig,是优秀的Javascript框架: jQuery是一个轻量级.快速简洁的javaScript库. 参考:http://www.php100 ...

  9. jquery基础知识汇总

    jquery基础知识汇总 一.简介 定义 jQuery创始人是美国John Resig,是优秀的Javascript框架: jQuery是一个轻量级.快速简洁的javaScript库.源码戳这 jQu ...

随机推荐

  1. 【故障公告】推荐系统中转站撑爆服务器 TCP 连接引发的故障

    上周五下午,我们在博客中部署了推荐系统,在博文下方显示“最新IT新闻”的地方显示自动推荐的关联博文.我们用的推荐系统是第四范式的推荐服务,我们自己只是搭建了一个推荐系统中转站(基于 ASP.NET C ...

  2. lvds接口介绍

    1.项目简介 用索尼的imx264 sensor采集图像,在内部模数转换之后,由lvds接收,然后解码,最后送给后端显示 2.框图 imx264配置成从模式,由spi总线配置,需要由FPGA提供 行. ...

  3. Counting Sort(Java)

    public static void countingsort(int[] a, int n) //n = a.length { int max = a[0], min = a[0]; for(int ...

  4. 核主成分分析方法(KPCA)怎么理解?

    先回顾下主成分分析方法.PCA的最大方差推导的结论是,把数据投影到特征向量的方向后,方差具有极大值的.假如先把数据映射到一个新的特征空间,再做PCA会怎样?对于一些数据,方差会更好地保留下来.而核方法 ...

  5. echarts实时数据图表

    import React, { PureComponent } from 'react'; import ReactEcharts from 'echarts-for-react'; import m ...

  6. Java 多线程加锁的方式总结及对比(转载)

    转自https://blog.csdn.net/u010842515/article/details/67634813 参考博文:http://www.cnblogs.com/handsomeye/p ...

  7. Delphi 获取DataSet传入参数后的SQL命令

    ClientDataSet1.CommandText := sSQL;   ClientDataSet1.Params.Clear; ClientDataSet1.CommandText :='SEL ...

  8. 台达PLC实现远程下载程序

    台达PLC实现远程下载程序 日期:2019-04-27                    时间    08:33:57 让物联变得更简单 18-09-2411:25 明明在公司调试没问题的设备一到 ...

  9. Linux lvs三种模式工作原理

    LVS:Linux Virtual Sevser,Linux虚拟服务器,由章文嵩先生成立的有关负载均衡的开源项目.基于Linux内核.优化后并发量可以达到百万级. NAT模式: NAT(Network ...

  10. MySQL架构备份之双机热备

    M--S架构:实现双机热备(AB复制) 1.可以降低master读压力 2.可以对数据库做“热备”,热备只能解决硬件master硬件故障,软件故障等重大故障问题,但无法解决人为误操作导致的逻辑故障(列 ...