当前位置: 首页 > news >正文

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 install

2. 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 update

2.2 常见问题解决方案

问题1:rosdep 初始化失败

当执行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

问题2:rosdep 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__.py

2.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_TYPE=Release .. 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.txt:

    target_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.10

wget -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_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local/opencv-3.4.10 \ -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-3.4.10/modules \ -D WITH_CUDA=OFF .. make -j$(nproc) sudo make install

方案二:修改 VINS-Mono 源码适配 OpenCV 4.x

对于关键文件需要添加兼容性头文件:

文件路径需添加的内容
camera_model/include/camodocal/chessboard/Chessboard.h#include <opencv2/imgproc/types_c.h>
pose_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_TESTING=OFF -D BUILD_EXAMPLES=OFF .. make -j$(nproc) sudo make install

验证安装:

cat /usr/local/include/ceres/version.h | grep CERES_VERSION_STRING

若遇到undefined reference to 'google::FlagRegisterer'错误,需重新编译 gflags:

git clone https://github.com/gflags/gflags.git cd gflags mkdir build && cd build cmake -D BUILD_SHARED_LIBS=ON .. make && sudo make install

6. VINS-Mono 编译与数据集测试

完成所有依赖安装后,开始编译 VINS-Mono:

mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone https://github.com/HKUST-Aerial-Robotics/VINS-Mono cd .. catkin_make -j$(nproc)

运行 Euroc 数据集测试:

  1. 下载数据集到~/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
  2. 启动三个终端分别执行:

    # 终端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
  3. 预期结果:RViz 中应显示完整的相机轨迹和特征点跟踪。

7. 进阶问题排查指南

当系统运行异常时,可按以下步骤诊断:

  1. 检查话题数据

    rostopic list rostopic echo /vins_estimator/odometry
  2. 查看节点图

    rqt_graph
  3. 分析日志信息

    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)
http://www.jsqmd.com/news/601617/

相关文章:

  • AI辅助开发新思路:让快马平台模拟智能视觉决策控制小龙虾openclaw
  • 零代码文本分类:AI万能分类器WebUI,3步实现智能打标系统
  • 2023 黑月编译器插件v4.1.7.7新特性解析与应用指南
  • AI辅助开发:让快马智能推荐与优化你的openclaw启动参数
  • 别再让监控裸奔了!手把手教你修复Grafana 8.4.3那个高危的未授权访问漏洞(CVE-2022-32275)
  • claude code实战:在快马平台从零开发一个可部署的任务管理看板应用
  • 从零到一:用JavaScript在Screeps Arena中构建你的首个RTS AI
  • 从“僵尸节点”到优雅休眠:深入理解AUTOSAR NM中T_NM_Timeout的协同设计
  • 告别虚拟机!Win11下用WSL2+Ubuntu 24.04打造开发环境,顺便搞定GUI桌面(保姆级避坑)
  • 2166基于51单片机的DS1302调时电子钟系统设计(数码管,独立按键)
  • 用快马AI五分钟生成autoclaw式爬虫,快速验证数据采集原型
  • DeepSeek-R1-Distill-Qwen-1.5B模型剪枝技术:轻量化部署实战
  • C++实战:从零构建Basler相机图像采集与处理系统
  • 答辩 PPT 再也不用熬 3 天!Paperxie AI PPT,本科生 10 分钟搞定毕业答辩
  • AutoCAD二次开发避坑指南:LISP文件加载失败的5种解决方法(2024版)
  • 别再死记硬背了!用一张图搞懂NB-IoT物理层的帧、信道与时频资源
  • Halcon二值化从入门到精通:手把手教你用dyn_threshold搞定复杂光照下的目标提取
  • 别再硬熬!Paperxie AI 毕业论文功能:把本科生从论文地狱里捞出来
  • 想替代 APD?这款国产高端芯片封装设计软件推荐 (2026最新) - 品牌2026
  • Wan2.2-I2V-A14B实操手册:命令行infer.py调用+WebUI+API三模式对比
  • 别再手动搬运了!用Coze工作流+飞书多维表格,5分钟搞定视频文案批量归档
  • 别再手动删了!教你用MATLAB脚本智能跳过Mac生成的“._”文件,让文件遍历更干净
  • HunyuanVideo-Foley开发环境配置:VSCode远程连接与调试技巧
  • 使用Kali Linux中的ARP欺骗技术实现局域网流量监控
  • 低配置也能玩转AI绘画?Qwen-Image-2512+ComfyUI实测告诉你答案
  • 选2026年唐山、保定专业的环保装修设计公司怎么选 - mypinpai
  • 墨语灵犀惊艳案例分享:将莎士比亚十四行诗译为骈文体的AI生成全过程
  • 2167基于51单片机的DS18B20 HS1101温湿度检测系统设计(数码管)
  • Paperxie AI PPT 生成器,本科生的毕业答辩开挂神器
  • Qwen3-ASR-1.7B企业应用:跨国律所多语种合同谈判录音智能摘要