[SLAM] 03. ORB-SLAM2

时间:2021-06-04 15:45:32

一年后再读SLAM~ 行业有了不少工程实践方面的突破

一、链接:https://www.zhihu.com/question/53571648/answer/176732257

目前来说,受到业界肯定的比较成熟的主要是:

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_NOROSRomaTeng贡献了一个具有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 有很多種分類方法。按照傳感器的不同,可以分為

  1. 基於激光雷達的2D/3D SLAM、【Cartographer,掃地機器人】
  2. 基於深度相機的RGBD SLAM、
  3. 基於視覺傳感器的visual SLAM(以下簡稱vSLAM)、
  4. 基於視覺傳感器和慣性單元的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入门+典型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真值,然后对新输入的定位图片进行回归。

以上方案目前来看,只解决了特定场景的定位问题,由于数据是在云端的,所以一定需要在线使用,因此定位的频率不会太高。

链接:orb-slam在众多SLAM方法中处于怎样的地位?

orbslam 是14-15年被一个西班牙博士做的,目前还在做,最近又发了新文章:Probabilistic Semi-Dense Mapping from Highly Accurate Feature-Based Monocular SLAM。
orbslam可以看做是PTAM的一个延伸。ptam想必做visual slam 的都知道,它是第一个将tracking和mapping分成两个线程实现的实时slam系统,07年出来的时候很惊艳。几乎成立后来feature-based slam方法的标准。
orbslam 算是这个思路的延伸,于ptam相比它又加了一个loopclosing的线程。
这个系统基于ptam,个人感觉效果也更好一些(毕竟ptam相对较老),整合了covisible graph,基于bagofwords 做relocalization等技术。
处于什么地位很难讲,虽然创新点不是很多,但是工程上,它是目前最好的。几篇文章都发在机器人或者控制的顶会上了。

链接:SLAM在VR/AR领域重要吗?

[SLAM] 03. ORB-SLAM2

代码资源:

FangGet/ORB_SLAM2_Android【out of data】

sunzuolei/orb_slam2_android【不错】

XwK-P/ORB_AR

[SLAM] 03. ORB-SLAM2

ORB_SLAM2在Android上的移植过程