【VINS-Fusion入门之一】让系统跑起来

2023-05-16

文章目录

  • 简介
  • 配置
  • 执行
    • 单目 + IMU
    • 双目 + IMU
    • 双目相机
    • 双目 + GPS
  • 落地
  • 备注:

简介

VINS,英文缩写Visual-Inertial Systems.是一个实时视觉SLAM框架,2017年由香港科技大学开源的一个VIO算法。官方提供的下载链接:https://github.com/HKUST-Aerial-Robotics/VINS-Mono。
经过一年多的优化,该团队又推出一套更强大的开源算法框架:VINS-Fusion,下载链接:https://github.com/HKUST-Aerial-Robotics/VINS-Fusion。

那么,接下来我们就演示如何将该系统跑起来。

配置

一方面参考官方提供的Readme,进行安装,这里提供的安装环境为Ubuntu and ROS系统下,Ceres Solver安装,Ceres是什么就不做介绍,安装过程参考官网或者CSDN其他博客。
下面是关键库Ceres安装过程:

# CMake
sudo apt-get install cmake
# google-glog + gflags
sudo apt-get install libgoogle-glog-dev
# BLAS & LAPACK
sudo apt-get install libatlas-base-dev
# Eigen3
sudo apt-get install libeigen3-dev
# SuiteSparse and CXSparse (optional)
# - If you want to build Ceres as a *static* library (the default)
#   you can use the SuiteSparse package in the main Ubuntu package
#   repository:
sudo apt-get install libsuitesparse-dev

tar zxf ceres-solver-1.14.0.tar.gz
mkdir ceres-bin
cd ceres-bin
cmake ../ceres-solver-1.14.0
make -j3
make test
# Optionally install Ceres, it can also be exported using CMake which
# allows Ceres to be used without requiring installation, see the documentation
# for the EXPORT_BUILD_DIR option for more information.
make install

基本的库还有Eigen3和OpenCV,这里就不做赘述,相信从事计算机视觉算法的同学,都很熟练使用了。

然后,按照官方说明编译VINS-Fusion工程:

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

这个过程和ROS其他程序操作流程基本一样,不了解的同学可以学习一下《ROS机器人程序设计》。
下图为编译过程,电脑性能可以的话,几分钟就可以了:
编译
图一:编译环境
最后,我们还需要下载数据集,常用的数据有EuRoC,KITTI等,这里我们以下载EuROC上Easy的数据包为例,登录官网,在Download下选择你要测试的数据包。里面包含了我们需要的数据。
ROS bag
至此,我们已经完成了环境的配置,接下来,我们就基于ROS环境,进行简单的实验吧。

执行

这里也安装官方的方法,分三个环节。

单目 + IMU

下面,我们就在ROS工作空间执行对应的操作了,我们先运行单目+IMU的开环和闭环节点。

	// 新增这一句
	source devel/setup.bash
	// 单独终端窗口
	roscore
	// 运行启动文件
    roslaunch vins vins_rviz.launch
    // catkin_ws目录下
    rosrun vins vins_node src/VINS-Fusion/config/euroc/euroc_mono_imu_config.yaml 
    // 闭环,必须在开环执行到一定程度才能启动
    (optional) rosrun loop_fusion loop_fusion_node src/VINS-Fusion/config/euroc/euroc_mono_imu_config.yaml 
    // 运行刚才下载的ROS bag
    rosbag play YOUR_DATASET_FOLDER/MH_01_easy.bag

测试效果如下:
在这里插入图片描述
我们看到在不加闭环的情况下,轨迹和GroundTruth非常接近,也能回到起始位置。那我们再看一下加闭环之后的效果:
闭环
通过上图我们发现闭环对轨迹优化的效果。

双目 + 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 
    // 运行ROS bag
    rosbag play YOUR_DATASET_FOLDER/MH_01_easy.bag

这里我们就不展示图片了。

双目相机

这也是我们很多工程师关注的地方,具体流程如下:

	// 启动文件
    roslaunch vins vins_rviz.launch
    // 运行节点
    rosrun vins vins_node ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_stereo_config.yaml 
    // 运行ros bag
    rosbag play YOUR_DATASET_FOLDER/MH_01_easy.bag

留一个问题,为什么双目没有闭环优化这一环节呢?欢迎大家留言。

下面是KITTI数据集做了一个GPS和双目的融合实验。

双目 + 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

通过,上面的测试已经完成了VINS-Fusion的功能验证。

最后,我们将看看如何将开源框架应用到我们的产品上。

落地

开源该算法不仅仅是一个软件算法,它也非常依赖硬件平台,对于初学者,作者推荐我们使用全局曝光相机和已经实现了双目同步和IMU同步的硬件平台。
不同的硬件平台,如果想引用EuROC或者KITTI作为仿真数据,需要编写自己的配置文件。
标定也是我们离不开的一个环节,虽然,该算法支持多种相机模型,但是,也需要你将自己的相机标定参数写到配置文件中。
其中,作者也提供了一种ROS环境下的标定方法:
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

最后,也需要大家了解我们使用ceres solver非线性优化工具和DBoW2作为闭环检测,通用的相机模型和GeographicLib库。

备注:

The source code is released under GPLv3 license.

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

【VINS-Fusion入门之一】让系统跑起来 的相关文章

  • 嵌入式Linux系统开发笔记(十五)

    Linux内核启动验证 5 1 编译内核 span class token comment 清除工程 span span class token comment make distclean span span class token co
  • 基于ROS搭建机器人仿真环境

    别人的发复现及经验 https blog csdn net qq 38620941 article details 125321347 gazebo默认仿真环境 1 gazebo models 是系统下gazebo放置模型库的默认位置 2
  • 嵌入式Linux系统开发笔记(十六)

    根文件系统rootfs启动验证测试 接下来我们使用测试一下前面创建好的根文件系统 rootfs xff0c 测试方法使用 NFS 挂载 6 1 检查是否在Ubuntu主机中安装和开启了NFS服务 xff08 特别注意 xff1a nfs 配
  • 安卓5.0以上7.0以下使用Termux

    参考 xff1a https zhuanlan zhihu com p 400507701 说明 xff1a Termux支持5 0以上的安卓系统 Termux7 3版本之后 xff0c 仅支持7 0以上的安卓系统 1 安装Termux 设
  • 关于DSP的CCS6.0平台下的工程搭建(完全可移植)

    本工程以CCS6 0下新建TMS320F28335工程为例 xff0c 其他系列处理器工程搭建类似 xff0c 参考本例即可 工程搭建用到的F2833x TI官方库文件 下载链接 也可直接参考笔者搭建好CCS6 0的工程 下载链接 所建工程
  • STM32Fxx JTAG/SWD复用功能重映射

    问题描述 xff1a 在实验室调车过程中 xff0c 遇到的一个问题 xff1a 为了每次下载程序方便 xff0c 队员们往往会把 Jlink 插在板子上 xff0c 可是在调车过程中发现 xff0c 有时程序会莫名死掉 xff0c 而同样
  • VS2012编译RTKLIB——GNSS定位开源库

    RTKLIB 开源库 有着强大的 GPS 数据实时和后处理功能 xff0c 由于 笔者的毕业设计中需要对GPS 载波相位观测量进行 RTK 解算 xff0c 故而 xff0c 对 RTKLIB 开源库进行了学习与研究 RTKLIB 提供了很
  • 51单片机串行口波特率计算

    1 工作方式介绍 xff1a 方式 0 xff1a 这种工作方式比较特殊 xff0c 与常见的微型计算机的串行口不同 xff0c 它又叫 同步移位寄存器输出方式 在这种方式下 xff0c 数据从 RXD 端串行输出或输入 xff0c 同步信
  • 数码管显示问题总结

    1 数码管显示原理 我们最常用的是七段式和八段式 LED 数码管 xff0c 八段比七段多了一个小数点 xff0c 其他的基本相同 所谓的八段就是指数码管里有八个小 LED 发光二极管 xff0c 通过控制不同的 LED 的亮灭来显示出不同
  • 单片机与嵌入式linux 比较

    MCU门槛低 xff0c 入门容易 xff0c 但是灵活 xff0c 其实对工程师的软硬件功底要求更高 xff0c 随着半导体的飞速发展 xff0c MCU能实现很多匪夷所思匪夷所思的功能 xff0c 比如 xff0c 使用GPIO模拟1个
  • rtk 精确定位 简介

    RTK又称载波相位差分 xff1a 基准站通过数据链及时将其载波观测量及站坐标信息一同传送给用户站 用户站接收GPS卫星的载波相位与来自基准站的载波相位 xff0c 并组成相位差分观测值进行及时处理 xff0c 能及时给出厘米级的定位结果
  • STM32开发利器:STM32CubeMX

    这篇博客篇幅不长 xff0c 主要是为大家介绍ST公司推出的STM32CubeMX开发工具 xff0c 当成下周更新STM32 10个项目工程的预备篇 xff0c 同时FPGA FPGA 20个例程篇 xff1a 8 SD卡任意地址的读写
  • ROS命名空间

    ROS命令空间是一个很重要的内容 xff0c 官方文档 xff1a http wiki ros org Names 分为三类 xff1a relative xff0c global xff0c private 下边是一个官网给的示例 Nod
  • STM32CubeMX关于添加DSP库的使用

    前言 人生如逆旅 xff0c 我亦是行人 一 介绍 STM32 系列基于专为要求高性能 低成本 低功耗的嵌入式应用专门设计的 ARM Cortex M3 内核 而 DSP 应该是 TMS320 系列 xff0c TMS320 系列 DSP
  • STM32H750VBT6的DSP使用的学习——基于CubeMX

    前言 人生如逆旅 xff0c 我亦是行人 1 STM32H7的DSP功能介绍 xff08 STMicroelectronics xff0c 简称ST xff09 推出新的运算性能创记录的H7系列微控制器 新系列内置STM32平台中存储容量最
  • ROS中激光雷达数据类型传递转换及自定义点云数据类型介绍

    目录 一 ROS中激光雷达数据类型传递转换 xff1b 二 点云数据解析 三 自定义点云数据类型 一 ROS中激光雷达数据类型传递转换 xff1b ROS中涉及激光雷达传递的消息类型有两种 xff0c 一种是针对2D雷达 sensor ms
  • C/C++优秀书籍清单

    转载自 xff1a https www cnblogs com kimiway p 3225767 html 书籍是码农进步的阶梯 读好书 好读书 干一行爱一行 除了工作还有生活 在陪伴家人同时 也不忘提高自己 为更好的生活努力 1 C程序
  • 打印_battery_status.scale

    在px4的姿态控制中 xff0c publish控制量时代码乘以了一个 battery status scale xff0c scale effort by battery status if params bat scale en amp
  • 无名飞控

    无名飞控Time c文件 由于 无名飞控主要核心 xff1a 传感器滤波 姿态解算 惯导 控制等代码在TIME c里面运行 xff0c 所以先来分析这个文件 打开文件第一个函数 xff1a void Timer4 Configuration
  • 无名飞控姿态解算和控制(一)

    无名飞控的姿态解算和控制 从imu和磁力计 xff0c 气压计拿到数据后 xff0c 进入AHRSUpdate GraDes Delayback函数 xff0c 其中X w av Y w av Z w av来自陀螺仪 xff0c X g a

随机推荐

  • 无名飞控姿态解算和控制(三)

    继续码代码 上一篇主要写了自稳模式下的代码流程 xff0c 这次主要是飞控的定高和定点控制流程 首先是定高 控制模式在Main Leading Control里选择 定高模式代码 xff1a else if Controler Mode 6
  • 无名飞控框架梳理

    打开飞控的main c文件 首先是HardWave Init 飞控板内部资源 相关外设初始化 打开 include 34 Headfile h 34 Sensor Okay Flag Sensor Init Flag void HardWa
  • 无名飞控的时钟和延时

    首先是飞控里面调用了 SystemInit 时钟初始化这个里面 void SystemInit void Reset the RCC clock configuration to the default reset state for de
  • 谈谈bit位序的问题

    Linux内核里面有下面代码 struct iphdr if defined LITTLE ENDIAN BITFIELD u8 ihl 4 version 4 elif defined BIG ENDIAN BITFIELD u8 ver
  • 无名飞控的姿态解算和控制(四)

    上面几篇帖子已经写完控制流程还剩一点没说 if PPM Isr Cnt 61 61 100 PPM接收正常才进行传感器标定检测 Accel Calibration Check 加速度标定检测 Mag Calibration Check 磁力
  • 无名飞控的自抗扰控制

    无名飞控的自抗扰控制 自控制的算法可以见韩京清先生的书点击打开链接 为了自抗扰控制买了无名飞控 xff0c 现在看看它的自抗扰代码 首先初始化 xff1a 从代码上大致可以看出只对俯仰 横滚方向姿态内环角速度控制器采用ADRC自抗扰控制器
  • ARM寄存器与汇编指令详解

    介绍ARM寄存器之前 xff0c 先来介绍一下ARM处理的模式 xff1a 用户模式 User ARM处理器正常的程序执行状态 快速中断模式 FIQ 用于高速数据传输或通道处理 外部中断模式 IRQ 用于通用的中断处理 管理模式 Svc 操
  • STM32定时器---正交编码器模式详解

    编码器分类 xff1a 按工作原理 xff1a 光电式 磁电式和触点电刷式 按码盘的刻孔方式 xff1a 增量式和绝对式两类 由于博主接触面还不是很广 xff0c 一共就用过两个种类的编码器 xff0c 都是属于光电的 差分编码器 一般由8
  • VM虚拟机下给Ubuntu 目录分区增加容量的方法

    最近在编译androdi5 1代码的时候突然发现虚拟机容量不够了 xff0c 很是蛋疼 xff0c 只好摸索如何想办法给相应目录增加容量 xff0c 以下方法亲测可行 xff01 1 第一步当然是增加硬盘容量了 xff0c 这个需要用到VM
  • 1.uCOS-II简介及移植uCOS-II到STM32F103平台详细步骤

    I 说明 作者 xff1a WXP 翱翔云端的鸟 联系方式 328452854 64 qq com 13100610853 联系请注明 CSDN 申明 个人原创 xff0c 转载请先经过本人同意 xff01 要说的话 个人水平有限 写之前也
  • 1.nRF52832裸机教程--开发环境搭建

    I 说明 作者 xff1a WXP 翱翔云端的鸟 联系方式 328452854 64 qq com 13100610853 联系请注明CSDN 申明 个人原创 xff0c 转载请先经过本人同意 xff01 要说的话 个人水平有限 写之前也看
  • 3.nrf52832裸机教程--系统时钟

    I 说明 作者 xff1a WXP 翱翔云端的鸟 联系方式 328452854 64 qq com 13100610853 联系请注明CSDN 申明 个人原创 xff0c 转载请先经过本人同意 xff01 要说的话 个人水平有限 写之前也看
  • Docker中使用ROS-GUI

    Docker中使用ROS GUI比较麻烦 xff0c 好在有国外的大神解决了这个难题 下面 xff0c 我就教大家如何在Docker中使用ROS GUI 1拉取大神编写的镜像 docker pull ct2034 vnc ros kinet
  • Linux环境下搭建git服务器和TortoiseGit客户端 ssh key测试

    Linux环境下搭建git服务器和TortoiseGit客户端 ssh key测试 1 git的安装2 用户和 ssh目录创建3 本地创建公钥私钥4 在服务器端导入本地公钥5 开启服务器中的RSA认证6 创建仓库7 本地克隆 1 git的安
  • RealSense技术在SR300摄像头上的应用

    RealSense技术在SR300摄像头上的应用 一 实感摄像头 1 RealSense技术 在计算机的发展过程中我们始终没有抛弃键盘和鼠标 xff0c 前几年win8和触屏的配合形成 了一种新的电脑使用模式 xff0c 但是依然没有打破传
  • 自动控制理论(2)——控制系统的数学模型(微分方程、传递函数)

    系列文章目录 自动控制理论 xff08 1 xff09 自动控制理论概述 自动控制理论 xff08 3 xff09 控制系统的数学模型 xff08 系统框图和信号流图 xff09 文章目录 系列文章目录一 线性系统的微分方程1 微分方程的建
  • Android 8.1共享系统代理中的热点(LineageOS15.1)

    https github com Mygod VPNHotspot 下载安装这个软件 xff0c 需要ROOT 开发者选项 xff1a 关闭WLAN硬件加速 该软件设置 xff1a 关闭IPV6 打开 修复DHCP 开启手机自带的热点 该软
  • 浏览器页面滚动条美化(样式)

    浏览器页面滚动条美化 xff08 样式 xff09 最近测试反应我们的产品在浏览器中当页面宽高出现溢出的情况下页面滚动条太丑了 xff01 让我们美化一下 xff01 然后花了一点时间专研了一下关于滚动条样式的相关知识 xff0c 今天就在
  • Android串口工具

    参考Android系统实现方式 xff0c 串口操作采用native实现 xff0c 比java层用文件流的方式更高效 xff0c 不需要延时和睡眠处理 xff0c 大量自测不会出现读取不到数据等问题 特点 xff1a 1 提供基本的串口操
  • 【VINS-Fusion入门之一】让系统跑起来

    文章目录 简介配置执行单目 43 IMU双目 43 IMU双目相机双目 43 GPS 落地备注 xff1a 简介 VINS xff0c 英文缩写Visual Inertial Systems 是一个实时视觉SLAM框架 xff0c 2017