VINS-Fusion 是港科大开源的视觉惯性里程计(VIO),支持单目、双目、RGB-D 等多种相机配置,也可以融合 GPS。本文记录它在 ROS 2 Humble 下的编译、EuRoC 数据集测试,以及接入 RealSense D435i 的实机测试。

详细的安装步骤也可以参考这篇 CSDN 教程。

一、环境搭建

1. 安装依赖

1
2
3
4
5
6
7
8
sudo apt update
sudo apt install -y \
ros-humble-cv-bridge \
ros-humble-tf2-ros \
ros-humble-pcl-conversions \
ros-humble-nav_msgs \
ros-humble-sensor-msgs \
ros-humble-geometry-msgs

2. 编译

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 创建工作空间
mkdir -p ~/code/vins_ws/src
cd ~/code/vins_ws/src

# 克隆 VINS-Fusion ROS 2 版本
git clone https://github.com/HKUST-Aerial-Robotics/VINS-Fusion.git vins_fusion_ros2

# 安装依赖
cd vins_fusion_ros2
rosdep install --from-paths . --ignore-src -r -y

# 编译
cd ~/code/vins_ws
colcon build --symlink-install

# 设置环境变量
echo "source ~/code/vins_ws/install/setup.bash" >> ~/.bashrc
source ~/.bashrc

二、EuRoC 数据集测试

1. 下载数据集

下载 ROS 2 bag 格式的 EuRoC 数据集(EuRoC Data Sets),推荐先用 V1_01_easy,也可以试 V1_02_medium、MH_01_easy。解压到例如 ~/code/vins_ws/src/vins_fusion_ros2/data/V1_01_easy/。

2. 运行

终端 1:启动 RViz2。

1
2
source ~/code/vins_ws/install/setup.bash
rviz2 -d ~/code/vins_ws/src/vins_fusion_ros2/config/vins_rviz_config.rviz

终端 2:启动 VINS-Fusion。

1
2
source ~/code/vins_ws/install/setup.bash
ros2 launch vins_fusion_ros2 vins_fusion_ros2.launch.py

终端 3:播放数据集。

1
ros2 bag play ~/code/vins_ws/src/vins_fusion_ros2/data/V1_01_easy/V1_01_easy.db3

RViz2 中应能看到位姿估计轨迹和特征点云。

三、RealSense D435i 实机测试

1. 启动相机

发布双目红外图像和 IMU 数据:

1
2
3
4
5
6
7
8
9
10
11
ros2 launch realsense2_camera rs_launch.py \
enable_color:=false \
enable_depth:=false \
enable_infra1:=true \
enable_infra2:=true \
enable_accel:=true \
enable_gyro:=true \
unite_imu_method:=2 \
gyro_fps:=200 \
accel_fps:=200 \
depth_module.infra_profile:=640,480,30

使用被动双目时(例如在室外),关闭激光投影器,避免红外斑点干扰特征跟踪:

1
ros2 param set /camera/camera depth_module.emitter_enabled 0

相机驱动的安装见《RealSense D435i 安装与使用教程》。

2. 启动 VINS-Fusion 和 RViz2

1
2
source ~/code/vins_ws/install/setup.bash
ros2 launch vins_fusion_ros2 vins_fusion_ros2.launch.py
1
rviz2 -d ~/code/vins_ws/src/vins_fusion_ros2/config/vins_rviz_config.rviz

四、配置文件

配置文件位于 ~/code/vins_ws/src/vins_fusion_ros2/config/:

配置文件 用途
stereo_euroc_config.yaml EuRoC 数据集双目
stereo_realsense_config.yaml RealSense 双目
rgb_d_realsense_config.yaml RGB-D

需要按自己的设备修改的关键参数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 相机话题
image0_topic: "/camera/infra1/image_raw"
image1_topic: "/camera/infra2/image_raw"
imu_topic: "/camera/imu"

# 相机内参(需要标定)
camera_matrix: [fx, 0.0, cx, 0.0, fy, cy, 0.0, 0.0, 1.0]

# IMU 到相机的外参
body_T_imu: [...]

# IMU 噪声参数
acc_noise: 0.1 # 加速度计噪声
gyr_noise: 0.01 # 陀螺仪噪声

相机内参、相机与 IMU 的外参都需要针对自己的设备标定后填写,不能直接沿用示例值。

五、常见问题

现象 可能原因 处理方法
初始化失败 运动过快或特征点不足 初始化时缓慢移动相机,保证场景纹理丰富、光照充足,必要时调整特征检测参数
时间戳不同步 IMU 与图像时间戳没有对齐 设置 unite_imu_method:=2,检查各话题时间戳
实时性不够 计算量过大 降低图像分辨率,减少特征点数量
长时间运行漂移 纹理单一或没有回环 启用回环检测,有条件时融合 GPS

参考资源