代码地址 https://github.com/UZ-SLAMLab/ORB_SLAM3

论文名称 ORB-SLAM3:An Accurate Open-Source Library for Visual, Visual-Inertial and Multi-Map SLAM

文章链接 https://arxiv.org/pdf/2007.11898.pdf

时隔五年,在前天也就是2020年7月23日,来自Zaragoza universtiy的slam组终于开源了orb-slam的version 3。论文现在已经挂到了arxiv上,并且在github上已有code,对源码感兴趣的小伙伴们可以立即行动了。感恩各种公众号,自己第一时间就知道了开源的消息。刚刚看过一遍文章,所以趁着热乎,我们来总结一下。

ORB-SLAM3的系统框图

从第一版的单目相机系统,到第二版加入了对stereo以及RGBD camera的支持,再到目前最新版本的orb-slam整合了visual,以及visual-inertial的融合方案,使得整个算法系统可以非常快速地应用于不同的硬件平台上。从这样的进化史来看,他们组的研究者们非常致力于将orb-slam打造成一个通用性很高的系统。这样的观点在论文原文中其实也得到了证实,作者表明orb-slam最优秀,贡献最大的地方就在于这是一个完备,且精度很高的系统:

"This is essentially a system paper, whose most important contribution is the ORB-SLAM3 library itself [5], the most complete and accurate visual, visual-inertial and multi-map SLAM system to date."

在具体讲orb-slam 3的contribution之前,作者从data association的角度谈了下VO和SLAM的区别。这里我认为虽然老生常谈,但也的确有必要再拿他铺垫铺垫。首先按照作者的思路,将现有比较传统的data association分成三种:short-term,mid-term和long-term。

  1. short-term的特征关联对象主要是时间序列上的临近帧,这种关联方法主要用于以估计ego-motion为主的VO或VIO。Short-term往往会很快速地累积误差原因在于当移动范围较大时,先前的观测不会被保存,那么当转回到原来的场景时,再次观测到原先的landmark时,会当作一个新的点处理。这样的motion estimation方式在一个小范围area都不能称为consistent的,所以漂的自然会很快。
  2. 如果我们的系统里存在一个全局的landmark地图的话,在drift还不是很大的情况下,我们可以将临近pose所观测到的landmark投影回来,构建BA问题从而估计当前的pose。这就是论文中说的mid-term方式了。作者表明,orb-slam的精度相比于VO+独立回环模块的方案会更高的原因,这一部分作用很大。
  3. long-term从作者的表述来看,主要用在大场景发生drift或者跟丢时。一般当我们说有了很大的漂移或者跟丢了的时候,其实都丢掉了当前帧和map的部分甚至全部关联。这时候就需要我们借助一些在短中期以外的特征关联手段,在此基础上通过位姿图优化,或者做整体的BA来消除drift或者重定位。

回到正题,我们来讲本文的核心contribution。

在本篇一开始已经提到了,orb3最大的贡献在于整合了一系列sensor方案,使得整个系统更加通用化。对于VI方案,在初始化中,作者提出了从头至尾的MAP estimation的方法。因为在VI系统中,初始化一直是一个非常重要而又相对独立的话题。所以这一部分准备后面独立写一篇blog详细说说,还是有挺多干货的。

那么接下来,结合刚刚讲完的特征关联,作者提到说orb-slam3提出了一个叫做“multi-map data assocition”的关联方法,这部分在系统中具体对应于一个名为orb-slam atlas的模块。它在整个系统中极为重要,基本串联起了所有的主线程。这里先额外提到一点,本篇blog更加侧重于在先前orb-slam版本的基础上,version3的改进之处以及亮点。那对于那些不是完全新的东西呢,比如说主线程模块,就不再从头介绍了。所以如果是之前没接触过orb-slam的小伙伴呢,不嫌弃可以先看看我先前的博客哈!

Atlas里有若干个disconnected map,其中有一个active map,tracking线程用它来实现对当前帧的定位,与此同时它被local mapping线程持续优化并加入新关键帧。与active map相对应,Atlas中剩余的map被称为non-active。重点来了,这些non-active怎么用呢?主要是当tracking线程跟踪失败的时候,该线程会在Atlas的所有地图中试图找回当前帧的pose。如果找回了,那么tracking线程继续后面的工作,同时还要做的一件事就是,根据在Atlas中找回的情况,确定是否要更改active map。当然也会有让人不希望的情况发生,那就是在Atlas中未能找回当前帧,这时候当前active map变为non-active,然后启动一个新的地图。如果新的地图走着走着和之前的non-active发生overlap,此时loop and map merging thread会将有重合的map融合,seamlessly!结合自身的work,抒发一点个人感慨吧,单单讲map management这一块儿,orb的工作我觉得真的会优秀并领先太多!

在先前的work中,place recognition多用DBoW的方法:先用词袋匹到三个连续关键帧,满足时间上的一致性,然后再check几何上的一致性。作者现在认为这种方法虽说有一定的精度但牺牲了召回率。所以针对上述current frame在tracking thread中跟丢后,去到Atlas中找回时,提出了一种全新的识别方法。新方法大体上是先check几何一致性,然后再在map中考虑区域的空间一致性。这样可提升recall,并且加强data association从而提升map的精确度。先前我的orb笔记关于DBoW重定位的介绍也不是很多,这一部分与IMU初始化一样,后面也单独写一篇详细说说吧。不过好歹得先啃一啃源码的,flag先立为敬哈哈。

最后还有一部分在系统整体层面的贡献,作者将pinhole以及fisheye的camera model都做了进一步整合,包括投影,反投影方程,以及相关的雅可比等。真的是相当全面的工作了!感觉未来照如此趋势,会不会学界刚刚出来的东西都可以直接拿来不加粉饰地去做产品了呢?真的太令人期待了不是吗!

ORB-SLAM笔记———ORB-SLAM3概述相关推荐

  1. opencv与ORB SLAM提取orb特征点比较

    在ORB SLAM中,通过四叉树的方式存储关键点,使得图像上特征点分布均匀,便于追踪.此次实验分别用opencv接口和ORB SLAM实现特征点的提取,效果图如下: 实现程序: #include &l ...

  2. [图像特征匹配]SIFT、SURF、ORB算法笔记以及代码实现

    SIFT.SURF.ORB算法学习笔记 文章目录 SIFT.SURF.ORB算法学习笔记 一. SIFT (1)构建尺度空间 (2)使用DOG近似LOG定位极值点(关键点) (3)计算关键点方向 (4 ...

  3. 【SLAM笔记】SLAM概述

    SLAM笔记专栏:https://blog.csdn.net/weixin_44543463/category_10925276.html 本文目录 一.引言 1.1 定位方法 1.2 相机 二.经典 ...

  4. 视觉SLAM笔记(31) 特征提取和匹配

    视觉SLAM笔记(31) 特征提取和匹配 1. 运动图像 2. 提取 ORB 特征并匹配 1. 运动图像 为此准备了两张图像,位于 VSLAM_note/031/ 下的 1.png 和 2.png 它 ...

  5. 视觉SLAM笔记(30) 特征点法

    视觉SLAM笔记(30) 特征点法 1. 特征点法 2. 特征点 3. ORB 特征 3.1. FAST 关键点 3.2. BRIEF 描述子 4. 特征匹配 1. 特征点法 视觉 SLAM 主要分为 ...

  6. 视觉SLAM笔记(40) 特征点的缺陷

    视觉SLAM笔记(40) 特征点的缺陷 1. 特征点估计相机运动的缺陷 2. 克服使用特征点缺陷 3. 思路分析 4. 直接法 1. 特征点估计相机运动的缺陷 之前介绍了使用特征点估计相机运动的方法 ...

  7. 视觉SLAM笔记(60) 建图

    视觉SLAM笔记(60) 建图 1. 概述 2. 用处 1. 概述 建图(Mapping),本应该是 SLAM 的两大目标之一 因为 SLAM 被称为同时定位与建图 之前讨论的都是定位问题,包括通过特 ...

  8. 视觉SLAM笔记(65) 简约总结

    视觉SLAM笔记(65) 简约总结 参考: <视觉SLAM十四讲> 视觉SLAM笔记(3) 视觉SLAM框架 视觉SLAM笔记(20) 单目相机模型 视觉SLAM笔记(32) 2D-2D: ...

  9. 视觉SLAM笔记(63) RGB-D 稠密建图

    视觉SLAM笔记(63) RGB-D 稠密建图 1. 建立点云地图 2. 点云地图 3. 其他重建方法 1. 建立点云地图 所谓点云,就是由一组离散的点表示的地图 最基本的点包含 x, y, z 三维 ...

  10. 视觉SLAM笔记(61) 单目稠密建图

    视觉SLAM笔记(61) 单目稠密建图 1. 立体视觉 2. 极线搜索与块匹配 3. 高斯分布的深度滤波器 1. 立体视觉 相机,很久以来被认为是只有角度的传感器(Bearing only) 单个图像 ...

最新文章

  1. C++归并排序递归写法
  2. 2020年11月全国程序员工资,新出炉!
  3. python easy install 编译_python安装easy_install和pip
  4. python导入模块有几种方式、各有什么特点_Python导入模块的几种姿势
  5. qt中 accept()和ignore()函数
  6. flume从指定网络端口采集数据输出到控制台
  7. python 文字识别 之 pytesseract
  8. windows优化大师怎么用_软件不能用又卸载不掉怎么办——用Windows自家的卸载工具吧(dos级卸载)...
  9. 如何进行大数据分析与处理
  10. 机器学习之随机森林模型
  11. python远程监控_Python实现远程端口监控实例
  12. 25-Web-京东登录界面
  13. 服务器搭建网站完整教程
  14. nmap常用命令有哪些
  15. windows清理c盘的三种有效方法
  16. 如何使用HTML进行一个简单的图文混排
  17. mysql 5.7 error log_MySQL5.7 error log时间显示问题
  18. μC/OS-II或III移植时keil里面的文件有个金黄色小钥匙的原因
  19. 【win10安装Kafka发消息及消费】
  20. python爬取数据时报错:`aiohttp.client_exceptions.ClientConnectorCertificateError: Cannot connect to host sea

热门文章

  1. Collections.sort对List排序的两种方法
  2. MOV AX,BX和MOV AX,[BX]的区别
  3. linux中怎样结束进程,linux怎么样终止进程
  4. 视频教程-大数据搜索技术-大数据
  5. 安装pycrypto,windows10,全解
  6. 2005岁末BLOG程序大评点
  7. S7-200SMART PLC中书签和交叉引用的具体使用方法示例
  8. vr属于计算机什么领域,vr技术是什么
  9. Quartz定时器的时间设置
  10. AF BAF tuning <5>