在机器人视觉与SLAM领域,ORB-SLAM3作为当前最先进的视觉惯性SLAM系统之一,其强大的定位与建图能力吸引了大量研究者和开发者。然而,对于初次在Ubuntu18.04和ROS Melodic环境下搭建ORB-SLAM3的用户来说,环境配置和编译过程往往充满挑战。本文将深入解析两个最常见的编译难题——OpenCV版本冲突和Pangolin兼容性问题,并提供经过验证的解决方案,帮助开发者快速搭建稳定可用的ORB-SLAM3环境。
在开始编译ORB-SLAM3之前,确保系统环境满足基本要求至关重要。Ubuntu18.04作为长期支持版本(LTS),其稳定性和兼容性使其成为ROS Melodic的理想搭档。以下是环境准备的关键步骤:
系统更新与基础依赖安装:
bash复制sudo apt-get update
sudo apt-get upgrade
sudo apt-get install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
ROS Melodic完整安装:
bash复制sudo apt-get install ros-melodic-desktop-full
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
source ~/.bashrc
Python环境配置:
bash复制sudo apt-get install python-catkin-tools python-rosdep python-rosinstall python-rosinstall-generator python-wstool
提示:在安装过程中,如果遇到依赖冲突问题,可以尝试使用
sudo apt --fix-broken install命令自动修复。
ORB-SLAM3对OpenCV的版本要求较为严格,而Ubuntu18.04默认安装的OpenCV版本可能不满足要求。以下是详细的解决步骤:
首先确认系统中已安装的OpenCV版本:
bash复制pkg-config --modversion opencv
如果输出显示版本低于3.0或高于4.4,则需要调整。
找到ORB_SLAM3项目根目录下的CMakeLists.txt文件,定位到OpenCV相关配置部分:
cmake复制# 原始配置可能如下:
find_package(OpenCV 4.4)
if(NOT OpenCV_FOUND)
message(FATAL_ERROR "OpenCV > 4.4 not found.")
endif()
修改为兼容Ubuntu18.04默认OpenCV3版本的配置:
cmake复制list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake_modules)
find_package(OpenCV 3 REQUIRED)
if(NOT OpenCV_FOUND)
message(FATAL_ERROR "OpenCV 3 not found.")
endif()
对于需要同时使用不同OpenCV版本的项目,可以采用以下方法实现版本切换:
从源码编译安装指定版本的OpenCV
使用环境变量控制版本选择:
bash复制export OpenCV_DIR=/path/to/opencv/build
在CMake中显式指定OpenCV路径:
cmake复制set(OpenCV_DIR "/path/to/opencv/build")
find_package(OpenCV REQUIRED)
Pangolin作为ORB-SLAM3的可视化工具,其最新版本与ORB-SLAM3存在兼容性问题。以下是详细的降级安装步骤:
如果系统中已安装Pangolin,首先需要彻底卸载:
bash复制cd Pangolin/build
sudo make uninstall
克隆指定版本的Pangolin仓库:
bash复制git clone --branch v0.5 https://github.com/stevenlovegrove/Pangolin.git
编译安装:
bash复制cd Pangolin
mkdir build && cd build
cmake ..
cmake --build .
sudo make install
安装完成后,可以通过以下命令验证Pangolin版本:
bash复制pkg-config --modversion pangolin
预期输出应为0.5或类似版本号。
解决了OpenCV和Pangolin的问题后,可以按照以下步骤完成ORB-SLAM3的完整编译:
bash复制git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git ORB_SLAM3
cd ORB_SLAM3
bash复制chmod +x build.sh
./build.sh
bash复制export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:$(pwd)/Examples/ROS
chmod +x build_ros.sh
./build_ros.sh
如果在编译过程中遇到其他问题,可以参考以下解决方案:
Eigen3找不到:
bash复制sudo apt-get install libeigen3-dev
DBoW2编译错误:
检查Thirdparty/DBoW2目录是否存在,如果缺失需要重新克隆仓库。
g2o链接错误:
确保系统安装了最新版本的g2o:
bash复制sudo apt-get install libg2o-dev
成功编译ORB-SLAM3后,可以使用公开数据集进行测试。以下是EuRoC数据集的测试流程:
从官方网站下载数据集并解压:
bash复制wget http://robotics.ethz.ch/~asl-datasets/ijrr_euroc_mav_dataset/vicon_room1/...
对于双目视觉测试:
bash复制./Examples/Stereo/stereo_euroc ./Vocabulary/ORBvoc.txt ./Examples/Stereo/EuRoC.yaml "$pathDatasetEuroc"/MH01 ./Examples/Stereo/EuRoC_TimeStamps/MH01.txt dataset-MH01_stereo
使用内置评估脚本计算绝对轨迹误差:
bash复制python evaluation/evaluate_ate_scale.py evaluation/Ground_truth/EuRoC_left_cam/MH01_GT.txt f_dataset-MH01_stereo.txt --plot MH01_stereo.pdf
典型评估结果如下:
| 指标 | 值(m) |
|---|---|
| RMSE | 0.025 |
| 均值 | 0.022 |
| 中位数 | 0.022 |
| 标准差 | 0.012 |
在真实场景中部署ORB-SLAM3时,以下几点经验值得注意:
在多次项目实践中发现,ORB-SLAM3对光照条件变化较为敏感,在室内外过渡场景中,适当调整曝光参数可以显著提高跟踪稳定性。