这是整篇论文的架构,下面针对每一部分进行自己的详细理解。(数学公式的问题没在博客里面解决,都是论文中的截图,尽可能美观==)

一、测量预处理部分(MEASUREMENT PREPROCESSING)

这部分做了两件事情(1)视觉前端处理(2)IMU预积分

(1)首先使用KLT稀疏光流法跟踪图片中的特征点,检测器通过设置两个相邻特征之间的像素的最小分离来执行均匀的特征分布,每张图片的特征点数目在100-300。检测出来的2D特征点经过F矩阵的RANSAC去除外点,然后投影到一个单位球面。

  同时,该阶段选择关键帧,关键帧的选择有2个条件。①平均视差。②特征点的数量。注意:平均视差是由平移和旋转引起的,但是纯旋转是没有办法进行三角化的,为了弥补这一部分采用IMU短期预积分;另外特征点数量低于阈值的时候,可能会完全丢失特征点,故选出来做关键帧。

(2)IMU预积分是这部分的重点。

原始IMU的测量值为:

假设噪声服从高斯分布:

由于加速度偏差和陀螺仪的偏差为随机游走建模,所以他们的导数也服从高斯分布。即:

我们的估计器是需要估计位置p,速度v和旋转q的,它们满足下面的迭代式:

从式子(3)中可以看出来,当前时刻的状态可以通过上一时刻状态来迭代求得,这个式子包含积分,表示t时刻世界坐标系下的旋转,是一个需要估计的量。这个估计的量是需要不断地更新变化,如果按照式子(3)进行计算,那么每次进行变化都需要重新积分,这很消耗计算资源。故在(3)中左右同时乘以一个旋转矩阵Rw->bk,这样就把坐标系转换到了bk下,当状态量变化的时候,可以通过矩阵乘法把相对变化量变成绝对变化量。(可以这么理解:绝对变化量是不变的,相对变化量是变化的。所以这样做是为了较少计算负担)当然这样做的目的如下:

1. 相对k帧的IMU进行积分,不会有累积误差;

2. 即使后面调整了位姿,相对位置不变;

3. 这个旋转矩阵为单位矩阵E,后面每出现一个IMU数据,都可以用任何一种数值积分的方法计算;同时可以将重力加速度提取到积分号外面不参加积分,相当于在重力参考系中积分,计算量也会减少。

于是,得到(5)式:

离散时间的计算:

论文中使用的是Euler积分方式,代码中使用的是中值积分。

当变化量是较小的时候,可以使用一阶近似求得α,β和γ;如果变化比较大,再重新计算。

对于离散时间的估计量的计算式(7):(假设噪声项为0)

得到当前需要优化的变量的雅可比矩阵J和协方差矩阵P,最后得到从k到k+1的测量量,用当前的状态两计算出来的就是估计,相减就是残差。观测方程:

IMU积分后,会全部给后端ceres做优化。

VINS-Mono论文笔记(未完)的更多相关文章

  1. Go web编程学习笔记——未完待续

    1. 1).GOPATH设置 先设置自己的GOPATH,可以在本机中运行$PATH进行查看: userdeMacBook-Pro:~ user$ $GOPATH -bash: /Users/user/ ...

  2. jQuery 学习笔记(未完待续)

    一.jQuery概述    宗旨: Write Less, Do More.    基础知识:        1.符号$代替document.getElementById()函数        2.使 ...

  3. linux学习笔记---未完待续,缓慢更新

    做为linux菜鸟,由于work的需要,慢慢的开始接触学习linux. <鸟哥的linux私房菜>学习笔记. 一.基础命令操作 1.显示日期的命令 date 执行date命令后,显示结果为 ...

  4. oracle-绑定变量学习笔记(未完待续)

    --定义变量SQL> var a number; --给绑定变量赋值SQL> exec :a :=123; PL/SQL procedure successfully completed. ...

  5. Java学习笔记(未完待续)

    变量的作用域(scope)是指变量可以在程序中引用的范围.在方法中定义的变量称为局部变量(local variable).局部变量的作用域从声明变量的地方开始,直到包含该变量的块结束为止.局部变量都必 ...

  6. JavaScript设计模式:读书笔记(未完)

    该篇随我读书的进度持续更新阅读书目:<JavaScript设计模式> 2016/3/30 2016/3/31 2016/4/8 2016/3/30: 模式是一种可复用的解决方案,可用于解决 ...

  7. Hbase客户端API基础小结笔记(未完)

    客户端API:基础 HBase的主要客户端接口是由org.apache.hadoop.hbase.client包中的HTable类提供的,通过这个类,用户可以完成向HBase存储和检索数据,以及删除无 ...

  8. Greys学习笔记(未完待续)

    Greys介绍 greys-anatomy是一个Java线上诊断工具,取名来自美剧<实习医生格雷>,由菜鸟-杜琨同学开发维护.比我们常用的脚本工具btrace提供更多的功能,greys采用 ...

  9. Java并发笔记-未完待续待详解

    为什么需要并行? – 业务要求 – 性能 并行计算还出于业务模型的需要 – 并不是为了提高系统性能,而是确实在业务上需要多个执行单元. – 比如HTTP服务器,为每一个Socket连接新建一个处理线程 ...

  10. cordforce Educational Codeforces Round 47 补题笔记 <未完>

    题目链接 http://codeforces.com/contest/1009 A. Game Shopping 直接模拟即可,用了一个队列来存储账单 #include <iostream> ...

随机推荐

  1. 一.OC基础之:1,OC语言的前世今生 ,2,OC语言入门,3,OC语言与C的差异,4,面向对象,5,类和对象的抽象关系,6,类的代码创建,7,类的成员组成及访问

    1,OC语言的前世今生 , 一, 在20世纪80年代早期,布莱德.麦克(Brad Cox)设计了OC语言,它在C语言的基础上增加了一层,这意味着对C进行了扩展,从而创造出一门新的程序设计语言,支持对象 ...

  2. 整型变量修饰符,char类型数据存储原理,字节数,

    //------------------整型变量修饰符 修饰符(int short long longlong signed unsigned)所有修饰符都是用来修整形 int 4short %hd ...

  3. 并不对劲的bzoj2038:p1494:[国家集训队]小Z的袜子

    题目大意 有\(n\)(\(n\leq5*10^4\))个数\(a_1,a_2,...,a_n\)(\(\forall i\in[1,n], 1\leq a_i\leq n\)) \(m\)(\(m\ ...

  4. ChartCtrl源码剖析之——CChartTitle类

    CChartTitle类顾名思义,该类用来绘制波形控件的标题,它处于该控件的区域,如下图所示: CChartTitle类的头文件. #if !defined(AFX_CHARTTITLE_H__499 ...

  5. Hardcoded string "下一步", should use @string resource警告 (转载)

    转自:http://blog.csdn.net/iqv520/article/details/7579513 在布局文件中,文本的设置使用如下写法时会有警告:Hardcoded string &quo ...

  6. ______________从时间超限到800ms 到200ms——————2098

    分拆素数和 Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Total Submission(s): Accepted S ...

  7. [ZOJ1140]Courses 课程

    Description 给出课程的总数P(1<=p<100),学生的总数N(1<=N<=300) 每个学生可能选了一门课程,也有可能多门,也有可能没有. 要求选出P个学生来组成 ...

  8. 51nod 1133 不重叠的线段(贪心)

    1133 不重叠的线段  基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题  收藏  关注 X轴上有N条线段,每条线段有1个起点S和终点E.最多能够选出多少条互不重叠 ...

  9. hihoOffer收割练习20题目2

    题目2 : SCI表示法 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 每一个正整数 N 都能表示成若干个连续正整数的和,例如10可以表示成1+2+3+4,15可以表示 ...

  10. VS2010中使用命令行参数 分类: c/c++ 2014-07-11 22:24 634人阅读 评论(0) 收藏

    在Linux下编程习惯了使用命令行参数,故使用VS2010时也尝试了一下. 新建项目,c++编写程序如下: #include<iostream> #include<fstream&g ...