Ubuntu 20.04 ROS Noetic 下 ORB-SLAM3 全流程实战指南在视觉SLAM领域ORB-SLAM3凭借其出色的多传感器融合能力和鲁棒性成为研究热点。本文将带你从零开始在Ubuntu 20.04和ROS Noetic环境下完成ORB-SLAM3的完整部署与EuRoC数据集测试。不同于零散的教程我们特别整理了20常见编译错误的系统化解决方案确保你能一次性走通全流程。1. 环境准备与依赖安装在开始编译ORB-SLAM3之前需要确保系统环境满足以下要求Ubuntu 20.04.6 LTS推荐纯净安装ROS Noetic完整桌面版CMake 3.16需支持C14首先安装基础依赖库sudo apt-get update sudo apt-get install -y git cmake g python3-dev libeigen3-dev libboost-all-dev关键第三方库的版本选择直接影响编译成功率库名称推荐版本安装方式Pangolinv0.6 (commit 86eb497)源码编译OpenCV4.2.0apt安装Eigen33.3.7apt安装特别提醒Pangolin版本兼容性是导致90%编译失败的根源。建议使用以下命令安装指定版本git clone --recursive https://github.com/stevenlovegrove/Pangolin.git cd Pangolin git checkout 86eb497 mkdir build cd build cmake .. -DCMAKE_BUILD_TYPERelease make -j4 sudo make install2. ORB-SLAM3源码编译全流程2.1 源码获取与准备推荐使用带详细注释的改进版本便于后续调试git clone https://github.com/electech6/ORB_SLAM3_detailed_comments.git cd ORB_SLAM3_detailed_comments chmod x build.sh在编译前需要特别注意删除所有已有的build目录包括Thirdparty中的检查CMakeLists.txt中的OpenCV路径2.2 解决典型编译错误以下是三个最常见的编译问题及解决方案错误1Sophus重定义冲突redefinition of class Sophus::SE3Groupdouble修改Thirdparty/Sophus/sophus/se3.hpp// 注释掉原有定义 // template class Sophus::SE3Groupdouble;错误2usleep未声明error: usleep was not declared in this scope在报错文件头部添加#include unistd.h错误3Pangolin链接错误undefined reference to pangolin::CreateWindowAndBind确认Pangolin安装路径后修改CMakeLists.txtfind_package(Pangolin REQUIRED) include_directories(${Pangolin_INCLUDE_DIRS})2.3 完整编译命令分步执行以下命令# 清理旧编译文件 rm -rf build/ Thirdparty/DBoW2/build/ Thirdparty/g2o/build/ # 主程序编译 ./build.sh # ROS接口编译需先配置catkin工作空间 ./build_ros.sh提示若遇到rosbuild_init错误需检查ROS_PACKAGE_PATH是否包含工作空间路径3. EuRoC数据集测试实战3.1 数据集准备与配置从官网下载MH_01_easy数据集建议目录结构~/Datasets/EuRoC/MH_01/mav0/ ├── cam0 ├── imu0 └── state_groundtruth_estimate0修改配置文件EuRoC.yaml中的# 相机参数 Camera.fps: 20 Camera.bf: 47.90639384423901 # IMU噪声参数 IMU.NoiseGyro: 1.7e-4 IMU.NoiseAcc: 2.0e-33.2 运行与可视化启动单目IMU模式./Examples/Monocular-Inertial/mono_inertial_euroc \ ./Vocabulary/ORBvoc.txt \ ./Examples/Monocular-Inertial/EuRoC.yaml \ ~/Datasets/EuRoC/MH_01 \ ./Examples/Monocular-Inertial/EuRoC_TimeStamps/MH01.txt \ MH01实时可视化技巧按空格键暂停/继续鼠标拖动旋转视角滚轮缩放地图3.3 性能优化参数在EuRoC.yaml中调整关键参数提升效果参数名默认值优化建议影响范围ORBextractor.nFeatures1200800-2000特征点密度ORBextractor.scaleFactor1.21.1-1.3金字塔尺度Viewer.KeyFrameSize0.050.03-0.1关键帧显示大小4. ROS集成与实时运行4.1 创建工作空间mkdir -p ~/catkin_ws/src cd ~/catkin_ws catkin_make source devel/setup.bash4.2 修改ROS接口配置关键调整点在ros_mono_inertial.cc中修改话题订阅ros::Subscriber sub_imu n.subscribe(/camera/imu, 1000, ImuGrabber::GrabImu, imugb); ros::Subscriber sub_img0 n.subscribe(/camera/image_raw, 100, ImageGrabber::GrabImage, igb);解决常见启动错误# 若出现package找不到错误 source ~/catkin_ws/devel/setup.bash export ROS_PACKAGE_PATH${ROS_PACKAGE_PATH}:~/ORB_SLAM3/Examples/ROS4.3 运行实时SLAM启动顺序先启动相机驱动节点再运行ORB-SLAM3rosrun ORB_SLAM3 Mono_Inertial \ Vocabulary/ORBvoc.txt \ Examples/Monocular-Inertial/EuRoC.yaml在调试过程中发现使用rqt_image_view实时查看特征点提取效果能快速定位问题。当轨迹漂移严重时优先检查IMU-相机外参标定精度。