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

2023-05-16

文章目录

  • 一、安装VINS-Mono
    • 1.1 适配Ceres2.1.0
    • 1.2 适配OpenCV4
    • 1.3 编译运行
  • 二、安装VINS-Fusion
    • 2.1 适配Ceres2.1.0和OpenCV4
    • 2.2 编译运行
      • 2.2.1 EuRoC数据集
      • 2.2.2 KITTI数据集
  • 三、安装GVINS
    • 3.1 适配Ceres2.1.0和OpenCV4
    • 3.2 安装依赖库gnss_comm
    • 3.3 编译运行
    • 3.4 Dataset Tools的使用

在我的博文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

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ubuntu20.04下运行VINS系列:VINS-Mono、VINS-Fusion和GVINS 的相关文章

随机推荐

  • Linux 下的信号量

    linux下的posix有名信号量的几个要点 博客园 最全面的linux信号量解析 csdn blog Semaphore信号量总结 博客园 sem timedwait csdn blog 一 信号量的概念 信号量的使用主要是用来保护共享资
  • x86-从实模式到保护模式

    十进制到二进制的转换 十进制转换为十六进制 十六进制表示法 在很多高级语言中 xff0c 通常不采用在后面加h的做法来表示十六进制 xff0c 而是为他添加一个0x前缀 如 xff1a 0x3f
  • MG-SOFT 导入MIB文件

    之前SNMP测试一直用的是IReasoning MIB browser xff0c 最近测试snmp V3 xff0c 需要使用MG SOFT MIB Browser 在导入之前使用的MIB文件时 xff0c 发现跟IReasoning M
  • Ubuntu更新源 Failed to fetch http://xxxxxxx Temporary failure resolving ‘mirrors.aliyun.com‘

    之前公司产品一直使用32位环境 xff0c 最近需要使用64位环境 需要更新软件库 xff0c 就换了个64位ubuntu虚拟机 xff0c 重新编译所需的库 xff08 包括pcap grpc等 xff09 更新库的时候 xff0c 想着
  • 交换机学习----网桥

    最近接触到交换机产品 xff0c 正好借机会学习下二层相关网络技术 之前一直想写点东西 xff0c 又懒得写 这次乘机会多写点 xff0c 记录下 xff0c 也算是对学习的一个交代 另自己是初学者 xff0c 也希望能和前辈多交流 有写的
  • Ubuntu配置tftp服务端

    这两天安装ONIE和sonic系统 xff0c 基于ONIE安装sonic系统时 需要使用到tftp服务 xff0c 正好电脑里面有ubuntu的虚拟机 xff0c 就直接在虚拟机上安装了tftp服务器 顺便记录下 一 安装 tftp 1
  • Ubuntu Samba配置简介

    1 Samba 三种特殊的 NAME global xff1a 其属性选项是全局可见的 xff0c 但是在需要的时候 xff0c 可以在其他 lt section gt 中定义某些属性来覆盖 global 的对应选项定义 homes xff
  • ESP8266下载

    下载引脚介绍 VCC span class token operator lt 61 span span class token operator 61 61 span span class token operator 61 61 spa
  • libssl-dev : 依赖: libssl1.0.0 (= 1.0.2g-1ubuntu4.13) 但是 1.0.2n-1ubuntu5.1 正要被安装

    ubuntu下apt get install安装软件 xff0c 报 无法修正错误 xff0c 因为您要求某些软件包保持现状 xff0c 就是它们破坏了软件包间的依赖关系 比如以下报错 一般出现这种情况的原因时 要装A xff0c 依赖B
  • 高通平台音频调试常见问题点归纳

    以下是关于高通音频调试中遇到的一些常见问题点归纳 xff0c 仅供参考 xff0c 如有错误 xff0c 请指正 xff01 1 Audio EC VOIP 软件主要需要设置EC REF echo reference 信号 xff0c 在A
  • 蚂蚁金服二轮面试(P7岗)经验分享

    特意注册了个新号 xff0c 发表下记录自己此次蚂蚁金服的面试情况 xff0c 为了感谢大家面试经历的分享 xff0c 也是对自己面试的总结和复盘 上周三面试 xff0c 截止到现在一周过去啦 xff0c 还没有消息 xff0c 面试过程也
  • 堪比当年的LSTM,Transformer引燃机器学习圈:它是万能的

    视学算法报道 转载自公众号 xff1a 机器之心 作者 xff1a 魔王 谷歌研究科学家 David Ha xff1a Transformer 是新的 LSTM 2017 年 6 月谷歌发布论文 Attention is All You N
  • linux 睡眠函数——sleep(),usleep()

    http blog csdn net gpengtao article details 7887293 include lt unistd h gt unsigned int sleep unsigned int seconds 睡眠秒 返
  • 软件工程复试——九、面向对象方法学引论

    九 面向对象方法学引论 面向对象方法学的出发点和原则是尽可能模拟人类思维方式 xff0c 使开发软件的方法与过程尽可能接近人类认识世界解决问题的方法与过程 xff0c 使描述空间的问题域与求解域在结构上保持一致 面向对象方法的四个要点 xf
  • FreeRTOS+TCP模块移植

    上一版本移植并没有写的很详细 xff0c 只是将改好的代码贴上去 xff0c 今天更新一版 xff0c 附带资源 上一版本用的是FreeRTOS V10 0 1 这一版采用了最新的FreeRTOS V10 3 1 在正确移植FreeRTOS
  • PID控制器讲解

    这个视频教程讲的非常好 xff0c 从理论层面到应用 xff0c 强烈推荐有兴趣的同学看一下 https www bilibili com video BV1B54y1V7hp
  • Python学习笔记丨while、for、if循环结构基础知识与易错点

    Python流程控制 本篇笔记的主要内容是 xff1a 条件控制和循环控制 xff0c 包括if语句 while语句 for语句等 Python条件控制 span class hljs keyword style color c678dd
  • R语言安装R包的方法,mac、windows、linux安装R包常见问题与解决方法

    R语言如何快速安装R包 xff1f 如果把R比作是沃土的话 xff0c 那么R包就是鲜花 xff0c 开源共享的开发者社区提供了很多功能丰富的R包 xff0c 方便使用者充分利用R语言完成工作 但是 xff0c 有时候在安装R包是会遇到各种
  • kube-ovn代码系列(四)pod 安全组功能

    kube ovn代码系列 xff08 四 xff09 pod 安全组功能 链接 https www gogo dev com index php 2022 02 19 kube ovn securitygroup 内容 kube ovn在1
  • Ubuntu20.04下运行VINS系列:VINS-Mono、VINS-Fusion和GVINS

    文章目录 一 安装VINS Mono1 1 适配Ceres2 1 01 2 适配OpenCV41 3 编译运行 二 安装VINS Fusion2 1 适配Ceres2 1 0和OpenCV42 2 编译运行2 2 1 EuRoC数据集2 2