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

保姆级教程:在Ubuntu 20.04上从零编译运行VINS-Fusion(避坑指南+数据集实测)

保姆级教程:在Ubuntu 20.04上从零编译运行VINS-Fusion(避坑指南+数据集实测)

刚接触VINS-Fusion时,我被它强大的多传感器融合能力吸引,但第一次尝试编译就遭遇了各种依赖冲突和编译错误。经过三个晚上的折腾,终于用EuRoC数据集跑通了第一个demo。如果你也正在Ubuntu 20.04上搭建这个环境,不妨跟着我的完整记录走一遍——所有坑点都已标注,连sudo密码该在哪步输入都会提醒。

1. 环境准备:ROS Noetic与基础依赖

在全新的Ubuntu 20.04系统上,建议先更新软件源并安装基础编译工具。这个阶段最容易遇到的问题是网络连接超时和旧版本残留:

sudo apt update && sudo apt upgrade -y sudo apt install -y git cmake g++ python3-catkin-pkg python3-osrf-pycommon

注意:如果之前安装过ROS其他版本,务必先执行sudo apt remove ~nros-* && sudo apt autoremove彻底清理

安装ROS Noetic时,官方推荐的安装命令可能会漏掉关键组件。以下是经过验证的完整安装方案:

sudo sh -c 'echo "deb http://packages.ros.org/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 sudo apt install -y ros-noetic-desktop-full ros-noetic-cv-bridge ros-noetic-tf

验证ROS安装是否成功时,建议用以下命令测试核心功能:

source /opt/ros/noetic/setup.bash roscore & # 后台运行ROS核心 rosnode list # 应显示/rosout节点

2. 关键依赖安装:Ceres Solver与OpenCV

Ceres Solver的安装最容易出现版本冲突。经过测试,1.14.0版本与VINS-Fusion兼容性最好:

git clone --branch 1.14.0 https://ceres-solver.googlesource.com/ceres-solver mkdir ceres-build && cd ceres-build cmake ../ceres-solver -DEXPORT_BUILD_DIR=ON -DBUILD_TESTING=OFF make -j$(nproc) # 根据CPU核心数调整编译线程 sudo make install

OpenCV的安装更是个大坑——系统自带的4.2版本存在与PCL的兼容性问题。推荐从源码编译3.4.15版本:

wget -O opencv.zip https://github.com/opencv/opencv/archive/3.4.15.zip unzip opencv.zip && cd opencv-3.4.15 mkdir build && cd build cmake -D CMAKE_BUILD_TYPE=Release -D WITH_CUDA=OFF .. make -j$(nproc) sudo make install

验证安装时,这两个命令应该不报错:

pkg-config --modversion ceres # 输出1.14.0 pkg-config --modversion opencv # 输出3.4.15

3. 编译VINS-Fusion源码

创建工作空间时,很多教程会忽略Python3兼容性设置。正确的初始化姿势是:

mkdir -p ~/vins_ws/src cd ~/vins_ws catkin config --init --mkdirs --extend /opt/ros/noetic --merge-devel --cmake-args -DCMAKE_BUILD_TYPE=Release catkin config --blacklist vins_estimator

克隆代码时要注意,官方仓库的master分支可能不稳定。我测试时这个commit最可靠:

cd ~/vins_ws/src git clone https://github.com/HKUST-Aerial-Robotics/VINS-Fusion.git cd VINS-Fusion git checkout 90f4b3c # 2023年稳定版本

编译前必须修改两处关键配置:

  1. vins_estimator/CMakeLists.txt中增加find_package(OpenCV 3.4 REQUIRED)
  2. global_fusion/ThirdParty/GeographicLib/CMakeLists.txt注释掉-Werror编译选项

正式编译命令应该这样用:

cd ~/vins_ws catkin build -j$(nproc) --mem-limit 50% # 限制内存防止卡死

遇到"undefined reference tocv::imshow'"错误时,在CMakeLists.txt的target_link_libraries中添加opencv_highgui`

4. 运行EuRoC数据集测试

下载数据集后,很多人直接运行启动文件,却忽略了时间戳同步问题。正确的启动流程应该是:

roslaunch vins vins_rviz.launch & # 先启动可视化界面 rosrun vins vins_node ~/vins_ws/src/VINS-Fusion/config/euroc/euroc_stereo_imu_config.yaml rosrun loop_fusion loop_fusion_node ~/vins_ws/src/VINS-Fusion/config/euroc/euroc_stereo_imu_config.yaml rosbag play YOUR_DATASET_FOLDER/MH_01_easy.bag # 以0.8倍速播放更稳定

常见问题排查表:

现象可能原因解决方案
终端卡在"wait for imu..."数据集路径错误检查bag文件路径是否含中文或空格
轨迹漂移严重IMU-Camera标定不准重新校准或改用官方标定参数
RVIZ不显示图像OpenCV版本冲突确认编译链接的是3.4.x版本
段错误(core dumped)Eigen版本不匹配强制使用系统自带的3.3.7版本

优化性能的小技巧:

  • euroc_stereo_imu_config.yaml中将use_loop改为false可关闭回环检测提升帧率
  • 修改image_widthimage_height参数匹配实际数据集分辨率
  • 增加max_num_iterations到8能提升精度但会降低速度

第一次看到RVIZ中完整轨迹时的成就感,绝对值得这些折腾。记得保存你的工作空间——下次换电脑时直接拷贝整个vins_ws文件夹,能省去90%的配置时间。

http://www.jsqmd.com/news/677495/

相关文章:

  • 如何用WebPlotDigitizer彻底改变你的科研数据处理方式
  • M1 Mac到手后,我花半小时把iTerm2终端调教成了这样(附保姆级配置清单)
  • HY-MT1.5-1.8B真实案例:用它翻译技术文档效果有多好?
  • Platinum-MD:让复古Minidisc焕发新生的现代音乐管理工具
  • 别再死记硬背了!用‘快递员送信’的故事,5分钟搞懂PKI、数字证书和CA到底在干啥
  • 保姆级教程:用树莓派CM4 eMMC版打造你的专属监控主机(从烧写到双摄像头配置)
  • FPGA新手避坑指南:Vivado 2023.1里用Clocking Wizard生成100MHz时钟,为啥我的板子不工作?
  • 深度掌控显卡性能:NVIDIA Profile Inspector 5大隐藏技巧全解析
  • 从端口到数据:深入解析EC与BIOS/OS的通信协议
  • 3步守护青春记忆:如何让QQ空间数据永久陪伴你?
  • Homebrew换源后安装Node.js还是报404?可能是你的缓存和源配置在‘打架’
  • 保姆级教程:用nvidia-smi命令行打造你的GPU资源监控看板(含自动记录与告警思路)
  • Python多线程微博相册批量下载器:架构设计与实现原理
  • 深入解析C++STL list实现
  • 高性能浏览器图片格式转换架构解析:为什么选择离屏Canvas处理方案
  • Win11下ISE彻底罢工?保姆级教程:在Ubuntu 18.04虚拟机里复活ISE 14.7和ModelSim
  • 别再只用default用户了!Redis ACL权限管理避坑指南与5个常见配置错误
  • 别再只会用JMeter录脚本了!手把手教你从零手写一个性能测试计划(含线程组、监听器配置)
  • 拆解安全生产管理系统的四大核心功能,看精益的安全生产如何解决隐患查不全与整改闭环难问题
  • 3D模型格式转换终极指南:5步实现GLB到B3DM的高效转换
  • 新谈设计模式 Chapter 17 — 备忘录模式 Memento
  • 新手必看:在MATLAB的platEMO工具箱里,如何快速找到并读懂MOEA/D、NSGA-III这些经典算法的原始论文?
  • 2026直流/交流/防爆伺服电机哪个品牌好?十大厂家实力全解析 - 品牌推荐大师1
  • 多维度拆透渲染引擎 第二篇【维度:边界】五组“不等式“ —— 渲染引擎 ≠ 的那些东西
  • 51单片机入门实战:用独立按键控制数码管显示0~9(附Proteus仿真文件)
  • 终极指南:3分钟学会RPG Maker游戏资源解密与加密
  • 别再手动操作了!用CAPL的sysExecCmd一键调用Python脚本处理CANoe数据(附完整代码)
  • Anthropic CFO拉奥:如何将公司从实验室变成资本巨兽?
  • ComfyUI_TensorRT:NVIDIA GPU的AI推理加速引擎
  • VOCs治理需求持续升级!国内十大蜂窝炭厂家综合实力盘点(附选型建议) - 速递信息