基于Ubuntu18.04的ORB-SLAM2环境配置全套方案记录

基于Ubuntu18.04的ORB-SLAM2环境配置全套方案记录

  • 基于Ubuntu18.04的ORB-SLAM2环境配置全套方案记录
    • 1.安装基础编译工具
    • 2.配置Eigen3代码库
    • 3.配置Pangolin
    • 4.配置Sophus
    • 5.配置OpenCV
    • 6.配置PCL
    • 7.创建ROS空间
    • 8.配置ORBSLAM2源码
    • 8.配置usb_cam ROS功能包
    • 9.ORBSLAM2运行方法
    • 10.总结

写在前面:
之前完整安装过几次SLAM的全套运行环境但是都没有进行系统记录,近期更换了开发电脑,趁着为新电脑配置环境的契机,将ORBSLAM2的运行环境进行完整记录,方便后续问题回溯。

开发环境:
开发机器:Lenovo Legion R7000
系统版本:Ubuntu18.08 LTS
系统内核:Linux 5.4.0-91-generic

1.安装基础编译工具

 sudo apt-get install cmake
 sudo apt-get install git
 sudo apt-get install gcc g++

2.配置Eigen3代码库

  • 下载Eigen3源码
git clone https://github.com/eigenteam/eigen-git-mirror.git
  • 源码编译
cd eigen-git-mirror
mkdir build
cd build
cmake ..
sudo make install

cmake成功后的提示
请添加图片描述

  • 系统目录配置

安装好的Eigen头文件存放在/usr/local/include/eigen3路径下,为了后续代码编译需要,要将相应的头文件复制到 usr/local/include目录下

sudo cp -r /usr/local/include/eigen3/Eigen /usr/local/include
  • Eigen库卸载方法

如果避免后续出现因为基础Eigen库版本不匹配需要重装的问题,现将Eigen库的卸载方式列举如下:

sudo updatedb
locate eigen3
sudo rm -rf /usr/local/include/eigen3 /usr/include/eigen3

3.配置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
 sudo apt-get install libxkbcommon-x11-dev
  • Pangolin源码下载
git clone https://github.com/stevenlovegrove/Pangolin.git

使用上述版本的Pangolin如果make时报错的话可以尝试下载旧版本的源码包进行编译部署

Pangolin_V0.6代码链接

  • Pangolin源码编译
cd pangolin-v0.6
mkdir build
cd build 
cmake ..
make -j16			#多线程编译,j后的参数为CPU线程数
sudo make install
  • 检查是否安装成功
cd build/examples/HelloPangolin
./HelloPangolin

运行之后出现如下3D立方体说明安装成功
请添加图片描述

4.配置Sophus

  • Sophus源码下载
git clone https://github.com/strasdat/Sophus.git

如果因为网络原因下载失败可以使用下面码云中的资源

git clone https://gitee.com/zhuang_dengxiang/Sophus.git
  • Sophus源码编译安装
cd Sophus
mkdir build
cd build
cmake ..
make -j16
sudo make install

5.配置OpenCV

  • OpenCV_v3.3.1源码下载

OpenCV版本源码gitee快速下载方法,只需将-b后的3.3.1改成需要的版本号即可

此处注意:
opencv和opencv_contrib的版本号需要对应匹配,否则后续编译可能会出错

git clone -b 3.3.1 https://gitee.com/mirrors/opencv.git
git clone -b 3.3.1 https://gitee.com/mirrors/opencv_contrib.git
  • 依赖项下载
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 libtiff5-dev libdc1394-22-dev         # 处理图像所需的包
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev liblapacke-dev
sudo apt-get install libxvidcore-dev libx264-dev         # 处理视频所需的包
sudo apt-get install libatlas-base-dev gfortran          # 优化opencv功能
sudo apt-get install ffmpeg
  • 源码编译
cd opencv
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
make
sudo make install

在cmake阶段下面红框的步骤可能会因网络原因会耗费较多时间,需要耐心等待。
请添加图片描述

6.配置PCL

PCL安装较为简单,直接执行下列命令即可

sudo apt-get install libpcl-dev pcl-tools

7.创建ROS空间

创建并初始化一个catkin工作空间,为后续基于ROS的ORBSLAM2运行做准备

 mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace

8.配置ORBSLAM2源码

选择好需要放置ORBSLAM2工程的文件路径,如果之后需要在ROS环境下运行ORBSLAM2的话,最好将工程文件放在上一步中建立的catkin_ws/src文件夹下,此处演示在catkin_ws下的配置安装方法

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

请添加图片描述
源码中还是存在一些小bug,在执行build.sh的过程中出现以上usleep()的报错,则需要找到ORB_SLAM2/include/system.h文件,在其中添加头文件

#include<unistd.h>

添加位置如下:
请添加图片描述
添加后编译顺利成功:
请添加图片描述

如果需要在ROS下运行的话还需要添加以下步骤:

 sudo  gedit ~/.bashrc

在文件末尾添加:

export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/ros/catkin_ws/src/ORB_SLAM2/Examples/ROS

后面的“/home/ros/catkin_ws/src/ORB_SLAM2/Examples/ROS”是自己保存的文件路径

保存使其生效

source ~/.bashrc

编译build_ros环境:

sudo chmod +x build_ros.sh
./build_ros.sh

如果在这一步出现报错:
请添加图片描述
则需要修改Examples/ROS/ORB_SLAM2/文件夹下的CMakeLists.txt文件,在下面的位置上添加

-lboost_system

请添加图片描述
修改后编译成功:

请添加图片描述

编译工作空间

cd ~/catkin_ws
catkin_make
source  /devel/setup.sh

8.配置usb_cam ROS功能包

运行ORBSLAM2需要依赖usb_cam功能包发送的如下rosTopic:

/usb_cam/camera_info/usb_cam/image_raw
/usb_cam/image_raw/compressed
/usb_cam/image_raw/compressed/parameter_descriptions
/usb_cam/image_raw/compressed/parameter_updates
/usb_cam/image_raw/compressedDepth
/usb_cam/image_raw/compressedDepth/parameter_descriptions
/usb_cam/image_raw/compressedDepth/parameter_updates
/usb_cam/image_raw/theora
/usb_cam/image_raw/theora/parameter_descriptions
/usb_cam/image_raw/theora/parameter_updates

所以在正式运行ORBSLAM2前需要先安装配置usb_cam功能包:

# 首先进入catkin_ws/src路径下下载功能包
cd ~/catkin_ws/src
git clone https://github.com/bosch-ros-pkg/usb_cam.git

# 然后退回到工作空间,编译源码
cd ~/catkin_ws
catkin_make

# 编译成功后将编译好的文件添加到环境变量
source devel/setup.bash

# 接下来测试usb_cam,首先打开一个新的终端运行ros master
roscore

# 然后在另一个终端中运行usb_cam节点
rosrun usb_cam usb_cam_node

# 通过运行rostopic list可知此时实际上已经接收到硬件模块的相机输出,但是还没有显示图像
rostpoic list

# 此时运行下面的命令就可以显示出此时的摄像头图像
rosrun image_view image_view image:=/usb_cam/image_raw

如果想利用一个终端在打开usb_cam节点的同时也能够看到图像,那么可以新建一个launch文件usb_cam_test.launch,参考博客

<launch>

  <node name="usb_cam" pkg="usb_cam" type="usb_cam_node" output="screen" > 
  
    <param name="video_device" value="/dev/video0" /> 
    <param name="image_width" value="640" /> 
    <param name="image_height" value="480" /> 
    <param name="pixel_format" value="yuyv" /> 
    <param name="camera_frame_id" value="usb_cam" /> 
    <param name="io_method" value="mmap"/> 

  </node> 

  <node name="image_view" pkg="image_view" type="image_view" respawn="false" output="screen"> 

    <remap from="image" to="/usb_cam/image_raw"/> 
    <param name="autosize" value="true" /> 

  </node> 

</launch>

其中相关的launch语法可以参考之前的博客:浅谈Ros中使用launch启动文件的方法系列来对应学习

此时终端运行如下命令即可实现

roslaunch usb_cam usb_cam_test.launch

9.ORBSLAM2运行方法

  • 使用电脑单目相机、ROS环境测试
# 首先新建终端运行ros master
roscore![image-20211214130740649](/home/ros/.config/Typora/typora-user-images/image-20211214130740649.png)

#运行usb_cam节点
rosrun usb_cam usb_cam_node

# 进入catkin_ws/src/ORB_SLAM2路径下运行ORBSLAM2节点
cd ~/catkin_ws/src/ORB_SLAM2
rosrun ORB_SLAM2  Mono  Vocabulary/ORBvoc.txt  Examples/ROS/ORB_SLAM2/Asus.yaml

执行后使用过电脑单目摄像头成功运行ORBSLAM2
请添加图片描述

  • 使用TUM数据集运行测试

TUM数据集下载链接

请添加图片描述

点击相应链接下载,速度可能会有些慢,建议科学上网

下载解压完放在自己希望的路径中

运行ORBSLAM2:

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

其中“PATH_TO_SEQUENCE_FOLDER”是自己的rgbd_dataset_freiburg1_xyz路径

成功完成上述两类测试之后,就成功完成了ORBSLAM2所需要的运行环境的全部配置。

10.总结

  • ORBSLAM2的环境配置相对来说比较复杂,并且一些环境的安装与其他环境有依赖关系,如Pangolin的编译依赖Eigen3的环境,最好按照本文的顺序逐个配置
  • 另外,如果已经提前配置好了ROS的话暂时不需要完全配置好OpenCV环境,ROS中自带有OpenCV的环境依赖,但是为了后续非ROS项目的开发,最好还是一起配置
  • 熟能生巧、细节见真章!