Ubuntu 20.04 上 VINS-Mono 环境搭建避坑全记录:从 ROS Noetic 到 OpenCV 版本冲突解决

张开发
2026/4/7 9:56:07 15 分钟阅读

分享文章

Ubuntu 20.04 上 VINS-Mono 环境搭建避坑全记录:从 ROS Noetic 到 OpenCV 版本冲突解决
Ubuntu 20.04 上 VINS-Mono 环境搭建避坑全记录从 ROS Noetic 到 OpenCV 版本冲突解决在视觉惯性里程计VIO领域VINS-Mono 凭借其出色的性能和稳定性成为众多研究者和开发者的首选方案。然而对于初次在 Ubuntu 20.04 系统上部署该框架的开发者来说从 ROS Noetic 安装到各类依赖库的版本冲突每一步都可能成为阻碍项目顺利进行的暗礁。本文将基于实际项目经验系统梳理环境搭建过程中的典型问题及其解决方案帮助开发者避开那些耗费数小时甚至数天的深坑。1. 系统准备与基础依赖安装在开始 VINS-Mono 环境搭建前确保系统处于最佳状态至关重要。Ubuntu 20.04 作为长期支持版本其软件源中的包版本与 VINS-Mono 的要求存在一定差异需要特别注意兼容性问题。首先更新系统并安装基础编译工具sudo apt update sudo apt upgrade -y sudo apt install -y build-essential cmake git wget unzip关键依赖项安装命令如下sudo apt install -y libeigen3-dev libboost-all-dev libsuitesparse-dev注意Eigen3 的版本直接影响后续 Ceres Solver 的编译建议通过以下命令确认版本dpkg -s libeigen3-dev | grep Version若版本低于 3.3.7需要手动升级wget https://gitlab.com/libeigen/eigen/-/archive/3.3.9/eigen-3.3.9.tar.gz tar -xzf eigen-3.3.9.tar.gz cd eigen-3.3.9 mkdir build cd build cmake .. sudo make install2. ROS Noetic 安装与疑难排解作为 VINS-Mono 的核心依赖ROS Noetic 的安装过程常常会遇到网络问题和初始化失败。以下是经过验证的完整安装流程2.1 配置软件源与密钥sudo sh -c echo deb http://mirrors.ustc.edu.cn/ros/ubuntu $(lsb_release -sc) main /etc/apt/sources.list.d/ros-latest.list sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 sudo apt update2.2 常见问题解决方案问题1rosdep 初始化失败当执行sudo rosdep init时出现连接错误可尝试以下解决方案sudo mkdir -p /etc/ros/rosdep/sources.list.d/ sudo curl -o /etc/ros/rosdep/sources.list.d/20-default.list https://mirror.tuna.tsinghua.edu.cn/help/rosdistro/20-default.list问题2rosdep update 超时修改 rosdep 的下载源sudo sed -i s/https:\/\/raw.githubusercontent.com\/ros\/rosdistro\/master/https:\/\/mirror.tuna.tsinghua.edu.cn\/github-raw\/ros\/rosdistro\/master/g /usr/lib/python3/dist-packages/rosdep2/sources_list.py sudo sed -i s/https:\/\/raw.githubusercontent.com\/ros\/rosdistro\/master/https:\/\/mirror.tuna.tsinghua.edu.cn\/github-raw\/ros\/rosdistro\/master/g /usr/lib/python3/dist-packages/rosdistro/__init__.py2.3 完整安装与验证sudo apt install -y ros-noetic-desktop-full echo source /opt/ros/noetic/setup.bash ~/.bashrc source ~/.bashrc sudo apt install -y python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool验证安装成功roscore # 后台运行 rosnode list # 应显示/rosout killall roscore # 结束测试3. Pangolin 可视化工具安装Pangolin 作为轻量级的可视化工具在 VINS-Mono 中用于实时显示轨迹和特征点。安装时需注意 OpenGL 驱动兼容性sudo apt install -y libglew-dev libpython2.7-dev git clone --recursive https://github.com/stevenlovegrove/Pangolin.git cd Pangolin mkdir build cd build cmake -DCMAKE_BUILD_TYPERelease .. make -j$(nproc) sudo make install常见编译问题及解决错误Could NOT find OpenGL安装缺失的依赖sudo apt install -y libgl1-mesa-dev libglu1-mesa-dev错误undefined reference to glewInit确保链接顺序正确修改 CMakeLists.txttarget_link_libraries(${PROJECT_NAME} ${Pangolin_LIBRARIES} GLEW GL)4. OpenCV 版本冲突深度解决Ubuntu 20.04 默认安装的 OpenCV 4.2 与 VINS-Mono 要求的 OpenCV 3.x 存在 API 不兼容问题。以下是两种解决方案方案一源码编译 OpenCV 3.4.10wget -O opencv.zip https://github.com/opencv/opencv/archive/3.4.10.zip wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/3.4.10.zip unzip opencv.zip unzip opencv_contrib.zip cd opencv-3.4.10 mkdir build cd build cmake -D CMAKE_BUILD_TYPERELEASE \ -D CMAKE_INSTALL_PREFIX/usr/local/opencv-3.4.10 \ -D OPENCV_EXTRA_MODULES_PATH../../opencv_contrib-3.4.10/modules \ -D WITH_CUDAOFF .. make -j$(nproc) sudo make install方案二修改 VINS-Mono 源码适配 OpenCV 4.x对于关键文件需要添加兼容性头文件文件路径需添加的内容camera_model/include/camodocal/chessboard/Chessboard.h#include opencv2/imgproc/types_c.hpose_graph/src/ThirdParty/DVision/BRIEF.cpp#include opencv2/imgproc/imgproc_c.h建议在开发环境中使用方案一生产环境可考虑方案二以减少依赖复杂度。5. Ceres Solver 优化库安装Ceres Solver 的版本选择直接影响 VINS-Mono 的稳定性。推荐使用 1.14.0 版本wget https://ceres-solver.googlesource.com/ceres-solver/archive/1.14.0.tar.gz tar -xzf 1.14.0.tar.gz cd ceres-solver-1.14.0 mkdir build cd build cmake -D BUILD_TESTINGOFF -D BUILD_EXAMPLESOFF .. make -j$(nproc) sudo make install验证安装cat /usr/local/include/ceres/version.h | grep CERES_VERSION_STRING若遇到undefined reference to google::FlagRegisterer错误需重新编译 gflagsgit clone https://github.com/gflags/gflags.git cd gflags mkdir build cd build cmake -D BUILD_SHARED_LIBSON .. make sudo make install6. VINS-Mono 编译与数据集测试完成所有依赖安装后开始编译 VINS-Monomkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone https://github.com/HKUST-Aerial-Robotics/VINS-Mono cd .. catkin_make -j$(nproc)运行 Euroc 数据集测试下载数据集到~/catkin_ws目录wget http://robotics.ethz.ch/~asl-datasets/ijrr_euroc_mav_dataset/vicon_room1/V1_01_easy/V1_01_easy.zip unzip V1_01_easy.zip启动三个终端分别执行# 终端1 source devel/setup.bash roslaunch vins_estimator euroc.launch # 终端2 source devel/setup.bash roslaunch vins_estimator vins_rviz.launch # 终端3 source devel/setup.bash rosbag play V1_01_easy.bag预期结果RViz 中应显示完整的相机轨迹和特征点跟踪。7. 进阶问题排查指南当系统运行异常时可按以下步骤诊断检查话题数据rostopic list rostopic echo /vins_estimator/odometry查看节点图rqt_graph分析日志信息roslaunch --screen vins_estimator euroc.launch常见错误代码及解决方案错误提示可能原因解决方案Failed to load module canberra-gtk-module缺失 GTK 模块sudo apt install libcanberra-gtk-module[ERROR] [1645678901.123456]: waitForService: ServiceROS 节点启动顺序错误确保 rosbag play 最后启动Segmentation fault (core dumped)内存越界或版本冲突检查 Eigen 和 Ceres 版本兼容性对于性能优化可尝试修改config/euroc_config.yaml中的参数feature: max_cnt: 150 # 特征点最大数量 min_dist: 30 # 特征点最小间距 freq: 10 # 处理频率(Hz)

更多文章