MSCKF2.0(Mingyang Li-IJRR2013) 论文要点总结

2023-05-16

论文:Li M, Mourikis A I. High-precision, consistent EKF-based visual-inertial odometry[J]. The International Journal of Robotics Research, 2013, 32(6): 690-711.

摘要

本篇论文的主要工作包括:

  1. 分析和比较MSCKF和几种传统EKF-SLAM方法的理论基础和性能精度;
  2. 证明了现有的MSCKF和EKF-SLAM的状态估计过程均是不一致(inconsistent),并给出原因是量测雅各比计算方式不对;
  3. 提出一种新的、实时的、能够实现一致估计的EKF-VIO算法(MSCKF2.0),主要贡献包括:1)确保了建立的线性系统模型正确的观测性;2)对相机-IMU的外参进行在线估计校正。

引言

文中主要对以下三类VIO估计器进行分析和比较:
1)EKF-SLAM:滤波状态里包含当前的IMU pose、相机观测到的特征点 pose;
2)滑动窗口算法:滤波状态里只包含一个不同时刻pose构成的滑动窗口,相机观测到的特征点被用来在pose间构造概率约束;
3)MSCKF:滤波状态里只包含多个IMU的pose,此被证明是一种线性化系统的最大后验估计。

在文中,经过蒙特卡洛仿真和实际环境测试表明,MSCKF方法在精度、一致性和计算效率方面均大大优于EKF-SLAM方法。作者认为会产生这种优势的原因是在于MSCKF方法未对特征点的位置进行高斯假设,但是在EKF-SLAM中对特征点位置进行了高斯假设。

此外,经过分析总结了MSCKF产生不一致的两个因素:
1)IMU相对重力方向的旋转(yaw角)在VIO中是不可观测的,但是在MSCKF和EKF-SLAM的线性化系统模型里表现出来确实可观测的。因此在实际中,估计器错误的认为它有更多的观测信息,故而导致低估状态的协方差矩阵,所以此时实际输出的状态协方差并不能真正反映状态量的协方差。
2)相机和IMU间的外参(旋转和平移)被认为是一个预知的较优参数。但是,并且通常,这些标定参数被估计器误认为是精确的,所以导致标定模型中未建模的不确定因素导致状态协方差的再次低估。

为了提高MSCKF的的一致性,文中对上述两个问题进行了分析和解决:
1)在滤波器雅各比计算过程中修复了滤波器线性化系统模型的观测性。此外,还推导了一个闭合的IMU误差状态转移矩阵;
2)将camera-IMU间的外参数包含在了MSCKF的状态向量里,随着IMU状态进行一起在线估计。

作者将更改后的MSCKF算法称为MSCKF2.0,与EKF-SLAM相比,其具有更高的一致性、精度、计算效率。甚至可以与使用滑动窗口迭代最小化的算法进行比较,但是计算效率更高。通过分析和论证,作者认为,对于非线性测量模型,使建立的线性系统模型的观测性更加匹配可能比重新线性化更加重要。

相关工作

松耦合VIO:将IMU和图像测量进行单独处理。
优点:计算消耗少,特别适合于计算资源有限的系统;
缺点:会引起信息损失,比如在图像对间使用特征测量进行位姿估计忽视了连续时间间的相关性,以及单独处理IMU测量并不能确保传感器零偏的最优估计。

文中主要贯注于紧耦合方法,即直接融合视觉和惯性数据,从而实现更高的精度。经过分析表明,一个设计适当EKF估计器可以得到比迭代最小化更高的性能,并且计算资源消耗更小。

最常见的紧耦合EKF估计器是EKF-SLAM,在这种方法里当前相机的pose和特征点位置被进行联合估计。缺点是计算量大,与状态向量里的特征点数量的三次方成正比。甚至在某些时候,比迭代最小化的计算消耗更大。为了解决计算量大的问题,MSCKF应运而生,其在状态向量里维护一组pose的滑动窗口,使用相机测量的特征点在这些pose间建立约束,这样算法的复杂度只与特征点数量成线性关系。而且经过作者的分析和比较,证明MSCKF比EKF-SLAM更快、精度更高,一致性更好。

文中的重点贡献工作是分析和提高基于EKF的视觉惯性系统的一致性。过去在3D视觉定位的一致性中重点关注于特征点位置的参数化。(Civera et al., 2008)已经表明笛卡尔坐标系(XYZ)参数会对特征点的估计导致严重非高斯属性,从而降低精度和一致性,所以提出了一种逆深度特征参数化方法,其可以更好的适配相机的测量模型,并提高性能。(Sola, 2010)提出一种固定齐次特征参数化方法,表明可以进一步提升滤波器一致性。文中对以上三种特征参数化方法进行了测试,尽管固定齐次特征参数化优于其他方法,但是其性能依旧弱于MSCKF算法(MSCKF中使用的是齐次坐标系下的逆深度特征参数化)

与之前其他的论文相比,作者有以下方面的不同:
1)比较了MSCKF和其他EKF-SLAM方法的性能;
2)发现了影响EKF-SLAM方法的相同的,错误的观测性问题;
3)解决了由于预知的不精确的相机-IMU外参标定参数导致的不一致问题;
3)进行了大规模的仿真和实验进行分析和比较。

iii 基于EKF的视觉惯性里程计

本部分主要描述了文中使用的IMU状态的参数化过程,并讨论了两种主流的紧耦合EKF-VIO公式,同时比较了它们的性能。

A. IMU状态的参数化

  • 估计的global系下的位移误差
  • 估计的global系到IMU系的旋转误差


上式中 δ q \delta{q} δq表示需要将估计的global坐标系旋转到真实global坐标系的旋转小量。
上式中 δ θ \delta\theta δθ是一个3*1的表示global系下三个坐标轴的姿态误差。

  • IMU误差状态描述


上式表示IMU的15*1维的误差状态向量。文中姿态误差的选择方式基于(Li and Mourikis, 2012a)论文,此分析指出如上将姿态误差定义为真实的global系和估计的global系间的误差要优于定义为真实的IMU系和估计的IMU系间的误差。需要指出的是,后者(比如在Mourikis and Roumeliotis 2007中所用)在EKF的线性系统的观测模型中引入了额外的误差项

B. EKF-SLAM

  • 滤波器的状态包含当前IMU状态 x I l x_{Il} xIl, 及多个特征点的位置

    本文中,特征点的位置会考虑以下三种参数化方式:1)传统的XYZ坐标参数化;2)逆深度参数化(Civera et al., 2008); 3)固定齐次参数化(Sola. 2010)。这是在实际中比较常用几种特征点位置参数化形式,后两种的目的主要是为了提升滤波器的一致性和精度。

  • 滤波器的状态更新方程、状态协方差矩阵计算与常规EKF算法一致

  • 特征点 i 在时刻 l l l 的观测模型

    在EKF-SLAM中,特征点观测被直接用来进行状态估计,此过程使用实际特征点位置和期望的特征点位置间的残差建立, 线性化估计形式为:

    上式中的 H i l H_{il} Hil h h h相对于滤波状态的雅各比矩阵在状态估计 x ^ l ∣ l − 1 \hat{x}_{l|l-1} x^ll1处的值。这是一个稀疏矩阵,只在IMU状态处和第i个特征点处包含非零块,其他位置均为0。

    一旦 r i l r_{il} ril H i l H_{il} Hil计算完成, 会进行一个马氏门限测试?,如果通过,则进行标准EKF等式的更新(Maybeck, 1982)。

    C. MSCKF

    与EKF-SLAM相比,MSCKF维护一个poses的滑动窗口作为状态向量,使用特征点观测在这些poses之前构造概率约束。在时间l下的状态向量为:
    在这里插入图片描述
    上式中 π i = [ q G I i p i G ] T \pi_i =[{q_G}^{I_i} p_i^G]^T πi=[qGIipiG]T, i= l-N, …, l-1,此为过去N个图像被记录时刻的imu的poses。
    在这里插入图片描述
    算法流程:

  • 状态传播:基于IMU输出进行状态向量和协方差更新;

  • 测量更新:当一次图像被记录时进行更新;
    1.状态增广:基于记录图像时刻的imu位置和姿态对滑动窗口内的状态向量和协方差变量进行增广;
    2.图像处理:角点特征提取,特征匹配;
    3.更新:对每个特征进行跟踪,并计算 r i o 和 H i o r_i^o和H_i^o rioHio,以及进行马氏门限测试。使用通过测试的所有特征进行一次EKF更新;
    4.状态管理:移除所维护状态量滑动窗口里与所有已经处理过的特征相关的imu的pose状态。

D EKF-SLAM与MSCKF对比

  • 所有的EKF-SLAM都假设imu状态和特征点的误差在每个时间都是联合高斯分布。但是,由于相机测量模型的非线形,此估计不是很好,尤其是XYZ参数话特征点的时候。通过优化视觉特征参数化形式,比如使用逆深度参数化IDP和固定齐次参数化可以提高EKF-SLAM的精度和一致性,但是这些方法仍旧显著表现差于MSCKF。这是因为在MSCKF中特征点不包括在状态量里,所以不存在特征点的误差假设,能够避免一部分较大的估计不确定性误差源;
  • 在EKF-SLAM中,每一次都进行特征测量线性化和处理。然而,在MSCKF中,使用了一个延迟线性化的方法:其只有当所有测量都可用时才处理一次特征(多状态约束)。这意外着在计算雅各比时能够实现更加精确的特征估计,从而得到更加精确的卡尔曼增益,并提高修正精度,达到更好的性能。

MSCKF 2.0

A 增强不可观测子空间的修正维度

在MSCKF中相同状态的不同估计量被用来进行计算雅各比,导致了yaw角融合时引进了虚假的信息。修正这个误差的方法是,保证在涉及雅各比计算的时候,只使用imu位置和姿态的一组估计量。此处总是使用每一个状态的第一次可用的估计值进行雅各比计算。
在这里插入图片描述

B 进行在线camera-imu标定

将camera-imu间的转换矩阵包含在滤波器状态里,进行在线估计修正。
在这里插入图片描述

测试结果

1. 与msckf比较

在这里插入图片描述

2. 与迭代优化slam比较

在这里插入图片描述

3. camera-imu在线标定性能

在这里插入图片描述
在这里插入图片描述

4. 计算性能

MSCKF2.0在i7-2.66GHz的处理器上运行单线程c++代码,每次更新(包含图像处理和估计)是10ms。

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

MSCKF2.0(Mingyang Li-IJRR2013) 论文要点总结 的相关文章

随机推荐

  • MySQL8-root用户-提示“1227 - Access denied”解决办法

    MySQL8 root用户 提示 1227 Access denied 解决办法 问题 xff1a 在使用MySQL时提示 1227 Access denied you need at least one of the SYSTEM USE
  • 【Python学习】计算水仙花数(for循环)

    Python学习 计算水仙花数 xff08 for循环 xff09 说明 xff1a 水仙花数是一个三位数 xff0c 三位数各位的立方之和等于三位数本身 计算出的水仙花数有4个 xff1a 153 370 371和407 一 代码 spa
  • 【Python学习】遍历字典

    Python学习 遍历字典 字典 字典 xff08 dict xff09 是可迭代的 通过键 xff08 key xff09 来访问元素的可变的容器类型的数据 字典由两部分视图构成 xff1a 键视图和值视图 键视图不能包含重复的元素 xf
  • 【Python学习】格式化控制符

    Python学习 格式化控制符 在占位符中还可以有格式化控制符 xff0c 对字符串的格式进行更加精准的控制 格式化控制符位于占位符索引或占位符名字的后面 xff0c 之间用冒号分隔 xff0c 语法 xff1a 参数序号 xff1a 格式
  • Oracle:SQL语句--对表的操作——修改列名(即修改字段名)

    修改列名 即修改字段名 alter table 表名 rename column 现列名 to 新列名
  • 社交技能讲座笔记

    作者 xff1a 朱金灿 来源 xff1a clever101的专栏 为什么大多数人学不会人工智能编程 xff1f gt gt gt 感谢张鹏老师做了一堂实用的社交技能讲座 我特地做了一些笔记 xff08 其中包含我的一些理解 xff09
  • Oracle:SQL语句--对表的操作—— 删除字段(即删除列)

    删除一个字段 即删除一列 xff08 未验证在有数据 xff0c 并且互有主外键时 xff0c 是否可用 xff09 语法 xff1a alter table 表名 drop column 字段名 即列名 例 xff1a alter tab
  • Oracle:SQL语句--对表的操作——删除表

    删除表 xff08 未验证在有数据 xff0c 并且互有主外键时 xff0c 是否可用 xff09 表中 列 为 其他表 外键 且有数据 应先解除约束 xff0c 或删除相关表 语法 xff1a drop table 表名 例 xff1a
  • Java作业:输入一个数字判断他是奇数还是偶数

    span class hljs comment 2 输入一个数字判断他是奇数还是偶数 span span class hljs keyword public span span class hljs keyword static span
  • Linux基础知识学习:Linux下修改文件名或修改文件夹名称(有待解决问题)

    Linux下修改文件名或修改文件夹名称 1 修改文件夹名称 1 1我先创建一个test文件夹用来测试 span class hljs keyword mkdir span test 1 2用 mv 命令 将文件移动 xff0c 目标地址如果
  • C语言学习:平方-->乘方(m的n方)

    平方 xff1a 直接用两个数 或变量 相乘就可以表示平方 xff0c 比如x x 不过如果 xff0c 需要求m的n次方 xff0c 就需要用到pow x y 乘方 包括开方 这个库函数了 xff0c 使用pow x y 这个库函数 xf
  • MySql学习:自定义函数之带参函数

    delimiter 如果数据库 test 里的存在函数 formatDate xff0c 就删除这个函数 DROP FUNCTION IF EXISTS test formatDate 创建一个函数 CREATE FUNCTION test
  • docker离线安装

    1 下载离线包 docker官网下载地址 本示例下载的是 xff1a docker 19 03 14 tgz 2 解压到对应目录 解压文件 span class token function tar span xzvf docker 19
  • 2013年:一个技术领导的启程

    作者 xff1a 朱金灿 来源 xff1a http blog csdn net clever101 又到一年总结时 总的来说 xff0c 这一年忙碌而充实 xff0c 现在有点胸中有千言却又不知从何说起 可能每一个希望有所作为的开发人员都
  • STM32——硬件IIC从机通信

    前言 xff1a 根据网上的资料 xff0c 大部分网友表示STM32自带的硬件IIC存在bug xff0c 读写时很容易卡死 自己在调试的时候也出现卡死的情况 xff0c 最后一点一点调试 xff0c 也还是调通了 本文将记录自己调试ST
  • HI3516的编译参数-mcpu=cortex-a7、-mfloat-abi=softfp和-mfpu=neon-vfpv4

    前言 Hi3516A具有浮点运算单元和neon 文件系统中的库是采用软浮点和neon编译而成 xff0c 因此所有Hi3516A板端代码编译时需要在Makefile里面添加选项 mcpu 61 cortex a7 mfloat abi 61
  • 算法移植优化基础

    PS xff1a 为了面试准备的 xff0c 总结的有点粗糙 ARM xff1a Advanced RISC Machines xff0c ARM架构是面向低预算市场设计的第一款RISC微处理器 xff0c 基本是32位单片机的行业标准 x
  • DBoW2在windows上的vs工程搭建方法

    xfeff xfeff 注释 xff1a 蓝体字是 opencv249 专用的修改 xff1b 黑体字是 opencv3 需要的修改 环境 xff1a vs2012 32bit 叙述比较简略 不明之处可以留言 1 配置 opencv 2 4
  • MSCKF_vio学习笔记

    最近因为项目需求 xff0c 对MSCKF vio的论文和代码进行了一番研读 xff0c 现将学习过程记下 MSCKF vio是一种基于多状态约束卡尔曼滤波器的双目视觉里程计 其中多状态约束是指将多帧图像的相机位姿加入卡尔曼状态向量中 xf
  • MSCKF2.0(Mingyang Li-IJRR2013) 论文要点总结

    论文 xff1a Li M Mourikis A I High precision consistent EKF based visual inertial odometry J The International Journal of R