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

news2024/10/2 16:16:28

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。

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

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

相关文章

【Unity-UGUI控件全面解析】| Toggle 开关组件详解

🎬【Unity-UGUI控件全面解析】| Toggle 开关组件详解一、组件介绍二、组件属性面板三、代码操作组件四、组件常用方法示例4.1 监听开关事件五、组件相关扩展使用5.1 配合Toggle Group组使用💯总结🎬 博客主页:https://xiaoy.blog.csdn.net 🎥 本文由 呆呆敲代码的小Y …

JavaScript实现输入年份月份,判断该月份是多少天的代码

以下为实现输入年份月份,判断该月份是多少天的代码和运行截图 目录 前言 一、实现输入年份月份,判断该月份是多少天 1.1 运行流程及思想 1.2 代码段 1.3 JavaScript语句代码 1.4 运行截图 前言 1.若有选择,您可以在目录里进行快速查找…

康耐视Visionpro-视觉人机器视觉粉丝-千问之六十五解答

(2023年5月2日更,下次更新2023年10月1日-10月7日) Question0: 康耐视visionpro9.8/9.9-BeadInspect工具详细使用流程 原因分析或解决办法 康耐视visionpro9.8-BeadInspect工具详细使用流程 (qq.com) Question1: C#与visisionpro联合开发exe文件开机启动设置 原因分析…

项目实战笔记

前台:呈现给用户的视觉和基本操作 后台:用户浏览网页时候,用户看不到的后台数据 前面两者都包含前端和后端 技术选型要统一 后端 接入层(control): 接受请求,获取传递过来的参数调用服务层…

unityt光线透射目标

介绍 在Unity中,光线透射目标通常指的是在场景中放置的一些物体,用于模拟光线从一个物体透过到另一个物体的效果。canvas子物体组件中,勾不勾选“光线透射目标”有什么区别? 方法 在Canvas子物体组件中勾选“光线透射目标”时&…

jqGrid之单选

jqGrid不支持单选,本来也想借鉴网上的做法,通过对checkbox的处理来间接实现。但在实践中却发现设置了multiSelect后,checkbox并没有显示出来,怀疑是跟页面的其它前端框架如bootstrap有冲突,索性换个思路来实现&#xf…

C语言的那些少见的事1

目录 前言: 1.变量名称的意义 2.卖函数库的知识 3.变长数组 4.清空输入缓冲区 5.左值和右值 6.for控制语句中定义变量 7.刷题中浮点数的精度问题 8.C语言提供C的标准和C库的约定 9.extern声明外部符号 ❤博主CSDN:啊苏要学习 ▶专栏分类:C语言…

飞书接入ChatGPT - 将ChatGPT集成到飞书机器人,直接拉满效率

文章目录 前言环境列表视频教程1.飞书设置2.克隆feishu-chatgpt项目3.配置config.yaml文件4.运行feishu-chatgpt项目5.安装cpolar内网穿透6.固定公网地址7.机器人权限配置8.创建版本9.创建测试企业10. 机器人测试 转载自远控源码文章:飞书接入ChatGPT - 将ChatGPT集…

java基础知识——26.反射

这篇文章我们来讲一下java的代理与反射,这是很重要的一部分内容。 目录 1.什么是反射 2.获取class对象的三种方式 3.反射获取构造方法 4.利用反射来获取成员变量 5.利用反射来获取成员方法 6.反射的作用 7.反射小结 1.什么是反射 首先,我们来看…

研报精选230503

目录 【个股230503华西证券_山鹰国际】盈利能力环比改善,消费复苏静待花开 【个股230503华西证券_太平鸟】控折扣下毛利率历史新高,关注Q3货品改善 【个股230503中银证券_南京银行】息差企稳回升 【个股230503华西证券_山鹰国际】盈利能力环比改善&#…

No.046<软考>《(高项)备考大全》【专项2】《案例分析 - 计算题(1)》

《(高项)备考大全》【专项2】《案例分析 - 计算题》 1 题型全部概况2 时间管理2.1 关键路径法 CMP2.1.1 原理2.1.2 关键路径的基本问题2.1.3 题目7、题目6 - 正推、反推8、题目7 2.2 PERT(计划评审技术)2.3 活动排序网络图 3 成本…

安卓系统下的截屏和录屏

可以抓取手机屏幕画面(屏幕截图),也可以录制屏幕画面视频。拍摄屏幕后,可以查看、编辑和分享所拍的图片或视频。 抓取屏幕截图 打开要抓取的屏幕。视手机情况执行下列一个操作,3种方法看你手机有效的: 同…

linux【多线程】基于环形队列(RingQueue)的生产消费模型

基于环形队列RingQueue的生产消费模型 一、引入二、信号量2.1 信号量概念2.2 信号量PV操作2.3 POSIX信号量接口 三、基于环形队列(RingQueue)的生产消费模型3.1 设计思路3.2 结构设计图3.3 单生产单消费代码实现 四、多生产多消费情形五、小结5.1 多生产多消费的意义5.2 条件变…

docker容器技术

什么是docker Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,namespace,以及 OverlayFS 类的 Union FS 等技术,对进程进行封装隔离,属于 操作系统层面的虚拟化技术。由于隔离的进程独…

PCL学习三:KD-Tree Octree

参考引用 Point Cloud Library黑马机器人 | PCL-3D点云【量化课堂】KD-Tree系列KD-Tree原理详解 1. 引言 通过激光雷达或双目相机获取到的点云,一般数据量较大且分布不均匀,数据主要表征了目标物表面的大量点的集合,这些离散的点如果希望实现…

七彩虹DDR5主板四根开启XMP教程

七彩虹的D5主板,通常在安装8G2、16G2的情况下是可以正常开启XMP的, 但在16G4、32G2的情况下机会出现XMP超频失败或蓝屏问题 这是由于BIOS优化不足造成的 第一步还是开启XMP,也可以在选择XMP后,切换到用户自定义模式&#xff0c…

Flutter 与第三方 Native-SDK 的交互代理方案

场景 在使用 Flutter 进行功能模块或者整体项目的开发时,如果需要(阶段性)频繁地和某个第三方 Native-SDK 进行交互,而该 Native-SDK 没有实现 Flutter 插件版本的情况下,如果直接把这部分交互 API 加入到原有的 chan…

最优化方法Python计算:一元函数搜索算法——二分法

设一元目标函数 f ( x ) f(x) f(x)在区间 [ a 0 , b 0 ] ⊆ R [a_0,b_0]\subseteq\text{R} [a0​,b0​]⊆R(其长度记为 λ \lambda λ)上为单峰函数,且在 ( a 0 , b 0 ) (a_0,b_0) (a0​,b0​)内连续可导,即其导函数 f ′ ( x ) f…

TinyJAMBU的制动原理——一种轻量化的认证密码

关于TinyJAMBU的定义和介绍在另一篇博文已经介绍过了,这里只对其动作原理进行描述和说明。 对应的博文链接如下:TinyJAMBU:一种轻量化密码介绍 首先,该密码是一个流密码体系的块密码框架。其加密模式整体上来看是块密码&#xff0…