Ubuntu20.04下运行VINS系列:VINS-Mono、VINS-Fusion和GVINS

本文详述了如何在Ubuntu20.04上安装和适配VINS-Mono、VINS-Fusion和GVINS,包括对Ceres2.1.0和OpenCV4的兼容性修改,以及如何编译和运行这些视觉惯性融合定位算法。同时,提供了在EuRoC和KITTI数据集上的运行示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


在我的博文Ubuntu 20.04配置ORB-SLAM2和ORB-SLAM3运行环境+ROS实时运行ORB-SLAM2+Gazebo仿真运行ORB-SLAM2+各种相关库的安装Ubuntu20.04下运行LOAM系列:A-LOAM、LeGO-LOAM、LIO-SAM 和 LVI-SAM的基础环境下跑通VINS-Mono、VINS-Fusion和GVINS

一、安装VINS-Mono

VINS-Mono是HKUST的Shen Shaojie团队开源的一套Visual-Inertial融合定位算法。VINS-Mono在Github的开源地址:https://github.com/HKUST-Aerial-Robotics/VINS-Mono
首先按照前面两篇篇文章已经安装好了VINS-Mono所需的ROS noetic、Eigen3.4.0、Ceres2.1.0和OpenCV4.2.0等三方库,它们的安装不再赘述VINS-Mono是在ROS melodic以及Ceres1的环境下开发的,因此需要适配高版本的环境。

1.1 适配Ceres2.1.0

Ceres-solver2.0.0及以上版本采用的是C++14编译,而VINS-Mono使用的Ceres-solver1.4.0采用C++11编译,将所有文件夹下的CMakeLists.txt文件全部修改为C++14编译

#set(CMAKE_CXX_FLAGS "-std=c++11")
set(CMAKE_CXX_FLAGS "-std=c++14")

1.2 适配OpenCV4

ROS noetic版本中的OpenCV4.2和VINS-Mono中需要使用的OpenCV3冲突,修改VINS-Mono代码兼容OpenCV4。幸运的是发现不用修改代码中不兼容的变量,可以直接添加缺失的头文件即可:
在camera_model包中的头文件Chessboard.h中添加

#include <opencv2/imgproc/types_c.h>
#include <opencv2/calib3d/calib3d_c.h>

在camera_model包中的头文件CameraCalibration.h、pose_graph包中的头文件pose_graph.hkeyframe.hBRIEF.h中添加

#include <opencv2/imgproc/types_c.h>
#include <opencv2/imgproc/imgproc_c.h>

若vins_estiamtor包中报错,将头文件替换为

// #include <opencv/cv.h>
// #include <opencv/highgui.h>
#include <opencv2/highgui.hpp>
#include <opencv2/cvconfig.h>

还有可能由于电脑上有不同版本的OpenCV,找到的版本不对,需要在各个CMakeLists.txt里面find_package的时候明确指定OpenCV的版本:

#find_package(OpenCV REQUIRED)  
find_package(OpenCV 4 REQUIRED)

1.3 编译运行

新建工作空间,将修改的源功能包移动到工作空间,编译:

cd ~/catkin_ws_vins/src
cd ../
catkin_make
#可添加到 ~/.bashrc 文件中:
source devel/setup.bash

运行之前需要在配置文件****_config.yaml中修改结果输出目录

output_path: "/home/zard/Downloads/VINS-Mono"

EuRoC数据集为例,打开三个终端,source后再分别输入

# 运行feature_tracker节点和estimator节点, 订阅图像和IMU数据, 发布位姿, 3D特征点等消息给RVIZ显示
roslaunch vins_estimator euroc.launch
roslaunch vins_estimator vins_rviz.launch
rosbag play ~/dataset/V1_01_easy.bag#路径根据自己下载的数据集而定

在这里插入图片描述

二、安装VINS-Fusion

VINS-Fusion 是 VINS-Mono 的扩展,支持多种视觉惯性传感器类型(单目+ IMU,双目+ IMU,甚至仅限双目)。与VINS-Mono一样,安装了ROS noetic、Eigen3.4.0、Ceres2.1.0和OpenCV4.2.0,需要适配高版本的环境。

2.1 适配Ceres2.1.0和OpenCV4

(1)将所有文件夹下的CMakeLists.txt文件全部修改为C++14编译,并在各个CMakeLists.txt里面find_package的时候明确指定OpenCV的版本:

#find_package(OpenCV REQUIRED)  
find_package(OpenCV 4 REQUIRED)

(2)在camera_model包中的头文件Chessboard.h中添加

#include <opencv2/imgproc/types_c.h>
#include <opencv2/calib3d/calib3d_c.h>

(3)在头文件CameraCalibration.h、pose_graph.h、feature_tracker.h、BRIEF.h中添加

#include <opencv2/imgproc/types_c.h>
#include <opencv2/imgproc/imgproc_c.h>

(4)在KITTIGPSTest.cppKITTIOdomTest.cpp中将报错的CV_LOAD_IMAGE_GRAYSCALE修改为cv::IMREAD_GRAYSCALE

2.2 编译运行

cd ~/catkin_ws_vins
catkin_make
source devel/setup.bash

运行之前需要在配置文件***_config.yaml中修改结果输出目录

output_path: "/home/zard/Downloads/VINS-Fusion"

2.2.1 EuRoC数据集

以MH_01为例,可以使用三种传感器类型(运行VINS-Fusion。 打开四个终端,分别运行vins里程计,视觉闭环(可选),rviz和播放包文件。 绿色路径为VIO里程计;红色路径是视觉环路闭合下的里程计。
(1)运行Monocualr camera + 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

(2)运行Stereo cameras + 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)运行Stereo cameras

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

2.2.2 KITTI数据集

(1)仅双目:将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/ 

(2)双目融合GPS(松组合):将KITTI原始数据集下载到YOUR_DATASET_FOLDER。 以2011_10_03_drive_0027_synced为例。 打开三个终端,分别运行vins、global fusion和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

在这里插入图片描述

三、安装GVINS

GVINS是在VINS-Mono基础上进行开发的,是一个紧耦合了IMU、视觉、GNSS三种传感器的非线性优化系统,在Github的开源地址:https://github.com/HKUST-Aerial-Robotics/GVINS。与VINS-Mono一样,安装了ROS noetic、Eigen3.4.0、Ceres2.1.0和OpenCV4.2.0,需要适配高版本的环境。

3.1 适配Ceres2.1.0和OpenCV4

(1)将所有文件夹下的CMakeLists.txt文件全部修改为C++14编译,并在各个CMakeLists.txt里面find_package的时候明确指定OpenCV的版本:

#find_package(OpenCV REQUIRED)  
find_package(OpenCV 4 REQUIRED)

(2)在camera_model包中的头文件Chessboard.h中添加

#include <opencv2/imgproc/types_c.h>
#include <opencv2/calib3d/calib3d_c.h>

(3)在camera_model包中的头文件CameraCalibration.h中添加

#include <opencv2/imgproc/types_c.h>
#include <opencv2/imgproc/imgproc_c.h>

3.2 安装依赖库gnss_comm

gnss_comm库需要下载到catkin_ws/src中,并编译

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

3.3 编译运行

cd ~/catkin_ws_vins
catkin_make
source devel/setup.bash

运行之前需要在配置文件visensor_left_f9p_config.yaml中修改结果输出目录

output_dir: "/home/zard/Downloads/GVINS"

下载示例数据集GVINS-Dataset,source之后后运行节点:

roslaunch gvins visensor_f9p.launch

启动rviz显示窗口

source devel/setup.bash
rviz -d src/config/gvins_rviz_config.rviz

rosbag播放数据

rosbag play sports_field.bag

在这里插入图片描述

在这里插入图片描述

3.4 Dataset Tools的使用

为了方便获取数据集的真值用于测试结果,以及原始GNSS数据,提供了数据集工具GVINS-Dataset,将工具包需要下载到catkin_ws/src中

cd ~/catkin_ws_vins/src/
git clone https://github.com/HKUST-Aerial-Robotics/GVINS-Dataset.git

编译之前在 toolkit/ 中的 bag2rinex.cppbag2rtk_solution.cpp 中指定输入的bag路径、输出的文件路径及文件名:

#define INPUT_BAG_FILEPATH "/media/zard/SLAMData/GVINS/sports_field.bag"
#define OUTPUT_RINEX_FILEPATH "/home/zard/Downloads/GVINS/RTK_Result.rnx"

#define INPUT_BAG_FILEPATH "/media/zard/SLAMData/GVINS/sports_field.bag"
#define OUTPUT_RTK_FILEPATH "/home/zard/Downloads/GVINS/RTK_Result.txt"

编译:

cd ~/catkin_ws_vins
catkin_make

bag文件转rinex文件

source devel/setup.bash
rosrun gvins_dataset_toolkit bag2rinex

在这里插入图片描述

bag文件转rtk结果文件

source devel/setup.bash
rosrun gvins_dataset_toolkit bag2rtk_solution

在这里插入图片描述

### 解决 Python 中找不到 `gnss_comm` 模块的问题 当遇到错误提示 "no module named 'gnss_comm'" 时,通常是因为该模块未被正确安装或环境配置不正确。以下是详细的解决方案: #### 确认依赖项已安装 确保已经按照官方指南完成了必要的软件包安装,特别是对于 Ubuntu 20.04 用户来说,应该先完成 ROS OpenCV 的安装[^2]。 #### 获取并编译 gnss_comm 库 访问项目的 GitCode 页面获取源码仓库链接[^3]。克隆此库到本地计算机上,并遵循给定说明来构建它。一般情况下,这涉及以下几个命令: ```bash git clone https://gitcode.com/gh_mirrors/gn/gnss_comm.git cd gnss_comm catkin_make source devel/setup.bash ``` #### 设置 Python 路径变量 如果仍然无法识别,则可能是由于路径设置不当造成的。可以尝试通过以下方式手动添加路径至 PYTHONPATH 变量中: ```bash export PYTHONPATH=$PYTHONPATH:/path/to/gnss_comm/devel/lib/python3/dist-packages/ ``` 注意替换 `/path/to/gnss_comm/` 部分为实际文件夹位置。 #### 使用 pip 或 conda 进行安装 (如果有提供) 部分开源项目会发布预打包版本供开发者更方便地集成其功能。检查是否有可用的 PyPI 发布版或其他分发渠道可选。若有则可以直接利用工具快速部署: ```bash pip install gnss-comm # 假设存在这样的命名空间 ``` #### 测试安装成功与否 创建一个新的 Python 文件 test_gnss.py 并输入如下代码片段测试是否能够正常调用所需函数: ```python import gnss_comm as gc print("GNSS COMM imported successfully!") ``` 运行上述脚本验证问题是否得到解决。
评论 39
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZARD帧心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值