2. VINS配置文件参数解析与修改

任务目标

本案例完成VINS-Fusion的完整环境搭建,并基于EuRoC与KITTI公开数据集实际运行系统,对比单目、双目、双目+IMU三种配置下的轨迹输出与可视化效果。最终通过生成的轨迹文件与RViz显示确认系统工作正常。

环境依赖

  • Ubuntu 18.04/20.04 + ROS Melodic/Noetic(本文以Noetic为例)
  • 已安装ROS基础包:ros-noetic-desktop-full
  • 依赖库:libgoogle-glog-dev, libatlas-base-dev, libsuitesparse-dev
  • Ceres Solver 1.14.0(VINS-Fusion官方指定版本)

实现步骤

1. 安装Ceres Solver

# 安装依赖
sudo apt-get install libgoogle-glog-dev libatlas-base-dev libsuitesparse-dev

# 编译安装Ceres 1.14.0
git clone https://github.com/ceres-solver/ceres-solver.git
cd ceres-solver
git checkout 1.14.0
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j$(nproc)
sudo make install

2. 编译VINS-Fusion

cd ~/catkin_ws/src
git clone https://github.com/HKUST-Aerial-Robotics/VINS-Fusion.git
cd ../
catkin_make
source ~/catkin_ws/devel/setup.bash

3. 下载测试数据集

EuRoC数据集(MH_01_easy)与KITTI数据集(odometry序列00)分别从官方源下载,存放于~/Datasets/目录下。EuRoC使用ROS bag格式,KITTI使用原始图像序列。

4. 运行EuRoC数据集(双目+IMU)

# 终端1:启动VINS-Fusion(双目+IMU配置)
roslaunch vins_fusion euroc.launch

# 终端2:播放数据集
rosbag play ~/Datasets/MH_01_easy.bag

5. 运行KITTI数据集(单目/双目对比)

# 单目模式
roslaunch vins_fusion kitti_odom.launch 
rosrun vins_fusion kitti_odom_test ~/Datasets/KITTI/00/poses/00.txt ~/Datasets/KITTI/00/ 0

# 双目模式(需修改launch文件中的config_path参数)
roslaunch vins_fusion kitti_odom.launch
rosrun vins_fusion kitti_odom_test ~/Datasets/KITTI/00/poses/00.txt ~/Datasets/KITTI/00/ 1

6. 模式对比验证

在RViz中分别观察三种模式的轨迹输出。VINS-Fusion默认在~/output/路径下保存vins_result_loop.csv轨迹文件。对比双目+IMU(EuRoC)与单目/双目(KITTI)的轨迹平滑度与漂移情况。

验证方法与判定标准

  • 运行验证:三个终端均无报错退出,RViz中显示相机图像与实时轨迹。
  • 轨迹输出:EuRoC运行结束后,~/output/vins_result_loop.csv文件存在且非空,包含时间戳、位置(x,y,z)与四元数(w,x,y,z)共8列数据。
  • 模式对比:单目模式在KITTI长直道场景中轨迹漂移明显大于双目模式;双目+IMU模式在EuRoC快速旋转场景中轨迹平滑度优于纯双目。
  • 预期输出示例(EuRoC MH_01前5行,仅作格式参考):
timestamp, x, y, z, qw, qx, qy, qz
1403636576.123456, 0.012, -0.003, 0.001, 0.999, 0.001, -0.002, 0.001
1403636576.223456, 0.025, -0.008, 0.002, 0.998, 0.002, -0.003, 0.002
...

常见问题

  • Ceres版本冲突:若系统已安装其他版本Ceres,需在CMakeLists.txt中指定find_package(Ceres REQUIRED)路径。
  • KITTI双目运行失败:确认launch文件中config_path参数指向../config/kitti_odom.yaml,且图像话题名与数据集一致。
  • RViz无显示:检查~/.rviz配置,手动添加Path显示并订阅/path话题。
VINS-Fusion三种模式对比流程 EuRoC MH_01 双目 + IMU (bag) KITTI Odometry 00 图像序列 VINS-Fusion 核心 特征提取 → 光流跟踪 → 滑窗优化 单目 (KITTI) 无IMU融合 双目 (KITTI) 立体匹配 双目+IMU (EuRoC) 预积分融合 轨迹文件 + RViz可视化 roslaunch + rosbag kitti_odom_test 配置对比: 单目:无尺度信息 双目:有尺度 双目+IMU:抗旋转漂移

上图展示了三种模式的数据流与对比逻辑。EuRoC数据集通过ROS bag驱动双目+IMU模式,KITTI序列则分别以单目和双目模式运行。最终统一输出轨迹文件供定量对比,RViz提供定性可视化验证。