写在前面:
之前完整安装过几次SLAM的全套运行环境但是都没有进行系统记录,近期更换了开发电脑,趁着为新电脑配置环境的契机,将ORBSLAM2的运行环境进行完整记录,方便后续问题回溯。
开发环境:
开发机器:Lenovo Legion R7000
系统版本:Ubuntu18.08 LTS
系统内核:Linux 5.4.0-91-generic
sudo apt-get install cmake
sudo apt-get install git
sudo apt-get install gcc g++
git clone https://github.com/eigenteam/eigen-git-mirror.git
cd eigen-git-mirror
mkdir build
cd build
cmake ..
sudo make install
安装好的Eigen头文件存放在/usr/local/include/eigen3路径下,为了后续代码编译需要,要将相应的头文件复制到 usr/local/include目录下
sudo cp -r /usr/local/include/eigen3/Eigen /usr/local/include
如果避免后续出现因为基础Eigen库版本不匹配需要重装的问题,现将Eigen库的卸载方式列举如下:
sudo updatedb
locate eigen3
sudo rm -rf /usr/local/include/eigen3 /usr/include/eigen3
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
git clone https://github.com/stevenlovegrove/Pangolin.git
使用上述版本的Pangolin如果make时报错的话可以尝试下载旧版本的源码包进行编译部署
Pangolin_V0.6代码链接
cd pangolin-v0.6
mkdir build
cd build
cmake ..
make -j16 #多线程编译,j后的参数为CPU线程数
sudo make install
cd build/examples/HelloPangolin
./HelloPangolin
git clone https://github.com/strasdat/Sophus.git
如果因为网络原因下载失败可以使用下面码云中的资源
git clone https://gitee.com/zhuang_dengxiang/Sophus.git
cd Sophus
mkdir build
cd build
cmake ..
make -j16
sudo make install
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阶段下面红框的步骤可能会因网络原因会耗费较多时间,需要耐心等待。
PCL安装较为简单,直接执行下列命令即可
sudo apt-get install libpcl-dev pcl-tools
创建并初始化一个catkin工作空间,为后续基于ROS的ORBSLAM2运行做准备
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace
选择好需要放置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
如果需要在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
运行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
# 首先新建终端运行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数据集下载链接
点击相应链接下载,速度可能会有些慢,建议科学上网
下载解压完放在自己希望的路径中
运行ORBSLAM2:
./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txtExamples/Monocular/TUMX.yaml PATH_TO_SEQUENCE_FOLDER
其中“PATH_TO_SEQUENCE_FOLDER”是自己的rgbd_dataset_freiburg1_xyz路径
成功完成上述两类测试之后,就成功完成了ORBSLAM2所需要的运行环境的全部配置。