ORB-SLAM介绍以及ORB-SLAM2的安装与测试

1. 介绍

ORB-SLAM 是西班牙 Zaragoza 大学的 Raúl Mur-Arta 编写的视觉 SLAM 系统。 它是一个完整的 SLAM 系统,包括视觉里程计、跟踪、回环检测,是一种完全基于稀疏特征点的单目 SLAM 系统,同时还有单目、双目、RGBD 相机的接口。其核心是使用 ORB (Orinted FAST and BRIEF) 作为整个视觉 SLAM 中的核心特征

ORB-SLAM主要用于单目SLAM;

ORB-SLAM2版本支持单目、双目和RGBD三种接口;

ORB-SLAM3版本添加了IMU耦合,并且支持鱼眼相机。

  • ORB-SLAM相关资料链接
  1. 官网:http://webdiis.unizar.es/~raulmur/orbslam/

  2. 论文2015年: ORB-SLAM: a Versatile and Accurate Monocular SLAM System

  3. 论文2017年:ORB-SLAM2: an Open-Source SLAM System for Monocular, Stereo and RGB-D Cameras

  4. 论文2020年:ORB-SLAM3: An Accurate Open-Source Library for Visual, Visual-Inertial and Multi-Map SLAM

  5. ORB-SLAM的github代码

  6. ORB-SLAM2的github代码

  7. ORB-SLAM3的github代码

  • 特点

ORB-SLAM 基本延续了 PTAM 的算法框架,但对框架中的大部分组件都做了改进, 归纳起来主要有 4 点:

  1. ORB-SLAM 选用了 ORB 特征, 基于 ORB 描述量的特征匹配和重定位, 都比 PTAM 具有更好的视角不变性。此外, 新增三维点的特征匹配效率更高, 因此能更及时地扩展场景。扩展场景及时与否决定了后续帧是否能稳定跟踪。
  2. ORBSLAM 加入了循环回路的检测和闭合机制,以消除误差累积。系统采用与重定位相同的方法来检测回路(匹配回路两侧关键帧上的公共点), 通过方位图 (Pose Graph) 优化来闭合回路。
  3. PTAM 需要用户指定 2 帧来初始化系统, 2 帧间既要有足够的公共点, 又要有足够的平移量. 平移运动为这些公共点提供视差 (Parallax) , 只有足够的视差才能三角化出精确的三维位置。ORB-SLAM 通过检测视差来自动选择初始化的 2 帧
  4. PTAM 扩展场景时也要求新加入的关键帧提供足够的视差, 导致场景往往难以扩展. ORB-SLAM 采用一种更鲁棒的关键帧和三维点的选择机制——先用宽松的判断条件尽可能及时地加入新的关键帧和三维点, 以保证后续帧的鲁棒跟踪; 再用严格的判断条件删除冗余的关键帧和不稳定的三维点,以保证 BA 的效率和精度。

回环检测使用词袋模型,其字典是一个大型的ORB字典。支持单目、双目、RGBD多种传感器输入,编译时ROS可选,使得其应用十分轻便。代价是为了支持各种接 口,代码逻辑稍为复杂。

它主要有三个线程组成:跟踪、Local Mapping(又称小图)、Loop Closing(又称大图)。下图是ORB-SLAM2的流程。

ORB-SLAM介绍以及ORB-SLAM2的安装与测试_第1张图片

2. 安装

2.1 安装opencv

Required at leat 2.4.3. Tested with OpenCV 2.4.11 and OpenCV 3.2.

下载地址:https://opencv.org/releases/

命令如下:

cd your_opencv
mkdir build
cd build
sudo cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
sudo make -j8
sudo make install
  • 配置环境

打开文件,并在文末加上一行/usr/loacal/lib

sudo gedit /etc/ld.so.conf

运行:

sudo ldconfig
  • 修改bash.bashrc文件
sudo gedit /etc/bash.bashrc 

在文末添加:

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH

运行

source /etc/bash.bashrc

检查:

pkg-config opencv --modversion

2.2 安装Pangolin

Pangolin是对OpenGL进行封装的轻量级的OpenGL输入/输出和视频显示的库。可以用于3D视觉和3D导航的视觉图,可以输入各种类型的视频、并且可以保留视频和输入数据用于debug。

  • 安装依赖项
sudo apt-get install libglew-dev libpython2.7-dev
  • 从Github将项目下载到本地
git clone https://github.com/stevenlovegrove/Pangolin.git
  • 编译安装
cd Pangolin
mkdir build
cd build
cmake ..
make –j
sudo make install

1.3 安装Eigen3

sudo apt-get install libeigen3-dev

安装完成之后,默认安装路径:/usr/include/eigen3/Eigen

也可以在官网下载,并使用下列命令进行编译:

mkdir build
cd build
cmake …
make
sudo make install

2.4 安装DBoW2和g2o

DBoW2是DBow库的改进版本,DBow库是一个开源的C++库,用于索引图像并将其转换为单词表示形式。

g2o是一个开源的C ++框架,用于优化基于图的非线性误差函数。

这两个库在ORB-SLAM2项目的第三方文件夹中,在此不单独编译,后续统一编译。

2.5 安装ORB-SLAM2

  • 克隆仓库
git clone https://github.com/raulmur/ORB_SLAM2.git
  • 编译ORB-SLAM2,第三方库中的DBoW2和g2o,并解压ORB词典
cd ORB_SLAM2
chmod +x build.sh
./build.sh

运行./build.sh的时候可能会报类似于usleep的错误,只需要在相应的地方添加#include即可。

3. 单目运行例子

有TUM、KITTI、EuRoC三种数据集,本实验使用TUM数据集,从http://vision.in.tum.de/data/datasets/rgbd-dataset/download下载序列并解压缩。

./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUMX.yaml PATH_TO_SEQUENCE_FOLDER

其中PATH_TO_SEQUENCE_FOLDER为数据集的存储路径,并将TUMX.yaml与下载的数据集对应,比如TUM1.yaml,TUM2.yaml 和TUM3.yaml 分别对应 freiburg1, freiburg2 和 freiburg3。
ORB-SLAM介绍以及ORB-SLAM2的安装与测试_第2张图片

readme中还有其他数据集的运行方式,就不一一介绍了。


链接:

ORB-SLAM论文笔记:https://blog.csdn.net/qq_41839222/article/details/87919672

ORB-SLAM2论文笔记:https://blog.csdn.net/qq_41839222/article/details/87945367?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-0&spm=1001.2101.3001.4242

ORB-SLAM3论文阅读:https://vincentqin.tech/posts/orb-slam3/

ORB-SLAM2 PPT:http://cseweb.ucsd.edu/classes/sp17/cse252C-a/CSE252C_20170503.pdf

你可能感兴趣的:(SLAM,ORB-SLAM,理解介绍,安装测试)