目录
前言
一、OPB-SLAM3基本配置流程
1.下载编译Pangolin
二、ORB-SLAM3配置
1.下载源码
2.创建ROS工作空间并编译ORB-SLAM3-ROS源码
3.尝试编译
三、运行测试
一、OPB-SLAM3基本配置流程
ORB-SLAM3是一个支持视觉、视觉加惯导、混合地图的SLAM(Simultaneous Localization and Mapping,即同时定位与地图构建)系统。本项目场景基于ubuntu18.04在ROS-noetic基础上进行配置。
1.下载编译Pangolin
Pangolin 是一个轻量级、跨平台的库,主要用于3D、数值或视频程序和算法的原型设计。它在计算机视觉领域被广泛使用,旨在简化数据可视化的过程。主要用于算法开发中的调试过程当中,具有丰富的图像界面;
下面为安装流程:
sudo apt-get install libglew-dev
sudo apt-get install cmake
sudo apt-get install libpython2.7-dev
sudo apt-get install ffmpeg libavcodec-dev libavutil-dev libavformat-dev libswscale-dev libavdevice-dev
sudo apt-get install libdc1394-22-dev libraw1394-dev
sudo apt-get install libjpeg-dev libpng-dev libtiff5-dev libopenexr-dev
# 下载并编译Pangolin
git clone https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin
mkdir build
cd build
cmake ..
cmake --build .
sudo make install
测试安装是否成功:
在当前目录下测试输入:
./HelloPangolin
若能出现三色立方体,说明安装成功;
二、ORB-SLAM3配置
1.下载源码
git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git
此时代码包括完整的ORB-SALM项目代码,在ROS环境下,只需部分编译对应部分即可。
2.创建ROS工作空间并编译ORB-SLAM3-ROS源码
新建ROS工作空间:
mkdir -p ~/orbslam3_ws/src
cd ~/orbslam3_ws/
catkin_make
source devel/setup.bash
生成功能包框架:
cd src
catkin_create_pkg orbslam3_ros std_msgs rospy roscpp
cd ..
将ORB-SLAM3的ROS源码复制到工作空间:
cd ~/orbslam3_ws/src/orbslam3_ros
cp -r ~/ORB_SLAM3/Examples/ROS/ORB_SLAM3/* .
关注CMakeLists.txt
中OpenCV版本:
find_package(OpenCV 4.2 REQUIRED)
这里对于opencv的版本要求要具体情况具体分析,如果编译成功,运行出现以下报错,可怀疑为opencv版本问题:
(1)错误信息指出 ORB-SLAM3
在运行过程中遇到了一个 OpenCV
异常,具体是在 setSize
函数中一个断言失败了。
what(): OpenCV(4.6.0) /home/roy/opencv-4.6.0/modules/core/src/matrix.cpp:246: error: (-215:Assertion failed) s >= 0 in function 'setSize'
(2) 这个错误信息再次表明 ORB-SLAM3
在运行过程中遇到了内存不足的问题,导致程序异常终止。具体错误信息是 OpenCV
无法分配足够的内存来处理数据。这通常是因为数据集过大或配置参数不合理导致的,也有可能是版本不匹配。
what(): OpenCV(4.6.0) /home/roy/opencv-4.6.0/modules/core/src/alloc.cpp:73: error: (-4:Insufficient memory) Failed to allocate 31420881834160 bytes in function 'OutOfMemoryError'
在修改opencv版本前,可优先猜测计算负荷过重问题,修改特征点数目或分辨率即可;
修改 TUM2.yaml
文件(依据实际使用的配置文件)中的 ORBextractor.nFeatures
和图像分辨率参数:
ORBextractor.nFeatures: 500 # 原来是 1000
Camera.width: 320 # 原来是 640
Camera.height: 240 # 原来是 480
3.尝试编译
cd ~/orbslam3_ws
catkin_make
source devel/setup.bash
三、运行测试
首先下载TUM数据集 https://vision.in.tum.de/data/datasets/rgbd-dataset/download
注意下载tag格式或ROS-bag格式,此处以tag格式为例,下载完成后解压是一个文件夹格式:
其中,assocoate.txt文件为深度图像和RGB图像的时间戳对齐文件,通过associate.py生成:
打开终端,进入到 associate.py 所在目录,即/ORB_SLAM3
/Examples/RGB-D/,之后运行:
python associate.py ../../data/rgbd_dataset_freiburg2_pioneer_360/rgb.txt ../../data/rgbd_dataset_freiburg2_pioneer_360/depth.txt > associations.txt
其中文件路径以实际情况为准,注意associate.txt文件要与rgb.txt和depth.txt放在同一文件夹下。
可以编写launch文件进行测试:
<launch>
<!--
<node pkg="rosbag" type="play" name="playbag" args="/home/spurs/dataset/rgbd_dataset_freiburg1_plant.bag" />
-->
<node pkg="rviz" type="rviz" name="rviz" args="-d $(find orb_slam3)/rviz/orb_viz_rgbd_mapping.rviz" />
<node pkg="orb_slam3" type="ros_rgbd_mapping" name="orb_slam3" args="$(find orb_slam3)/Examples/RGB-D/TUM2.yaml $(find orb_slam3)/Vocabulary/ORBvoc.txt /home/roy/orbslam_ws/dataset/rgbd_dataset_freiburg1_desk" output="screen" />
</launch>
注意更改数据路径;
也可以参照官方README文件内容进行测试:
纯单目:
rosrun ORB_SLAM3 Mono Vocabulary/ORBvoc.txt Examples/Monocular/EuRoC.yaml
rosbag play MH_01_easy.bag /cam0/image_raw:=/camera/image_raw
纯双目:
rosrun ORB_SLAM3 Stereo Vocabulary/ORBvoc.txt Examples/Stereo/EuRoC.yaml false
rosbag play MH_01_easy.bag /cam0/image_raw:=/camera/left/image_raw /cam1/image_raw:=/camera/right/image_raw
RGB-D:
rosrun ORB_SLAM3 RGBD Vocabulary/ORBvoc.txt Examples/RGB-D/TUM1.yaml
rosbag play rgbd_dataset_freiburg1_xyz.bag
测试效果: