
VINS-Fusion这个名字做SLAM的人应该都不陌生。它是港科大沈劭劼团队开源的视觉惯性导航系统支持单目IMU、双目IMU以及纯双目三种模式在无人机、AR设备、自动驾驶感知等领域都有大量落地案例。不过在Ubuntu 20.04上把它完整跑起来坦白说没想象中顺利——光是Ceres版本、OpenCV的ABI兼容、ROS Noetic的rosdep初始化这三个环节就够新手喝一壶的。我这篇就把自己在Ubuntu 20.04上从零跑通VINS-Fusion的全过程整理出来包括环境选型、依赖编译、源码编译、EuRoC数据集实测以及那些让我折腾到半夜的坑。目标很明确你照着一步步做能在一个干净的Ubuntu 20.04里把VINS-Fusion跑起来还能看懂launch文件和参数在干什么而不是只会复制粘贴命令。1. 为什么选择Ubuntu 20.04跑VINS-Fusion以及环境准备阶段的关键决策1.1 VINS-Fusion的定位与本文适用场景先说清楚VINS-Fusion能干什么。它本质上是把视觉特征点跟踪和IMU预积分通过紧耦合的方式融合在一起输出相机在空间中的六自由度位姿估计。与ORB-SLAM3相比VINS-Fusion最大的特点是做了多传感器融合的工程化封装你既可以用它跑数据集做效果验证也可以通过ROS topic直接接自己的相机和IMU数据还有GPS融合模块方便做室外大场景测试。本文的适用对象有两类一是刚入门SLAM、想在Ubuntu 20.04上有一个可视化跑通结果的初学者二是已经在别的平台上跑过VINS-Fusion换到20.04后踩了Ceres或OpenCV版本坑的开发者。如果你属于前者建议先把Linux基本命令捋一遍因为后续编译过程中涉及大量的路径操作和环境变量配置。1.2 Ubuntu 20.04 ROS Noetic的组合逻辑为什么选Ubuntu 20.04因为它对应的是ROS Noetic这是ROS 1最后一个官方长期支持版本2025年才结束维护目前大部分开源SLAM包仍然默认基于它做测试。与之匹配的OpenCV是4.2.0系统自带的libopencv-devEigen版本是3.3.7这两个版本恰好都在VINS-Fusion的兼容范围内。有些朋友问要不要直接上Ubuntu 22.04 ROS 2 Humble。如果你只是想把VINS-Fusion跑通我不建议这么做。VINS-Fusion官方源码的设计逻辑是基于ROS 1的catkin工作空间虽然ROS 2有兼容方案但很多launch文件和消息类型需要额外适配没必要给自己加戏。另外Ubuntu 22.04系统自带OpenCV 4.5.4编译时如果没注意cv_bridge的依赖关系很容易出现OpenCV版本不匹配的深层错误。1.3 装系统阶段最容易被忽略的三件事很多人在VINS-Fusion编译阶段才回头补系统环境的坑其实问题早在装系统时就埋下了。我总结三个最容易翻车的点第一软件源。安装完Ubuntu 20.04后第一件事就是换国内镜像源。以清华源为例在/etc/apt/sources.list里把archive.ubuntu.com替换成mirrors.tuna.tsinghua.edu.cn然后sudo apt update。这一步不做后面装ROS时会慢到怀疑人生。第二网络配置。如果你是在VMware虚拟机里装Ubuntu默认NAT模式经常会出现网络问号图标——也就是系统显示无网络连接。这时候检查一下虚拟机设置里的网络适配器确认是NAT或桥接模式然后在Ubuntu里把有线连接关掉重开。另外VMware的默认DHCP租约时间比较短虚拟机里执行sudo dhclient -r再sudo dhclient可以快速重新获取IP。第三显卡驱动。如果你要用GPU加速或者接显示器的实时SLAM比如Realsense相机必须装NVIDIA驱动。最省事的方式是sudo ubuntu-drivers autoinstall它会自动匹配推荐版本。进入系统后执行nvidia-smi能正常输出显卡信息就算成功。注意不要在软件更新里乱勾选驱动版本尤其别手动装535之前的老版本实测在Ubuntu 20.04内核5.15下容易跟X server冲突。2. ROS Noetic安装与工作空间搭建最容易卡住的两处细节2.1 ROS Noetic完整安装步骤ROS Noetic的官方安装流程本身不复杂但有几个细节需要提前说清楚。先添加ROS软件源再添加密钥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 install curl curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add - sudo apt update这里有个国内环境下的惯用操作如果你访问raw.githubusercontent.com不稳定可以直接用sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys F42ED6FBAB17C654添加ROS官方的GPG密钥效果一样。密钥添加失败是新手最常见的报错来源之一后续所有的apt update都会显示NO_PUBKEY但不会立即报错等装ROS时才崩。密钥搞定后安装完整桌面版sudo apt install ros-noetic-desktop-full这一步会安装包括RViz、Gazebo、rqt等在内的全套工具大概占用2GB左右磁盘空间。只做SLAM算法研究的话ros-noetic-desktop其实就够用但后续调试轨迹、看点云都离不开RViz所以我建议直接装desktop-full省得后面补装。2.2 rosdep init和update的经典卡点装完ROS本体后官方教程会要求执行sudo rosdep init rosdep update这两个命令是新手重灾区。rosdep init失败通常是因为网络访问raw.githubusercontent.com超时表现为卡在Downloading或者直接报错。常见解决办法是手动下载rosdistro文件放到/usr/lib/python3/dist-packages/rosdep2/sources_list.py对应的缓存目录里或者用国内镜像源把20-default.list和rosdistro目录同步过来。我在实际部署时发现一个更省事的方法直接用pip3 install rosdep重装一份rosdep然后手动修改/etc/ros/rosdep/sources.list.d/20-default.list把里面的github地址换成gitee镜像。手动镜像rosdistro仓库到~/rosdistro目录也行关键就是让rosdep能正常读到master.yaml里各个包的依赖定义。如果你只是编译VINS-Fusion而且依赖库全部手动安装Ceres、OpenCV、Eigen其实可以跳过rosdep update直接进工作空间编译。不过后面你可能还会编译其他ROS包rosdep update迟早要做所以我还是建议把它搞定。2.3 创建catkin工作空间并配置环境变量VINS-Fusion的编译依赖catkin工作空间这里有一个很多人没注意的点工作空间名字建议用catkin_ws路径最好不要带中文或空格。创建并初始化mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src catkin_init_workspace cd ~/catkin_ws catkin_make第一次catkin_make会生成devel和build目录此时还没放任何功能包所以编译速度很快。编译完成后添加环境变量echo source ~/catkin_ws/devel/setup.bash ~/.bashrc source ~/.bashrc这里务必注意source顺序极其重要。如果你的.bashrc里有多行source必须保证/opt/ros/noetic/setup.bash在上、~/catkin_ws/devel/setup.bash在下后source的会覆盖前者的ROS_PACKAGE_PATH。如果顺序反了运行VINS-Fusion的launch文件时会报找不到功能包。3. 依赖库编译踩坑Ceres Solver与OpenCV的版本陷阱3.1 OpenCV系统自带还是自己编译Ubuntu 20.04自带的OpenCV 4.2.0是C编译的ABI版本VINS-Fusion官方在README里明确支持OpenCV 4.x系列。但这里有个隐藏问题ROS Noetic的cv_bridge默认链接的是系统OpenCV 4.2.0如果你自己编译了OpenCV 4.5.x或4.6.x并覆盖了系统路径cv_bridge会链接到不同版本的OpenCV运行时会报OpenCV(4.6.0) /opt/ros/noetic/lib/libcv_bridge.so ... undefined symbol之类的错误。我的建议是除非你有特殊需求否则直接用系统自带的OpenCV不要自己编译。VINS-Fusion用到的OpenCV功能无非是特征提取、图像显示、矩阵转换4.2.0完全够用。你只需要确认安装了开发库sudo apt install libopencv-dev如果你确实需要更高版本的OpenCV正确做法是编译到/usr/local并设置OpenCV_DIR但一定要同时用源码重新编译cv_bridge指向新版OpenCV否则就会陷入上面说的ABI冲突。这个坑我踩过一整晚至今记忆犹新。3.2 Ceres Solver编译版本不能乱选Ceres Solver是VINS-Fusion最核心的第三方依赖用于执行非线性优化中的求解。VINS-Fusion要求Ceres Solver 1.14.0或更高版本但如果你装了Ubuntu源里的老版本1.13.0编译VINS-Fusion时会因为缺新API而挂掉。推荐去GitHub下载Ceres Solver 1.14.0或2.0.0源码编译实测都OK。2.0.0版本内部做过比较大的改动但对VINS-Fusion的接口影响不大。编译前需要装依赖sudo apt install libgoogle-glog-dev libgflags-dev libatlas-base-dev libsuitesparse-dev然后编译安装cd ~ git clone https://github.com/ceres-solver/ceres-solver.git cd ceres-solver git checkout 2.0.0 mkdir build cd build cmake .. make -j$(nproc) sudo make install注意如果你之前装过老版本Ceres编译新版本前建议sudo rm -rf /usr/local/lib/libceres*和/usr/local/include/ceres否则make install后新旧头文件混在一起链接时会出现ceres::Problem::AddResidualBlock签名不匹配的诡异报错。这类报错在VINS-Fusion编译阶段表现为大量模板类相关的error新手很难一眼判断是Ceres版本问题。3.3 Eigen与其它依赖看似简单实则暗藏杀机Eigen是一个头文件库不需要编译但版本不能太老。Ubuntu 20.04系统自带Eigen 3.3.7满足VINS-Fusion的要求。你需要确认头文件路径正确sudo apt install libeigen3-dev这里有个历史遗留坑Ubuntu的Eigen头文件默认装在/usr/include/eigen3但很多老教程会让你sudo ln -s /usr/include/eigen3/Eigen /usr/include/Eigen做软链接。如果你直接用系统包这个软链接不需要做但如果某个第三方库比如旧版Sophus编译时找不到Eigen再做这个软链接也不迟。另外还要装一些常用工具sudo apt install cmake build-essential git python3-pip如果你的VINS-Fusion需要跑实时摄像头还要装sudo apt install ros-noetic-cv-bridge ros-noetic-image-transport ros-noetic-camera-calibration这些包在编译和运行时缺一不可缺了image_transport的话launch文件加载topic消息时会直接报错退出。4. 编译VINS-Fusion源码从git clone到catkin_make的完整链路4.1 获取源码并创建功能包目录VINS-Fusion官方仓库是HKUST-Aerial-Robotics/VINS-Fusion。下载到工作空间的src目录cd ~/catkin_ws/src git clone https://github.com/HKUST-Aerial-Robotics/VINS-Fusion.git克隆完成后提一个建议打开VINS-Fusion/CMakeLists.txt文件看一遍尤其是里面有没有find_package(OpenCV)和find_package(Ceres)的版本要求。官方代码在global_fusion功能包里依赖Ceres在feature_tracker和vins_estimator里依赖OpenCV和Eigen理解了这个依赖关系后续编译报错时你能迅速定位是哪个功能包的文件出了问题。另外VINS-Fusion仓库里还包含一个ar_demo相关的文件夹演示AR效果用的不影响核心编译。如果只想跑核心SLAM保留feature_tracker、vins_estimator、global_fusion、camera_model这几个目录即可。4.2 catkin_make编译顺序与日志定位回到工作空间根目录执行编译cd ~/catkin_ws catkin_make如果你按前面的依赖步骤走这里大概率能一次编译成功。编译完成后在devel/lib目录下会出现feature_tracker、vins_estimator、global_fusion三个可执行文件。但凡是编译就不可能完全顺风顺水。我给你列几个我实际遇到过的编译错误和排查方向报错特征原因解决方法fatal error: opencv2/cvconfig.h: No such file or directory系统OpenCV头文件路径没找到检查libopencv-dev是否安装确认/usr/include/opencv4存在undefined reference to cv::Mat的链接错误OpenCV 4.2的库路径缺失在CMakeLists.txt里检查find_package(OpenCV REQUIRED)后是否链接了${OpenCV_LIBS}ceres/autodiff_cost_function.h: No such fileCeres未正确安装或版本过旧重新编译安装Ceres 2.0.0并确认/usr/local/include/ceres存在error: ‘CV_LOAD_IMAGE_GRAYSCALE’ was not declaredOpenCV 4.x移除了旧版枚举名在代码中引入#include opencv2/imgcodecs.hpp或将枚举改为cv::IMREAD_GRAYSCALE最后那一条特别有意思VINS-Fusion源码在feature_tracker里有一段读取图像数据的代码早期版本用了OpenCV 3.0时代的CV_LOAD_IMAGE_GRAYSCALEOpenCV 4.0之后改成了IMREAD_GRAYSCALE。如果你在编译时碰到这个报错修改对应源文件或加一行兼容宏即可网上有现成补丁。4.3 global_fusion功能包的隐藏坑global_fusion功能包在源码里有一个单独的可执行文件叫globalOptNode负责GPS融合和全局位姿图优化。默认状态下如果你没有GPS输入它会一直等待消息。跑EuRoC数据集时一般用不到这个节点但因为它的编译是catkin_make的一部分所以编译错误仍然会阻止整个工作空间构建。我在第一次编译时遇到过global_fusion里libGeographicLib缺失的问题。解决办法sudo apt install libgeographic-dev装好后再catkin_make一般就能过。如果还缺其他库看CMake报错提示按图索骥装依赖就行不要想着绕过因为ROS的工作空间构建是整体编译的任何一个功能包失败都会中断。5. 运行EuRoC数据集launch文件与参数逻辑的逐行拆解5.1 下载数据集与目录规划EuRoC MAV Dataset是视觉惯性SLAM领域最常用的公开数据集在ASL官网注册后可以下载。它包含机器人在室内空间飞行的双目灰度图像、IMU数据、地面真值轨迹和三维点云图。下载时选择MH_01_easy或者MH_02_easy这两个序列的难度最友好。下载后解压建议把文件夹放到~/Dataset/EuRoC/MH_01这样的路径下方便后续launch文件里的路径修改。解压后你会看到mav0/目录里面按传感器类型分成cam0、cam1、imu0、leica0、state_groundtruth_estimate0等子目录。5.2 三个launch文件的启动逻辑VINS-Fusion官方提供了三个launch文件分别对应单目IMU、双目IMU、纯双目三种模式。以双目IMU为例它的核心启动文件是vins_estimator包下的euroc.launchlaunch node namefeature_tracker pkgfeature_tracker typefeature_tracker outputlog param nameconfig_file typestring value$(find feature_tracker)/../vins_estimator/../config/euroc/euroc_config.yaml / /node node namevins_estimator pkgvins_estimator typevins_estimator outputscreen param nameconfig_file typestring value$(find vins_estimator)/../config/euroc/euroc_config.yaml / /node /launch这里有一个非常关键的设置launch文件里的config_file路径是指向yaml配置文件的而这个yaml里定义了相机内参、IMU噪声参数、外参矩阵以及最重要的数据路径。如果你发现启动后程序没反应或者报文件不存在先看yaml里imu_topic和image_topic是否和实际发布的话题一致。另外还有一个launch是可视化用的。vins_estimator包里的euroc_rviz.launch会启动RViz并加载预设的显示配置用来显示相机位姿、特征点轨迹和局部地图。5.3 启动步骤与参数文件解读完整启动步骤分三步。第一步启动核心SLAM节点source ~/catkin_ws/devel/setup.bash roslaunch vins_estimator euroc.launch第二步启动RViz可视化roslaunch vins_estimator euroc_rviz.launch第三步回放数据集rosbag play ~/Dataset/EuRoC/MH_01/mav0/MH_01.bag三个终端窗口执行完后RViz里应该能看到相机轨迹从原点开始逐渐延伸左侧显示特征点彩色轨迹、右侧显示位姿图。如果RViz里没有画面检查一下bag播放时的--clock参数VINS-Fusion的部分版本需要rosbag play --clock MH_01.bag再看yaml配置文件里几个关键参数的含义这部分理解了才算真正入门。它们位于euroc_config.yamlimu_topic: /imu0 image_topic: /cam0/image_raw这两个参数定义了节点要订阅的IMU和图像话题名称。如果你后面换成自己的传感器改的就是这里的topic名字。calib_file: euroc_config.yaml校准文件的路径。在EuRoC数据集上直接用它自带的标定参数即可不需要额外标定。max_cnt: 150特征点数量上限控制前端提取的特征点密度。值越大计算压力越大但特征越丰富。acc_n: 0.083 gyr_n: 0.027 acc_w: 0.01 gyr_w: 0.001这是IMU的四项噪声参数加速度计噪声、陀螺仪噪声、加速度计随机游走、陀螺仪随机游走。EuRoC数据集提供了真实值直接抄数据集的配置文件如果用自己的IMU需要做 Allan方差分析或者用Kalibr标定工具获取。还有一组关键参数是视觉初始化用的estimate_td: 1时间戳同步补偿的开关。数据集里的IMU和相机时间戳已经对齐设成0或1都能跑实时系统建议打开因为它可以估计并补偿两个传感器的时间偏移。5.4 如何判断运行结果是否正常跑通数据集后除了肉眼观察RViz里的轨迹是否平滑外还能用两个客观指标判断。第一终端输出的FEATURE_COUNT。正常运行时每秒会打印特征点数量和优化状态如果FEATURE_COUNT长期为0说明图像话题没正确订阅上或者图像解码失败。第二VIO状态。VINS-Fusion在初始化完成后会持续输出位姿信息如果你看到can not initialize反复出现通常是因为快速运动导致特征匹配数量不足换慢一点的数据集或者降低运动速度就好。我测试MH_01序列时大约需要5到10秒完成初始化之后轨迹会稳定增长。整个序列跑完大概需要3分钟左右最终RViz里的轨迹是一段沿着走廊的平滑曲线和算法自带的ground truth对比轨迹偏差在0.2到0.5米范围内这就算完全跑通了。6. 实时传感器接入的扩展从Realsense到USB摄像头6.1 用笔记本摄像头跑单目VINS-Fusion跑通了数据集接下来最自然的需求就是用真实摄像头和IMU跑实时SLAM。最简单的方案是用笔记本自带的USB摄像头做纯单目模式不带IMU这时候VINS-Fusion退化为视觉里程计虽然少了IMU融合鲁棒性会差一些但技术链路是通的。第一步安装摄像头驱动。Ubuntu 20.04对常见USB摄像头是免驱的接上后执行ls /dev/video*如果有/dev/video0说明设备已被识别。然后用ROS自带的usb_cam包发布图像话题sudo apt install ros-noetic-usb-cam roslaunch usb_cam usb_cam-test.launch这时在另一个终端里执行rqt_image_view如果能看到画面图像采集这关就过了。第二步准备相机内参。把相机的内参矩阵写进yaml配置文件sudo apt install ros-noetic-camera-calibration rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.024 image:/usb_cam/image_raw camera:/usb_cam对着标定板移动摄像头等CALIBRATE按钮亮起后点击终端会输出相机内参和畸变系数。这些值就是你要填到VINS-Fusion yaml里的camera_intrinsic部分。标定这一步跳过也行但直接用没有畸变校正的图像跑SLAM轨迹精度会明显下降。6.2 Realsense相机接入的双目IMU方案如果你手上有Intel Realsense D435i那么可以玩到完整的双目IMU融合。它的安装链路是realsense-ros包装驱动然后发布图像和IMU话题。安装Intel Realsense SDK和ROS包的过程这里不展开需要注意的坑是版本匹配realsense-ros的某个版本可能对应特定SDK版本装错了会出现Device is connected but is not recognized的提示。安装完用realsense-viewer确认能出图像和IMU数据再接接到ROSroslaunch realsense2_camera rs_camera.launch unite_imu_method:1 enable_gyro:true enable_accel:true这个launch会发布/camera/color/image_raw彩色图、/camera/infra1/image_rect_raw灰度图和/camera/imu话题。在VINS-Fusion的yaml文件里把imu_topic改成/camera/imuimage_topic改成对应的彩色或灰度话题即可。这里有一个很容易误导新人的点Realsense的灰度图有IR1、IR2和depth几个选项单目模式下用/camera/infra1/image_rect_raw效果比彩色图好因为不受自动曝光和白平衡的影响。我实测下来彩色图像在光照变化时会导致特征点提取数量波动灰度图的特征跟踪稳定很多。6.3 USB权限与带宽分配接真实传感器时最烦人的问题之一就是USB权限。执行ls /dev/video*能看到设备但运行ROS节点时报Permission denied这就是当前用户不在video用户组。解决办法sudo usermod -aG video $USER重新登录后生效。这个组权限问题在普通台式机、笔记本上经常被忽略但在NUC或机器人工控机上特别常见。另外USB带宽也是个隐藏坑。如果你同时接了Realsense、USB摄像头、激光雷达等多个USB设备偶尔会出现图像传输卡顿或掉帧。优先把高带宽设备比如Realsense插到主板的USB 3.0蓝色接口上不要用前置面板扩展口扩展口走的是内部Hub带宽共享容易丢帧。7. 用VINS-Fusion过程中那些绕不开的坑显卡驱动、虚拟机网络和CPU占用7.1 NVIDIA显卡驱动在Ubuntu 20.04上的正确安装姿势虽然编译VINS-Fusion本身不强制NVIDIA显卡但如果你要在RViz里流畅查看点云和轨迹或者用GPU跑后续的深度学习感知模块显卡驱动几乎是必需品。Ubuntu 20.04安装NVIDIA驱动的推荐方式是sudo apt update sudo ubuntu-drivers autoinstall sudo rebootubuntu-drivers autoinstall会读取你的显卡型号自动安装推荐版本驱动。之前有人推荐apt install nvidia-driver-535这样的精确安装方式也不是不行但注意535在部分内核版本下会和gcc版本产生依赖冲突。如果你在安装驱动后重启进入不了桌面大概率是Secure Boot没关去BIOS里把它禁用或者用mokutil --disable-validation处理。驱动装好后执行nvidia-smi验证。注意如果你的Ubuntu是虚拟机里的就不需要装NVIDIA驱动了VMware的虚拟显卡不支持CUDA装了也没用。7.2 VMware虚拟机下跑VINS-Fusion的网络与性能调优很多朋友第一步是在VMware虚拟机里装Ubuntu 20.04练手。虚拟机跑VINS-Fusion完全可行但有两件事要处理。第一是网络问题。热词里提到的vmware ubuntu20.04无网络多半是NAT模式下的DNS配置问题。在虚拟机里打开网络设置把IPv4的DNS改为223.5.5.5阿里DNS或119.29.29.29腾讯DNS再执行sudo systemctl restart NetworkManager一般就能解决。如果还是显示没网络检查VMware的虚拟网络编辑器确认NAT模式的子网IP没被宿主机防火墙拦截。第二是性能。虚拟机默认分配的内存如果只有2GB编译Ceres时会非常吃力甚至直接OOM。建议至少分配4GB内存和2个CPU核心。另外在VMware设置里把显卡加速模式改成加速3D图形RViz的渲染帧率会高很多。7.3 CPU占用过高怎么办跑VINS-Fusion时如果CPU占用率一直逼近100%首先要看是不是feature_tracker线程的图像分辨率太高。EuRoC数据集的图像是752x480帧率20FPS一般CPU占用在40%到60%。如果你用自己的摄像头是1920x1080分辨率、30帧特征提取的计算量会翻好几倍。解决思路有三个第一在yaml文件里降低图像分辨率或者在发布话题时用image_proc做一次缩放第二调低max_cnt特征点数量从150改到100对精度影响不大但CPU占用能降20%以上第三检查系统的CPU频率调度模式在笔记本上默认的powersave模式会限制主频改成performance模式能明显缩短编译和推理时间sudo apt install linux-tools-common cpufrequtils sudo cpufreq-set -g performance这个操作会显著提高性能但也会更耗电只建议在插电环境下使用。8. 我用这套方案跑完MH_01后的几点实测心得写到最后分享几个我在实际项目中积累的小心得这些不是官方文档会告诉你的东西但对你少走弯路很有帮助。第一关于Ceres版本。我后来在另一台Ubuntu 18.04的机器上也跑过VINS-Fusion用的是Ceres 1.13.0会出现一处cannot convert的编译错误。19年之后的VINS-Fusion代码用到了ceres::EvaluationCallback相关接口旧Ceres没有这个类所以如果你看到跟EvaluationCallback有关的报错不要怀疑是代码问题直接升Ceres版本就行。第二关于launch文件里的outputscreen。官方给的euroc.launch里只对vins_estimator节点设置了这个属性feature_tracker的日志默认写在~/.ros/log目录下。排查问题时如果你在终端里看不到feature_tracker打印的信息去~/.ros/log目录下看对应的log文件。这个规律适用于所有的ROS节点调试不只是VINS-Fusion。第三关于数据集回放的--clock参数。我一开始跑MH_01时没有加--clockRViz里轨迹是正常显示的但运行一段时间后程序偶尔会卡住或出现时间戳倒退的警告。原因是ROS的/clock话题没有发布时各节点使用的是系统时间而bag文件里记录的消息时间戳和系统时间不一致。加了--clock后会让所有节点同步使用bag里的仿真时间这个问题就消失了。第四如果你后面打算做自己的传感器标定建议用Kalibr工具。Kalibr需要把相机和IMU放到一个硬件平台上做旋转和位移激励动作标定出IMU到相机的旋转矩阵和平移向量以及IMU的噪声参数。VINS-Fusion官方没有内置标定功能但Kalibr标定出来的结果可以直接填到VINS-Fusion的yaml里两个项目配合得非常成熟。最后说一句VINS-Fusion是一个非常典型的视觉惯性SLAM工程实现它把论文里那些复杂的预积分、因子图优化、滑动窗口算法都变成了可以直接跑的代码。把Ubuntu 20.04上的运行环境捋顺之后你会发现在这个框架上做二次开发非常舒服——无论是换传感器、加GPS、还是调参优化轨迹精度都有清晰的扩展点。希望这篇能帮你少熬几个夜顺利把VINS-Fusion跑起来。