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相关资料链接
-
论文2015年: ORB-SLAM: a Versatile and Accurate Monocular SLAM System
-
论文2017年:ORB-SLAM2: an Open-Source SLAM System for Monocular, Stereo and RGB-D Cameras
-
论文2020年:ORB-SLAM3: An Accurate Open-Source Library for Visual, Visual-Inertial and Multi-Map SLAM
- 特点
ORB-SLAM 基本延续了 PTAM 的算法框架,但对框架中的大部分组件都做了改进, 归纳起来主要有 4 点:
- ORB-SLAM 选用了 ORB 特征, 基于 ORB 描述量的特征匹配和重定位, 都比 PTAM 具有更好的视角不变性。此外, 新增三维点的特征匹配效率更高, 因此能更及时地扩展场景。扩展场景及时与否决定了后续帧是否能稳定跟踪。
- ORBSLAM 加入了循环回路的检测和闭合机制,以消除误差累积。系统采用与重定位相同的方法来检测回路(匹配回路两侧关键帧上的公共点), 通过方位图 (Pose Graph) 优化来闭合回路。
- PTAM 需要用户指定 2 帧来初始化系统, 2 帧间既要有足够的公共点, 又要有足够的平移量. 平移运动为这些公共点提供视差 (Parallax) , 只有足够的视差才能三角化出精确的三维位置。ORB-SLAM 通过检测视差来自动选择初始化的 2 帧。
- PTAM 扩展场景时也要求新加入的关键帧提供足够的视差, 导致场景往往难以扩展. ORB-SLAM 采用一种更鲁棒的关键帧和三维点的选择机制——先用宽松的判断条件尽可能及时地加入新的关键帧和三维点, 以保证后续帧的鲁棒跟踪; 再用严格的判断条件删除冗余的关键帧和不稳定的三维点,以保证 BA 的效率和精度。
回环检测使用词袋模型,其字典是一个大型的ORB字典。支持单目、双目、RGBD多种传感器输入,编译时ROS可选,使得其应用十分轻便。代价是为了支持各种接 口,代码逻辑稍为复杂。
它主要有三个线程组成:跟踪、Local Mapping(又称小图)、Loop Closing(又称大图)。下图是ORB-SLAM2的流程。
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<unistd.h>即可。
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。
readme中还有其他数据集的运行方式,就不一一介绍了。
链接:
ORB-SLAM论文笔记:https://blog.csdn.net/qq_41839222/article/details/87919672
ORB-SLAM3论文阅读:https://vincentqin.tech/posts/orb-slam3/
ORB-SLAM2 PPT:http://cseweb.ucsd.edu/classes/sp17/cse252C-a/CSE252C_20170503.pdf