本博客主要是参考论文:<Inertial-Only Optimization for Visual-Inertial Initialization> , 也是ORBSLAM3的作者写的关于如何计算IMU预积分,如果想要更好地理解IMU的代码,可以看看这篇论文,很通顺很享受;

(在很多的SLAM问题解决中,都会用到一个词,叫做Manifold, 关于Manifold的解释可以参考这篇博客:Manifold是什么)

基于"单目SLAM的轨迹误差与IMU所带来的误差相比是可以忽略的" 这样的假设,本文提出来一种有效的只计算惯性导航数据的MAP估计法, 并用其初始化整个visual-inertial SLAM系统;

1. 本论文主要包括以下几个贡献:

  • 下面的关于IMU优化的计算公式,都将IMU噪声的概率模型纳入考虑;
  • 在优化时,对所有的相关变量进行一次性优化,而不是想之前一样分次求解,导致变量之间的关系解耦;
  • 公式相机或机器的初始速度或者高度不进行任何的假设,这也就使得该公式的适用范围更广;
  • IMU的偏差bias并不为0, 并且加入到后面的优化过程中;

2. 最大后验初始化(MAXIMUM-A-POSTERIORI)

区别于传统的VI优化 (可以参考2017年的基于ORBSLAM2推出的ORB-VI的优化过程) , 将所有的变量一次性地在bundleAdjustment中进行优化,下面简称 VI-BA, 这篇论文提出一种新的初始化和优化方法;

基于下面几点:

  • 基于单目SLAM已经是相当的成熟及鲁邦,本文基本假设其只是差一个准确的尺度而已;
  • 视觉slam的误差与IMU数据带来的误差相比, 是很小的,因此,在进行IMU的inertial-only估计时,将视觉的位姿保持为常量;
  • 将scale作为参数加入了优化的过程;
  • 将所有的IMU相关量一次性优化,因此采用的也是位置position,线速度 linear velocity, 角速度angulat velocity的所有的变量的交叉协方差(cross-covariance)

具体的初始化过程分为:

1). 纯视觉的MAP估计

2). 纯IMU数据MAP估计

3). 视觉+惯导的MAP优化;

  1. 纯视觉优化

视觉部分的初始化过程和跟踪过程与传统的ORBSLAM2一致,唯一的区别在于 关键帧的插入更加频繁(约为4HZ~10HZ) 用于降低IMU误差带来的不确定性;  优化过程也是将关键帧以及其所包含的有效地图点送去参与BA优化;

其中利用我们的标定外参Tbc, 每一帧的KEYFRAME的pose都被转换到IMU的坐标系下, 也就是所谓的body reference 中, 因此每一帧对应在bodyframe中的位姿表示为 其中Ri表示的从body frame到world reference的旋转矩阵, pi表示的是第i帧的一个无尺度的位置;

  1. 纯IMU数据的优化

这一步的主要目标是通过上一步中视觉计算出的位姿,获得IMU相关参数的优化结果; 如前面所说的full VI-BA需要一个很好的初值,但是我们目前并没有一个很好的guess, 因此这里不进行full VI-BA, 也就是不将 视觉部分加入的优化的过程. 因此折中的办法是将地图点边缘化(仅仅使用其带来的变量,不参与优化过程,或者构建最小化重投影误差的方程), 获得轨迹的先验信息,以及先关的信息矩阵, 用这些信息进行IMU数据的优化;

因此, 文章提出了一种方法,也就是将所有轨迹,也就是关键帧的位姿固定,而仅仅优化IMU的相关参数, 打包 如下:

其中, s 也就是整个地图的尺度 ;

 是重力加速度方向, 表示为

表示IMU的加速度和角速度偏差;

 是所有的关键帧对应的无尺度的速度;

相对于真值s*v表示的速度, 使用 up-to-scale的速度,使得优化过程更加容易; 同时, 假设在初始化的过程中bias的值是固定不变的, 同时随机游走random walk几乎没有什么影响; 同时,从一开始就将重力加速度纳入到优化公式中;

因此所有的测量值都是IMU的变量, 同时用表示从第i帧到第j帧的关键帧的预积分;  表示连续的从第0帧到第k帧的IMU积分;  因此在最大后验概率的公式如下:

其中表示在给定第k帧IMU数据的情况下, 从0到k帧的可能的IMU测量值分布可能性;

考虑到各个变量测量值之间的独立性, 则 又可以表示为: 

若找到满足最大化后验概率的值, 也就是找到值Xk满足:

下面展示了最大化乘积是怎么转换为最小化和的过程:

因为假设IMU的预积分都是服从高斯分布的, 则MAP问题转换成公式:

其中分别表示prior值的残差, 以及IMU数据测量值的残差; 其中可以表示为:

这其中旋转矩阵,速度,以及位移的残差分别表示如下:

具体公式的推到可以参考我的博客IMU预积分, 但是需要注意的是在ORBSLAM3的IMU相关公式中,并没有随机游走, 且在两个关键帧之间, 偏差bias为常数;

接下来就是具体的求解过程中的一些介绍, 在代码中也可以看到; 因为要求解非线性优化方程, 因此我们需要设定一个良好的初值; 在代码中,将bais的初值设置为0, 而重力加速度的初值设置为加速度测量值的均值; 在优化scale factor的时候,也对初值进行了假设,分别设置为1, 4, 16 米来进行优化;

在优化的最后部分, 所有位姿以及地图点都会乘上优化后的尺度因子, 并且根据估计出的重力加速度方向, 再乘上一个旋转矩阵;

视觉惯性MAP估计

这里的估计和之前推出的那版Visual-Inertial中的估计没有什么区别,主要是最小化重投影误差以及IMU的位姿误差 .

这一部分的优化中不会对重力加速度和尺度进行直接优化,但是他们已经包含在关键帧的位姿中,作为隐性参数出现;  但是因为上一步求解的是线性系统, 而这一步纠结的是MAP问题, 因此, 所使用的初值会有所不同;

当所有的优化完成以后, SLAM也就从视觉SLAM(visual SLAM) 切换到了 视觉惯导SLAM(visual-inertial SLAM);

具体的介绍就是如此, 后续会追加代码的相关介绍,以及更详细的雅克比矩阵的推导,欢迎交流.

如有疑问,欢迎交流: wx: baobaohaha_ 欢迎对SLAM有兴趣的小伙伴一起交流学习~~

ORBSLAM3的IMU积分求解过程相关推荐

  1. ORB-SLAM3 细读单目初始化过程(终结篇)

    本文原创,转载请说明地址:https://blog.csdn.net/shanpenghui/article/details/110522368 一.前言 请阅读本文之前最好把ORB-SLAM3的单目 ...

  2. 协方差,相关系数及求解过程

    一. 协方差 A. 定义 协方差用于衡量两个变量的总体误差,方差是协方差的一种特殊情况,即当两个变量是相同的情况D(X)=Cov(X,Y). 期望值分别为E(X),E(Y)的两个实数随机变量X与Y之间 ...

  3. 多视图几何总结——基础矩阵、本质矩阵和单应矩阵的求解过程

    多视图几何总结--基础矩阵.本质矩阵和单应矩阵的求解过程 多视图几何总结--基础矩阵.本质矩阵和单应矩阵的求解过程 1. 说明--其实求解过程大同小异 2. 单应矩阵求解过程 2.1 基于代数误差的线 ...

  4. matlab破损皮革定位,matlab-code-of-TDOAFDOa 干扰源定位代码,应该在 的求解过程中有帮助。 276万源代码下载- www.pudn.com...

    文件名称: matlab-code-of-TDOAFDOa下载  收藏√  [ 5  4  3  2  1 ] 开发工具: matlab 文件大小: 38 KB 上传时间: 2014-05-31 下载 ...

  5. 深度学习(四十)优化求解系列(2)简单理解神经网络求解过程-未完待续

    对于神经网络的求解过程BP,其实说白了就是复合函数的求导过程,所以我们需要先复习一下高数复合函数的求导过程. 一.复合函数的求导法则 1.复合函数: 此函数是一个包含了三层映射过程的复合函数,为了跟后 ...

  6. 两空间异面直线公垂线及交点坐标的求解过程

    转自:https://blog.csdn.net/hengfanz/article/details/44223411 已知空间4点,点A.B构成直线L1, 点C.D构成直线L2, 求L2上点P,使P到 ...

  7. 数据挖掘机器学习[七]---2021研究生数学建模B题空气质量预报二次建模求解过程:基于Stacking机器学习混合模型的空气质量预测{含码源+pdf文章}

    相关文章: 特征工程详解及实战项目[参考] 数据挖掘---汽车车交易价格预测[一](测评指标:EDA) 数据挖掘机器学习---汽车交易价格预测详细版本[二]{EDA-数据探索性分析} 数据挖掘机器学习 ...

  8. ansys在求解过程中死机关机的解决办法

    ansys是一款功能强大的仿真软件.它用于分析工程领域的结构分析和流体动力学.在使用ansys软件时,必须面对许多复杂的问题,并且计算机会崩溃关机.这导致工作人员的时间浪费以及效率低下. ansys关 ...

  9. 布莱克斯科尔斯模型(五) 方程求解过程

    布莱克斯科尔斯模型(五) 方程求解过程 posted on 2019-02-12 20:05 luoganttcc 阅读(...) 评论(...) 编辑 收藏

最新文章

  1. 直系同源基因ks_哈佛医学院开发出新的Cas9变体,可以靶向基因组绝大部分序列...
  2. socket不能bind请求的地址_socket通信原理
  3. mysql 查询表结构 几种方法
  4. thinkphp mysql 预处理_thinkPHP框架中执行原生SQL语句的方法
  5. P8实战(一):架构概论,从过去到未来
  6. OPenCV学习笔记八-图像的滤波
  7. css之去除html标签默认的外边距margin和内边距padding,通用工具类 base.css
  8. debug idea js_IntelliJ IDEA 配置chrome插件调试js代码 - 狂奔的熊二 - 博客园
  9. 搭建小程序表情包教程
  10. 为2440搭建NFS开发环境【ZT】
  11. VS log4net引用错误的解决
  12. 分节符、分页符及页眉设置方法
  13. 程序员出海创富的机会在哪里?三位专家给出具体建议
  14. chrome浏览器 下载网页视频的方法
  15. CSS 取消input输入框聚焦时的边框(borderoutline)
  16. OSPF与BGP联动
  17. 应用程序无法正常启动0xc000007b请点击确定关闭应用程序
  18. SATA revision 3.2 specification
  19. 理想汽车第三季度净亏损同比降近八成,研发投入不及销售费用
  20. 粒子系统(particle system)

热门文章

  1. LeetCode 234
  2. 防范技巧 Windows百毒不侵的13个妙招
  3. 手游行业2011年十大事件盘点
  4. 佩奇:Google将投入巨资开发前瞻性…
  5. RGB颜色详细标号 用彩虹色装饰CSDN告示栏 - 酷炫
  6. 第一个实训项目(2)
  7. char *str 和 char str[] 的区别
  8. 彻悟人生,句句肺腑!!(被千万人转载的一篇文章)
  9. mysql牵引例子_登录mysql数据库,创建名称为demo的数据,简述步骤。
  10. 间隙锁-记一次死锁原因分析