From README.md
ORB-SLAM2
作者 Raul Mur-Artal, Juan D. Tardos, J. M. M. Montiel and Dorian Galvez-Lopez (DBoW2)
2017/1/13支持OpenCV 3和Engen3.3运行库
2016/22/12添加虚拟现实例程(详见第七部分)
ORB-SLAM2适用于单目、立体、RGB-D照相机,是一种实时的SLAM库,用来计算相机的轨迹和稀疏的三维重建地图(在立体或RGB-D相机中具有真实的尺度)。它可以进行回环检测并实时定位相机。我们基于KITTIdataset提供了单目或立体相机SLAM系统运行案例、基于TUM dataset提供了RGB-D或单目SLAM系统运行案例以及基于EuRoC dataset提供了立体相机或单目SLAM系统运行案例。我们也提供了一个ROS节点来执行单目、立体、RGB-D进程流。该库可在飞ROS环境下编译运行。ORB-SLAM2提供了可视化程序实现在SLAM模式和定位模式的切换,详见本文档的第九部分。
相关发表:
[Monocular] Raúl Mur-Artal, J. M. M.Montiel and Juan D. Tardós. ORB-SLAM: AVersatile and Accurate Monocular SLAM System. IEEE Transactions on Robotics, vol. 31,no. 5, pp. 1147-1163, 2015. (2015 IEEETransactions on Robotics Best Paper Award). PDF.
[Stereo and RGB-D] Raúl Mur-Artal andJuan D. Tardós. ORB-SLAM2: an Open-Source SLAM Systemfor Monocular, Stereo and RGB-D Cameras. IEEE Transactions on Robotics, vol. 33,no. 5, pp. 1255-1262, 2017. PDF.
[DBoW2Place Recognizer] Dorian Gálvez-López and Juan D. Tardós. Bags of Binary Words for Fast Place Recognition inImage Sequences. IEEE Transactionson Robotics, vol. 28, no. 5, pp. 1188-1197, 2012. PDF
1.许可说明
ORB-SLAM2获得GPLv3license许可。所有代码库的依赖(包括相关的许可证)详见Dependencies.md。
For a closed-source version of ORB-SLAM2 for commercialpurposes, please contact the authors: orbslam (at) unizar (dot) es.
If you useORB-SLAM2 (Monocular) in an academic work, please cite:
@article{murTRO2015,
title={{ORB-SLAM}: a Versatile and AccurateMonocular {SLAM} System},
author={Mur-Artal, Ra\'ul, Montiel, J. M. M.and Tard\'os, Juan D.},
journal={IEEE Transactions on Robotics},
volume={31},
number={5},
pages={1147--1163},
doi = {10.1109/TRO.2015.2463671},
year={2015}
}
if you useORB-SLAM2 (Stereo or RGB-D) in an academic work, please cite:
@article{murORB2,
title={{ORB-SLAM2}: an Open-Source {SLAM}System for Monocular, Stereo and {RGB-D} Cameras},
author={Mur-Artal, Ra\'ul and Tard\'os, JuanD.},
journal={IEEE Transactions on Robotics},
volume={33},
number={5},
pages={1255--1262},
doi = {10.1109/TRO.2017.2705103},
year={2017}
}
2.先决条件
我们在Ubuntu12.04,14.04,和16.04中测试过该库,在其他平台中理应也可以编译通过。强劲的计算机(如i7)可以保证实时性能,提供更稳定更精确的结果。
C++11or C++0x编译器
我们使用C++11最新的线程和计时功能。
Pangolin
我们使用Pangolin作为可视化工具和用户接口。下载和安装说明可参考:https://github.com/stevenlovegrove/Pangolin.
OpenCV
我们使用OpenCV处理图像和特征。下载和安装说明可参考:http://opencv.org. 至少需要2.4.3.。测试了 OpenCV 2.4.11 和 OpenCV 3.2。
Eigen3
由于g2o的需要(见底部),Eigen3下载和安装说明可参考:http://eigen.tuxfamily.org.。至少需要3.1.0。
DBoW2and g2o (Included in Thirdparty folder)
我们使用改进的DBoW2库来实现场景识别,使用g2o库来实现非线性优化。这些改进库(BSD许可协议)均包含在Thirdparty folder中。
ROS (optional)
我们在实时的单目、立体或RGB-B相机的输入下提供一些基于ROS平台的范例。运行这些例程是选择性的。若你希望使用ROS,a version Hydro or newer is needed。
3.建立ORB-SLAM2库及其例程
复制项目
git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2
我们提供脚本build.sh来建立Thirdparty libraries和ORB-SLAM2。请确保你已经安装了所有需要的依赖项(详见第二部分)。执行:
cd ORB_SLAM2
chmod +x build.sh
./build.sh
这会将基于lib folder创建libORB_SLAM2.so,以及Examples folder创建可执行部分mono_tum, mono_kitti,rgbd_tum,stereo_kitti,mono_eurocand stereo_euroc。
4.单目例程
TUM数据集
1.从http://vision.in.tum.de/data/datasets/rgbd-dataset/download下载数据目,并将其解压。
2.执行以下命令。Change TUMX.yaml
to TUM1.yaml,TUM2.yaml or TUM3.yaml for freiburg1, freiburg2and freiburg3 sequences respectively. Change PATH_TO_SEQUENCE_FOLDER
to the uncompressed sequence folder.
./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUMX.yaml PATH_TO_SEQUENCE_FOLDER
KITTI数据集
1.从http://www.cvlibs.net/datasets/kitti/eval_odometry.php下载数据集(灰度图)。
2.执行以下命令。Change KITTIX.yaml
by KITTI00-02.yaml, KITTI03.yaml or KITTI04-12.yaml for sequence0 to 2, 3, and 4 to 12 respectively. Change PATH_TO_DATASET_FOLDER
to the uncompressed dataset folder. Change SEQUENCE_NUMBER
to 00, 01, 02,.., 11.
./Examples/Monocular/mono_kitti Vocabulary/ORBvoc.txt Examples/Monocular/KITTIX.yaml PATH_TO_DATASET_FOLDER/dataset/sequences/SEQUENCE_NUMBER
EuRoC数据集
1.从http://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets下载数据目(ASL格式)。
2.用V1和V2数据目执行下面的第一条命令,或是用MH数据目执行第二条指令。Change TUMX.yaml
to TUM1.yaml,TUM2.yaml or TUM3.yaml for freiburg1, freiburg2and freiburg3 sequences respectively. Change PATH_TO_SEQUENCE_FOLDER andSEQUENCE according to the sequence you want to run.
./Examples/Monocular/mono_euroc Vocabulary/ORBvoc.txt Examples/Monocular/EuRoC.yaml PATH_TO_SEQUENCE_FOLDER/mav0/cam0/data Examples/Monocular/EuRoC_TimeStamps/SEQUENCE.txt
./Examples/Monocular/mono_euroc Vocabulary/ORBvoc.txt Examples/Monocular/EuRoC.yaml PATH_TO_SEQUENCE/cam0/data Examples/Monocular/EuRoC_TimeStamps/SEQUENCE.txt