Ubuntu16.04下配置ORB-SLAM2与运行单目实例

Ubuntu16.04下配置ORB-SLAM2与运行单目实例

    • 一、安装相关工具
    • 二、安装Pangolin
    • 三、安装opencv
    • 四、安装Eigen
    • 五、安装ORB_SLAM2
    • 六、安装usb_cam
    • 七、运行ORB_SLAM2单目实例
    • 八、实时运行ORB_SLAM2
    • 九、编译过程相关问题的解决办法

一、安装相关工具

在配置过程中我们需要用到cmake、gcc、g++、git工具,我们可以直接在终端使用相关命令进行下载安装。

  1. 安装camke,用于程序的编译
sudo apt-get install cmake
  1. 安装gcc与g++
sudo apt-get install gcc g++ 
  1. 安装git,用于从Github上克隆项目到本地
sudo apt-get install git

二、安装Pangolin

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

1.在安装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

2.安装完依赖项后可以通过以下命令安装Pangolin:

git clone https://github.com/stevenlovegrove/Pangolin.git

下载速度跟网速相关,如果失败,多执行几次命令。
3.编译安装

cd Pangolin
mkdir build
cd build
cmake -DCPP11_NO_BOOSR=1 ..
make –j
sudo make install

Ubuntu16.04下配置ORB-SLAM2与运行单目实例_第1张图片
Ubuntu16.04下配置ORB-SLAM2与运行单目实例_第2张图片

三、安装opencv

opencv的安装可以参考我另外的博客。
参考链接

四、安装Eigen

sudo apt-get install libeigen3-dev

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

sudo updatedb
locate eigen3

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

五、安装ORB_SLAM2

在安装之前我们需要选择放置ORB_SLAM工程的文件夹。如果需要在ROS环境下运行ORB_SLAM,最好将工程放在catkin_ws/src文件夹下。(因为我的ros工作空间为catkin_ws)进行我的src文件夹下,打开终端执行下面命令:

1.下载ORB_SLAM2

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

在这里插入图片描述
2.编译ORB_SLAM2
进入ROB_SLAM2

cd ORB_SLAM2

赋予文件夹权限

chmod +x build.sh

编译build.sh文件

./build.sh

如果想要在ROS环境下运行ORB_SLAM,则需要编译build_ros.sh文件。
在当前终端修改文件权限

chmod +x build_ros.sh

添加环境变量

gedit ~/.bashrc
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/自己的用户名/catkin_ws/src/ORB_SLAM2/Examples/ROS

接着运行

source ~/.bashrc

也可以使用下面命令来进行检查

echo $ROS_PACKAGE_PATH

出现/opt/ros/kinetic/share:/home/lizhongwan/catkin_ws/src/ORB_SLAM2/Examples/ROS,正常。

echo $ROS_ROOT

出现/opt/ros/kinetic/share/ros,正常。
编译build_ros.sh

./build_ros.sh

编译过程可能会有点慢,如果电脑性能可以,我们可以将上面相关编译文件中的make -j修改为make -j4或者make -j8。如果电脑性能不佳,我们可以将make j修改为make。
到这里我们的ROB_SLAM2就安装完成啦,下面可以进行实例运行。

六、安装usb_cam

1.下载usb_cam

cd catkin_ws/src
git clone https://github.com/bosch-ros-pkg/usb_cam.git

2.编译工作空间

cd catkin_ws/src
ctakin_make

3.注册程序

source ./devel/setup.bash

4.创建编译文件夹并编译

cd src/usb_cam
mkdir build
cd build
cmake ..
make -j8

5.连接笔记本摄像头
Ubuntu16.04下配置ORB-SLAM2与运行单目实例_第3张图片
6.新建终端运行ros

roscore

7.在其他终端进行工作空间的usb_cam下的launch文件夹,运行相机节点

roslaunch usb_cam usb_cam-test.launch

运行效果展示:

到这里我们的usb_cam就安装成功啦!

七、运行ORB_SLAM2单目实例

1.下载数据集
有TUM、KITTI、EuRoC三种数据集,本实验使用TUM数据集,可以在下面链接进行下载:
下载地址
2.运行ORB_SLAM
官方给出的命令格式:

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

其中PATH_TO_SEQUENCE_FOLDER为数据集的存储路径,并将tumx.yaml与下载的数据集对应,比如TUM1.yaml,TUM2.yaml 和TUM3.yaml 分别对应 freiburg1, freiburg2 和 freiburg3。
根据自己所保存的路径做适当修改:
在ORB_SLAM2文件夹下打开终端,执行以下命令来运行程序:

./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml /home/lizhongwan/rgbd_dataset_freiburg1_xyz

运行效果如下:
Ubuntu16.04下配置ORB-SLAM2与运行单目实例_第4张图片

八、实时运行ORB_SLAM2

1.启动ros

roscore

2.启动usb_cam节点

roslaunch usb_cam usb_cam-test.launch

3.ORB-SLAM默认订阅的话题为/camera/image_raw,而usb_cam节点发布的话题为/usb_cam/image_raw,因此需要在ros_mono.cc中修改订阅的话题.
可以先通过下面命令查看已发布的话题

rostopic list

找到在/home/lizhongwan/catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/src的目录下的ros_mono.cc文件
Ubuntu16.04下配置ORB-SLAM2与运行单目实例_第5张图片
打开文件并修改成下面显示的代码:
Ubuntu16.04下配置ORB-SLAM2与运行单目实例_第6张图片
因为修改了源文件,所以我们需要重新编译

./build_ros.sh

4.运行实时单目
命令格式如下:

rosrun ORB_SLAM2 Mono PATH_TO_VOCABULARY PATH_TO_SETTINGS_FILE

其中PATH_TO_VOCABULARY是词典的路径,一般为Vocabulary/ORBvoc.txt
PATH_TO_SETTINGS_FILE是记录摄像头参数的文件,比如之前用到的TUM1.yaml。
我用的命令为:

rosrun ORB_SLAM2 RGBD /home/lizhongwan/catkin_ws/src/ORB_SLAM2/Vocabulary/ORBvoc.txt /home/lizhongwan/catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/Asus.yaml

运行效果如下:
Ubuntu16.04下配置ORB-SLAM2与运行单目实例_第7张图片
将摄像头缓慢的旋转,可以看到右边窗口在进行路线规划吗,左边窗口在捕捉RGB。

九、编译过程相关问题的解决办法

1.编译./build_ros.sh出现下面错误

/home/lizhongwan/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的引用进行修改。
2.编译build_ros.sh文件时出现下面错误

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
)

到这里我们的整个安装与配置就完成啦,希望可以帮助到大家。

你可能感兴趣的:(嵌入式系统学习)