代码终于读的还算差不多了,现在要跑通ORB-SLAM2。之前想在Windows下跑通结果失败了...果然像高博说的搞SLAM的话还是老老实实用ubuntu吧,不过在Windows下建立好工程后倒是帮助我用VS2013方便地阅读了代码,也算很有收获。Ubuntu下跑通大概花了我一个晚上,作为阶段性胜利的纪念特记录于此。
参考了很多大佬们的文章,将主要的博文等链接罗列如下:
ORB_SLAM2编译与测试(一) - woft王 - 博客园
https://blog.csdn.net/youngpan1101/article/details/58027049
ORB-SLAM2:
raulmur/ORB_SLAM2github.com可能有些朋友网络不好,除了KITTI这种过大的文件,我会尽量提供百度云的链接。
KITTI数据集下载链接,用迅雷下载比较好(20个g左右):
https://s3.eu-central-1.amazonaws.com/avg-kitti/data_odometry_gray.zip
1.安装各种依赖
- Eigen
我第一次先安装Pangolin结果出错了,后来发现原因是没有在安装Pangolin之前先安装Eigen。保险起见建议先安装Eigen。
sudo apt-get install libeigen3-dev
- Pangolin
先安装依赖
#安装Glew
sudo apt-get install cmake
然后下载源码编译安装
cd Pangolin
mkdir build
我参考高博《视觉slam十四讲》提供的代码文件,先从github上下载Pangolin代码压缩包,解压后在其文件夹下打开终端,编译安装。(下载地址:stevenlovegrove/Pangolin)
Pangolin下载链接:https://pan.baidu.com/s/15kdtdkM4evxteorH54X8vw
提取码:0z75
解压代码的压缩包后:
cd
- OpenCV
接下来安装的是让我没想到的最头疼的OpenCV。因为ORB-SLAM2作者说他们是用OpenCV 2.4.11 和 OpenCV 3.2测试的,然后我比较倾向于选择新的版本,因此我配置了OpenCV3.2版本。据说3.0之后把一些开发中的代码分到了contrib之中,所以要下载两个源码的压缩包:opencv-3.2.0.zip/opencv_contrib-3.2.0.zip。
以上两文件下载
链接:https://pan.baidu.com/s/1kvokG_FzAxXsITVHCqpZjQ
提取码:llql
链接:https://pan.baidu.com/s/1FY92p4RG1f_ElplU7TD8XQ
提取码:gzrs
依赖的安装(不放心的话可以多搜一些文章把各种所谓的依赖都安装一下)
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
解压前面说的opencv-3.2.0.zip / opencv_contrib-3.2.0.zip两个文件。我把它们放在了Ubuntu主文件夹之下,即两个路径分别为:~/opencv-3.2.0 和 ~/opencv_contrib-3.2.0。然后进入 ~/opencv-3.2.0:
cd opencv-3.2.0
sudo mkdir build
注意最后cmake的一行,<path to opencv_contrib-3.2.0/modules/> 在我的路径下就是 ~/opencv_contrib-3.2.0/modules
到这时,稍等一会儿,不出意外的话会在终端中看到它在试图下载东西,过一会看似结束了,仔细一看会发现其实有错误,cmake没有成功。这时需要我们下载好两个文件放到对应文件夹下,若果文件夹中已有我们准备的文件那么就替换它。
文件1:ippicv_linux_20151201.tgz
路径1:opencv-3.2.0/3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e/
文件2:protobuf-cpp-3.1.0.tar.gz
路径2:opencv_contrib-3.2.0/modules/dnn/.download/bd5e3eed635a8d32e2b99658633815ef/v3.1.0/
以上两文件下载(由于百度云的错误和谐导致我不得不压缩起来)
链接: https://pan.baidu.com/s/1VorzKC685uwZKsjml3Tu3w
提取码: 2k1k
替换好之后,我们重新执行上面的最后一条指令进行cmake。最后编译安装:
#同时启用四个processing unit编译,不保险的话可以用 nproc 查看数量,不够四个就直接sudo make
sudo make -j4
sudo make install
编译安装完成后可以查看一下opencv版本:
pkg-config --modversion opencv
- DBoW2 和 g2o
这两个库ORB-SLAM2中作者是用的是他们修改过的,已经放在了其源码的3rdparty文件夹下,之后利用 build.sh 编译时会自动安装好,所以不需要我们自己配置。
2.ORB-SLAM2编译运行
根据大佬们的提醒,应该下载好源码后进入文件夹,把其中 build.sh 的最后一行 make -j 改为 make,否则容易死机。我没有尝试会不会死机,感觉还是保险一点比较好..
cd ORB_SLAM2
chmod +x build.sh
./build.sh
ORB-SLAM2代码下载链接:https://pan.baidu.com/s/18AyhtdGpXGyqSklVSDWfvw
提取码:zg7y
或者可以像我一样在作者的项目主页上直接下载代码压缩包,解压后在终端中进入文件夹,然后:
cd ORB_SLAM2
chmod +x build.sh
./build.sh
编译成功后生成的可执行程序mono_tum, mono_kitti, rgbd_tum, stereo_kitti, mono_euroc and stereo_euroc,位于Examples目录下。之后的运行大家应该去参考ORB-SLAM2的主页,上面说的很清楚。以下我以自己测试的立体视觉(双目)+KITTI数据集为例说明使用方法。
通过作者在项目主页上提供的链接可以下载好KITTI数据集并解压,得到一个 dataset 文件夹。我把它直接放在桌面上,因此路径为:~/Desktop/dataset
首先我们应当在ORB-SLAM2项目的主文件夹下,以我的路径为例:
~/Desktop/ORB_SLAM2-master
然后假如我要跑 KITTI 的 00 文件夹下的数据集,就输入:
./Examples/Stereo/stereo_kitti Vocabulary/ORBvoc.txt Examples/Stereo/KITTI00-02.yaml ~/Desktop/dataset/sequences/00
这条指令第一个参数:./Examples/Stereo/stereo_kitti。表示运行的程序是立体视觉+KITTI数据集的情景。
第二个参数:Vocabulary/ORBvoc.txt。这是词袋的相关文件所在路径。
第三个参数:Examples/Stereo/KITTI00-02.yaml。这是配置文件所在路径,KITTI数据集下,00~02对应KITTI00-02.yaml,03对应KITTI03.yaml,04~12对应KITTI04-12.yaml。
最后一个参数:~/Desktop/dataset/sequences/00。这是我电脑上KITTI的00序列数据集所在路径,注意要和第三个参数相对应。
经过我的测试,KITTI的00~12一共13个子数据集都可以跑。其他的传感器+数据集大家可以参考作者的项目主页说明进行测试。
最后放上我的运行截图~