保姆级教程:在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与OpenCVCeres 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_DIRON -DBUILD_TESTINGOFF make -j$(nproc) # 根据CPU核心数调整编译线程 sudo make installOpenCV的安装更是个大坑——系统自带的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_TYPERelease -D WITH_CUDAOFF .. make -j$(nproc) sudo make install验证安装时这两个命令应该不报错pkg-config --modversion ceres # 输出1.14.0 pkg-config --modversion opencv # 输出3.4.153. 编译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_TYPERelease 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年稳定版本编译前必须修改两处关键配置在vins_estimator/CMakeLists.txt中增加find_package(OpenCV 3.4 REQUIRED)在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_highgui4. 运行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_width和image_height参数匹配实际数据集分辨率增加max_num_iterations到8能提升精度但会降低速度第一次看到RVIZ中完整轨迹时的成就感绝对值得这些折腾。记得保存你的工作空间——下次换电脑时直接拷贝整个vins_ws文件夹能省去90%的配置时间。