组合导航卡尔曼滤波几个杂项

1.组合导航卡尔曼滤波噪声协方差矩阵调参

在组合导航卡尔曼滤波算法中,主要涉及两个噪声协方差矩阵,过程噪声协方差矩阵Q,测量噪声协方差矩阵R,具体来说:

R表示测量噪声协方差,它是一个数值,这是和仪器或设备比如IMU直接相关的一个特性,作为已知条件输入滤波器。需要注意的是这个值过大过小都会使滤波效果变差,且R取值越小收敛越快,所以可以通过实验手段并辅之以适当的数学建模寻找合适的R值再利用它进行真实的滤波。

Q表示过程激励噪声的协方差,它是状态转移矩阵与实际过程之间的误差。这个矩阵是卡尔曼滤波中比较难确定的一个量,一般有两种思路:

一是在某些稳定的过程可以假定它是固定的矩阵,通过寻找最优的Q值使滤波器获得更好的性能,这是调整滤波器参数的主要手段,Q一般是对角阵,且对角线上的值很小,便于快速收敛;

二是在自适应卡尔曼滤波(AKF)中Q矩阵是随时间变化的。

实际操作过程中,要有如下几种方法:
a. 通过数学建模,比如白噪声和随机游走等确定IMU传感器噪声模型后,先通过GPS和IMU的性能参数和频率确定一个米级单位下的噪声。之后在该噪声参数下得到融合的轨迹,然后分别对两个噪声增大缩小分成几组进行调节,观察轨迹。最终选最平滑的一组轨迹的噪声参数,或者选跟真值比精度最高的一组的噪声参数。

b.对于测量噪声,除了采用调试法,还可以采用CNN学习的自适应调节,具体可参考AI-IMU Dead-Reckoning

2. 组合导航卡尔曼滤波噪声来源

(1) 量化噪声
量化噪声是数字传感器必然出现的噪声,我们通过AD采集把连续时间信号采集成离散信号,在这个过程中,精度就会损失,损失的精度大小和AD采样的精度有关(这里具体指的是模数转换时,AD器件的位数,位数越高采样越精确),精度越高,量化噪声越小。
(2) 角度随机游走
陀螺敏感角速率并输出时是有噪声的,这个噪声里面的白噪声成分叫宽带角速率白噪声,我们计算姿态时,本质上是对角速率做积分,这必然会对噪声也做了积分。白噪声的积分并不是白噪声,而是一个马尔可夫过程,即这一次的误差是在上一次误差的基础上累加一个随机白噪声得到的。角度误差所包含的这种马尔可夫性质的误差就叫做角度随机游走。
(3) 角速率随机游走
从理解上和角度随机游走一样,角速率里面并不全是白噪声,它也有马尔可夫性质的误差成分,而这个误差是由宽带角加速率白噪声累积的结果。
(4) 零偏不稳定性噪声
这应该是大家再熟悉不过的一个误差项了,如果一个陀螺只让你用一个指标来体现精度,那必然就是它了。但是这个指标的理解上却不像前几个参数那样直白。
我们可以先把它理解为零偏随时间的缓慢变化,假设在刚开始时零偏大小是某个值,那么过一段时间之后,零偏便发生了变化,具体变化成了多少,无法预估,所以就要给他一个概率区间,来描述它有多大的可能性落在这个区间内,时间越长,区间越大。
实际上,如果你真的测的时间足够长,会发现它也不会无限制增长下去,所以,这个对概率区间的描述只是近似有效,或者一定时间内有效,由于这个有效时间比较长,所以我们一般仍然使用这种方式来描述,只是在理解上要知道这一点的存在。
(5) 速率斜坡
看到斜坡这种描述词,我们一般会想它是不是一种趋势项。实际上,它确实是趋势性误差,而不是随机误差。所谓随机误差,是指你无法用确定性模型去拟合并消除它,最多只能用概率模型去描述它,这样得到的预测结果也是概率性质的。而趋势性误差是可以直接拟合消除的,在陀螺里,这种误差最常见的原因是温度引起零位变化,可以通过温补来消除。
加速度计同样具有这5项误差,而且原理一致,因此不再赘述。

3.GNSS与IMU的时间同步

GNSS与IMU同步主要需解决两个传感器在统一的时间线下的采样时间。系统处理NMEA信号有几十毫秒的延时,需要进行精确同步。对于GNSS可以从卫星获得高精度的时钟信号,而且通常的GNSS都支持PPS脉冲以及GPRMC信号。
(1)使用GNSS作为时钟源,将GNSS的PPS信号提供给LiDAR和一个开发板,开发板将给相机同时提供一个曝光的脉冲信号。CAMVOX采用这种方案。
(2)使用外部时钟源,这种时钟源通常支持PPS信号输入,将GNSS的PPS传给外部时钟源,同时外部时钟源可以使用PTP/NTP/PPS给LiDAR做时间同步,同时触发相机开始曝光。外部时钟源同时也可以使用PTP/NTP对主机进行时间同步。

实际的INS/GNSS组合导航中同步过程主要依赖GNSS模块输出的PPS秒脉冲信号(上述第一种)。

对于其他传感器,比如激光雷达或相机与IMU/GNSS的多传感器融合,

a. 激光雷达:大多数雷达如VLP-16等都提供基于pps脉冲和GPRMC信号的输入接口,PPS和GPRMC信号可以由GNSS或IMU提供,或者由外部时钟源提供。少数激光雷达还支持NTP/PTP同步,PTP的精度一般来说比NTP要高,这两个信号都需要由外部时钟源设备提供。
b. 相机:需要支持外部触发曝光的型号,因为相机帧周期包括曝光时间和readout时间(整帧像素点读出),一般来说readout时间是固定的,可以补偿这个时间,相机的时间戳选择为曝光的中间时间。具体可参考武汉大学多源智能导航实验室讲义。

4.IMU与GNSS延时问题

GNSS信号到来时是有延时的,而IMU给出的加速度和角速度是实时的,这种情况下如何处理延时实现有效融合呢:
可以先通过IMU积分计算实时的轨迹,同时把IMU数据缓存下来,当GNSS信号到来时,再根据GNSS的时间戳去修正历史时刻的数据,然后重新积分该时刻后的IMU。

5.卡尔曼滤波发散控制

        状态方程描述的动力学模型不准确,或者噪声的统计模型不准确,这样会使数学模型和量测值不匹配而导致发散。通常来说,模型不准确的情况很少,除非原理上错误。多数由于模型太过粗糙而导致。
       递推过程计算机摄入误差累积,使得协方差阵失去正定性或者失去对称性,导致增益计算失去加权效果,从而导致滤波器发散。
       先说模型不准确导致的发散处理技术,累积误差导致发散的处理后面有机会再提。
首先需要再次明确的是,卡尔曼滤波器的本质是线性最小方差估计,它虽然是递推形式的,但是每一步递推获得的估计值其实是根据当前时刻之前的所有量测值而获得的最优估计结果。也就是说它实际是有记忆的。
       而量测值其实是完全不会发散的东西,因为它会始终在它的数学期望周围分散,我们的思路就是,在滤波器中,我们应该更加相信新鲜的量测值,而减小对陈旧量测值的信任程度,也就是增大新鲜量测值的权重,减少陈旧量测值的权重。

        根据上述分析,我们可以重新设计卡尔曼滤波器。提出的发散控制技术包括在KF过程模型中加入虚拟噪声、Schmidt epsilon技术、有限记忆滤波和渐消记忆滤波。

5.1 KF过程模型中添加虚拟噪声

        为了使一个真实系统的数学模型易于处理,必须进行许多简化和假设。此外,大多数系统是非线性的,在使用KF之前必须经过线性化,而这种线性化的方法相当于对系统模型又做了进一步的近似。这一系列不确定因素,可能会造成KF性能下降,甚至发散。
        针对这种情况,可以通过增加过程噪声协方差Q 或者测量噪声协方差R的方式引入人工噪声。因此,在实际应用中,Q和R的参数设定一般是基于之前经验所得,并通过调整,以优化系统的性能。

5.2 Schmidt Epsilon方法

在KF中控制发散的一种方法是为估计误差的协方差矩阵定义一个阈值,使它不低于某个值。在卡尔曼滤波运行过程中,协方差矩阵Pk(-)不断变小,卡尔曼增益K也不断减小,从公式中可以明显看出,当Pk(-)很小时,K趋近0,新的测量值将无法得到足够的权重,滤波器的输出将主要取决于预测值。这一现象被称为Kalman filter incest 。
在协方差阈值化中,通过给计算得到的误差协方差矩阵Pk(-)加上一个符号为正的微小量 ,就可以确保卡尔曼增益存在一个下边界。这个小量值是根据经验确定:
 

5.3 有限记忆滤波

在kalman滤波中,最新的估计值Xk(+)是基于从起始时刻到 k 时刻的所有测量值。为了得到最优估计值,滤波器必须考虑到之前的所有测量值。
但是,旧的数据有时不仅无法提供有效信息,反而会导致滤波器出现问题。
因此,在渐消记忆滤波方法中仅使用最近的测量数据,旧的信息将被丢弃。
例如,仅使用测量的最后100个样本进行滤波,而舍弃更早之前的样本。


5.4 渐消记忆滤波

有时,一些系统模型只在有限时间内是有效的,在超过一定时限之后,系统模型会发生变化。
针对这种情况,可以通过逐渐减小测量噪声的协方差R的方式,来丢弃旧的测量值,以限制其对最新估计值的影响。
这一思想可以通过引入渐消因子来表示:
 

 其中α是一个正的常数。
随着时间的推移,k变得更大,Rk逐渐减小,因此最近数据所占的权重更大。

同样,将渐消因子α引入误差协方差的计算公式中,也可以起到同样的效果:

其中取值,α>1。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

低代码平台很赞,用2个小时,搭出1套应用

最近低代码很火,到处都是低代码的尝试贴,笔者今天也决定深入体验一下,感受它的便捷程度。 在案例开始之前,我们先来聊聊概念。 一、低代码 低代码实质上并不是一个新颖的话题,也不是最近才有的技术突破和创新&#xf…

【全年汇总】2023年CCF软件工程/系统软件/程序设计语言会议截稿时间汇总(持续更新)

本博文是根据CCF会议推荐的软件工程/系统软件/程序设计语言领域相关会议目录撰写。 一、截稿时间总览 截稿时间的总时间轴内容将会持续更新...... 往年投稿及录用情况及链接详见图片后面的内容。 二、会议详细目录 由于一些会议的投稿时间还没公开,因此根据往年投稿…

gRPC结合vcpkg在x64-windows平台visual studio2019 cmake工程里面的应用

这里我们运用vcpkg去下载安装gRPC,进入vcpkg目录后,执行命令:.\vcpkg.exe install grpc:x64-windows grpc在vcpkg里面安装完成后,我们就来使用grpc做一个简单的例子。 gRPC顾名思义,就是google的RPC方案,…

4月23日作业

#include <iostream> #include <cstring> using namespace std; class Student //学生类 { private: string name; //姓名 int year; //年龄 double sorce; //分数 public: Student (){} //无参构造 Student(string a,int b,double c):name(a),y…

元宇宙营销策略、玩法与案例

“元宇宙”依旧是当下品牌创新营销的重要形式&#xff0c;从时趣的行业观察来看&#xff0c;大量品牌方都有着元宇宙的营销意向&#xff0c;但在营销落地上存在不同的进度。一个显而易见的事实是&#xff0c;元宇宙不仅仅是一个虚拟的游戏空间&#xff0c;更是一个未来人人都会…

Java 抽象类和接口

一、抽象类和接口定义和使用场景 当你需要设计一些类&#xff0c;这些类有一些属性和方法是可以共享的&#xff0c;但同时又有一些属性和方法是需要不同的。在这种情况下&#xff0c;Java中提供了两种不同的机制&#xff0c;即“抽象类”和“接口”。 抽象类是一个类&#xff0…

第二十一章 光源

光源是每个场景必不可少的部分&#xff0c;光源除了能够照亮场景之外&#xff0c;还可以产生阴影效果。 Unity中分为四种光源类型&#xff1a; 1. 方向光&#xff1a;Directional Light 用于模拟太阳光&#xff0c;方向光任何地方都能照射到。 2. 点光源&#xff1a;Point L…

Java面试题总结 | Java面试题总结9- RabbitMQ模块(持续更新)

RabbitMQ 文章目录 RabbitMQ为什么使用Rabbitmq而不是其他的消息队列为什么使用消息队列解耦异步削峰 消息队列有什么优缺点MQ的高可用保障单机模式 普通集群模式&#xff08;无高可用性&#xff09;镜像集群模式&#xff08;高可用性&#xff09; MQ如何保证不重复消费、幂等性…

浏览器安全之XSS跨站脚本

基本概念 跨站脚本&#xff08;Cross-Site Scripting&#xff0c;XSS&#xff09;是一种经常出现在Web应用程序中的计算机安全漏洞&#xff0c;是由于Web应用程序对用户的输入过滤不足而产生的。 攻击者利用网站漏洞把恶意的脚本代码&#xff08;通常包括HTML代码和客户端Javas…

Vue.js 框架能力的官方认证

这两天Vue官方推出了Vue.js 认证计划。 即框架能力官方认证&#xff0c;即 Vue.js 框架能力证书。该认证由 Vue School 与 Vue.js 团队合作提供支持。官网&#xff1a;Vue.js - Official Certification Program 官方介绍此次的试题集和代码挑战由 Vue.js 核心团队审核&#xff…

react之按钮鉴权

使用HOC来完成 HOC&#xff1a;高阶组件&#xff0c;是React中复用组件逻辑的一种高级技巧。HOC自身不是React API的一部分&#xff0c;他是一种基于React的组合特性而形成的设计模式。 作用&#xff1a;用于复用组件的业务逻辑 VUE mixinReact Hoc 用户数据渲染带操作按钮渲…

Shell快速入门笔记

文章目录 Shell 快速入门笔记1、Shell概述2、Shell初体验4、注释5、变量6、数据类型6.1 字符串6.2 数组 7、参数传递8、运算符9、常用命令9.1 echo命令9.2 printf命令9.3 test命令 10、流程控制10.1 条件判断10.2 循环 11、函数12、输入/输出重定向12.0 前置知识12.1 输出重定向…

IPsec中IKE与ISAKMP过程分析(主模式-消息3)

IPsec中IKE与ISAKMP过程分析&#xff08;主模式-消息1&#xff09;_搞搞搞高傲的博客-CSDN博客 IPsec中IKE与ISAKMP过程分析&#xff08;主模式-消息2&#xff09;_搞搞搞高傲的博客-CSDN博客 阶段目标过程消息IKE第一阶段建立一个ISAKMP SA实现通信双发的身份鉴别和密钥交换&…

一文详细介绍查看和启用nginx日志(access.log和error.log),nginx错误日志的安全级别,自定义访问日志中的格式

文章目录 1. 文章引言2. Nginx访问日志(access.log)2.1 简述访问日志2.2 启用Nginx访问日志2.3 自定义访问日志中的格式 3. Nginx错误日志(error.log)3.1 简述错误日志3.2 启用错误日志3.3 Nginx错误日志的安全级别 4. 文末总结 1. 文章引言 我们在实际工作中&#xff0c;经常使…

数字设计小思 - D触发器与死缠烂打的亚稳态

前言 本系列整理数字系统设计的相关知识体系架构&#xff0c;为了方便后续自己查阅与求职准备。在FPGA和ASIC设计中&#xff0c;D触发器是最常用的器件&#xff0c;也可以说是时序逻辑的核心&#xff0c;本文根据个人的思考历程结合相关书籍内容和网上文章&#xff0c;聊一聊D…

函数-函数递归及练习

目录 1、什么是递归&#xff1f; 2、递归的两个必要条件 3、递归的练习 3.1 接受一个整型值&#xff08;无符号&#xff09;&#xff0c;按照顺序打印它的每一位 3.2 编写函数不允许创建临时变量&#xff0c;求字符串的长度 3.3 求第n个斐波那契数 3.4 字符串逆序&…

Go语言-数据结构与算法

go语言之专业数据结构与算法 20.4 稀疏 sparsearray 数组 20.4.1 先看一个实际的需求  编写的五子棋程序中&#xff0c;有存盘退出和续上盘的功能 稀疏数组的处理方法是 : 1) 记录数组一共有几行几列&#xff0c;有多少个不同的值 2) 思想&#xff1a;把具有不同值…

【五一创作】【Midjourney】Midjourney 连续性人物创作 ② ( 获取大图和 Seed 随机种子 | 通过 seed 随机种子生成类似图像 )

文章目录 一、获取大图和 Seed 随机种子二、通过 seed 种子生成类似图像 一、获取大图和 Seed 随机种子 注意 : 一定是使用 U 按钮 , 在生成的大图的基础上 , 添加 信封 表情 , 才能获取该大图的 Seed 种子编码 ; 在上一篇博客生成图像的基础上 , 点击 U3 获取第三张图的大图 ;…

STL常用梳理——VECTOR常用接口及其迭代器实现

Vector篇 Vector介绍Vector实现1、定义默认构造函数使用实现 2、迭代器Iterator迭代器使用 3、空间增长问题使用实现 迭代器迭代器介绍迭代器实现 Vector介绍 vector是STL中容器之一&#xff0c;特性如下&#xff1a; vector是表示可变大小数组的序列容器。就像数组一样&#…

Python基础合集 练习21 (错误与异常处理语句)

‘’‘try: block1 except[ExceptionName]: block2 ‘’’ block1:执行代码,表示可能会出现错误的代码块 ExceptionName: 表示要捕获的异常名称,为可选参数.如果不指定异常名称,则表示捕获所有异常 block2:表示发生异常时执行的代码块 while True: try: num int(input(请输…