IMUGNSS的误差状态卡尔曼滤波器(ESKF)的数学模型

news2025/1/12 7:43:01

IMU&GNSS的误差状态卡尔曼滤波器(ESKF)的数学模型

把IMU视为运动模型,把GNSS观测视为观测模型,推导整个滤波器

设状态变量为
x = [ p , v , R , b g , b a , g ] T x=[p,v,R,b_{g},b_{a},g]^{T} x=[p,v,R,bg,ba,g]T
所有变量都默认取下标WB,即机器人在世界坐标系下的变量。
变量依次为:平移、速度、旋转、陀螺仪零偏、加速度计零偏、重力

将IMU测量值带入IMU运动方程中,状态变量在连续时间下的运动方程为
p ˙ = v v ˙ = R ( a ~ − b a − η a ) + g R ˙ = R ( ω ~ − b g − η g ) ∧ b g ˙ = η b g b a ˙ = η b a g ˙ = 0 \begin{matrix} \\\dot{p} =v \\\dot{v} = R(\tilde{a}-b_{a}-\eta_{a})+g \\\dot{R} =R(\tilde{\omega}-b_{g}-\eta_{g})^{\wedge } \\\dot{b_{g}} =\eta_{bg} \\\dot{b_{a}} =\eta_{ba} \\\dot{g} = 0 \end{matrix} p˙=vv˙=R(a~baηa)+gR˙=R(ω~bgηg)bg˙=ηbgba˙=ηbag˙=0

为了在EKF的预测过程中对协方差进行预测,需要对该方程进行线性化。

理论上,线性化的形式为
x k + 1 = f ( x k ) + F d x + w x_{k+1}=f(x_{k})+Fd_{x}+w xk+1=f(xk)+Fdx+w

其中, F = ∂ f ∂ x ( t ) ∣ x ( t ) F=\frac{\partial_{f} }{\partial_{x(t)}} |_{x(t)} F=x(t)fx(t)为系数矩阵。该矩阵由运动方程和各项状态变量的导数构成。

F中需要计算旋转矩阵R相对于某个扰动的导数,而在不引入张量的情况下,是无法表达矩阵对向量导数的形式的。传统算法往往会退一步,用欧拉角或者四元数的四个标量作为状态量,但这样就无法使用流形上的方法了。如果考虑将惯性导航与卫星导航进行融合,那么x中的平移变量就应该使用全局坐标系。这会使x中的数值变的很大,在有些场合超出浮点数的有效数字范围。

能否避免直接使用x和P来表达状态的均值和协方差,推导运动和观测方程呢?能否使用原先卡尔曼滤波器中的更新量来推导这两个方程?

卡尔曼滤波器中的观测部分为:
x k = x k , p r e d + K k ( z k − H k x k , p r e d ) x_{k}=x_{k,pred}+K_{k}(z_{k}-H_{k}x_{k,pred}) xk=xk,pred+Kk(zkHkxk,pred)
其中 ( z k − H k x k , p r e d (z_{k}-H_{k}x_{k,pred} (zkHkxk,pred 为更新量,应是位于切空间中的矢量,中间的加法应为流形与切空间指数映射的广义加法。

但也可以将更新量(或者称为误差状态)视为滤波器的状态变量,来推导运动和观测模型。

不光是平移和旋转,把所有的状态都用误差状态来表达,这就是典型ESKF的做法。

相比于传统的KF,ESKF的优点如下:

  • 在旋转的处理上,ESKF的状态变量可以采用最小化的参数表达,也就是使用三维变量来表达旋转的增量。该变量位于切空间中,而切空间是一个矢量空间。传统KF需要用到四元数(4维)或者更高维的变量来表达状态(旋转矩阵,9维),要不就得采用带有奇异性的表达方式(欧拉角)。
  • ESKF总是在原点附件,离奇异点较远,数值方面更稳定,并且不会产生离工作点太远而导致线性化近似不够的问题
  • ESKF的状态量为小量,其二阶变量相对来说可以忽略。同时,大多数雅可比矩阵在小量情况下变的非常简单,设置可以用单位阵代替。
  • 误差状态的运动学相比原状态变量更小(小量的运动学),因此可以把更新部分归入原状态变量中。

在ESKF中,通常把原状态变量称为名义状态变量(Nominal State),把ESKF里的状态变量称为误差状态变量(Error State)。名义状态变量和误差状态变量之和称为真值

把噪声的处理放到误差状态变量中,可以认为名义状态变量的方程是不含噪声的。

将噪声分离后,名义状态变量的方程变得简洁。滤波器仅需考虑误差状态如何运动,如何观测,最后如何滤波,和名义状态的关系不大。

ESKF的整体流程如下:
当IMU测量数据到达时,把它积分后,放入名义状态变量中。由于这种做法没有考虑噪声,其结果自然会快速漂移,于是把误差部分作为误差变量。
在运动过程中,名义状态随着IMU数据进行递推,误差状态则受到高斯噪声影响而变大。
此时,ESKF的误差状态均值和协方差会描述误差状态扩大的具体数值(视为高斯分布)。
ESKF的更新过程需要 依赖IMU以外的传感器观测。更新过程中,利用传感器数据,更新误差状态的后验均值与协方差。
随后可以把这部分误差合入名义状态变量中,并把ESKF置零,这样就完成了一次预测——更新的循环。

推导ESKF的两个过程。设ESKF的真值状态为 x t = [ p t , v t , R t , b g t , b a t , g t ] T x_{t}=[p_{t},v_{t},R_{t},b_{gt},b_{at},g_{t}]^{T} xt=[pt,vt,Rt,bgt,bat,gt]T。下标t表示true,即真值状态。
这个状态随时间改变,可以记作 x t ( t ) x_{t}(t) xt(t)。在连续时间上,记IMU读数为 ω ~ , a ~ \tilde{\omega} ,\tilde{a} ω~a~,那么可以写出状态变量导数相对与观测量之间的关系为:
p t ˙ = v t v t ˙ = R ( a ~ − b a t − η a ) + g R t ˙ = R ( ω ~ − b g t − η g ) ∧ b g t ˙ = η b g b a t ˙ = η b a g t ˙ = 0 \begin{matrix} \\\dot{p_{t}} =v_{t} \\\dot{v_{t}} = R(\tilde{a}-b_{at}-\eta_{a})+g \\\dot{R_{t}} =R(\tilde{\omega}-b_{gt}-\eta_{g})^{\wedge } \\\dot{b_{gt}} =\eta_{bg} \\\dot{b_{at}} =\eta_{ba} \\\dot{g_{t}} = 0 \end{matrix} pt˙=vtvt˙=R(a~batηa)+gRt˙=R(ω~bgtηg)bgt˙=ηbgbat˙=ηbagt˙=0

这里把重力g考虑进来的主要理由是方便确定IMU的初始姿态。
如果不在状态方程里写出重力变量,那么必须事先确定初始时刻的IMU朝向R(0),才可以执行后续的计算。此时,IMU的姿态是相对与初始的水平面来描述的。
如果把重力写出来,就可以设IMU的初始姿态为单位阵,把重力方向作为IMU当前姿态相比于水平面的一个度量。
两种方法都是可行的,不过将重力方向单独表达出来会使得初始姿态表达更简单,还可以增加一些线性性。

如果把观测量和噪声量整理成一个向量,就可以把上式整理成矩阵形式。不过这样的矩阵形式将含有很多的零项,相比上式并不会有明显简化,所以先使用这种散开的公式。下面推导误差状态方程。

先定义误差状态变量为:
p t = p + δ p v t = v + δ v R t = R δ R 或 q t = q δ q b g t = b g + δ b g b a t = b a + δ b a g t = g + δ g \begin{matrix} p_{t} = p +\delta p \\ v_{t} = v +\delta v \\ R_{t} = R\delta R或q_{t}=q\delta q \\ b_{gt} = b_{g} +\delta b_{g} \\ b_{at} = b_{a} +\delta b_{a} \\ g_{t} = g +\delta g \end{matrix} pt=p+δpvt=v+δvRt=RδRqt=qδqbgt=bg+δbgbat=ba+δbagt=g+δg

不带下标的就是名义状态变量。名义状态变量的运动方程式与真值相同,只是不必考虑噪声(因为噪声在误差状态方程中考虑了)
其中旋转部分的 δ R \delta R δR可以用它的李代数 E x p ( δ θ ) Exp(\delta \theta ) Exp(δθ)表示,此时 R t = R δ R R_{t} = R\delta R Rt=RδR需要改成用指数形式表示。

在误差状态的式中(除旋转外),在等式两侧分别对时间求导,得到对应的时间导数表达式:
δ p ˙ = δ v δ b g ˙ = η g δ b a ˙ = η a δ g ˙ = 0 \begin{matrix} \delta \dot{p} =\delta v \\ \delta \dot{b_{g}} =\eta _{g} \\ \delta \dot{b_{a}} =\eta _{a} \\ \delta \dot{g} =0 \end{matrix} δp˙=δvδbg˙=ηgδba˙=ηaδg˙=0

推导过程后面再补

经过一系列推导可以得到 误差变量的运动状态方程如下:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1609536.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

泛型的初步认识(2)

前言~🥳🎉🎉🎉 hellohello~,大家好💕💕,这里是E绵绵呀✋✋ ,如果觉得这篇文章还不错的话还请点赞❤️❤️收藏💞 💞 关注💥&#x…

【深度学习实战(11)】搭建自己的dataset和dataloader

一、dataset和dataloader要点说明 在我们搭建自己的网络时,往往需要定义自己的dataset和dataloader,将图像和标签数据送入模型。 (1)在我们定义dataset时,需要继承torch.utils.data.dataset,再重写三个方法…

LeetCode in Python 55. Jump Game (跳跃游戏)

跳跃游戏的游戏规则比较简单,若单纯枚举所有的跳法以判断是否能到达最后一个下标需要的时间复杂度为O(),为此,本文采用贪心策略,从最后一个下标开始逆着向前走,若能跳到第一个元素则表明可以完成跳跃游戏,反…

Python基础学习之数据切片

数据切片介绍: 切片的基本语法是data[start:stop:step],其中: start 是切片开始的索引(包括该索引处的元素)。 stop 是切片结束的索引(不包括该索引处的元素)。 step 是切片的步长&#xff0…

Go小技巧易错点100例(十五)

本期看点: 正文开始: Go程序跟踪函数的执行时间 在Go程序中我们经常会对接口执行的耗时做一个记录,特别是针对核心或复杂业务的时候,我们需要关注该业务的执行耗时,可以具体到某个方法,有一个简单有效的技…

Linux:常用软件、工具和周边知识介绍

上次也是结束了权限相关的知识:Linux:权限相关知识详解 文章目录 1.yum-管理软件包的工具1.1基本介绍1.2yum的使用1.3yum的周边生态1.4软件包介绍 2.vim-多模式的文本编辑器2.1基本介绍2.2基本模式介绍2.2.1命令模式(Normal mode)…

Python数据可视化库—Bokeh与Altair指南

👽发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 在数据科学和数据分析领域,数据可视化是一种强大的工具,可以帮助我们…

循序渐进丨使用 Python 向 MogDB 数据库批量操作数据的方法

当我们有时候需要向数据库里批量插入数据,或者批量导出数据时,除了使用传统的gsql copy命令,也可以通过Python的驱动psycopg2进行批量操作。本文介绍了使用psycopg2里的executemany、copy_from、copy_to、copy_expert等方式来批量操作 MogDB …

Darknet框架优化介绍

一、DarkNet框架简介 1.DarkNet的简介 Darknet是一个完全使用C语言编写的人工智能框架,可以使用CUDA的开源框架。主要应用于图像识别领域。 它具有可移植性好,安装间接,查看源码方便等优势,提供了OpenCV等附加选项,还…

【SpringBoot实战篇】获取用户详细信息-ThreadLocal优化

1 分析问题 对token的解析当初在拦截器中已经写过。期待的是在拦截器里写了,在其他地方就不写了,应该去复用拦截器里面得到的结果 2 解决方式-ThreadLocal 2.1提供线程局部变量 用来存取数据: set()/get()使用ThreadLocal存储的数据, 线程安全 2.2过程图…

Java如何用EasyExcel插件对Excel进行数据导入和数据导出

文章目录 一、EasyExcel的示例导入依赖创建实体类数据导入和导出 二、EasyExcel的作用三、EasyExcel的注解 EasyExcel是一个阿里巴巴开源的excel处理框架,它以使用简单、节省内存著称。在解析Excel时,EasyExcel没有将文件数据一次性全部加载到内存中&…

java-springmvc 01

MVC就是和Tomcat有关。 01.MVC启动的第一步,启动Tomcat 02.Tomcat会解析web-inf的web.xml文件

【Flutter】自动生成图片资源索引插件二:FlutterAssetsGenerator

介绍 FlutterAssetsGenerator 插件 :没乱码,生成的图片索引命名是小驼峰 目录 介绍一、安装二、使用 一、安装 1.安装FlutterAssetsGenerator 插件 生成的资源索引类可以修改名字,我这里改成R 2. 根目录下创建assets/images 3. 点击image…

上网行为管理系统功能介绍_上网行为管理实现的功能

上网行为管理系统是一种集成了网络监控、行为分析、策略管理和安全控制等功能的综合性软件解决方案。 它通过对企业内部网络的全面监控和深度分析,帮助管理者了解员工的网络使用习惯、识别潜在风险、优化网络资源配置,并最终实现网络安全和效率的双重提…

实在IDP文档审阅产品导引

实在IDP文档审阅:智能文档处理的革新者 一、引言 在数字化转型的浪潮中,文档处理的智能化成为企业提效的关键。实在智能科技有限公司推出的实在IDP文档审阅,是一款利用AI技术快速理解、处理文档的智能平台,旨在为企业打造专属的…

偏微分方程算法之二阶双曲型方程显式差分法

目录 一、研究目标 二、理论推导 2.1 三层显格式建立 2.2 三层显格式改进 三、算例实现 3.1 一阶显格式 3.2 二阶显格式 一、研究目标 介绍完一阶双曲型偏微分方程的几种差分格式后,我们继续探讨二阶方程的差分格式。这里以非齐次二阶双曲型偏微分方程的初边…

Android11 SystemUI clock plugin 插件入门

插件的编写 参照ExamplePlugin,需要系统签名。 需要先编译以下模块得到jar,引用在项目中。 m SystemUIPluginLibcom.android.systemui.permission.PLUGIN PluginManager.addPluginListener SystemUI 是如何发现 clock plugin 的? Syste…

【管理咨询宝藏78】MBB大型城投集团核心能力建设分析报告

本报告首发于公号“管理咨询宝藏”,如需阅读完整版报告内容,请查阅公号“管理咨询宝藏”。 【管理咨询宝藏78】MBB大型城投集团核心能力建设分析报告 【格式】PDF版本 【关键词】战略规划、商业分析、管理咨询、MBB顶级咨询公司 【强烈推荐】 这是一套…

【服务器部署篇】Linux下Redis安装

作者介绍:本人笔名姑苏老陈,从事JAVA开发工作十多年了,带过刚毕业的实习生,也带过技术团队。最近有个朋友的表弟,马上要大学毕业了,想从事JAVA开发工作,但不知道从何处入手。于是,产…

【数据结构】单链表经典算法题的巧妙解题思路

目录 题目 1.移除链表元素 2.反转链表 3.链表的中间节点 4.合并两个有序链表 5.环形链表的约瑟夫问题 解析 题目1:创建新链表 题目2:巧用三个指针 题目3:快慢指针 题目4:哨兵位节点 题目5:环形链表 介绍完了…