1. 系统要求与环境准备

1.1 操作系统

  • Ubuntu 22.04 LTS (Jammy Jellyfish)

1.2 ROS2 版本

  • ROS2 Humble Hawksbill

如果尚未安装 ROS2 Humble,请先安装桌面版(推荐)。这里不重复安装步骤,可参考 ROS2 官方文档 进行。

1.3 OpenCV 版本要求

ORB-SLAM3 依赖 OpenCV ≥ 4.4,Ubuntu 22.04 官方仓库提供的版本为 4.5.4,版本匹配,直接安装即可:

sudo apt update
sudo apt install libopencv-dev python3-opencv

安装后确认版本:

pkg-config --modversion opencv4

应当输出 4.5.44.5.4d 之类的版本。如果环境中有多个 OpenCV 版本,后续编译时需注意指定路径。

1.4 安装 ROS2 相关功能包

ORB_SLAM3_ROS2 需要 cv_bridgemessage_filters

sudo apt install ros-humble-vision-opencv ros-humble-message-filters

1.5 安装 ROS1 + ros1_bridge(用于回放 ROS1 bag)

如果需要使用 EuRoC 等 ROS1 格式的数据包进行测试,需要安装 ROS1 Noetic(最简安装)以及 ros1_bridge。

安装 ROS1 Noetic

  • 首先添加 ROS1 源(使用现代的 GPG 密钥管理方式):
    sudo apt update && sudo apt install curl gnupg lsb-release
    sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
    echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/ros-latest.list > /dev/null
    sudo apt update
    
  • 安装基础工具(无需完整桌面环境):
    sudo apt install ros-noetic-ros-base
    
  • 初始化 rosdep(若未初始化过):
    sudo rosdep init
    rosdep update
    
  • 将 Noetic 环境变量写入 ~/.bashrc 是可选的,测试时手动 source 即可。

安装 ros1_bridge

sudo apt install ros-humble-ros1-bridge

2. 编译 ORB-SLAM3 核心库

2.1 安装 Pangolin(推荐从源码编译)

ORB-SLAM3 的可视化依赖 Pangolin。虽然可以通过 apt 安装 libpangolin-dev,但 Ubuntu 22.04 提供的版本较旧,可能引发编译或运行问题。强烈建议从源码编译最新版 Pangolin(例如 v0.8)。

# 安装 Pangolin 依赖
sudo apt install libgl1-mesa-dev libglew-dev libpython3-dev libeigen3-dev
# 克隆 Pangolin
cd ~
git clone https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin
# 使用 tag v0.8 或 v0.6(选择稳定版本)
git checkout v0.8
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j$(nproc)
sudo make install

安装后 Pangolin 的头文件和库默认位于 /usr/local/include/usr/local/lib,一般 CMake 能自动找到。

2.2 克隆 ORB-SLAM3 并安装其他依赖

cd ~
git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git ORB_SLAM3
cd ORB_SLAM3

安装编译所需系统依赖:

sudo apt install build-essential cmake git libeigen3-dev

(OpenCV 已在前面安装)

2.3 编译 ORB-SLAM3

ORB-SLAM3 仓库内含第三方库(DBoW2、g2o、Sophus),build.sh 会一并编译。

chmod +x build.sh
./build.sh

编译成功后,库文件 libORB_SLAM3.so 以及各个示例可执行文件会出现在 lib/Examples/ 目录中。

常见问题处理

  • 如果提示找不到 sophus/se3.hpp,执行:

    cd ~/ORB_SLAM3/Thirdparty/Sophus
    mkdir build && cd build
    cmake .. -DCMAKE_BUILD_TYPE=Release
    make -j$(nproc)
    sudo make install
    

    然后返回 ORB_SLAM3 根目录重新执行 ./build.sh

  • 如果遇到与 Eigen 对齐相关的编译错误,可能需要在 CMakeLists 中添加 -DCMAKE_CXX_FLAGS="-D EIGEN_DONT_VECTORIZE" 或进行其他调整。通常 Eigen 3.3.7 以上版本可正常工作。

2.4 设置运行时库路径

ORB-SLAM3 的动态库安装在 ~/ORB_SLAM3/lib 下,运行时需要让系统找到它。推荐将以下环境变量添加至 ~/.bashrc

echo "export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:\$HOME/ORB_SLAM3/lib" >> ~/.bashrc
source ~/.bashrc

否则后续运行 ROS2 节点时会因找不到 libORB_SLAM3.so 而退出。


3. 创建 ROS2 工作空间并集成 ORB_SLAM3_ROS2

3.1 创建工作空间

mkdir -p ~/colcon_ws/src
cd ~/colcon_ws/src

3.2 克隆 ROS2 封装包

git clone https://github.com/zang09/ORB_SLAM3_ROS2.git orbslam3_ros2

该仓库内包含启动节点、配置文件以及 CMakeLists 等。

3.3 修改编译配置

进入包目录并编辑 CMakeLists.txt,主要修改 ORB_SLAM3 路径

cd orbslam3_ros2

找到类似以下的行:

set(ORB_SLAM3_PATH "/home/user/ORB_SLAM3")   # 更改为你的实际路径

将其修改为你实际的 ORB_SLAM3 根目录,例如:

set(ORB_SLAM3_PATH "/home/你的用户名/ORB_SLAM3")

如果你的系统中 Python 环境特殊,可能还需要调整 Python site‑packages 路径。默认情况下注释掉即可,一般无需更改。

3.4 编译 ROS2 包

回到工作空间根目录并编译(包名在 package.xml 中为 orbslam3):

cd ~/colcon_ws
colcon build --symlink-install --packages-select orbslam3
  • --symlink-install 使 Python/配置文件修改后即时生效,无需重新编译。
  • 如果编译过程中提示找不到 OpenCV,可以显式指定 OpenCV 路径:
    colcon build --symlink-install --packages-select orbslam3 --cmake-args -DOpenCV_DIR=/usr/lib/x86_64-linux-gnu/cmake/opencv4
    
  • 如果提示找不到 ORB-SLAM3 库,请确认 ORB_SLAM3_PATH 设置正确且 ORB-SLAM3 已编译成功。

4. 运行 ORB-SLAM3 ROS2 节点

4.1 环境变量配置

每次打开新终端需加载 ROS2 环境以及工作空间:

source /opt/ros/humble/setup.bash
source ~/colcon_ws/install/local_setup.bash

同时确保 LD_LIBRARY_PATH 已包含 ORB-SLAM3 库路径(见 2.4)。建议将以上内容添加到 ~/.bashrc 中:

echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
echo "source ~/colcon_ws/install/local_setup.bash" >> ~/.bashrc
echo "export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:\$HOME/ORB_SLAM3/lib" >> ~/.bashrc
source ~/.bashrc

4.2 词典与配置文件

封装包已自带词典文件和各类相机配置,位于:

  • 词典:~/colcon_ws/src/orbslam3_ros2/vocabulary/ORBvoc.txt
  • 配置文件示例(单目、双目、RGB‑D、双目+IMU 等)在 ~/colcon_ws/src/orbslam3_ros2/config/ 目录下。

4.3 启动不同模式的 SLAM

单目 (MONO)
ros2 run orbslam3 mono \
  /home/$USER/colcon_ws/src/orbslam3_ros2/vocabulary/ORBvoc.txt \
  /home/$USER/colcon_ws/src/orbslam3_ros2/config/monocular/TUM1.yaml

请将 $USER 替换为你的用户名,或直接写绝对路径。

双目 (STEREO)
ros2 run orbslam3 stereo \
  /path/to/ORBvoc.txt \
  /path/to/stereo_config.yaml \
  true   # BOOL_RECTIFY: 是否进行立体校正
RGB‑D
ros2 run orbslam3 rgbd \
  /path/to/ORBvoc.txt \
  /path/to/rgbd_config.yaml
双目 + IMU (STEREO‑INERTIAL)
ros2 run orbslam3 stereo-inertial \
  /path/to/ORBvoc.txt \
  /path/to/stereo_inertial_config.yaml \
  true   # BOOL_RECTIFY
  false  # BOOL_EQUALIZE (可选,直方图均衡化)

节点启动后,会订阅默认话题:

  • 左相机图像:/camera/left
  • 右相机图像:/camera/right
  • IMU 数据:/imu

你需要通过传感器或数据包向这些话题发布消息。


5. 使用 EuRoC 数据集(ROS1 bag)进行测试

5.1 下载数据集

以 EuRoC 的 V1_02_medium 为例:

cd ~/Downloads
wget http://robotics.ethz.ch/~asl-datasets/ijrr_euroc_mav_dataset/vicon_room1/V1_02_medium/V1_02_medium.bag

若下载缓慢或链接失效,可到 ASL Datasets 页面寻找最新下载链接。

5.2 运行桥接与节点

需要同时打开四个终端窗口(以下称为 Shell A、B、C、D),依次执行。

Shell A – 启动 ROS1 master
source /opt/ros/noetic/setup.bash
roscore
Shell B – 启动动态桥接
source /opt/ros/noetic/setup.bash
source /opt/ros/humble/setup.bash
export ROS_MASTER_URI=http://localhost:11311
ros2 run ros1_bridge dynamic_bridge

保持窗口运行,它会自动桥接对应类型的消息。

Shell C – 播放 ROS1 bag(暂停模式,并映射话题)
source /opt/ros/noetic/setup.bash
rosbag play ~/Downloads/V1_02_medium.bag --pause \
  /cam0/image_raw:=/camera/left \
  /cam1/image_raw:=/camera/right \
  /imu0:=/imu

此时 bag 处于暂停状态,按空格键开始播放。

Shell D – 启动 ORB‑SLAM3 节点(双目+IMU 模式)
source /opt/ros/humble/setup.bash
source ~/colcon_ws/install/local_setup.bash
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/ORB_SLAM3/lib
ros2 run orbslam3 stereo-inertial \
  /home/$USER/colcon_ws/src/orbslam3_ros2/vocabulary/ORBvoc.txt \
  /home/$USER/colcon_ws/src/orbslam3_ros2/config/stereo_inertial/EuRoC.yaml \
  true

在 Shell C 中按下空格键,SLAM 节点将开始处理图像和 IMU 数据,并弹出 Pangolin 窗口显示追踪结果。


6. 常见问题排查

6.1 找不到 sophus/se3.hpp

  • 进入 ~/ORB_SLAM3/Thirdparty/Sophus,执行 mkdir build && cd build && cmake .. && make -j$(nproc) && sudo make install

6.2 OpenCV 版本冲突

  • 若系统存在多个 OpenCV 版本,编译时可用 -DOpenCV_DIR 指定系统版本路径:/usr/lib/x86_64-linux-gnu/cmake/opencv4
  • 或者移除自行编译的 OpenCV,只保留系统版本。

6.3 运行时提示 “error while loading shared libraries: libORB_SLAM3.so”

  • 确保 LD_LIBRARY_PATH 包含 ~/ORB_SLAM3/lib,并已执行 source ~/.bashrc 或手动 export。
  • 也可以将库路径添加到系统配置:echo "$HOME/ORB_SLAM3/lib" | sudo tee /etc/ld.so.conf.d/orbslam3.conf && sudo ldconfig

6.4 ros1_bridge 桥接失败

  • 确认 Shell B 中同时 source 了 Noetic 和 Humble,且 ROS_MASTER_URI 正确。
  • 确认 Shell A 的 roscore 正常启动,且端口 11311 未被占用。
  • 如果某些消息类型无法桥接,dynamic_bridge 会静默忽略,但 EuRoC 所需的图像和 IMU 消息通常都能自动桥接。

6.5 话题映射不正确

  • 检查 ORB‑SLAM3 节点订阅的话题名称(可在源码或启动日志中确认),默认是 /camera/left/camera/right/imu
  • 如果使用其他数据集,需在 rosbag play 时进行相应 remap。

6.6 Pangolin 界面闪退或无法显示

  • 确保 Pangolin 版本足够新(≥0.6),并从源码编译。
  • 若远程运行,需配置 X11 转发或使用 Xvfb(视需求而定)。

6.7 编译 ORB‑SLAM3 时 Eigen 报错

  • build.sh 或 CMake 命令中添加 -DCMAKE_CXX_FLAGS="-D EIGEN_DONT_VECTORIZE",或升级/降级 Eigen 版本。

7. 总结

本文详细介绍了如何在 Ubuntu 22.04 + ROS2 Humble 上完整部署 ORB-SLAM3 并利用 ROS2 封装节点进行实时 SLAM。流程涵盖:

  • 系统依赖与 OpenCV 准备
  • ORB-SLAM3 核心库与 Pangolin 的编译
  • ROS2 工作空间的创建与封装包集成
  • 多种传感器模式的启动方法
  • 通过 ROS1 bag + ros1_bridge 回放 EuRoC 数据集的实战步骤
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐