ORB_SLAM2配置过程

ORB_SLAM2配置过程

本文记录了ORB_SLAM在Ubuntu16.04中的配置过程,并且包含ROS 环境下ROB_SLAM的配置。

1、背景

ORB-SLAM是由Raul Mur-Artal,J. M. M. Montiel和Juan D. Tardos于2015年发表在IEEE Transactions on Robotics。ORB-SLAM是一个基于特征点的实时单目SLAM系统,在大规模的、小规模的、室内室外的环境都可以运行。该系统对剧烈运动也很鲁棒,支持宽基线的闭环检测和重定位,包括全自动初始化。该系统包含了所有SLAM系统共有的模块:跟踪(Tracking)、建图(Mapping)、重定位(Relocalization)、闭环检测(Loop closing)。由于ORB-SLAM系统是基于特征点的SLAM系统,故其能够实时计算出相机的轨线,并生成场景的稀疏三维重建结果。ORB-SLAM2在ORB-SLAM的基础上,还支持标定后的双目相机和RGB-D相机。

接下来介绍一下ORB_SLAM的配置过程。

2、配置过程

2.1、安装工具

在配置过程中需要cmake、gcc、g++和Git工具。可在终端通过以下命令下载。

 sudo apt-get install cmake

 sudo apt-get install git

 sudo apt-get install gcc g++  

2.2、安装Pangolin

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

在安装Pangolin之前,先要安装必要的依赖项:

 sudo apt-get install libglew-dev

 sudo apt-get install libboost-dev libboost-thread-dev libboost-filesystem-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

2.3、安装OpenCV

安装OpenCV的过程另外单独介绍。

2.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")

2.5、安装ORB_SLAM 2

选择放置ORB_SLAM2工程的文件夹(如果需要在ROS环境下运行ORB_SLAM,最好将工程放在catkin_ws/src文件夹下),在该文件夹中打开终端,执行一下命令:

git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2
cd ORB_SLAM2
chmod +x build.sh
./build.sh

如过需要在ROS环境下运行ORB_SLAM,则需要执行一下命令:

chmod +x build_ros.sh
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:~/catkin_ws/src/ORB_SLAM2/Examples/ROS
./build_ros.sh

如果机器性能较低,可以将build.sh文件和build_ros.sh文件中的命令

make -j

全部改为

make

3、运行ORB_SLAM2

编译完成后会在ORB_SLAM2/Examples文件夹下生成各种可执行文件。我们以单目情况为例,展示如何运行ORB_SLAM2程序。

3.1、下载数据集

我们使用KITTI数据集中的数据运行ORB_SLAM2。KITTI数据集由德国卡尔斯鲁厄理工学院和丰田美国技术研究院联合创办,是目前国际上最大的自动驾驶场景下的计算机视觉算法评测数据集。该数据集用于评测立体图像(stereo),光流(optical flow),视觉测距(visual odometry),3D物体检测(object detection)和3D跟踪(tracking)等计算机视觉技术在车载环境下的性能。KITTI包含市区、乡村和高速公路等场景采集的真实图像数据,每张图像中最多达15辆车和30个行人,还有各种程度的遮挡与截断。整个数据集由389对立体图像和光流图,39.2 km视觉测距序列以及超过200k 3D标注物体的图像组成,以10Hz的频率采样及同步。

我们可以通过如下链接进行下载:http://www.cvlibs.net/datasets/kitti/eval_odometry.php

3.2、运行ORB_SLAM

在ORB_SLAM2文件夹下打开终端,执行以下命令来运行程序:

./Examples/Monocular/mono_kitti Vocabulary/ORBvoc.txt Examples/Monocular/KITTIX.yaml PATH_TO_DATASET_FOLDER/dataset/sequences/SEQUENCE_NUMBER

KITTI数据集有多组数据,不同的数据集需要选择不同的配置文件。所以我们需要根据KITTI数据集中数据编号来修改以上命令。以KITTI中第00组数据为例,在终端输入一下命令:

./Examples/Monocular/mono_kitti Vocabulary/ORBvoc.txt Examples/Monocular/KITTI00-02.yaml PATH_TO_DATASET_FOLDER/dataset/KITTI/sequences/01

其中PATH_TO_DATASET_FOLDER指KITTI数据集所在文件夹的路径。

运行之后效果如下图所示:
ORB_SLAM2配置过程_第1张图片

4、配置过程中遇到的问题

4.1 编译build_ros.sh出现的错误

执行

./build_ros.sh

出现如下错误:

/home/nvidia/ORB-SLAM2-Sample/Examples/ROS/ORB_SLAM2/../../../Thirdparty/g2o/g2o/types/se3quat.h:32:22: fatal error: Eigen/Core: 没有那个文件或目录
compilation terminated.
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

解决方法: 将相应的.h文件中,eigen的引用进行修改。如

#include

修改为

#include

4.2、usleep问题

执行

./build_ros.sh

出现如下错误:

/home/nvidia/MYNT-EYE-ORB-SLAM2-Sample/Examples/ROS/ORB_SLAM2/src/AR/ViewerAR.cc:233:23: error: ‘usleep’ was not declared in this scope
         usleep(mT*1000);
                       ^
CMakeFiles/MonoAR.dir/build.make:200: recipe for target 'CMakeFiles/MonoAR.dir/src/AR/ViewerAR.cc.o' failed
make[2]: *** [CMakeFiles/MonoAR.dir/src/AR/ViewerAR.cc.o] Error 1
CMakeFiles/Makefile2:857: recipe for target 'CMakeFiles/MonoAR.dir/all' failed
make[1]: *** [CMakeFiles/MonoAR.dir/all] Error 2
Makefile:127: recipe for target 'all' failed
make: *** [all] Error 2

解决方法:在相应的文件里面添加usleep 的头文件unistd.h,如下:

#include

4.3 boost库问题

执行

./build_ros.sh

出现如下错误:

0%] Built target rosbuild_precompile
make[2]: *** No rule to make target '/opt/ros/kinetic/lib/libopencv_calib3d3.so.3.2.0', needed by '../Mono'. Stop.
CMakeFiles/Makefile2:718: recipe for target 'CMakeFiles/Mono.dir/all' failed
make[1]: *** [CMakeFiles/Mono.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
make[2]: *** No rule to make target '/opt/ros/kinetic/lib/libopencv_calib3d3.so.3.2.0', needed by '../RGBD'. Stop.
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/RGBD.dir/all' failed
make[1]: *** [CMakeFiles/RGBD.dir/all] Error 2
make[2]: *** No rule to make target '/opt/ros/kinetic/lib/libopencv_calib3d3.so.3.2.0', needed by '../Stereo'. Stop.
CMakeFiles/Makefile2:104: recipe for target 'CMakeFiles/Stereo.dir/all' failed
make[1]: *** [CMakeFiles/Stereo.dir/all] Error 2
make[2]: *** No rule to make target '/opt/ros/kinetic/lib/libopencv_calib3d3.so.3.2.0', needed by '../MonoAR'. Stop.
CMakeFiles/Makefile2:820: recipe for target 'CMakeFiles/MonoAR.dir/all' failed
make[1]: *** [CMakeFiles/MonoAR.dir/all] Error 2
Makefile:127: recipe for target 'all' failed
make: *** [all] Error 2

解决方法: 修改Examples/ROS/ORB_SLAM2/文件夹下的CMakeLists.txt文件。

set(LIBS 
${OpenCV_LIBS} 
${EIGEN3_LIBS}
${Pangolin_LIBRARIES}
${PROJECT_SOURCE_DIR}/../../../Thirdparty/DBoW2/lib/libDBoW2.so
${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o/lib/libg2o.so
${PROJECT_SOURCE_DIR}/../../../lib/libORB_SLAM2.so
)

修改为

set(LIBS 
${OpenCV_LIBS} 
${EIGEN3_LIBS}
${Pangolin_LIBRARIES}
${PROJECT_SOURCE_DIR}/../../../Thirdparty/DBoW2/lib/libDBoW2.so
${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o/lib/libg2o.so
${PROJECT_SOURCE_DIR}/../../../lib/libORB_SLAM2.so
-lboost_system
)

至于其它问题,以后遇到在做记录。

你可能感兴趣的:(SLAM,应用配置)