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. 更新当前关键帧的位姿,即从 TT 矩阵中取出旋转矩阵 RR 和位移矩阵 tt 以及相机中心 OO;

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

  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. Excel教程:排序-筛选-切片-插入表格

    excel 教程:B站学习地址 前五节是用txt记的,6-10节有图片说明. 第一节 shift + table 光标左移 每列表头 鼠标放置出现"竖线",双击,达到"自 ...

  2. Navicat 筛选或插入某个字段出现1060 - Duplicate column name ‘XXX‘错误,以及导入sql文件时数据丢失问题。

    在mysql中,多个表联合查询或添加某个字段时,出现错误:[Err] 1060 - Duplicate column name 'XXX',主要原因是表中存在重复字段造成的结果,分两种情况: (1)使 ...

  3. ORB-SLAM论文翻译

    ORB-SLAM: a Versatile and Accurate Monocular SLAM System 原文发表于:IEEE Transactions on Robotics (Impact ...

  4. ORB-SLAM 全文翻译

    本文为ORB-SLAM的翻译,转载自:http://qiqitek.com/blog/?p=102 ORB-SLAM: a Versatile and Accurate Monocular SLAM ...

  5. ORB-SLAM——a Versatile and Accurate Monocular SLAM System)

    ORB-SLAM:一种通用的(全能的)精确的单目SLAM系统 摘要 本文提出了ORB-SLAM,在大小场景.室内室外环境下都可以实时操作的一种基于特征的单目SLAM系统.系统对复杂的剧烈运动具有鲁棒性 ...

  6. ORB-SLAM:精确多功能单目SLAM系统

    ORB-SLAM: a Versatile and Accurate Monocular SLAM System Taylor Guo, 2016年3月18日-9:00 原文发表于:IEEE Tran ...

  7. ORBSLAM知识整理

    今天面试,很多基本问题都没有回答的很好.那些知识明明知道,但是就是讲不出来,看来看过是不行的,必须要自己总结一下. 一.介绍一下ORBSLAM的线程,并且分别讲一下 ORBSLAM主要有三个线程,分别 ...

  8. 【论文翻译】ORB-SLAM: A Versatile and Accurate Monocular SLAM System

    摘要 本文介绍了ORB-SLAM,一种基于特征的单目SLAM系统,该系统可在大小场景和室内外环境中实时运行.该系统对复杂的剧烈运动具有鲁棒性,允许宽基线闭环和重定位,且包含完整的自动初始化.在近年来优 ...

  9. 翻译:ORB-SLAM: a Versatile and Accurate Monocular SLAM System

    本文为ORB-SLAM的翻译,转载自:http://qiqitek.com/blog/?p=102 ORB-SLAM: a Versatile and Accurate Monocular SLAM ...

  10. 一起学ORBSLAM2(11)ORBSLAM的localmapping

    转载请注明原创地址:https://blog.csdn.net/qq_30356613/article/category/6897125 ORBSLAM的局部建图线程实际做的工作是来维护全局map以及 ...

最新文章

  1. Nature子刊:整合宏基因组、代谢组和表型分析的的计算框架
  2. html输入密码自动隐藏,原生js实现密码输入框值的显示隐藏
  3. Asp.net core中Migration工具使用的交流分享
  4. 给vmware虚拟机中的ubuntu 14.04扩大磁盘分区
  5. 给ubuntuGedit安装gedit-source-code-browser
  6. arrays中copyof复制两个数组_Java的数组初识和拷贝用法
  7. C# 之 提高WebService性能大数据量网络传输处理
  8. python开发讲解_Python开发系列课程(1) - 初识Python详解
  9. python 自定义词典_cawdrey-Python的几个有用的自定义词典 -Dominic Davis-Foster
  10. tidb 企业_TiDB,日均千万级数据存储方案选型
  11. Idea安装Eslint插件详解 提示:Plugin NativeScript was not installed解决
  12. hibernate教程笔记9
  13. OP-TEE 编译流程
  14. 计算机术语一种单向密码体制,密码体制有哪五部分
  15. 综述 | 一文读懂自然语言处理NLP(附学习资料)
  16. win7如何开启无线网卡服务器,大神教你win7无线网卡怎么设置wifi
  17. mysql添加字段语句
  18. 【数据库SQL实战】获取员工其当前的薪水比其manager当前薪水还高的相关信息
  19. python流水线鸡蛋检测
  20. 如何用excel做正交分析_如何在SPSS中进行正交设计及正交分析?

热门文章

  1. 应用安全-Web安全-SSRF攻防
  2. sublime 插件(持续更新)
  3. iOS----集成ijkplayer视频直播
  4. java连接远程服务器之manyged-ssh2 (windows和linux)
  5. Servlet 生命周期、工作原理(转)
  6. 进击的雨燕------------错误处理
  7. 什么是js面向对象??
  8. 第二十三模板 1什么是模板
  9. dedecms注入漏洞 5.3 5.5
  10. 解决Eclipse开发工具Debug调试JDK源码无法查看变量值