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