ORB-SLAM3复现的详细过程——配置安装及ROS和脚本运行---Ubuntu20.04

ORB-SLAM3配置安装及ROS和脚本运行---Ubuntu20.04

  • [1. 安装所需要的依赖和包](#1. 安装所需要的依赖和包)
  • [2. 修改代码及文件内容](#2. 修改代码及文件内容)
    • [2.1 CMakeLists.txt文件的修改](#2.1 CMakeLists.txt文件的修改)
    • [2.2 单目可视化代码修改](#2.2 单目可视化代码修改)
    • [2.3 环境配置文件的修改](#2.3 环境配置文件的修改)
    • [2.4 源码的修改](#2.4 源码的修改)
  • 3.ORB-SLAM3的编译
    • [3.1 构建 ORB-SLAM3 库](#3.1 构建 ORB-SLAM3 库)
    • [3.2 生成ROS节点](#3.2 生成ROS节点)
  • 4.ORB-SLAM3的运行
    • [4.1 非ROS环境下运行](#4.1 非ROS环境下运行)
      • [4.1.1 EuROC数据集](#4.1.1 EuROC数据集)
      • [4.1.2 TUM VI 数据集](#4.1.2 TUM VI 数据集)
    • [4.2 ROS环境下运行](#4.2 ROS环境下运行)

ORB-SLAM3代码下载地址:ORB-SLAM3源码下载

所有的操作都是在完成以下网址中的所有操作内容下进行的:Ubuntu系统安装之后首需要做的事情
本文是总结的比较完善和直接的过程。

其实在整个运行中也遇到了一些问题,也做了一些总结,记录在了文章
ORB-SLAM3复现过程中遇到的问题及解决办法

建议是先以本文为主,有问题之后再去参考问题解决办法。

1. 安装所需要的依赖和包

在一键安装ROS后,只需要再安装Pangolin即可,其他所有的需要都已经存在。

依次执行以下命令即可:

bash 复制代码
#依赖项
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
#下载编译
git clone https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin
mkdir build
cd build
cmake ..
cmake --build .
sudo make install

这样下载下来的是Pangolin0.8。在ORB-SLAM3中是可以正常使用的。

2. 修改代码及文件内容

由于许多库的版本不一样,所以有部分代码需要更改

这里先声明我的环境:

Ubuntu20.04

Opencv4.2.0

C++11

Eigen3.3.7

Python3.8.10

Pangolin0.8

2.1 CMakeLists.txt文件的修改

  1. /home/xiaoduan/project/source2/orb_slam3/CMakeLists.txt文件的修改
bash 复制代码
gedit /home/xiaoduan/project/source2/orb_slam3/CMakeLists.txt
#第33行Opencv的版本改为4
#第41行Eigen的版本改为3
  1. /home/xiaoduan/project/source2/orb_slam3/Examples_old/ROS/ORB_SLAM3/CMakeLists.txt文件的修改
bash 复制代码
gedit /home/xiaoduan/project/source2/orb_slam3/Examples_old/ROS/ORB_SLAM3/CMakeLists.txt

更改内容如下:

  1. 第33行Opencv的版本改为4
  2. 第41行Eigen的版本改为3
  3. 第49行,加入${PROJECT_SOURCE_DIR}/.../.../.../Thirdparty/Sophus

2.2 单目可视化代码修改

bash 复制代码
gedit /Examples/Monocular/mono_euroc.cc

更改内容:

cpp 复制代码
第83行中的false改为true

2.3 环境配置文件的修改

bash 复制代码
gedit ~/.bashrc
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:PATH/ORB_SLAM3/Examples_old/ROS
source ~/.bashrc

注意: 第二条命令中的${ROS_PACKAGE_PATH}是自己文件的路径。

2.4 源码的修改

在ORB_SLAM3中的src下有个AR文件夹,里面的一些内容会导致ros可执行文件的编译,做出以下修改:

  1. 在加入以下两个头文件:
cpp 复制代码
#include <Eigen/Dense>
#include <opencv2/core/eigen.hpp>
  1. 删除ROS/ORB_SLAM3/src/AR/ros_mono_ar.cc第151行,由下面内容替换
cpp 复制代码
cv::Mat Tcw;
Sophus::SE3f Tcw_SE3f = mpSLAM->TrackMonocular(cv_ptr->image,cv_ptr->header.stamp.toSec());
Eigen::Matrix4f Tcw_Matrix = Tcw_SE3f.matrix();
cv::eigen2cv(Tcw_Matrix, Tcw);
  1. 删除ROS/ORB_SLAM3/src/AR/ViewerAR.cc第409行,由以下内容替换
cpp 复制代码
cv::Mat WorldPos;
cv::eigen2cv(pMP->GetWorldPos(), WorldPos);
vPoints.push_back(WorldPos);
  1. 删除ROS/ORB_SLAM3/src/AR/ViewerAR.cc第409行,由以下内容替换
cpp 复制代码
cv::Mat Xw;
cv::eigen2cv(pMP->GetWorldPos(), Xw);

3.ORB-SLAM3的编译

3.1 构建 ORB-SLAM3 库

按顺序执行以下命令即可:

cpp 复制代码
cd ORB_SLAM3
chmod +x build.sh
./build.sh

3.2 生成ROS节点

执行以下命令:

cpp 复制代码
cd Examples_old/ROS/ORB_SLAM3 
chmod +x build_ros.sh
./build_ros.sh

4.ORB-SLAM3的运行

4.1 非ROS环境下运行

4.1.1 EuROC数据集

用微型飞行器采集的视觉惯性数据集,包含双目相机和IMU同步测量数据及位姿的真值。

数据集需下载MH_01_easy.zip,下载地址:MH_01_easy.zip下载地址

将数据集解压,命名为MH01。
运行命令:
注意: 命令中的${dir}是个人数据的存放路径

  • 纯单目:
cpp 复制代码
cd Examples
./Monocular/mono_euroc ../Vocabulary/ORBvoc.txt ./Monocular/EuRoC.yaml ${dir}/MH01 ./Monocular/EuRoC_TimeStamps/MH01.txt dataset-MH01_mono
  • 纯双目:
cpp 复制代码
./Examples/Stereo/stereo_euroc ./Vocabulary/ORBvoc.txt ./Examples/Stereo/EuRoC.yaml ${dir}/MH01 ./Examples/Stereo/EuRoC_TimeStamps/MH01.txt dataset-MH01_stereo
  • 单目惯导:
cpp 复制代码
./Examples/Monocular-Inertial/mono_inertial_euroc ./Vocabulary/ORBvoc.txt ./Examples/Monocular-Inertial/EuRoC.yaml ${dir}/MH01 ./Examples/Monocular-Inertial/EuRoC_TimeStamps/MH01.txt dataset-MH01_monoi
  • 双目惯导:
cpp 复制代码
./Examples/Stereo-Inertial/stereo_inertial_euroc ./Vocabulary/ORBvoc.txt ./Examples/Stereo-Inertial/EuRoC.yaml ${dir}/MH01 ./Examples/Stereo-Inertial/EuRoC_TimeStamps/MH01.txt dataset-MH01_stereoi

4.1.2 TUM VI 数据集

其采用的相机和IMU传感器,在硬件上进行了时间同步。

所提供的图像具有高动态范围,事先进行了光度标定,用20Hz的帧率采集,分辨率为1024像素*1024像素;三轴IMU采样频率为200Hz,可测量加速度和角速度。

需要下载数据集dataset-room1_512_16和rgbd_dataset_freiburg1_desk。下载地址:TUM数据集下载

  • 纯单目:
cpp 复制代码
cd Examples
./Monocular/mono_tum_vi ../Vocabulary/ORBvoc.txt Monocular/TUM_512.yaml ${dir}/dataset-room1_512_16/mav0/cam0/data Monocular/TUM_TimeStamps/dataset-room1_512.txt dataset-room1_512_mono
  • 纯双目:
cpp 复制代码
./Stereo/stereo_tum_vi ../Vocabulary/ORBvoc.txt Stereo/TUM_512.yaml ${dir}/dataset-room1_512_16/mav0/cam0/data /home/sangfor/2023/bro_ws/dataset-room1_512_16/mav0/cam1/data Stereo/TUM_TimeStamps/dataset-room1_512.txt dataset-room1_512_stereo
  • 单目惯导:
cpp 复制代码
./Monocular-Inertial/mono_inertial_tum_vi ../Vocabulary/ORBvoc.txt Monocular-Inertial/TUM_512.yaml ${dir}/dataset-room1_512_16/mav0/cam0/data Monocular-Inertial/TUM_TimeStamps/dataset-room1_512.txt Monocular-Inertial/TUM_IMU/dataset-room1_512.txt dataset-room1_512_monoi
  • 双目惯导:
cpp 复制代码
./Monocular-Inertial/mono_inertial_tum_vi ../Vocabulary/ORBvoc.txt Monocular-Inertial/TUM_512.yaml ${dir}/dataset-room1_512_16/mav0/cam0/data Monocular-Inertial/TUM_TimeStamps/dataset-room1_512.txt Monocular-Inertial/TUM_IMU/dataset-room1_512.txt dataset-room1_512_monoi
  • RGB-D:
cpp 复制代码
./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUM1.yaml ${dir}/rgbd_dataset_freiburg1_desk /home/sangfor/2023/bro_ws/rgbd_dataset_freiburg1_desk/associations.txt

4.2 ROS环境下运行

首先,打开三个终端

在第一个终端上面运行roscore

接着在其余两个终端上,分别运行以下命令:

  • 纯单目:
cpp 复制代码
rosrun ORB_SLAM3 Mono Vocabulary/ORBvoc.txt Examples/Monocular/EuRoC.yaml
rosbag play MH_01_easy.bag /cam0/image_raw:=/camera/image_raw
  • 纯双目:
cpp 复制代码
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
  • 单目惯导:
cpp 复制代码
rosrun ORB_SLAM3 Mono_Inertial Vocabulary/ORBvoc.txt Examples/Monocular-Inertial/EuRoC.yaml
rosbag play MH_01_easy.bag
  • 双目惯导:
cpp 复制代码
rosrun ORB_SLAM3 Stereo_Inertial Vocabulary/ORBvoc.txt Examples/Stereo-Inertial/EuRoC.yaml false
rosbag play MH_01_easy.bag /cam0/image_raw:=/camera/left/image_raw /cam1/image_raw:=/camera/right/image_raw /imu0:=/imu
  • RGB-D:
    首先要下载数据集::rgbd_dataset_freiburg1_xyz.bag,fr1/xyz选择more info找到bag文件后,然后下载。
    下载地址就是稳重已经给出的TUM数据集的下载网址。
cpp 复制代码
rosrun ORB_SLAM3 RGBD Vocabulary/ORBvoc.txt Examples/RGB-D/TUM1.yaml
rosbag play rgbd_dataset_freiburg1_xyz.bag

每条命令的运行都会有可视化界面,如下图所示:

相关推荐
2501_941800883 分钟前
从微服务限流到系统稳定性的互联网工程语法实践与多语言探索
开发语言·python
GalenZhang8883 分钟前
使用 Python SDK 将数据写入飞书多维表格
数据库·python·飞书·多维表格
pengdott4 分钟前
Linux进程数据结构与组织方式深度解析
linux·运维·服务器
Java 码农5 分钟前
gitlab gitrunner springboot 多环境多分支部署 (非容器方式,使用原生linux 环境)
linux·spring boot·gitlab
清水白石00811 分钟前
《深度剖析 Pandas GroupBy:底层实现机制与性能瓶颈全景解析》
开发语言·python·numpy
reasonsummer13 分钟前
【办公类-125-01】20260106期末资料多个docx合并成一个PDF打印(单数页+1空白页,双数页不变)
python·pdf
hui函数15 分钟前
python全栈入门到实战【基础篇 03】入门实操:第一个Python程序 + PyCharm使用 + 输入输出全解析
开发语言·python·pycharm
LongQ30ZZ20 分钟前
Linux的常见指令
linux·服务器
走向IT22 分钟前
vdbench在Centos系统上联机测试环境搭建
linux·运维·centos
极客小云24 分钟前
【Python pip换源教程:国内镜像源配置方法(清华/阿里云/中科大源)】
开发语言·python·pip