[SLAM] 03. ORB-SLAM2
一年后再读SLAM~ 行业有了不少工程实践方面的突破
目前来说,受到业界肯定的比较成熟的主要是:
1、西班牙Universidad de Zaragoza的ORB_SLAM2:raulmur/ORB_SLAM2
2、港科大的VIO:HKUST-Aerial-Robotics/VINS-Mobile
3、Google的SLAM:googlecartographer/cartographer
其中,
第一个mono、stereo和RGBD都支持,较多应用于AR应用领域,可以说是一套state-of-art的indoor camera SLAM系统,原版本暂不支持IMU,stereo_IMU可以参考:henrywen2011/orb_slam_imu;
第二个支持mono+IMU,出名于无人机地图绘制;
第三个支持2Dlidar(3Dlidar)+IMU,在无人驾驶中的地图构建领域著称。
=======================================分割线======================
ORB_SLAM2 支持IMU的版本虽没有放出来,效果感觉还是不错:https://www.youtube.com/watch?v=rdR5OR8egGI
1、基于ORB_SLAM2,Wang Jing加入了IMU,可参看:OpenSLAM/LearnViORB_NOROS
2、基于LearnViORB_NOROS,RomaTeng贡献了一个具有IMU+monoSLAM:ORB-VINS_RK4
3、另外一个支持IMU+monoSLAM的版本为OKVIS:ethz-asl/okvis
可见ORB_SLAM2的地位。
Camera trajectory is computed using ORB-SLAM2. Virtual cubes are inserted by the user on detected planes based on reconstructed points by the SLAM system. We are using just a monocular camera. Find the code of ORB-SLAM2 and this AR demo here: https://github.com/raulmur/ORB_SLAM2 https://github.com/raulmur/ORB_SLAM2
二、SLAM算法解析:抓住視覺SLAM難點,了解技術發展大趨勢
SLAM 技術涵蓋的範圍非常廣,按照不同的傳感器、應用場景、核心算法,SLAM 有很多種分類方法。按照傳感器的不同,可以分為
- 基於激光雷達的2D/3D SLAM、【Cartographer,掃地機器人】
- 基於深度相機的RGBD SLAM、
- 基於視覺傳感器的visual SLAM(以下簡稱vSLAM)、
- 基於視覺傳感器和慣性單元的visual inertial odometry(以下簡稱VIO )。
視覺傳感器包括單目相機、雙目相機、魚眼相機等。由於視覺傳感器價格便宜,在室內室外均可以使用,因此 vSLAM 是研究的一大熱點。早期的 vSLAM 如 monoSLAM 更多的是延續機器人領域的濾波方法。
現在使用更多的是計算機視覺領域的優化方法,具體來說,是運動恢復結構(structure-from-motion)中的光束法平差(bundle adjustment)。
在 vSLAM 中,按照視覺特徵的提取方式,又可以分為特徵法、直接法。當前 vSLAM 的代表算法有 ORB-SLAM、SVO、DSO 等。
視覺傳感器對於無紋理的區域是沒有辦法工作的。慣性測量單元(IMU)通過內置的陀螺儀和加速度計可以測量角速度和加速度,進而推算相機的姿態,不過推算的姿態存在累計誤差。視覺傳感器和 IMU 存在很大的互補性,因此將二者測量信息進行融合的 VIO 也是一個研究熱點。
按照信息融合方式的不同,VIO 又可以分為基於濾波的方法、基於優化的方法。
VIO 的代表算法有 EKF、MSCKF、preintegration、OKVIS 等。 Google 的 Tango 平板就實現了效果不錯 VIO。
總的來說,相比於基於激光雷達和基於深度相機的 SLAM,基於視覺傳感器的 vSLAM 和 VIO 還不夠成熟,操作比較難,通常需要融合其他傳感器或者在一些受控的環境中使用。
与深度学习
自從深度學習在諸多領域所向披靡,不少研究者試圖用深度學習中 end-to-end 的思想重構 SLAM 的流程。目前有些工作試圖把 SLAM 的某些環節用深度學習代替。
不過這些方法沒有體現出壓倒性優勢,傳統的幾何方法依然是主流。
在深度學習的熱潮之下,SLAM 涉及的各個環節應該會逐漸吸收深度學習的成果,精度和魯棒性也會因此提升。也許將來 SLAM 的某些環節會整體被深度學習取代,形成一個新的框架。
SLAM 原本只關注環境的幾何信息,未來跟語義信息應該有更多的結合。借助於深度學習技術,當前的物體檢測、語義分割的技術發展很快,可以從圖像中可以獲得豐富的語義信息。這些語義信息是可以輔助推斷幾何信息的,例如已知物體的尺寸就是一個重要的幾何線索。
关于SLAM入门,在这里把几个相关的资料list出来:
1. slamcn主页:SlamCN
2. 大神Andrew Davison的主页:Andrew Davison: Research
3. openslam:http://openslam.org/
4. 泡泡机器人,微信公众号
5. 《视觉SLAM十四讲》,高翔,总结比较全面,同时有对应的code可以参考
6. slam基础知识:
室内定位(基于视觉)
基于视觉的室内定位,在AR/VR导航,以及GPS/WIFI基本上无法工作或者满足定位精度要求的场景很有用。
不知道大家有没有使用过微信的街景定位,通过拍摄一张室外的照片儿进行定位。可以简单的理解就是GPS加上图像匹配的方案进行的。在室内场景,这种方案依旧适用,但有一个问题,就是室内场景已经获取到的照片的位置真值的获取。最近看到一个解决方案是这样的:
a1. 采集待定位场景的连续视频数据(连续图片帧);
a2. 使用SFM的方案,进行室内的3d建模;【SLAM 是 SfM(运动恢复结构:Structure from Motion)的一种实时版本】
a3. 根据获得的3d模型,给图片帧赋予真值;
a4. 通过图像search 以及匹配的方法进行定位 / 或者是训练深度学习模型,input是图片,output是图片的6DOF真值,然后对新输入的定位图片进行回归。
以上方案目前来看,只解决了特定场景的定位问题,由于数据是在云端的,所以一定需要在线使用,因此定位的频率不会太高。
orbslam可以看做是PTAM的一个延伸。ptam想必做visual slam 的都知道,它是第一个将tracking和mapping分成两个线程实现的实时slam系统,07年出来的时候很惊艳。几乎成立后来feature-based slam方法的标准。
处于什么地位很难讲,虽然创新点不是很多,但是工程上,它是目前最好的。几篇文章都发在机器人或者控制的顶会上了。

代码资源:
FangGet/ORB_SLAM2_Android【out of data】
sunzuolei/orb_slam2_android【不错】

[SLAM] 03. ORB-SLAM2的更多相关文章
- 关于ORB SLAM2资源整理(持续更新)
ORB SLAM2源码讲解(吴博) https://www.youtube.com/watch?v=2GVE7FTW7AU 泡泡机器人视频整理: http://space.bilibili.com/3 ...
- orb slam2 双目摄像头
主要参考了http://blog.csdn.net/awww797877/article/details/51171099这篇文章,其中需要添加的是:export ROS_PACKAGE_PATH=$ ...
- ORB SLAM2在Ubuntu 16.04上的运行配置
http://www.mamicode.com/info-detail-1773781.html 安装依赖 安装OpenGL 1. 安装opengl Library$sudo apt-get inst ...
- ORB SLAM2 学习笔记
cd ~/Documents/demos/ORB_SLAM2 ./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUM1.y ...
- Ubuntu14.04 使用本地摄像头跑ORB SLAM2(暂未完成)
嗯 这个方法我暂时弄不出来,用了另外一个方法:SLAM14讲 第一次课 使用摄像头或视频运行 ORB-SLAM2 前面的准备: Ubuntu14.04安装 ROS 安装步骤和问题总结 Ubuntu14 ...
- orb slam2
- SLAM:(编译ORB)fatal error LNK1181: 无法打开输入文件“libboost_mpi-vc110-mt-1_57.lib”
对于使用MD版本编译的ORB_SLAM,会用到MPI版本的Boost,需要自己编译,比较麻烦. 因此使用MT版本进行生成,暂时无法完成. 工程配置 发现添加库文件使用了:从父级或项目默认继承,默认包含 ...
- 使用 evo 工具评测 VI ORB SLAM2 在 EuRoC 上的结果
http://www.liuxiao.org/2017/11/%E4%BD%BF%E7%94%A8-evo-%E5%B7%A5%E5%85%B7%E8%AF%84%E6%B5%8B-vi-orb-sl ...
- Ubuntu16.04+Ros+Usb_Cam ORB SLAM2
转载自:https://www.jianshu.com/p/dbf39b9e4617亲测可用 1.其中编译ORB_SLAM2的 ./build.sh 和 ./build_ros.sh之前需要修改文 ...
随机推荐
- eclipse更改workspace中出现The superclass "javax.servlet.http.HttpServlet" was not found on the Java----问题》》
第一步:那是因为在项目中没有告诉它应该在哪个tomcat中运行,右击项目名称----->build path-->configure path---->library------ ...
- WPF(C#)与MATLAB混合编程
WPF(C#)与MATLAB混合编程 WPF可以为开发者提供便捷地构建用户交互界面的解决方法,而matlab则在科学计算方面有着无与伦比的优势,因此在一些需要将科学算法转换为应用软件的项目中,需要应用 ...
- ADC分类及参数
ADC分类 直接转换模拟数字转换器(Direct-conversion ADC),或称Flash模拟数字转换器(Flash ADC) 循续渐近式模拟数字转换器(Successive approxima ...
- 配置sonar和jenkins进行代码审查
转自: http://www.cnblogs.com/gao241/p/3190701.html, 版权归原作者所有. 本文以CentOS操作系统为例介绍Sonar的安装配置,以及如何与Jenkin ...
- Meclipse alt+/ 没有提示
- [web前端] npm install -save 和 -save-dev 傻傻分不清
本文原文地址:https://www.limitcode.com/detail/59a15b1a69e95702e0780249.html 最近在写Node程序的时候,突然对 npm install ...
- Core Animation学习总结
文件夹: The Layer Beneath The Layer Tree(图层树) The Backing Image(寄宿层) Layer Geometry(图层几何学) Visual Effec ...
- html5调用手机陀螺仪实现方向辨识
获取移动设备的陀螺仪,需要知道陀螺仪包含什么. 我们可以让document监听deviceorientation 来获取相关的数据,里面包括3个值 alpha.beta和gamma. 这三个值分别代表 ...
- 微信小程序的同步操作
小程序里,大多数操作都是异步操作,一些重要的操作,如从网上获取重要变量值,必须要保证有值,后续操作才有意义.但异步操作,又必须把处理放到回调中,代码可读性降低,而且和大多数正常逻辑相背. 折腾了两天, ...
- 【jQuery Demo】图片瀑布流实现
瀑布流就是像瀑布一样的网站——丰富的网站内容,特别是绚美的图片会让你流连忘返.你在浏览网站的时候只需要轻轻滑动一下鼠标滚轮,一切的美妙的图片精彩便可呈现在你面前.瀑布流网站是新兴的一种网站模式——她的 ...