使用扩展卡尔曼滤波器进行包裹测量的状态估计

此示例说明如何使用扩展卡尔曼滤波器算法对涉及圆形包裹角度测量的 3D 跟踪进行非线性状态估计。对于目标跟踪,传感器通常采用球形框架来报告物体的方位角、距离和仰角位置。该组的角度测量值在一定范围内报告。例如,报告的方位角范围为- 180∘ 到180∘或者 0∘到360∘。然而,跟踪通常在矩形框架中完成,这需要使用非线性滤波器来处理将球形测量值转换为矩形状态所需的非线性变换。

此示例使用恒速模型来跟踪目标的三维位置和速度。扩展卡尔曼滤波器用作非线性滤波器来跟踪该对象的状态。该过滤器使用方位角(ψ)、范围和高度 (φ) 读数作为跟踪练习期间的测量值。

本例的恒速 3D 对象模型由三个轴上的位置和速度组成,如下所示:

距离、方位角和仰角由下式给出:

计算实际测量值和预期测量值之间的残差是过滤过程中的重要步骤。如果不采取必要的预防措施,对于位于缠绕边界附近的物体来说,残差值可能会很大。这会导致滤波器偏离准确的状态,从而导致状态估计不准确。此示例演示如何使用测量包装来处理此类情况。 Simulink® 模型用于演示使用和不使用测量环绕时跟踪状态的差异。

状态估计 - 无测量包裹

首先提供您的初始状态猜测并指定模型名称。

rng(0)
initialStateGuess = [-100 0 0 0 0 0]';
modelName = 'modelEKFWrappedMeasurements';

根据噪声协方差生成测量值,如下所示:

dt = 3;
tSpan = 0:dt:100;
yTrue = zeros(length(tSpan),3);
yMeas = zeros(size(yTrue));
noiseCovariance = diag([20 0.5 0.5]);
xCurrent = initialStateGuess;for i = 1:numel(tSpan)xTrue = stateTransitionFcn(xCurrent);yTrue(i,:) = (measurementFcn(xTrue))';yMeas(i,:) = yTrue(i,:) + (chol(noiseCovariance)*randn(3,1))';xCurrent = xTrue;
end

 模拟模型。

out = sim(modelName);
xEstNoWrap = zeros(numel(tSpan),length(initialStateGuess));
xEstWithWrap = zeros(numel(tSpan),length(initialStateGuess));

运行过滤器并在 3D 图上可视化状态收敛。

figure()
plot3(initialStateGuess(1), initialStateGuess(3), initialStateGuess(5),'ro','MarkerFaceColor','r','MarkerSize',9);
grid
hold on;% Plot options
xlabel('x');
ylabel('y');
zlabel('z');
title('No measurement wrapping');% Run filter
for i = 1:numel(tSpan)xEst = out.noWrapOut(i,:);plot3(xEst(1),xEst(3),xEst(5),'bo','MarkerFaceColor','b');   hold on;xEstNoWrap(i,:) = xEst;
end
hold off

状态估计 - 带测量包裹

现在,启用测量包装并运行过滤器。在 3D 图上可视化状态收敛。

figure()
% Run filter
for i = 1:numel(tSpan)xEst = out.wrapOut(i,:);plot3(xEst(1),xEst(3),xEst(5),'bo','MarkerFaceColor','b');   hold on;xEstWithWrap(i,:) = xEst;
end
plot3(initialStateGuess(1), initialStateGuess(3), initialStateGuess(5),'ro','MarkerFaceColor','r','MarkerSize',9);
grid
title('With measurement wrapping');
hold off

从上图中可以看出,三个轴的比例比没有测量环绕的情况下的 3D 图小得多。这表示启用测量环绕时有更好的收敛性。

验证

在同一图上比较两种情况的估计误差。

figure()
subplot(3,1,1)
plot(xEstNoWrap(:,1) - xTrue(1));
hold on
plot(xEstWithWrap(:,1) - xTrue(1));
ylim([-500 1200])
title('e_x');
hold offsubplot(3,1,2)
plot(xEstNoWrap(:,3) - xTrue(3));
hold on
plot(xEstWithWrap(:,3) - xTrue(3));
ylim([-2000 1000])
hold off
title('e_y');subplot(3,1,3)
plot(xEstNoWrap(:,5) - xTrue(5));
hold on
plot(xEstWithWrap(:,5) - xTrue(5));
ylim([-200 200])
hold off
title('e_z');sgtitle('Estimation Error Plot')
legend('No Wrapping', 'With Wrapping','location','best')

 

观察到,在没有测量包裹的情况下,所有三个轴的误差相对要大得多。

概括

此示例演示如何使用扩展卡尔曼滤波器模块对带或不带测量环绕的非线性系统进行状态估计。据观察,启用包装的状态估计可以提供更准确的状态估计,如 3-D 和误差图所确定的。

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

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

相关文章

Leetcode55LeetCode45

题目 55. 跳跃游戏 思路 一看跳跃,自然想到动态规划。去看了题解发现可以将该问题进行转化,记录每个下标能达到的最远距离,要是这个最远距离超过了数组长度则说明能够到达终点。真的很巧妙!但是最开始自己写,想的是用…

UE5 GAS开发P34 游戏效果理论

GameplayEffects Attributes(属性)和Gameplay Tags(游戏标签)分别代表游戏中实体的特性和标识。 Attributes(属性):Attributes是用来表示游戏中实体的特性或属性的值,例如生命值、…

【网络通信】TCP三次握手、四次挥手

TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。在TCP/IP协议族中,TCP协议负责在两个网络节点之间建立可靠的连接,并保证数据包的顺序传输和数据的完整性。 1.TCP三次握手 TCP三次握手(Thr…

【工具】录屏软件Captura安装使用及ffmpeg下载配置

开启技术视频创作,录屏软件林林总总,适合的、习惯的最好。 录屏软件Captura的使用及ffmpeg下载配置 1.Captura下载、安装2.FFmpeg下载、配置3.Captura屏幕录制试用、录制视频效果 1.Captura下载、安装 Captura主要是一个免费开源的录屏软件&#xff0c…

系统架构设计精华知识

数据流风格:适合于分阶段做数据处理,交互性差,包括:批处理序列、管理过滤器。调用/返回风格:一般系统都要用到,包括:主程序/子程序,面向对象,层次结构(分层越…

20240330-1-词嵌入模型w2v+tf-idf

Word2Vector 1.什么是词嵌入模型? 把词映射为实数域向量的技术也叫词嵌⼊ 2.介绍一下Word2Vec 谷歌2013年提出的Word2Vec是目前最常用的词嵌入模型之一。Word2Vec实际是一种浅层的神经网络模型,它有两种网络结构,分别是连续词袋&#xff…

54位大咖演讲精华! 中国生成式AI大会圆满收官,TOP50企业榜单揭晓

54位大咖演讲精华! 中国生成式AI大会圆满收官,TOP50企业榜单揭晓© 由 红板报 提供 智东西4月19日报道,为期两天的2024中国生成式AI大会,今日在京圆满收官。 54位产学研投嘉宾代表全程干货爆棚,报名咨询人数逾52…

操作符不存在:sde.st_geometry ^ !sde.st_geometry建议 SQL函 数st_intersects在内联inlining期间

操作符不存在:sde.st_geometry ^ !sde.st_geometry建议 SQL函 数st_intersects在内联inlining期间 问题:最近在使用SQL图形处理函数处理图形时,莫名奇妙报如下错误,甚是费解 于是开始四处"寻医问药" 1、nav…

G1、CMS垃圾回收期专题

共同点 非阻塞 使用三色标记法 初始标记、并发标记、重新标记、并发清理 (初始标记、重新标记需要stop world) CMS垃圾回收器 缺点 浮动垃圾 有垃圾碎片 关注停顿时间,使用了效率最高的标记清除算法 G1垃圾回收器 缺点 需要配置高&…

MySQL表级锁——技术深度+1

引言 本文是对MySQL表级锁的学习,MySQL一直停留在会用的阶段,需要弄清楚锁和事务的原理并DEBUG查看。 PS:本文涉及到的表结构均可从https://github.com/WeiXiao-Hyy/blog中获取,欢迎Star! MySQL表级锁 MySQL中表级锁主要有表锁…

【Java EE】 SpringBoot配置文件

文章目录 🍀配置文件的作用🌴SpringBoot配置文件🍃配置文件的格式🌳properties 配置文件说明🌸properties基本语法🌸读取配置文件🌸properties 缺点分析 🌲yml 配置文件说明&#x1…

Docker基本管理和虚拟化

一、docker的发展历史 https://www.cnblogs.com/rongba/articles/14782624.htmlhttps://www.cnblogs.com/rongba/articles/14782624.html 二、docker的概述 Docker是一个开源的应用容器引擎,基于go语言开发并遵循了apache2.0协议开源。 Docker是在Linux容器里运行…

centos7 Nginx一键安装自动化脚本

离线环境下 centos7 Nginx一键安装自动化脚本 本文介绍了一个 Bash 脚本,可用于自动化安装 Nginx 服务器。该脚本简化了安装过程,省去了手动配置的繁琐步骤。 脚本功能特点: 依赖检查和安装: 自动检查并安装 Nginx 所需的依赖包…

轨迹跟踪控制导读

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录前言一、小车底盘运动学模型介绍二、路径跟踪方法:PID控制算法实现路径跟踪--飞思卡尔的方法三、路径跟踪方法&#x…

附近商户-GEO数据结构的基本用法

10、附近商户 10.1、附近商户-GEO数据结构的基本用法 GEO就是Geolocation的简写形式,代表地理坐标。Redis在3.2版本中加入了对GEO的支持,允许存储地理坐标信息,帮助我们根据经纬度来检索数据。常见的命令有: GEOADD&#xff1a…

SpringBoot Bean管理(扫描、注册、注册条件)

Bean扫描 一般的扫描包路径 需要使用xml标签或者是ComponentScan(basePackages “xxx.xxx”) ,但是在SpringBoot中不需要。 在springBoot 项目的启动类中有一个注解:SpringBootApplication,这个注解包含以下注解: 但是ComponentScan并没有指明包路径…

开源协议的对比和商业上的安全使用

开源协议的对比和商业上的安全使用 开源组件是:“任何人都可以自由使用、更改和共享(以修改或未修改的形式)的软件”。当今企业依靠开源来加速开发、降低成本和推动创新。对开放源码的糟糕管理可能会使组织面临安全、法律和操作风险。 使用…

Maven基础篇5

私服 私服目的,方便公司内计算机通信,方便程序员们开发时资源互换; 1.Nexus私服 https://help.sonatype.com/repomanager3/download 可下载,第一个是服务器,第二个是工作空间 bin中有可执行命令 nexus.exe/run端口…

比亚迪唐EV和唐DM-p荣耀版上市,成为新能源汽车市场中的佼佼者!

随着环保理念的深入人心,新能源汽车市场正迎来前所未有的发展机遇。在这个变革的浪潮中,唐EV和唐DM-p荣耀版的上市无疑为市场注入了新的活力。它们凭借先进的技术、卓越的性能以及豪华配置,成为了新能源汽车市场中的佼佼者。然而,…

【飞桨AI实战】人体姿态估计:零基础入门,从模型训练到应用开发

前言 本次分享将带领大家从 0 到 1 完成一个人体姿态估计任务,覆盖数据准备、模型训练、推理部署和应用开发的全流程,项目将采用以PaddlePaddle为核心的飞桨深度学习框架进行开发,并总结开发过程中踩过的一些坑,希望能为有类似项…