开发环境
- 操作系统:Windows 11
- 虚拟机:VMware Workstation 17.5
- 虚拟系统:Ubuntu 20.04.6
本文记录在 Ubuntu 20.04 虚拟机中搭建 ORB-SLAM3 开发环境并使用 EuRoC 和 TUM VI 数据集进行测试的完整流程,结合最新官方文档进行了适配和验证。
1. 安装 ROS1 及依赖
为简化依赖管理,通过 fishros 一键安装 ROS1(Noetic):
wget http://fishros.com/install -O fishros && . fishros
安装过程中选择 ROS1 版本,并保留默认配置。
安装完成后,补充安装 ffmpeg:
sudo apt install ffmpeg
2. 安装 Pangolin 0.6
Pangolin 用于可视化,需禁用对 Boost 库的依赖编译安装。
# 下载源码(建议通过浏览器下载后解压)
# https://github.com/stevenlovegrove/Pangolin/archive/refs/tags/v0.6.zip
cd pangolin-0.6
mkdir build && cd build
cmake -DCPP11_NO_BOOST=1 ..
make
sudo make install
3. 安装 ORB-SLAM3
3.1 安装基础依赖
sudo apt install git cmake gcc g++ mlocate
3.2 克隆仓库
git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git
3.3 修改配置以适配环境
检查 OpenCV 版本:
pkg-config --modversion opencv4修改
ORB-SLAM3/CMakeLists.txt:- 将
find_package(OpenCV X.X)改为find_package(OpenCV 4.2) - 将
find_package(Eigen3 X.X REQUIRED)改为find_package(Eigen3 REQUIRED)
- 将
修改
build.sh中的并行编译参数:- 将所有
make -j行改为合适的参数,注意脚本中有make -j4避免因核心不足导致编译失败
- 将所有
修改
Thirdparty/DBoW2/CMakeLists.txt:- 将
find_package(OpenCV X.X QUIET)改为find_package(OpenCV 4.2 QUIET)
- 将
启用可视化窗口:
- 编辑
Examples/Monocular/mono_euroc.cc - 将第 83 行的
false改为true
- 编辑
3.4 编译 ORB-SLAM3
cd ORB-SLAM3
chmod +x build.sh
./build.sh
4. 下载并组织 EuRoC 数据集和 TUM VI 数据集
EuRoC 数据集由 ETH 提供,包含同步的双目图像、IMU 数据及高精度真值1。
- 访问 EuRoC MAV Dataset
- 下载
MH_01_easy.zip(Machine Hall 系列) - 在
ORB-SLAM3目录下创建数据集结构ORB_SLAM3/datasets/MH01/ - 解压
MH_01_easy.zip,将内部的mav0文件夹移入MH01文件夹
TUM VI 数据集由 TUM 提供,包含同步的 RGB 图像、深度图和相机位姿真值。
- 访问 TUM CVG Dataset
- 下载
rgbd_dataset_freiburg1_desk,rgbd_dataset_freiburg1_xyz,associate.py - 运行
associate.py rgb.txt depth.txt > associate.txt生成associate.txt
5. 运行测试示例
进入 Examples 目录,根据传感器配置运行不同模式。
注意在源文件中,系统通过以下方式初始化:
ORB_SLAM3::System SLAM(argv[1], argv[2], ORB_SLAM3::System::IMU_STEREO, false);
其中false:表示 不使用可视化界面(Viewer);若设为 true 则启用 GUI
5.1 单目模式
cd ORB-SLAM3/Examples
./Monocular/mono_euroc ../Vocabulary/ORBvoc.txt ./Monocular/EuRoC.yaml /home/xjc/Desktop/ORB_SLAM3/datasets/MH01 ./Monocular/EuRoC_TimeStamps/MH01.txt
5.2 单目-惯性模式
./Monocular-Inertial/mono_inertial_euroc ../Vocabulary/ORBvoc.txt ./Monocular-Inertial/EuRoC.yaml /home/xjc/Desktop/ORB_SLAM3/datasets/MH01 ./Monocular-Inertial/EuRoC_TimeStamps/MH01.txt
5.3 双目模式
./Stereo/stereo_euroc ../Vocabulary/ORBvoc.txt ./Stereo/EuRoC.yaml /home/xjc/Desktop/ORB_SLAM3/datasets/MH01 ./Stereo/EuRoC_TimeStamps/MH01.txt
5.4 双目-惯性模式
./Stereo-Inertial/stereo_inertial_euroc ../Vocabulary/ORBvoc.txt ./Stereo-Inertial/EuRoC.yaml /home/xjc/Desktop/ORB_SLAM3/datasets/MH01 ./Stereo-Inertial/EuRoC_TimeStamps/MH01.txt dataset-MH01_stereoi
5.5 RGBD模式
sudo mount -t fuse.vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other
./RGB-D/rgbd_tum ../Vocabulary/ORBvoc.txt ./RGB-D/TUM1.yaml /mnt/hgfs/robot/datasets/rgbd_dataset_freiburg1_desk/ /mnt/hgfs/robot/datasets/rgbd_dataset_freiburg1_desk/associate.txt
结果视频如下:
Burri, M., et al. (2016). The EuRoC micro aerial vehicle datasets. The International Journal of Robotics Research. DOI:10.1177/0278364915620033 ↩︎