1. ORB-SLAM2 简介
直接引用作者给出的介绍
ORB-SLAM2 is a real-time SLAM library for Monocular, Stereo and RGB-D cameras that computes the camera trajectory and a sparse 3D reconstruction (in the stereo and RGB-D case with true scale). It is able to detect loops and relocalize the camera in real time. We provide examples to run the SLAM system in the KITTI dataset as stereo or monocular, in the TUM dataset as RGB-D or monocular, and in the EuRoC dataset as stereo or monocular. We also provide a ROS node to process live monocular, stereo or RGB-D streams. The library can be compiled without ROS. ORB-SLAM2 provides a GUI to change between a SLAM Mode and Localization Mode.
ORB-SLAM2是用于单目,双目和RGB-D相机的实时SLAM库,可用于计算相机轨迹和稀疏3D重建(在具有真实比例的双目和RGB-D情况下)。 它能够实时回环检测并重新定位摄像机。 我们提供了一些示例,以在KITTI数据集以双目或单目,在TUM数据集以RGB-D或单目,在EuRoC数据集以双目或单目运行SLAM系统。 我们还提供了一个ROS节点来处理实时单目,双目或RGB-D流。 该库可以在没有ROS的情况下进行编译。 ORB-SLAM2提供了一个可在SLAM模式和仅定位模式之间切换的GUI。
源码地址
github: https://github.com/raulmur/ORB_SLAM2
github下载过慢可以用gitee: https://gitee.com/hfy4396/ORB_SLAM2
源码文档给出了详细的安装过程以及使用公共数据集测试的方法,可以依照原文档进行安装
硬件以及操作系统
官方文档中介绍在Ubuntu 12.04,14.04,16.04,可以正常运行。
我用的硬件是树莓派4B,操作系统就是树莓派官方的Raspi OS,与Ubuntu一样都是属于Debian系列的,既然按照官方文档安装,在树莓派上都能成功运行,PC上应该更没问题。
2. 安装依赖
2.1 gcc g++ cmake
原文档介绍使用了c++11标准,目前的gcc/g++都支持,如果没有该编译器的话可以使用
sudo apt-get install gcc g++
命令安装
另外ORB-SLAM2源码的编译需要使用cmake,使用
sudo apt-get install cmake
命令安装
2.2 Pangolin
Pangolin主要用于实现ORB-SLAM的GUI, Pangolin官方给出了详细的安装教程,源码地址https://github.com/stevenlovegrove/Pangolin
https://gitee.com/hfy4396/Pangolin
下载Pangolin的依赖
sudo apt install libgl1-mesa-dev
sudo apt install libglew-dev
编译安装Pangolin
github下载过慢可更换为上述Pangolin的gitee地址
git clone https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin
mkdir build
cd build
cmake ..
cmake --build .
2.3 Opencv
ORB-SLAM要求opencv的版本至少是 2.4.3. 并且测试了OpenCV 2.4.11和OpenCV 3.2
我安装的是openCV3.1,安装过程可参考视觉slam十四讲 ubuntu从源码编译opencv3.1.0教程及排雷
2.4 Eigen3
sudo apt install libeigen3-dev
2.5 DBoW2 g2o
这两个库是已经在ORB-SLAM2源码中包含了,在编译ORB-SLAM2的时候会先编译DBoW2与g2o,所以不用提前安装。
3. 编译源码
3.1 克隆仓库
git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2
或者
git clone https://gitee.com/hfy4396/ORB_SLAM2.git ORB_SLAM2
3.2 编译源码
cd ORB_SLAM2
chmod +x build.sh
./build.sh
4. 编译错误以及解决方式
4.1 error: usleep is not declared this scope
在ORB-SLAM2源码目录中include/System.h文件中添加
#include <unistd.h>
4.2 error: static assertion failed: std::map must have the same value_type as its allocator
把ORB-SLAM2源码目录中include/LoopClosing.h文件中的
typedef map<KeyFrame*,g2o::Sim3,std::less<KeyFrame*>,
Eigen::aligned_allocator<std::pair<const KeyFrame*, g2o::Sim3> > > KeyFrameAndPose;
修改为
typedef map<KeyFrame*,g2o::Sim3,std::less<KeyFrame*>,
Eigen::aligned_allocator<std::pair<KeyFrame *const, g2o::Sim3> > > KeyFrameAndPose;
5. 程序运行测试
编译成功后使用TUM公共数据集中的fr1/desk视频序列测试
5.1 公共数据集下载
在https://vision.in.tum.de/data/datasets/rgbd-dataset/download下载fr1/desk
如果下载速度太慢可以在百度云下载
链接:https://pan.baidu.com/s/1Y_EGWrlEJDshD-YNeDwp5Q
提取码:afzs
在下载完成后需要使用tar命令解压该文件
tar -xzvf rgbd_dataset_freiburg1_desk.tgz
5.2 运行实例
进入ORB-SLAM2源码目录中,官方给出的示例命令为:
./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUMX.yaml PATH_TO_SEQUENCE_FOLDER
其中
TUMX.yaml "X"代表下载的fr数据编号,本文使用的是fr1/desk,所以TUMX.yaml应该调整为 TUM1.yaml
PATH_TO_SEQUENCE_FOLDER 是刚跟解压rgbd_dataset_freiburg1_desk.tgz所生成的文件夹位置,我解压在了ORB-SLAM2源码目录中,所以PATH_TO_SEQUENCE_FOLDER应该调整为 ./rgbd_dataset_freiburg1_desk
最终的命令为
./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml ./rgbd_dataset_freiburg1_desk
5.3 效果展示
从右上角cpu监视器中可以看到cpu使用率非常高,幸亏树莓派4B板子的性能还可以,勉强能运行。
参考链接:
[1] ORB-SLAM2官方文档
[2] ORB-SLAM2 初体验 —— 配置安装
[3] ORB-SLAM2编译错误