视觉惯导里程计VIO综述

2023-05-16

最近阅读了VIO中的一些论文,在这里做个汇总方便以后查阅,如有问题欢迎指正。

一、背景

VIO(Visual Inertial Odometry)视觉惯导里程计,VINS(Visual Inertial Navigation System)的一个分支。用Visual+IMU的方法估计6DOF位姿,同时解决由于单目相机不能估计feature的实际尺度问题。在无人车,无人机定位导航,AR等方面都有着重要应用。

纯相机的SLAM具有一下问题,这里只列出与IMU相比的缺点:

  • 单目相机只能得到feature的相对尺度,不能得到绝对尺度,因此不能用于导航。
  • 当物体移动过快,Camera会出现运动模糊,尤其是卷帘快门相机(rolling shutter)。本领域大佬加州大学河滨分校Mourikis(MSCKF的作者,其导师是明尼苏达大学的大佬)专门针对rolling shutter提出了一个VIO系统,“Vision-aided inertial navigation with line features and a rolling-shutter camera”(IROS. 2015)
  • 对于V-SLAM一般只使用30Hz,但是IMU的频率可达几百Hz,手机上的IMU可以达到200Hz。

但是IMU也具有如下缺点:

  • 对于民用级别IMU,如手机上使用的IMU,或者车载千元级别的IMU,都会出现drift,随着时间的累计误差会越来越大,手机上的IMU可能几秒误差就变得非常离谱。
  • IMU没有Camera可以充分利用环境信息的优点

由以上信息可以看出,Camera和IMU的优点和缺点具有互补性,因此进行融合会使系统具有更强的稳定性和鲁棒性。

二、Camera+IMU的一些问题

由于Camera和IMU的频率不同,因此也带来很多问题。

1.最好的情况。Camera和IMU各自的频率一致,而且时间戳能够对齐。

Camera和IMU各自的频率一致,而且时间戳可以对齐

2.可以接受的情况。Camera和IMU各自的频率一致,但是时间戳有一定偏差。现在很多论文提出在线标定可以解决这种问题。

3.最糟糕的情况。Camera和IMU各自的频率不一致,不能进行融合。

而且,二者要进行融合随之带来的就是初始化变量的增加,VSLAM初始化的变量为相机初始状态的旋转和平移,即R和t。但是VIO系统要初始化变量就多出Camera和IMU之间的外参(R和t),系统的初始速度和IMU的bias,初始化重力方向。

三、IMU测量模型

IMU内部包含陀螺仪和加速度计,可以测量移动物体的加速度和角速度。

b是IMU的bias,是IMU误差来源的一部分,满足随机游走模型(b的导数是高斯分布)。在知道加速度和加速度信息之后可以通过运动学公式积分的到旋转,位姿和速度信息(P,v,q)。

但是在以上积分过程中q是t时刻到世界坐标系的旋转,这样随着线性化点的变化,所有的状态都需要重新进行积分,运算量大大增加,因此在2012年提出了预积分模型,现在的VIO系统都在使用这个理论,同时在《On-Manifold Preintegration for Real-Time Visual-Inertial Odometry》文章介绍了流行预积分模型,详细介绍了预积分的数学理论。

i和j是Camera相邻的两个关键帧,在两个关键帧对IMU进行预积分,然后和相机信息进行融合。

基于关键帧思想的VIO首先是ETH在2015年IJRR上的OKVIS这篇文章提出,《Keyframe-based visual-inertial odometry using nonlinear optimization》,代码也开源了。https://github.com/ethz-asl/okvis

四、紧耦合和松耦合(Tightly-coupled vs. Loosely-coupled)

1.松耦合

所谓松耦合就是Camera和IMU自己玩自己的,互相不干预,在得到各自的信息之后再进行融合,这块研究不多,具体可参考ETH这篇文章。《Inertial Aided Dense & Semi-Dense Methods for Robust Direct Visual Odometry》

2.紧耦合

现在用的最多的就是紧耦合

左图是纯视觉SLAM的示意图,右图是加了IMU之后的示意图,IMU和Camera之间的信息互相约束,在进行误差传递时,需要计算相机误差相对于IMU各个状态的雅克比矩阵。

五、基于滤波和优化的VIO

1.滤波

在视觉SLAM中,现在大家几乎都在用基于优化的思想,很少有用滤波方法了。但是在VIO中,基于滤波和优化的思想还没有分出胜负。基于滤波的VIO最先提出的就是Mourikis在2007年提出的MSCKF(传说用在Google Tango上的方法),《A multi-state constraint Kalman filter for vision-aided inertial navigation》,这是在EKF-SLAM基础上进行改进的,同时这篇文章首次提出了滑动窗口的概念,只不过当时叫做FIFO。

左图是EKF-SALM的基本思想,只要相机来一帧图像,就把相机观测到的feature加入到状态向量中,这样带来问题就是随着系统时间的增加,计算复杂度变得越来越大。

中间的图像时基于关键帧的思想,不像EKF-SLAM一样使用相机的所有帧信息,而是根据一些规则挑选出相机关键帧,只考虑相机关键帧的信息,以降低复杂度。

右图是MSCKF的思想,不在使用相机帧所观测到的feature作为系统信息,而是提出了滑动窗口概念,系统维护一个固定数量帧信息的窗口,同时使用窗口帧共同观测到的feature作为运动约束来估计物体的位姿,相比前两种情况大大减少了系统的复杂度。

Mourikis的学生李明阳在2012年对MSCKF进行了改进,提出了MSCKF2.0,《High-Precision, Consistent EKF-based Visual-Inertial Odometry》,主要对MSCKF的可观测性问题进行了改进。

在2018年宾夕法尼亚大学的Kumar(香港科技大学沈绍劼的老师,不要问我沈绍劼是谁,我是不会告诉你他的学生秦通在读博期间提出了VIns-mono,不要问我秦通是谁,华为200W年薪的那个人)提出了双目版本的MSCKF,《Robust Stereo Visual Inertial Odometry for Fast Autonomous Flight》,代码也开源了,https://github.com/KumarRobotics/msckf_vio

2.优化

基于滤波的VIO与现在VSLAM用的优化方法大同小异,都是优化一个cost fuction。

然后用ceres,g2o,因子图等方法进行优化。

代表作现在最火热的就是沈绍劼老师团队在2017年开源的Vins-mono,https://github.com/HKUST-Aerial-Robotics/VINS-Mono为咱们国人感到骄傲!论文也发表在2018的IEEE Transactions on Robotics(TRO)上《VINS-Mono: A Robust and Versatile Monocular Visual-Inertial State Estimator》。

Vins-mono的总体框架

 

最后,这些论文真的值得一看

特拉华大学的黄国全老师在ICRA2019发表的VINS综述总结的真的太棒了,本文中很多也是出自这篇文章。

《Visual-Inertial Navigation: A Concise Review》

https://github.com/PaoPaoRobot/ICRA2019-paper-list  ICRA2019的所有论文这里都有,感谢泡泡机器人做的工作

Optimization

  1. S. Leutenegger, S. Lynen, M. Bosse, R. Siegwart, and P. Furgale. “Keyframe-based visual-inertial odometry using nonlinear optimization”(IJRR, 2015)
  2. S. Shen, N. Michael, and V. Kumar. “Tightly-coupled monocular visual-inertial fusion for autonomous flight of rotorcraft MAVs”.(ICRA, 2015)
  3. T. Qin, P. Li, and S. Shen. “VINS-Mono: A Robust and Versatile Monocular Visual-Inertial State Estimator”. (TRO, 2018)

Filter

  1. N. Trawny and S. I. Roumeliotis. Indirect Kalman Filter for 3D Attitude Estimation.(介绍基础知识的一本好资料)
  2. A. I. Mourikis and S. I. Roumeliotis. “A multi-state constraint Kalman filter for vision-aided inertial navigation.(ICRA, 2007)
  3. M. Li and A. I. Mourikis. “Improving the Accuracy of EKF-based Visual-Inertial Odometry”.(ICRA 2012)
  4. M. Li and A. Mourikis. “High-Precision, Consistent EKF-based Visual-Inertial Odometry”(IJRR 2013)
  5. Ke Sun, Vijay Kuma. “Robust Stereo Visual Inertial Odometry for Fast Autonomous Flight”.(RAL, 2018)
  6. P. Geneva, K. Eckenhoff, and G. Huang. “A Linear-Complexity EKF for Visual-Inertial Navigation with Loop Closures”(ICRA, 2019)

文章出现的图片来自于网上和论文,如有侵权联系我会及时修改。原创文章,写作不易,转载标明出处。

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

视觉惯导里程计VIO综述 的相关文章

  • KITTI数据集我也是多次见到了,这还包含VIO+GPS的数据集。

    https github com slightech MYNT EYE VINS FUSION Samples https blog csdn net sinat 16643223 article details 115293953 ops
  • MSCKF_VIO作者就是用小觅双目摄像头跑的

    https gitee com maxibooksiyi msckf vio GPS 我在youtube上也看到有人用小觅摄像头跑MSCKF VIO 还有小觅自己也写过用小觅摄像头跑MSCKF https blog csdn net sin
  • 一种GPS辅助的多方位相机的VIO——Slam论文阅读

    34 A GPS aided Omnidirectional Visual Inertial State Estimator in Ubiquitous Environments 34 论文阅读 这里写目录标题 34 A GPS aided
  • VINS-FUSION代码超详细注释(VIO部分)/VIO入门(4)

    文章目录 0 前情回顾本次工作 1 updateLatestStates 和slideWindow 2 optimization 0 前情回顾 VINS FUSION代码超详细注释 xff08 VIO部分 xff09 VIO入门 1 讲到了
  • 运行msckf_vio

    1 编译 cd span class token operator span span class token operator span msckf catkin make span class token operator span p
  • MSCKF-vio源码阅读

    作为一个菜狗来说 xff0c 一开始弄明白kf ekf等滤波方法实属不易 xff0c 但是一旦理解原理之后再发散到基于滤波的状态估计方法 xff0c 学习起来就会事半功倍 xff0c 就像导航包中的robot pose ekf xff0c
  • VINS-MONO运行TUM VIO数据集真实轨迹问题处理

    小loser第一次写记录 xff0c 再次记录一下测试TUM VIO数据集碰到的问题及处理 VINS本身输出的数据需要进行格式转换才能用 xff0c 输出文件修改参考这个博客 Ubuntu 18 04 VINS Mono运行与EVO的评测与
  • 主流VIO框架分析及VINS部分解析

    本文为搜集的资料整理 xff1a C0包含位姿和运动信息 xff1b 对于T0来说 xff0c 不仅受rv10 rv11的视觉影响 xff0c 也受rb01的IMU的影响 上述方式繁琐 xff0c 故引入因子图 xff0c 便于思路梳理和理
  • 视觉惯性里程计 综述 VIO Visual Inertial Odometry msckf ROVIO ssf msf okvis ORB-VINS VINS-Mono gtsam

    视觉惯性里程计 VIO Visual Inertial Odometry 视觉 惯性导航融合SLAM方案 博文末尾支持二维码赞赏哦 视觉惯性SLAM专栏 VINS技术路线与代码详解 VINS理论与代码详解0 理论基础白话篇 vio data
  • AirSim中运行VIO算法(VINS-Mono)

    VINS Mono在AirSim上跑通 文章目录 VINS Mono在AirSim上跑通一 IMU参数配置二 相机参数设置三 AirSim发布数据问题 关于相机 IMU内外参的完整解释 xff0c 可以参考我的另一篇文章 一 IMU参数配置
  • VIO标定(相机和IMU的标定)

    VIO标定 VIO标定分为三个部分 xff0c 相机的标定 xff0c IMU的标定 xff0c 相机和IMU的联合标定 双目相机相机内参标定 xff08 单目相机可以用类似的方法 xff09 标定单目和标定双目的区别 标定单目相机就是简单
  • Vins-fusion 针对数据集Kaist进行修改Kimera_vio_ros针对DBOW2--CATKIN的修改

    1 config文件 xff1a realsense stereo imu config yaml 更改 xff1a gt topic 34 pose transformed 34 增加真值topic 修改代码 xff1a rosNodeT
  • Auterion PX4 VIO代码分析

    也就是PX官方文档给的VIO代码 xff0c 用的T265 也是之前在github里面搜PX4 T265搜到的 https github com Auterion VIO blob master src nodes px4 realsens
  • msckf_vio使用记录

    使用环境 xff1a ubuntu14 04 indigo indigo版本的ros默认支持的是opencv2 4 8 xff0c 其带的库cv bridge依赖于opencv2 但是 xff0c msckf vio使用的是Ubuntu 1
  • 视觉惯性里程计Visual–Inertial Odometry(VIO)概述

    周围很多朋友开始做vio了 xff0c 之前在知乎上也和胖爷讨论过这个问题 xff0c 本文主要来自于知乎的讨论 来自https www zhihu com question 53571648 answer 137726592 个人理解错误
  • 关于VIO中IMU预积分的讲解

    Why VIO 转自 xff1a https zhehangt github io 2019 03 23 SLAM Basic VIOInit 首先我们先简单回顾一下为什么要做VIO xff0c 以及为什么要做VIO初始化 我们知道单目相机
  • 从零开始手写 VIO

    前言 最近和高博合作推出了一个关于 VIO 的课程 xff0c 借此博客推荐下 这个课程的图优化后端是我们自己写的 xff0c 仅依赖 Eigen 实现后系统的精度和 ceres 以及 g2o 不相上下 个人感觉这个课程还是能学到不少东西
  • VIO松耦合和紧耦合对比

    松耦合 xff08 结果级融合 xff09 xff1a 两个独立的运动估计过程中分别处理视觉和惯性测量的信息 xff0c 最终将他们的输出 xff08 位置和姿态 xff09 融合作为结果 紧耦合 xff08 特征级融合 xff09 xff
  • 【深蓝学院】手写VIO第2章--IMU传感器--笔记

    0 内容 1 旋转运动学 角速度的推导 xff1a 左 61 omega wedge xff0c 而
  • 滑窗优化——边缘化

    文章目录 一 从高斯分布到信息矩阵 1 1 SLAM 问题概率建模 1 2 SLAM 问题求解 1 3 高斯分布和协方差矩阵 1 4 样例 1 4 1 样例1 1 4 2 样例2 二 舒尔补应用 边际概率 条件概率 2 1 舒尔补的概念 2

随机推荐

  • 用D435i录制自己的数据集运行ORBslam2并构建稠密点云

    一 录制rosbag 二 播放rosbag并用rviz查看topic xff0c 记下rgb和depth流话题名 三 用如下脚本 xff08 python2而不是3 xff09 保存rgb和depth图片同时生成rgb txt depth
  • Unrecoverable error: corrupted cluster config file.

    from https www cnblogs com topicjie p 7603227 html 缘起 正在欢乐的逗着孩子玩耍 xff0c 突然间来了一通电话 xff0c 值班人员告诉我误重启了一台服务器 xff0c 是我负责的服务 x
  • 树莓派3B+无屏幕和键盘配置树莓派WiFi和SSH

    前言 树莓派3B 43 安装系统Raspbian xff0c 默认的SSH是关闭的 xff0c 如何在无屏幕和键盘的情况下 xff0c 让笔记本通过WIFI访问树莓派 树莓派3B 43 发布后不久 xff0c 树莓派官方 Raspbian
  • ubuntu分区设置

    ubuntu分区设置 swap区 xff1a 逻辑分区 xff0c 虚拟内存类似 xff0c 大小和电脑内存一样大 xff1b boot区 xff1a 主分区 xff0c 引导系统的 xff0c 分配200M 500M xff0c 条件好些
  • 图像系统概述和名词解析

    图像系统组成 光源 xff08 包含人造光 自然光 闪光灯 xff09 照到物体上 xff0c 光线反射进入成像系统 xff0c 经过镜头 xff08 对于变焦镜头有驱动马达调整镜片位置 xff0c 实现变焦 xff09 光圈 滤光片 快门
  • 海思IQ图像清晰度调试策略

    总策略 影响清晰度的关键指标 xff1a 锐度 噪点和gamma Gamma调试步骤 YUVsharpen锐度调试 LDCI局部对比度调节 Dehaze调节 去雾算法主要用在有场景中做处理 xff0c 调整图像的对比度使更加清 去雾算法主要
  • 海思ISP曝光调整策略

    AE曝光调整 Exposure Attr 影响参数 xff1a ExpTimeRange Min Max 曝光时间Gain 各种增益控制Speed 曝光速度 xff08 影响到曝光收敛 xff0c AE闪烁 xff09 Compensati
  • ADS(ARM Developer Suite)安装与卸载中的问题(转)

    ADS用来对ARM的裸机代码进行编辑和调试 我在安装ADS1 2的过程中 xff0c 遇到了一个小问题 xff0c 写下来和大家分享一下解决方法 1 在安装程序 xff0c 进度条到100 时 xff0c 会一直停在那 xff0c 十几分钟
  • ucosIII 学习资料汇总

    网站 书籍 1 嵌入式实时操作系统uc OS III 邵贝贝译 这本书其实就是一本工具书 xff0c 我参考了官方的说明文档 xff0c 发现雷同很高 感觉就是官方说明文档翻译的 xff0c 用来应用查查接口还有点用 xff0c 不是十分推
  • USB协议传输结构

    USB作为数据通信标准 xff0c 固件可分为枚举配置和类协议部分 xff0c 枚举配置实现USB主机对设备的枚举和配置 xff0c 类协议实现设备各自的数据传输 usb2 0协议chapter8 protocol layer 1 USB协
  • 蓝牙HCI协议

    HCI 层位于蓝牙高层协议和低层协议之间 xff0c 提供了对基带控制器和链路管理器的命令以及访问蓝牙硬件的统一接口 它是我们实现自己的蓝牙设备要接触的第一个蓝牙协议 起着承上启下的作用 HCI通过包的方式来传送数据 命令和事件的 xff0
  • 标准USB设备请求命令

    一 标准的usb设备请求命令 控制传输是最重要和结构最复杂的一种传输类型 控制传输的 初始设置步骤 中包含了1 个8 字节的DATA0 数据包 参见图6 6 这8 字节的数据包是主机用来发送控制阶段中的请求命令的 而这些请求命令是主机配置U
  • 卡尔曼滤波基本公式推导(高斯乘积法)

    前言 卡尔曼滤波的推导这里给出两种推导方法 xff1a 一种是利用高斯乘积定理和贝叶斯公式推导出来 的 xff0c 另一种借用的是最小误差的思想 xff08 IMSE xff09 关于卡尔曼滤波的应用场景以及通俗的解释 xff0c 我相信各
  • 计算机组成原理(唐朔飞)

    计算机组成原理 唐朔飞 存储器 存储器分类 存储介质分类 半导体存储器磁表面存储器磁芯存储器 淘汰 存储方式 存储结构 存储器容量 地址总线 xff1a CPU能访问的地址宽度 xff0c 32地址线表示能访问2的32次方个存储单元地址 数
  • ubuntu配置静态IP、DNS地址

    虚拟机需要使用桥接上网 1 ifconfig 查看网卡信息 2 vi etc network interfaces 打开并编辑配置文件 配置说明 xff1a auto lo iface lo inet loopback auto ens33
  • c调用libcurl库发送GET 和 POST请求

    libcrul请求的基本套路流程 1 调用curl global init 初始化libcurl2 调用curl easy init 函数得到 easy interface型指针3 调用curl easy setopt 设置传输选项4 根据
  • LINUX 操作GPIO口

    两种方法 1 写驱动的方式 缺 2 通过linux提供的用户空间 终端控制 通过在用户空间上来操作GPIO xff0c 控制入口在 xff1a sys class gpio 首先确认内核里是否已选择上gpiolib的sysfs接口功能 默认
  • V4L2简介

    http work blog readthedocs org en latest v4l2 20intro html 第一章 V4L2简介 1 1 什么是v4l2 V4L2 xff08 Video4Linux的缩写 xff09 是Linux
  • 电子设计项目

    全套完整毕业设计智能家居控制系统设计 16X16点阵滚动显示 单片机595 43 138LED点阵 基于WIFI传输的单片机传感器设计 xff08 毕业论文 xff09 基于单片机设计的多点测温系统 数码管显示温度 基于单片机设计的公交报站
  • 视觉惯导里程计VIO综述

    最近阅读了VIO中的一些论文 xff0c 在这里做个汇总方便以后查阅 xff0c 如有问题欢迎指正 一 背景 VIO xff08 Visual Inertial Odometry xff09 视觉惯导里程计 xff0c VINS xff08