跳到主要内容

VINS-Fusion

ROS2 Humble 版 VINS-Fusion,适合在 ARM 设备上运行

通知

现在可以使用 ros2 launch 或 ros2 run 在 ROS2 Humble 上运行 VINS-Fusion。

代码大部分基于zinuok 的这个存储库

将被删除(以使包更小):

  • GPU 启用/禁用功能也已添加:参考EuRoC 配置(参考此处此处
  • GPU 版本有一些 CUDA 库依赖项:OpenCV with CUDA。因此,如果您觉得麻烦,只需要 CPU 版本,请在 'feature_tracker.h' 文件的第 14 行注释掉以下编译器宏:
#define GPU_MODE 1

先决条件

  • 系统
    • Ubuntu 20.04
    • ROS2 humble
  • 依赖库
    • OpenCV & cv_bridge for ROS2 Humble
    • Ceres Solver-2.1.0
    • Eigen-3.3.9

建造

  1. 通过运行install_external_deps.sh脚本安装依赖项(将安装 OpenCV、Ceres、Eigen)

  2. 使用 colcon build 构建包

colcon build --symlink-install

播放 EuRoC 数据集包

要下载示例 EuRoC 数据集包,请运行get_example_data.sh脚本。然后使用脚本将数据集包转换为 ROS2 格式rosbags-convert

./get_example_data.sh
rosbags-convert data/V1_02_medium.bag --dst /output/path

如果你没有rosbags-convert脚本,可以使用命令安装pip install rosbags。然后,你就可以使用标准ros2 bag play命令播放该包了:

ros2 bag play /data/V1_02_medium

原始自述文件

VINS融合

基于优化的多传感器状态估计器

VINS-Fusion 是一个基于优化的多传感器状态估计器,可为自主应用(无人机、汽车和 AR/VR)实现精确的自定位。VINS-Fusion 是VINS-Mono的扩展,支持多种视觉惯性传感器类型(单目摄像头 + IMU、立体摄像头 + IMU,甚至仅立体摄像头)。我们还展示了一个将 VINS 与 GPS 融合的示例。 功能:

  • 支持多种传感器(立体摄像机/单目摄像机+IMU/立体摄像机+IMU)
  • 在线空间校准(相机和IMU之间的转换)
  • 在线时间校准(相机和 IMU 之间的时间偏移)
  • 视觉环路闭合

我们是KITTI 里程计基准测试(2019 年 1 月 12 日)上顶级的开源立体算法。

作者: 香港科技大学空中机器人组秦童、曹少祖、潘杰、李培良沉少杰

视频:

维恩斯

**相关论文:(**论文与代码不完全相同)

  • 单目视觉惯性系统的在线时间校准,Tong Qin,Shaojie Shen,IEEE/RSJ 国际智能机器人与系统会议 (IROS, 2018),最佳学生论文奖 pdf

  • VINS-Mono:一种稳健且多功能的单目视觉惯性状态估计器,Tong Qin、Peiliang Li、Shaojie Shen,IEEE Transactions on Robotics pdf

如果您使用 VINS-Fusion 进行学术研究,请引用我们的相关论文。bib

1. 先决条件

1.1 UbuntuROS

Ubuntu 64 位 16.04 或 18.04。ROS Kinetic 或 Melodic。ROS安装

1.2. Ceres 求解器

按照Ceres 安装

2. 构建 VINS-Fusion

克隆存储库和 catkin_make:

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

(如果此步骤失败,请尝试寻找另一台系统干净的计算机或重新安装 Ubuntu 和 ROS)

3. EuRoC 示例

将EuRoC MAV 数据集下载到 YOUR_DATASET_FOLDER。以 MH_01 为例,您可以运行三种传感器类型(单目相机 + IMU、立体相机 + IMU 和立体相机)的 VINS-Fusion。打开四个终端,分别运行 VINS 里程计、视觉回环(可选)、rviz 并播放 bag 文件。绿色路径为 VIO 里程计;红色路径为视觉回环下的里程计。

3.1 单目摄像头+IMU

    roslaunch vins vins_rviz.launch
rosrun vins vins_node ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_mono_imu_config.yaml
(optional) rosrun loop_fusion loop_fusion_node ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_mono_imu_config.yaml
rosbag play YOUR_DATASET_FOLDER/MH_01_easy.bag

3.2 立体摄像头+IMU

    roslaunch vins vins_rviz.launch
rosrun vins vins_node ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_stereo_imu_config.yaml
(optional) rosrun loop_fusion loop_fusion_node ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_stereo_imu_config.yaml
rosbag play YOUR_DATASET_FOLDER/MH_01_easy.bag

3.3 立体相机

    roslaunch vins vins_rviz.launch
rosrun vins vins_node ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_stereo_config.yaml
(optional) rosrun loop_fusion loop_fusion_node ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_stereo_config.yaml
rosbag play YOUR_DATASET_FOLDER/MH_01_easy.bag

4. KITTI 示例

4.1 KITTI 里程计(立体声)

将KITTI 里程表数据集下载到 YOUR_DATASET_FOLDER。以序列 00 为例,打开两个终端,分别运行 vins 和 rviz。(我们在 KITTI 基准测试中评估了里程表,但没有使用回环函数)

    roslaunch vins vins_rviz.launch
(optional) rosrun loop_fusion loop_fusion_node ~/catkin_ws/src/VINS-Fusion/config/kitti_odom/kitti_config00-02.yaml
rosrun vins kitti_odom_test ~/catkin_ws/src/VINS-Fusion/config/kitti_odom/kitti_config00-02.yaml YOUR_DATASET_FOLDER/sequences/00/

4.2 KITTI GPS 融合(立体声+GPS)

将KITTI 原始数据集下载到 YOUR_DATASET_FOLDER。以2011_10_03_drive_0027_synced为例。打开三个终端,分别运行 vins、全局融合和 rviz。绿色路径为 VIO 里程计;蓝色路径为 GPS 全局融合下的里程计。

    roslaunch vins vins_rviz.launch
rosrun vins kitti_gps_test ~/catkin_ws/src/VINS-Fusion/config/kitti_raw/kitti_10_03_config.yaml YOUR_DATASET_FOLDER/2011_10_03_drive_0027_sync/
rosrun global_fusion global_fusion_node

5. VINS-Fusion 车载演示

将汽车包下载到您的数据集文件夹。打开四个终端,分别运行 VIN 里程计、视觉环路闭合(可选)和 rviz 并播放汽车包文件。绿色路径为 VIO 里程计;红色路径为视觉环路闭合下的里程计。

    roslaunch vins vins_rviz.launch
rosrun vins vins_node ~/catkin_ws/src/VINS-Fusion/config/vi_car/vi_car.yaml
(optional) rosrun loop_fusion loop_fusion_node ~/catkin_ws/src/VINS-Fusion/config/vi_car/vi_car.yaml
rosbag play YOUR_DATASET_FOLDER/car.bag

6. 带着你的设备跑步

VIO 不仅仅是一个软件算法,它很大程度上依赖于硬件质量。对于初学者,我们建议你使用包含全局快门相机和硬件同步功能的专业设备来运行 VIO。

6.1 配置文件

为您的设备编写一个配置文件。您可以以 EuRoC 和 KITTI 的配置文件为例。

6.2 相机校准

VINS-Fusion 支持多种相机模型(针孔、MEI、等距)。您可以使用相机模型来校准您的相机。我们在 /camera_models/calibrationdata 下放置了一些示例数据,以指导您如何校准。

cd ~/catkin_ws/src/VINS-Fusion/camera_models/camera_calib_example/
rosrun camera_models Calibrations -w 12 -h 8 -s 80 -i calibrationdata --camera-model pinhole

7. Docker 支持

为了进一步简化构建过程,我们在代码中添加了 Docker。Docker 环境就像一个沙盒,从而使我们的代码独立于环境。要使用 Docker 运行,首先请确保您的计算机上已安装rosdocker。然后将您的帐户添加到dockergroup by 中sudo usermod -aG docker $YOUR_USER_NAME重新启动终端,或者如果出现Permission denied错误,请注销并重新登录,输入:

cd ~/catkin_ws/src/VINS-Fusion/docker
make build

请注意,docker 构建过程可能需要一段时间,具体取决于您的网络和机器。VINS-Fusion 成功构建后,您可以使用脚本 运行 vins 估算器run.sh。脚本run.sh可以接受多个标志和参数。标志-k表示 KITTI,-l代表循环融合,-g代表全局融合。您可以通过 获取使用详情./run.sh -h。以下是此脚本的一些示例:

# Euroc Monocualr camera + IMU
./run.sh ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_mono_imu_config.yaml

# Euroc Stereo cameras + IMU with loop fusion
./run.sh -l ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_mono_imu_config.yaml

# KITTI Odometry (Stereo)
./run.sh -k ~/catkin_ws/src/VINS-Fusion/config/kitti_odom/kitti_config00-02.yaml YOUR_DATASET_FOLDER/sequences/00/

# KITTI Odometry (Stereo) with loop fusion
./run.sh -kl ~/catkin_ws/src/VINS-Fusion/config/kitti_odom/kitti_config00-02.yaml YOUR_DATASET_FOLDER/sequences/00/

# KITTI GPS Fusion (Stereo + GPS)
./run.sh -kg ~/catkin_ws/src/VINS-Fusion/config/kitti_raw/kitti_10_03_config.yaml YOUR_DATASET_FOLDER/2011_10_03_drive_0027_sync/

在 Euroc 情况下,您需要打开另一个终端并运行您的 bag 文件。如果您需要修改代码,只需./run.sh在修改后使用适当的扩展程序重新运行即可。

8. 致谢

我们使用ceres 求解器进行非线性优化,使用DBoW2进行回环检测、通用相机模型GeographicLib

9. 许可证

源代码根据GPLv3许可发布。