Ubuntu虚拟机下安装运行ORB-SLAM2

帅比萌擦擦* 提交于 2020-03-05 13:49:33

Ubuntu虚拟机下安装运行ORB-SLAM2

由于电脑的两个硬盘都存着数据,没法腾出来一个安装双系统,所以无奈只能在虚拟机上跑SLAM。这两天边看高博的《SLAM十四讲》,边熟悉Ubuntu,遇到了许多问题,但也磕磕绊绊配置运行上了ORB-SLAM2。在此记录下配置过程和出现的一些错误,仅供参考。

1.基本工具

在配置过程中需要cmake、gcc、g++和git工具,这是最基本的工具了,不安装后面要报错的。可以直接在桌面右击打开终端进行安装。git的安装需要一些额外的配置,比如生成SSH密钥,填写你的github账号等,网上有许多这里不再一一赘述。

 sudo apt-get install cmake

 sudo apt-get install git

 sudo apt-get install gcc g++

2.安装Pangolin

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

首先要安装一些Pangolin所需要的依赖库:

 sudo apt-get install libglew-dev

 sudo apt-get install libboost-dev libboost-thread-dev libboost-filesystem-dev
 
 sudo apt-get install libboost-all-dev
 
 sudo apt-get install libpython2.7-dev

然后可以进行Pangolin的安装:

git clone https://github.com/stevenlovegrove/Pangolin.git
mkdir build
cd build
cmake -DCPP11_NO_BOOSR=1 ..
make -j

在这时如果出现“make:*** 没有指定目标并且找不到makefile. 停止”这样的错误,要看一下具体的错误文字指向哪个文件。我当时是指向xkbcommon。
于是安装这个库:

sudo apt-get install libxkbcommon-x11-dev

3.安装OpenCV

OpenCV最低版本为2.4.3,我下载的是OpenCV 3.1.0。首先还是安装依赖库:

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的官网上下载好压缩包,解压,然后编译安装:

$ mkdir build
$ cd build
$ cmake -D CMAKE_BUILD_TYPE=Release –D CMAKE_INSTALL_PREFIX=/usr/local ..
$ make
$ sudo make install

编译过程会花费较长时间。第四行的命令,电脑CPU性能较低的建议用make命令;CPU性能较高的可以使用make -jx,x代表线程,可加速编译。

安装依赖时有可能会出现错误,不过会提示解决方法,按提示更改一下命令就好了。另外需要一个额外的包:

sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update
sudo apt install libjasper1 libjasper-dev

最后在CmakeLists里面,将这一行代码:

find_page(opencv 版本号)
#修改为
find_page(你自己的opencv 版本号)

4.安装Eigen库

Eigen库是一个对矩阵进行操作的库,封装了好多矩阵操作。

sudo apt-get install libeigen3-dev

一般的库由头文件和库文件组成。Eigen头文件的默认位置在 “usr/include/eigen3” 中。如果不确定,可以输入以下命令查找:

sudo updatedb
locate eigen3

相比于其他库,Eigen的神奇之处在于,它是一个纯用头文件搭起建起来的库。这意味着你只能找到它的头文件,而没有.so或.a那样的二进制文件。在使用时只需引入Eigen的头文件即可,不需要链接库文件(因为它没有库文件)。要使用Eigen库,需要在cmake工程中的CMakeLists.txt文件中指定Eigen的头文件目录:

#添加Eigen库头文件
include_directories("/usr/include/eigen3")

5.安装ORB-SLAM2

ORB-SLAM2可以去github上下载,或者是直接用git命令下载:

git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2

如果你的机器性能比较低的话(我就是),建议将build.sh文件和build_ros.sh文件中的命令“make -j”改为“make”,这样在编译时会只使用有限的线程,从而不会让虚拟机卡死,我当初就没改然后虚拟机卡死好多遍…

然后进入ORB-SLAM2的文件夹中打开终端,输入:

chmod +x build.sh
./build.sh

在编译时可能会出现这个错误:

CMakeFiles/RGBD.dir/build.make:119: recipe for target 'CMakeFiles/RGBD.dir/src/ros_rgbd.cc.o' failed
make[2]: *** [CMakeFiles/RGBD.dir/src/ros_rgbd.cc.o] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/RGBD.dir/all' failed
make[1]: *** [CMakeFiles/RGBD.dir/all] Error 2
Makefile:127: recipe for target 'all' failed
make: *** [all] Error 2

解决方法:打开Thirdparty/g2o/g2o/solvers/linear_solver_eigen.h,做如下修改:

#原代码
typedef Eigen::PermutationMatrix<Eigen::Dynamic, Eigen::Dynamic, SparseMatrix::Index> PermutationMatrix
#修改为
typedef Eigen::PermutationMatrix<Eigen::Dynamic, Eigen::Dynamic, int> PermutationMatrix

还可能会出现usleep错误:

error: ‘usleep’ was not declared in this scope usleep(3000);

解决方法:
在source文件的开头增加

 #include <unistd.h>

需要修改的source文件有:

Examples/Monocular/mono_euroc.cc
Examples/Monocular/mono_kitti.cc 
Examples/Monocular/mono_tum.cc 
Examples/RGB-D/rgbd_tum.cc
Examples/Stereo/stereo_euroc.cc 
Examples/Stereo/stereo_kitti.cc
src/LocalMapping.cc 
src/LoopClosing.cc 
src/System.cc 
src/Tracking.cc 
src/Viewer.cc

在解决完错误之后就可以下载数据集使用ORB-SLAM2啦。

6.下载数据集并运行

有TUM、KITTI、EuRoC三种数据集,我是使用的TUM数据集,从下面这个网址下载:http://vision.in.tum.de/data/datasets/rgbd-dataset/download
下载好之后解压出来是一个tar文件,可以使用如下命令解包:

# tar -xvf archive_name.tar.gz

然后进入ORB-SLAM2的文件夹打开终端,输入以下命令运行:

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

注意其中PATH_TO_SEQUENCE_FOLDER为数据集的存储路径,并将tumx.yaml与下载的数据集对应,那个tumx的x代表数字。比如TUM1.yaml,TUM2.yaml 和TUM3.yaml 分别对应 freiburg1, freiburg2 和 freiburg3。

然后就运行成功啦!

本文、本次配置借鉴了下面的文章:
https://blog.csdn.net/learning_tortosie/article/details/79881165
https://blog.csdn.net/u014709760/article/details/85253525
https://blog.csdn.net/Xuesengxinyi/article/details/82113544

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!