First Estimate Jacobian (FEJ) 如何理解SLAM中的First Estimate Jacobian

First Estimate Jacobian是Visual Inertial中的一个很重要的概念,今天,由泡泡机器人的王京和张腾为大家带来他们的一点思考。欢迎大家在下方说说自己对FEJ的想法和思考。 此篇文章属于泡泡机器人原创专栏的VIO系列中的第一篇,后面我们还会陆续对VIO的一些基础知识以及高级知识进行一系列的科普介绍,希望大家看后能够有所收货。

1.Observability能观性

对于一个系统,Observability性质(能观性)[1,2],决定了这个系统在进行状态估计时,哪些自由度是可以被估计出来的。并且其能观性是不受估计方法(Closed-form 方法、EKF、或者Nonlinear Optimization等等)改变的。 与自控理论中的可观性一样,能观性通过Observability Matrix(能观性矩阵)体现,系统Unobservable的状态维数是这个矩阵零空间的维数。(对于非线性系统,相关性质和矩阵比较特别些,会用到Locally Weakly Observable的概念或者其他的定义,未深究,感兴趣可以看[1]和它的参考文献[8]) 比如,单目纯视觉SLAM里,尺度和6DOF的绝对位姿——总共7DOF——无法被估计。(绝对位姿的6个自由度可以通过固定某一帧位姿来进行固定,而剩下的尺度却无法通过纯视觉固定下来,这在误差累积下,会造成单目VSLAM的尺度漂移[3]) 再比如Visual-Inertial系统里,在运动激励充分(足够多轴向有足够大的加速度/角速度)的情况下,尺度、滚转/俯仰角是可以被估计的,只剩下绝对偏航角、绝对位置无法获得[1],也就是说对于Visual-Inertial系统在合适的运动模式下Unobservable的维数是4。(甚至相机-IMU外参和零偏也可以估计。)
Full observability requires the camera–IMU platform to undergo rotation about at least two IMU axes and acceleration along two IMU axes.

2.二维机器人EKF-SLAM中First Estimate Jacobian

Huang Guoquan老师在[4]中提出First Estimate Jacobian(之后简写成FEJ),论文是针对针对二维机器人3DOF的EKF-SLAM。 上述情况,离散化后EKF系统的传播和测量方程如下

对于3DOF的系统,其能观性矩阵如下:


这种Observability性质的改变带来的影响,论文里称为inconsistency。
Therefore, the filter gains “nonexistent” information about the robot’s global orientation. This leads to an unjustified reduction in the orientation uncertainty, which in turn, further reduces the uncertainty in all the state variables, causing inconsistency.

tial系统中FEJ的引入 Li Mingyang在MSCKF2.0[5]中采用FEJ来对MSCKF进行改进。 基本思路和上面一样,作者对标准MSCKF的能观性矩阵进行分析,发现矩阵的零空间维数是3。而前面[1]等已经指出,Visual-Inertial系统在一般情况下的Unobservable维数是4。 这里和二维EKF-SLAM中的yaw一样,对应于yaw的原本Unobservable的自由度,在标准MSCKF中错误的变成Observable了。 同样,这种能观性的改变也会带来inconsistency,而采用FEJ的方法可以修正这个影响。

4.Sliding Window

Sliding Window方法中的FEJ 上面都是滤波类型方法的应用,对于优化的方法,OKVIS[6]使用了这一方式,DSO[7]参考OKVIS也采用了FEJ。
we employ first- estimate Jacobians, i.e. whenever linearization of a variable is employed, we fix the linearization point for any subsequent linearization involving that particular variable
对于Sliding window的方法,一般会采用Marginalization的方式把离开window的状态所带有的信息给保留下来。 (Marginalization可以看看贺一家博客和里面的参考文献 SLAM中的marginalization 和 Schur complement)

如上图是OKVIS的window,在新增一个KeyFrame时,会把window中的较早的一个KeyFrame以及相关的一些landmark给marginalize掉。 (OKVIS为了保证稀疏性,不是所有的landmark都进行marg。OKVIS中old KeyFrame之间covisible的landmark——Landmarks visible in KF1 but not KF4——被marg,而能被最新的KF或者frame所看到的landmark直接drop,这样只会导致KF与KF之间被fill-in。) (上面博客中提到,“要marg那些不被其他帧观测到的特征点”,是保证KF与KF之间也不会有fill-in。) 进行Marg时会用到相关状态的Jacobian,按照一般的思路,也是用最新的估计值作为线性化点来计算。以上图对KF1进行Marg为例,KF2/KF3和其他没有被Marg的状态,在这次进行Marg时计算Jacobian的线性化点,和Marg之后进行优化计算、或者对KF2进行Marg时的线性化点,因为状态更新之后就不同了。

First Estimate Jacobian (FEJ) 如何理解SLAM中的First Estimate Jacobian相关推荐

  1. 透彻理解SLAM中的非线性最小二乘问题

    下面是我从yuque复制过来的,格式有些问题,需要的可以直接看我笔记原文: https://www.yuque.com/docs/share/61fb4428-e631-4b96-b531-b3b09 ...

  2. Jacobian矩阵的理解

    Jacobian矩阵的理解 前言 学习RNN时看到Jacobian矩阵时我的内心是崩溃的,啥是Jacobian矩阵,怎么活生生就蹦出来一个Jacobian矩阵,说好的bp算法只用求导呢,然后就开始扒J ...

  3. SLAM中的marginalization 和 Schur complement

    在视觉SLAM的很多论文中,会大量或者偶尔出现marginalization这个词(翻译为边缘化),有的论文是特地要用它,比如sliding window slam [2], okvis [3], d ...

  4. SLAM中的零空间问题

    SLAM中的零空间问题 0. 引言 1.矩阵零空间 2.一个解题的例子 3.SLAM系统中的可观性定义 4.SLAM中的零空间问题 5.解决 6.update 0. 引言 首先回顾一下张宇讲的.对Ax ...

  5. 深蓝学院-视觉SLAM课程-第7讲作业:SLAM中g2o入门详解,直接法BA

    1. 引言 在SLAM中,BA是个重要的部分,前后端很多地方都用得到,而g2o是一个很重要的使用图优化求解优化问题的库,所以有必要熟练掌握,尽管有了些C++的底子,但是看g2o的代码还是比较吃力,所以 ...

  6. SLAM中的卡尔曼滤波:究竟滤了谁?

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 在SLAM系统中,后端优化部分有两大流派. 一派是基于马尔科夫性假 ...

  7. 视觉SLAM总结——LSD SLAM中关键知识点总结

    视觉SLAM总结--LSD SLAM中关键知识点总结 视觉SLAM总结--LSD SLAM中关键知识点总结 1. LSD SLAM的创新点/关键点是什么? 2. LSD SLAM的整体框架是怎样的? ...

  8. 三维空间刚体运动5:详解SLAM中显示机器人运动轨迹及相机位姿(原理流程)

    三维空间刚体运动5:详解SLAM中显示机器人运动轨迹及相机位姿(原理流程) 一.显示运动轨迹原理讲解 二.前期准备 三.git管理子模块及克隆源代码 1.学习使用Git Submodule 2.克隆源 ...

  9. 【小白冲冲冲!!!】补2:SLAM中最小二乘问题的引入及求解

    这一部分是我自己加的, 对于理解非线性优化以及那些常用的优化算法有很大的帮助,所以有时间也可以看看,互相交流: 我们都已经知道SLAM中的问题求解其实就是要求出一个位姿,使得噪声项的平方,即误差最小化 ...

最新文章

  1. div实现半透明遮盖层
  2. Android从零开始(第三篇)MVP架构搭建
  3. C语言中 sscanf 的用法
  4. 如何解决多线程并发问题
  5. Docker 安装JDK1.8
  6. 原生android 权限管理,Android 权限管理(原生、EasyPermissions、RxPermissions)
  7. Dotnet Core应用跨框架版本运行
  8. Android 系统(260)---Android 读取SIM卡参数
  9. 联系实际谈谈管理者的沟通协调能力建设
  10. linux内核定时器 代码,Linux内核计时器
  11. QT5.1 调用https
  12. WebLogic 11gR1修改jdk版本
  13. rot移位密码c++实现
  14. netty权威指南第二版源码
  15. iphone html复制粘贴,教大家如何在iPhone上复制内容快速粘贴到iPad上
  16. 携程酒店数据爬取(新)
  17. Python学习之UnitTest【使用,生成HTML测试报告】
  18. java ean13_【求大神指导】java实现EAN13条形码识别
  19. 谷歌的人工智能三大布局
  20. php artisan migrate,关于laravel 5.1下php artisan migrate的使用

热门文章

  1. 使用工厂模式创建收件地址ReceiveAddress 订单对象,创建 若干对象 (属性自定义)
  2. 数据库-6-数据库设计
  3. 【计算机网络学习笔记07】PPP协议、IP编址、NAT技术
  4. void相关注意事项
  5. [HG5143D]电信光猫3.0网关折腾笔记
  6. 百胜中国在上海设立创新中心
  7. 正则表达式过滤url请求
  8. 劲牌持正堂药业与湖北中医药大学共建中药产业研究院
  9. Spring Cloud Data Flow 中文版参考文档
  10. THINKPHP6 页面错误!请稍后再试~问题解决日记01