前言

VINS-Fusion是一款优秀的视觉惯性导航系统(VIO),支持多种相机配置(单目、双目、RGB-D等)和GPS融合。本文记录在ROS2环境下的搭建与使用过程。

参考教程

详细的安装步骤可以参考:CSDN教程

环境搭建

依赖安装

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

编译安装

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 ROS2版本
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

数据集测试

1. 下载数据集

下载EuRoC数据集(ROS2 bag格式):

  • 数据集地址:EuRoC Data Sets
  • 推荐序列:V1_01_easyV1_02_mediumMH_01_easy

将数据下载并解压到合适的位置,例如:

1
~/code/vins_ws/src/vins_fusion_ros2/data/V1_01_easy/

2. 启动RViz2可视化

在终端1中运行:

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

3. 启动VINS-Fusion节点

在终端2中运行:

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

4. 播放数据集

在终端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

2. 关闭激光发射器

在室外或使用被动双目时,建议关闭激光投影器:

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

3. 启动VINS-Fusion

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

4. 查看结果

在RViz2中可视化:

1
rviz2 -d ~/code/vins_ws/src/vins_fusion_ros2/config/vins_rviz_config.rviz

配置文件说明

VINS-Fusion的配置文件位于:

1
~/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: [...]

# 时间同步参数
acc_noise: 0.1 # 加速度计噪声
gyr_noise: 0.01 # 陀螺仪噪声

使用技巧

1. 相机标定

使用VINS-Fusion前,需要对相机进行内参标定:

1
2
3
4
5
6
7
# 安装kalibr
sudo apt install -y ros-humble-kalibr

# 标定相机内参
kalibr_calibrate_imu_camera --bag your_calibration.bag \
--cam camchain.yaml --imu imu.yaml \
--target april_6x6.yaml

2. 提高初始化成功率

  • 确保相机视野中有足够的纹理和特征点
  • 初始化时缓慢移动相机,避免快速运动
  • 保持足够的照明条件

3. 多机协同

VINS-Fusion支持多传感器融合,可以根据需要添加:

  • GPS传感器
  • 轮速计
  • 其他视觉传感器

常见问题

1. 初始化失败

原因:相机运动过快或特征点不足

解决方法

  • 缓慢移动相机
  • 增加场景纹理
  • 调整特征检测参数

2. 时间戳不同步

原因:IMU和图像时间戳未对齐

解决方法

  • 设置 unite_imu_method:=2
  • 检查话题时间戳
  • 调整时间同步参数

3. 性能问题

解决方法

  • 降低图像分辨率
  • 减少特征点数量
  • 使用更好的CPU/GPU

4. 漂移问题

原因:长时间运行或纹理单一环境

解决方法

  • 添加闭环检测模块
  • 融合GPS信息
  • 定期重置

进阶应用

1. 回环检测

VINS-Fusion可以集成回环检测模块:

1
2
3
# 在配置文件中启用
loop_closure: 1
load_previous_pose_graph: 1

2. 与其他系统集成

VINS-Fusion可以与以下系统集成:

  • Fast-Drone:快速无人机导航
  • LIO-SAM:激光-视觉融合
  • Cartographer:2D/3D建图

3. 实时性能优化

1
2
3
4
5
6
# 降低特征点数量
max_cnt: 150 # 特征点最大数量
min_dist: 30 # 特征点最小间距

# 调整窗口大小
window_size: 10 # 滑动窗口大小

参考资源

总结

VINS-Fusion是一个功能强大的VIO系统,适合用于:

  • 无人机自主导航
  • 移动机器人定位
  • AR/VR应用
  • 三维重建

通过本文的配置,你可以快速搭建VINS-Fusion环境并开始使用。