当前位置: 首页 > news >正文

基于UKF-IMM无迹卡尔曼滤波与交互式多模型的轨迹跟踪算法matlab仿真,对比EKF-IMM和UKF

目录

1.程序功能描述

2.测试软件版本以及运行结果展示

3.核心程序

4.本算法原理

5.完整程序


1.程序功能描述

基于UKF-IMM无迹卡尔曼滤波与交互式多模型的轨迹跟踪算法matlab仿真,对比EKF-IMM和UKF。

2.测试软件版本以及运行结果展示

MATLAB2022A版本运行

3.核心程序

.............................................................................
% 绘制目标运动与传感器分布的图形,展示 IMM - UKF 算法的跟踪效果
%目标运动与传感器分布
figure   
% 绘制目标的真实轨迹
plot(TargetState(1,:),TargetState(4,:),'k','LineWidth',2);
hold on
% 循环处理每个节点
for i = 1:NumberNode% 绘制 IMM - UKF 算法的状态估计轨迹plot(Xfstate(1,:),Xfstate(4,:),'-mo',...'LineWidth',1,...'MarkerSize',6,...'MarkerEdgeColor','k',...'MarkerFaceColor',[0.5,0.9,0.0]);hold on% 绘制真实节点的位置plot(NodeDistribution(1,i),NodeDistribution(2,i),'bo','LineWidth',1);hold on% 在节点位置旁边标注节点编号text(NodeDistribution(1,i)+0.5,NodeDistribution(2,i)+0.5,num2str(i));hold on% 绘制 IMM - UKF 算法估计的节点位置plot(pest(1,i),pest(2,i),'rs','LineWidth',1);hold on% 添加图例说明不同线条和标记的含义legend('真实轨迹','IMM-UKF估计轨迹','真实节点','IMM-UKF节点');% 设置图形标题title('跟踪效果对比');
end
% 设置坐标轴为正方形,使图形比例合适
axis square% 绘制目标运动与传感器分布的图形,展示 IMM - EKF 算法的跟踪效果
figure   
% 绘制目标的真实轨迹
plot(TargetState(1,:),TargetState(4,:),'k','LineWidth',2);
hold on
% 循环处理每个节点
for i = 1:NumberNode% 绘制 IMM - EKF 算法的状态估计轨迹plot(Xfstate2(1,:),Xfstate2(4,:),'-mo',...'LineWidth',1,...'MarkerSize',6,...'MarkerEdgeColor','k',...'MarkerFaceColor',[0.5,0.9,0.0]);hold on% 绘制真实节点的位置plot(NodeDistribution(1,i),NodeDistribution(2,i),'bo','LineWidth',1);hold on% 在节点位置旁边标注节点编号text(NodeDistribution(1,i)+0.5,NodeDistribution(2,i)+0.5,num2str(i));hold on% 绘制 IMM - EKF 算法估计的节点位置plot(pest2(1,i),pest2(2,i),'rs','LineWidth',1);hold on% 添加图例说明不同线条和标记的含义legend('真实轨迹','IMM-EKF估计轨迹','真实节点','IMM-EKF节点');% 设置图形标题title('跟踪效果对比');
end
% 设置坐标轴为正方形,使图形比例合适
axis square% 绘制目标运动与传感器分布的图形,展示 UKF 算法的跟踪效果
figure   
% 绘制目标的真实轨迹
plot(TargetState(1,:),TargetState(4,:),'k','LineWidth',2);
hold on
% 循环处理每个节点
for i = 1:NumberNode% 绘制 UKF 算法的状态估计轨迹plot(Para_sensor3(1,:),Para_sensor3(4,:),'-mo',...'LineWidth',1,...'MarkerSize',6,...'MarkerEdgeColor','k',...'MarkerFaceColor',[0.5,0.9,0.0]);hold on% 绘制真实节点的位置plot(NodeDistribution(1,i),NodeDistribution(2,i),'bo','LineWidth',1);hold on% 在节点位置旁边标注节点编号text(NodeDistribution(1,i)+0.5,NodeDistribution(2,i)+0.5,num2str(i));hold on% 绘制 UKF 算法估计的节点位置plot(pest3(1,i),pest3(2,i),'rs','LineWidth',1);hold on% 添加图例说明不同线条和标记的含义legend('真实轨迹','UKF估计轨迹','真实节点','UKF节点');% 设置图形标题title('跟踪效果对比');
end
% 设置坐标轴为正方形,使图形比例合适
axis square% 绘制不同算法的误差随时间变化的曲线
figure
% 绘制 IMM - UKF 算法的误差曲线
plot(tms,err1(1,:),'-bs',...'LineWidth',1,...'MarkerSize',6,...'MarkerEdgeColor','k',...'MarkerFaceColor',[0.9,0.0,0.0]);
hold on;
% 绘制 IMM - EKF 算法的误差曲线
plot(tms,err2(1,:),'-mo',...'LineWidth',1,...'MarkerSize',6,...'MarkerEdgeColor','k',...'MarkerFaceColor',[0.5,0.9,0.0]);
hold on;
% 绘制 UKF 算法的误差曲线
plot(tms,err3(1,:),'-r>',...'LineWidth',1,...'MarkerSize',6,...'MarkerEdgeColor','k',...'MarkerFaceColor',[0.9,0.9,0.0]);
hold on;
% 添加图例,说明不同曲线对应的算法
legend('IMM - UKF ','IMM - EKF','UKF');
% 设置 x 轴标签为时间步
xlabel('Time Steps')
% 设置 y 轴标签为误差
ylabel('error')% 绘制不同算法的平均误差柱状图
figure
% 绘制三个算法的平均误差柱状图
bar([mean(err1(1,:)),mean(err2(1,:)),mean(err3(1,:))]);
% 设置 x 轴标签,说明每个柱子对应的算法
xlabel(['1:IMM - UKF, 2:IMM - EKF, 3:UKF']);
% 设置 y 轴标签为误差
ylabel('error')
93

4.本算法原理

       在许多工程实践中,往往不能直接得到所需要的状态变量的真实值。例如雷达在探测目标时,可以通过回波信号等计算出目标的距离、速度和角度等信息。但雷达探测过程中会存在干扰(系统噪声、地杂波和非目标信号等)的问题,这些干扰会导致回波信号中夹杂有随机噪声。我们要在有随机噪声的回波信号中分离目标的运动状态量,准确的得到这个状态量往往是不可能的,只能根据观测信号估计这些状态变量。卡尔曼滤波就是这种通过估计或预测降低噪声影响的一种好的方法。特别是在线性系统中,卡尔曼滤波是最优的滤波算法。

       在轨迹跟踪问题中,系统状态通常随时间变化,并且受到过程噪声的影响;同时,对系统状态的观测也包含观测噪声。我们的目标是根据一系列的观测值来估计系统的真实状态。UKF 是一种用于非线性系统状态估计的滤波算法。与传统的扩展卡尔曼滤波(EKF)不同,UKF 不依赖于对非线性函数的线性化,而是通过一组确定性采样点(Sigma 点)来近似状态的概率分布,从而更准确地处理非线性问题。

       在kalman滤波算法中用到了状态转移方程和量测方程,被估计量随着时间的变化,呈现的是一个动态估计。在目标跟踪中,不需要知道目标的运动模型就能实时的修正目标的状态变量(速度、距离等),具有良好的适应性。但是当目标实施机动变化(突然加、减速或急转弯等),仅仅采用基本的kalman滤波算法往往得不到理想的结果。这时就需要采用自适应算法。交互多模型(IMM)就应用而生。

  目标交互多模型kalman滤波算法在机动目标跟踪领域得到广泛应用。IMM算法使用两个或者多个模型来描述工作过程中可能出现的状态,最后通过有效的加权融合进行系统状态估计,很好的克服了单个模型估计误差较大的问题。

       IMM 算法用于处理系统在不同模式下运行的情况。它假设系统存在多个可能的运行模式,每个模式对应一个不同的状态模型,通过在这些模型之间进行交互和切换,以适应系统模式的变化,从而提高状态估计的准确性。

5.完整程序

VVV

相关文章:

基于UKF-IMM无迹卡尔曼滤波与交互式多模型的轨迹跟踪算法matlab仿真,对比EKF-IMM和UKF

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于UKF-IMM无迹卡尔曼滤波与交互式多模型的轨迹跟踪算法matlab仿真,对比EKF-IMM和UKF。 2.测试软件版本以及运行结果展示 MATLAB2022A版本运行 3.核心程序 .…...

分布式事务组件Seata简介与使用,搭配Nacos统一管理服务端和客户端配置

文章目录 一. Seata简介二. 官方文档三. Seata分布式事务代码实现0. 环境简介1. 添加undo_log表2. 添加依赖3. 添加配置4. 开启Seata事务管理5. 启动演示 四. Seata Server配置Nacos1. 修改配置类型2. 创建Nacos配置 五. Seata Client配置Nacos1. 增加Seata关联Nacos的配置2. 在…...

JavaScript常用的内置构造函数

JavaScript作为一种广泛应用的编程语言,提供了丰富的内置构造函数,帮助开发者处理不同类型的数据和操作。这些内置构造函数在创建和操作对象时非常有用。本文将详细介绍JavaScript中常用的内置构造函数及其用途。 常用内置构造函数概述 1. Object Obj…...

25寒假算法刷题 | Day1 | LeetCode 240. 搜索二维矩阵 II,148. 排序链表

目录 240. 搜索二维矩阵 II题目描述题解 148. 排序链表题目描述题解 240. 搜索二维矩阵 II 点此跳转题目链接 题目描述 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性: 每行的元素从左到右升序排列。每列的元素从上到…...

MQTT知识

MQTT协议 MQTT 是一种基于发布/订阅模式的轻量级消息传输协议,专门针对低带宽和不稳定网络环境的物联网应用而设计,可以用极少的代码为联网设备提供实时可靠的消息服务。MQTT 协议广泛应用于物联网、移动互联网、智能硬件、车联网、智慧城市、远程医疗、…...

【机器学习与数据挖掘实战】案例11:基于灰色预测和SVR的企业所得税预测分析

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈机器学习与数据挖掘实战 ⌋ ⌋ ⌋ 机器学习是人工智能的一个分支,专注于让计算机系统通过数据学习和改进。它利用统计和计算方法,使模型能够从数据中自动提取特征并做出预测或决策。数据挖掘则是从大型数据集中发现模式、关联…...

新一代搜索引擎,是 ES 的15倍?

Manticore Search介绍 Manticore Search 是一个使用 C 开发的高性能搜索引擎,创建于 2017 年,其前身是 Sphinx Search 。Manticore Search 充分利用了 Sphinx,显着改进了它的功能,修复了数百个错误,几乎完全重写了代码…...

使用 Context API 管理临时状态,避免 Redux/Zustand 的持久化陷阱

在开发 React Native 应用时,我们经常需要管理全局状态,比如用户信息、主题设置、网络状态等。而对于某些临时状态,例如 数据同步进行中的状态 (isSyncing),我们应该选择什么方式来管理它? 在项目开发过程中&#xff…...

PyTorch框架——基于深度学习YOLOv8神经网络学生课堂行为检测识别系统

基于YOLOv8深度学习的学生课堂行为检测识别系统,其能识别三种学生课堂行为:names: [举手, 读书, 写字] 具体图片见如下: 第一步:YOLOv8介绍 YOLOv8 是 ultralytics 公司在 2023 年 1月 10 号开源的 YOLOv5 的下一个重大更新版本…...

word2vec 实战应用介绍

Word2Vec 是一种由 Google 在 2013 年推出的重要词嵌入模型,通过将单词映射为低维向量,实现了对自然语言处理任务的高效支持。其核心思想是利用深度学习技术,通过训练大量文本数据,将单词表示为稠密的向量形式,从而捕捉单词之间的语义和语法关系。以下是关于 Word2Vec 实战…...

C# 操作符重载对象详解

.NET学习资料 .NET学习资料 .NET学习资料 一、操作符重载的概念 在 C# 中,操作符重载允许我们为自定义的类或结构体定义操作符的行为。通常,我们熟悉的操作符,如加法()、减法(-)、乘法&#…...

python学opencv|读取图像(五十四)使用cv2.blur()函数实现图像像素均值处理

【1】引言 前序学习进程中,对图像的操作均基于各个像素点上的BGR值不同而展开。 对于彩色图像,每个像素点上的BGR值为三个整数,因为是三通道图像;对于灰度图像,各个像素上的BGR值是一个整数,因为这是单通…...

CNN的各种知识点(四): 非极大值抑制(Non-Maximum Suppression, NMS)

非极大值抑制(Non-Maximum Suppression, NMS) 1. 非极大值抑制(Non-Maximum Suppression, NMS)概念:算法步骤:具体例子:PyTorch实现: 总结: 1. 非极大值抑制(…...

虚幻基础16:locomotion direction

locomotion locomotion:角色运动系统的总称:包含移动、奔跑、跳跃、转向等。 locomotion direction 玩家输入 玩家输入:通常代表玩家想要的移动方向。 direction 可以计算当前朝向与移动方向的Δ。从而实现朝向与移动(玩家输入)方向的分…...

C++游戏开发实战:从引擎架构到物理碰撞

📝个人主页🌹:一ge科研小菜鸡-CSDN博客 🌹🌹期待您的关注 🌹🌹 1. 引言 C 是游戏开发中最受欢迎的编程语言之一,因其高性能、低延迟和强大的底层控制能力,被广泛用于游戏…...

代理模式——C++实现

目录 1. 代理模式简介 2. 代码示例 1. 代理模式简介 代理模式是一种行为型模式。 代理模式的定义:由于某些原因需要给某对象提供一个代理以控制该对象的访问。这时,访问对象不适合或者不能直接访问引用目标对象,代理对象作为访问对象和目标…...

什么情况下,C#需要手动进行资源分配和释放?什么又是非托管资源?

扩展:如何使用C#的using语句释放资源?什么是IDisposable接口?与垃圾回收有什么关系?-CSDN博客 托管资源的回收有GC自动触发,而非托管资源需要手动释放。 在 C# 中,非托管资源是指那些不由 CLR(…...

LeetCode 2909. 元素和最小的山形三元组 II

**### LeetCode 2909. 元素和最小的山形三元组 II 问题描述 给定一个下标从 0 开始的整数数组 nums&#xff0c;我们需要找到一个“山形三元组”&#xff08;i, j, k&#xff09;满足以下条件&#xff1a; i < j < knums[i] < nums[j] 且 nums[k] < nums[j] 并…...

搬迁至bilibili声明

我将搬迁到bilibili ,用户名&#xff1a;北苏清风 在这个用户名上的文章部分将出自csdn的这个账号&#xff0c;均属于本人原创...

【周易哲学】生辰八字入门讲解(八)

&#x1f60a;你好&#xff0c;我是小航&#xff0c;一个正在变秃、变强的文艺倾年。 &#x1f514;本文讲解【周易哲学】生辰八字入门讲解&#xff0c;期待与你一同探索、学习、进步&#xff0c;一起卷起来叭&#xff01; 目录 一、六亲女命六亲星六亲宫位相互关系 男命六亲星…...

macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用

文章目录 问题现象问题原因解决办法 问题现象 macOS启动台&#xff08;Launchpad&#xff09;多出来了&#xff1a;Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显&#xff0c;都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

浅谈不同二分算法的查找情况

二分算法原理比较简单&#xff0c;但是实际的算法模板却有很多&#xff0c;这一切都源于二分查找问题中的复杂情况和二分算法的边界处理&#xff0c;以下是博主对一些二分算法查找的情况分析。 需要说明的是&#xff0c;以下二分算法都是基于有序序列为升序有序的情况&#xf…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中&#xff0c;新增了一个本地验证码接口 /code&#xff0c;使用函数式路由&#xff08;RouterFunction&#xff09;和 Hutool 的 Circle…...

重启Eureka集群中的节点,对已经注册的服务有什么影响

先看答案&#xff0c;如果正确地操作&#xff0c;重启Eureka集群中的节点&#xff0c;对已经注册的服务影响非常小&#xff0c;甚至可以做到无感知。 但如果操作不当&#xff0c;可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

#Uniapp篇:chrome调试unapp适配

chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器&#xff1a;Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...

基于TurtleBot3在Gazebo地图实现机器人远程控制

1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...