申明:本文只是作者为方便知识积累,总结了很多SLAM大牛的文章要点。

ORB-SLAM源码地址:https://github.com/raulmur/ORB_SLAM2.git

ORB-SLAM项目组网址:http://webdiis.unizar.es/~raulmur/orbslam/

ORB-SLAM是一个基于特征点的实时单目检测和重定位SLAM系统,在大规模、小规模、室内室外的环境中都可以运行。该系统对于剧烈运动也很鲁棒,支持宽基线的闭环检测和重定位,包括全自动初始化。该系统包含了所有SLAM系统的共有模块:跟踪(Tracking)、建图(Mapping)、重定位(Relocalization)、闭环检测(Loop closing)。由于ORB-SLAM是基于特征点的,故其能够实时计算出相机的轨迹,并生成场景的稀疏三维重建结果。ORB-SLAM2在ORB-SLAM基础上还支持标定后的双目相机和RGB-D相机。

ORB-SLAM的优势与贡献:

1. 使用ORB特征描述,不用GPU加速就可以实时,具有视点不变性和光照不变性。

2. 使用Covisibility Graph,使跟踪和建图聚焦在局部共视区域。

此处补充下Covisibility Graph的概念

以下内容参考自高博在知乎上的回答:https://www.zhihu.com/question/42050992/answer/93630213

首先,图优化是目前视觉SLAM里主流的优化方式。其思想是把一个优化问题表达成图(Graph),以便我们理解、观察。

一个图中有很多顶点,以及连接各顶点的边。当它们表示一个优化问题时,顶点是待优化的变量,而边是指误差项。我们把各个边的误差加到一起,就得到了整个优化问题的误差函数。顶点的参数化形式可以有很多不同的样子,例如某些顶点可以表示相机的Pose,另一些顶点可以表示三维空间点,同理,边也有不同的形式。除了个别的顶点和边,我们也关心整个图的结构,例如连通性等。

Covisibility Graph, Essential Graph,是不同图的形式,Spanning Graph为生成树。

如果我们考虑所有的相机Pose和所有点的空间位置,构造出来的图将会非常复杂,而难以直接进行实时优化。因此,通常我们会构建一些带有特殊结构的图,以满足实时性需求。

最简单的是Pose Graph,如果我们对特征点的空间位置并不关心,就可以构建只带有Pose结点以及Pose-Pose边这样的图。由于一个照片中常常有上千个特征点,这样做可以节省许多计算量。

Covisibility Graph的顶点是相机的Pose,而边是Pose-Pose的变换关系,所以也算是Pose Graph的一种。当两个相机看到相似的空间点时,它们对应的Pose就会产生联系(我们就可以根据这些空间点在照片上的投影计算两个相机间的运动)。根据观测到的空间点的数量,给这个边加上一个权值,度量这个边的可信程度。

Essential Graph比Covisibility Graph更简单,ORB-SLAM主要用它来进行全局优化。为了限制优化的规模,ORB-SLAM试图尽量减少优化边的数量。而尽量减少边,又保持连通性的方法,就是做一个最小生成树。

Covisibility是一直在用的概念,而Essential Graph是orb-slam自己提出的概念,为了减少全局会还的计算量,当你自己实现slam时,也会碰到这些困难,并设计一些应对的策略,这些就是你的创新性,事实上,随着SLAM时间的增长,如何控制图的结构和优化的规模,仍是现在SLAM有待解决的一个问题。

3. 使用the Essential Graph来优化位姿实现回环检测。

4. 相机重定位,视点和光照改变都适用。

5. 根据对平面和非平面选择不同模型,实现自动初始化。

6. 舍弃多余的关键帧,提高跟踪鲁棒性,加强长时间操作。

ORB-SLAM的系统架构:

(1)特征提取的方法:ORB特征提取

(2)三个线程。线程1:跟踪,通过每一帧图像定位相机,选择是否加入关键帧;线程2:局部建图:处理新的关键帧,使用local BA完成重建;线程3:闭环检测,对每一个新加进的关键帧进行回环检测。

(3)地图点和关键帧。

(4)Covisibility Graph 和 Essential Graph

(5)用于场景识别的词袋。

以下对三个线程的内容进行说明:

1. 跟踪(Tracking)

这一部分主要工作是从图像中提取ORB特征,根据上一帧进行姿态估计,或者进行通过全局重定位初始化位姿,然后跟踪已经重建的局部地图,优化位姿,再根据一些规则确定新的关键帧。

2. 建图(LocalMapping)

这一部分主要完成局部地图构建,包括对关键帧的插入,验证最近生成的地图点并进行筛选,然后生成新的地图点,使用局部捆集调整(Local BA),然后再对插入的关键帧进行筛选,去除多余的关键帧。

3. 回环检测(LoopClosing)

这一部分主要分为两个过程:闭环检测和闭环校正,闭环检测先使用WOB进行探测,然后通过Sim3算法计算相似变换。闭环校正主要是闭环融合和Essential Graph的图优化。

ORB-SLAM2 学习1相关推荐

  1. ORB SLAM学习--跑自己数据集图片序列或摄像头或视频(转)

    转自:用ORB SLAM2跑自己的数据集 使用图片序列或摄像头或视频 实践篇_不二青衣的博客-CSDN博客_orbslam2运行自己的数据集 学习 做实验参考使用,侵权则删 用ORB SLAM2跑自己 ...

  2. orbslam2可视化_[Ubuntu] ORB SLAM2 编译调试

    ORB SLAM2 是 2015年比较受到关注的一篇文章,它的主要思想是借助 ORB 描述子改进了 Sparse SLAM 的性能,使得其在稳定性和速度上都达到了比较好的程度.从创新性上来讲,它的主要 ...

  3. ORB SLAM2源码解读(三):Frame类

    文章目录 前言 构造函数 双目相机 RGBD相机 单目相机 ExtractORB:提取特征点 ComputeBoW:计算词袋数据 SetPose:设置相机外参 isInFrustum:判断一个MapP ...

  4. Ubuntu下使用单目相机运行ORB SLAM2

    环境:Ubuntu16.04+ROS Kinetic+USB单目摄像头 虽然ORB SLAM2的官方说明中表示没有ROS也可以编译运行,但要实时的跑ORB SLAM2还是需要ROS平台的,所以之前没有 ...

  5. Ubuntu 16.04~ORB SLAM2~Kinect v1

    额 Ubuntu16.04 ORB-SLAM2实现(kinect V1/ROS) ----------------------------------------------------------- ...

  6. Ubuntu14.04 使用本地摄像头跑ORB SLAM2

    嗯 这个方法我暂时弄不出来,用了另外一个方法:SLAM14讲 第一次课 使用摄像头或视频运行 ORB-SLAM2 前面的准备: Ubuntu14.04安装 ROS 安装步骤和问题总结 Ubuntu14 ...

  7. 新手入门新电脑安装配置orb slam2 一步到位不踩坑(ubutun18.04)

    目录 一.安装基础工具 二.安装Pangolin,作为可视化和用户界面 三.安装OpenCV,用于处理图像和特征 (1)下载OpenCV 3.4.1 (2)安装依赖项 (3)编译安装 (4)配置环境, ...

  8. ORB-SLAM2源码解析(一):ORB算法

    ORB-SLAM2源码解析(一):ORB算法 目录 一.前言 二.ORB算法原理 三.ORB-SLAM2中ORB算法代码注释分析 四.与opencv中ORB对比测试 五.总结 六.参考 一.前言 目前 ...

  9. ORB-SLAM / ORB-SLAM2原理解读+代码解析(汇总了资料,方便大家学习)

    注释:本文非原创,初学搜集了很多资料附上链接,方便初学者学习,避免盲目搜索浪费时间. 目录 官方代码链接 代码框架思维导图 参考解读 参考链接- -一步步带你看懂orbslam2源码 ORB-SLAM ...

  10. orbslam2学习记录

    orbslam2学习记录 1.orb slam2的总体框架 2.orb slam2如何完成初始化 3. 如何从单幅图提取特征点 什么是特征点 ORB特征 关键点 图像金字塔 灰度质心法 非极大抑制 描 ...

最新文章

  1. 机器学习三要素之数据、模型、算法
  2. 皮一皮:这这这..太真实了...
  3. 5下载的demo在哪_归类专业能力水平评价练习盘!快来下载呀
  4. java hasfocus_Java KeyEvent.hasNoModifiers方法代碼示例
  5. 机器学习入门KNN近邻算法(一)
  6. spark on yarn的未解之谜
  7. Simulink之交流调压电路
  8. 无法加载一个或多个请求的类型。有关更多信息,请检索 LoaderExceptions 属性
  9. bpe编码_缓冲池扩展(BPE)–如何工作?
  10. 二下语文书电子课本_沪教版牛津英语小学五年级上册高清电子课本教材书(三年级起点)...
  11. GreenPlum数据库介绍
  12. 【冷门快捷键】设置VSCode终端大小最小化快捷键Alt+PageUp/PageDown、编辑代码窗口切换大小快捷键Alt+数字键盘“+”、Alt+数字键盘“-”、Alt+数字键盘“0”
  13. java.sql.SQLException:
  14. 傲腾服务器硬盘,Intel P5800X傲腾硬盘实测:不愧是世界最强
  15. Pr 入门教程如何倾斜移位效果?
  16. 最优化方法 19:近似梯度下降
  17. ToDoList本地存储原生js版/jQuery版
  18. XML - 可扩展标记语言 (Extensible Markup Language)
  19. 扬帆际海:如何成为一个合格的跨境电商运营?
  20. the info.plist in the package must contain the CFBundleShortVersionString key.

热门文章

  1. linux中传输文件方法,Linux快速传输文件几种方法
  2. vue项目多页面入口配置
  3. docker 常用命令(1)
  4. 用redis解决超卖
  5. ipad UISplitViewController 导航视图控制器标题设置
  6. 973分成功通过CCNA。。
  7. mellanox 网卡驱动_收购Mellanox之后 NVIDIA发布全球首款25G安全智能网卡
  8. python意外缩进引发逻辑错误_如何编写 Python 程序
  9. 内存位置访问无效 midas.dll_内存虚拟化介绍
  10. linux 多线程实现倒计时,Linux用脚本实现“时分秒“倒计时功能