【事件触发扩散卡尔曼滤波器】基于UWB实测数据的基于事件触发的扩散卡尔曼滤波器的定位【DEKF、EKF】(Matlab代码实现)

    欢迎来到本博客❤️❤️

博主优势:博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

本文目录如下:

目录

 ⛳️赠与读者

1 概述

2 运行结果

3 参考文献 

 4 Matlab代码、数据、文章下载


 ⛳️赠与读者

‍做科研,涉及到一个深在的思想系统,需要科研者逻辑缜密,踏实认真,但是不能只是努力,很多时候借力比努力更重要,然后还要有仰望星空的创新点和启发点。建议读者按目录次序逐一浏览,免得骤然跌入幽暗的迷宫找不到来时的路,它不足为你揭示全部问题的答案,但若能解答你胸中升起的一朵朵疑云,也未尝不会酿成晚霞斑斓的别一番景致,万一它给你带来了一场精神世界的苦雨,那就借机洗刷一下原来存放在那儿的“躺平”上的尘埃吧。

     或许,雨过云收,神驰的天地更清朗.......

1 概述

摘要:
分布式状态估计强烈依赖于协作信号处理,这通常需要在资源受限的传感器节点上执行过度的通信和计算。为了解决这个问题,我们提出了一种事件触发的扩散卡尔曼滤波器,它收集测量值,并根据指示估计误差的局部信号在节点之间交换消息。在此基础上,我们开发了一种能量感知状态估计算法,该算法可以调节无线网络中的资源消耗,并确保每个消耗资源的有效性。所提出的算法不需要节点共享其局部协方差矩阵,从而可以大大减少传输消息的数量。为了确认其效率,我们将提出的算法应用于分布式同步定位和时间同步问题,并在移动四旋翼节点和固定定制超宽带无线设备的物理测试台上对其进行评估。所获得的实验结果表明,所提出的算法可以节省与原始扩散卡尔曼滤波器相关的86%的通信开销,而性能仅下降16%。

【事件触发扩散卡尔曼滤波器】基于UWB实测数据的基于事件触发的扩散卡尔曼滤波器的定位【DEKF、EKF】(Matlab代码实现)_第1张图片

无线传感器中使用的状态估计算法网络使各种领域中的服务成为可能,例如紧急情况
救援、国土安全、军事行动、栖息地监测和家庭自动化服务[1]。除了确保状态估计的准确性外,还必须考虑功率限制[2]、带宽限制[3]、以及计算[4]和通信[5]方面的限制。最广泛应用的估算算法之一传感器网络是分布式卡尔曼滤波算法在分布式卡尔曼滤波器中,d iffusion算法[7]在性能方面具有有利的特性,并且在处理节点和链路故障方面的稳健性。扩散卡尔曼滤波器[7]的性能取决于在频繁的测量和消息交换之间节点。然而,单个节点的能力是有限,每个节点通常由电池供电。因此,减少通信开销和测量次数非常重要。主要的未决问题要考虑的不是算法的估计有多好可以实现,但它在多大程度上能够实现在满足应用需求的同时节约资源。致为了解决这个问题,我们提出了一个事件触发的扩散限制处理、传感和通信量的卡尔曼滤波器,以及基于本地信号的通信,该本地信号指示无需节点共享其位置信息,即可实现估计误差局部协方差矩阵。因此,与名义上的分布式扩散相比,传输消息的数量卡尔曼滤波算法显著减少。特别地,我们描述了消耗资源之间的权衡以及相应的估计性能。作为分布式状态估计的代表性应用,我们考虑定位和时间同步。保持对时间的共同认识对于确保许多网络物理系统的可接受性能和鲁棒性系统(CPS)。此外,位置估计是一个关键不同领域中的任务。然而,本地化和时间同步算法需要大量的单个传感器之间的协作努力,因此,所提出的方法对于这个应用特别有帮助。更具体地说,我们应用了所提出的事件触发D-SLATS上的扩散卡尔曼滤波器[8]、[9],这是一种分布式同步定位和时间同步框架。
在本研究中,我们做出了以下贡献:
• 介绍事件触发的分布式扩散卡尔曼滤波器,减少通信、计算、以及传感开销。
• 证明我们的事件触发估计器是无偏的并推导出触发信号之间的关系以及预期误差协方差。
• 在自组网络中分布式节点的本地化和时间同步中应用所提出的策略。
• 在真实的测试平台上评估拟议的战略定制超宽带无线设备和四旋翼。本文的其余部分组织如下。第节第二节概述了相关工作给出了我们选择的触发条件背后的动机。然后,我们提出了所提出的算法和相应的第四和第五节分别进行了理论分析。第节VI说明了在定位和时间同步方面的应用,提供了实验装置的描述,并评估了静态和移动场景下提出的算法节点网络。最后,第七部分总结了一些总结和讨论。

在本研究中,我们调查了能量感知分布式估计问题中关于具有事件触发处理计划的多传感器系统。
更具体地说,我们提出了一种无偏事件触发基于无线网络的分布式扩散卡尔曼滤波器在扩散协方差矩阵上。我们测试了提出的分布式定位和时间同步应用算法。使用以下材料进行了几次实验真正的定制超宽带无线锚节点和移动四旋翼。所得结果表明,所提出的该算法具有鲁棒性能,并且就其而言是高效的使用计算和通信资源。

2 运行结果

【事件触发扩散卡尔曼滤波器】基于UWB实测数据的基于事件触发的扩散卡尔曼滤波器的定位【DEKF、EKF】(Matlab代码实现)_第2张图片

【事件触发扩散卡尔曼滤波器】基于UWB实测数据的基于事件触发的扩散卡尔曼滤波器的定位【DEKF、EKF】(Matlab代码实现)_第3张图片

【事件触发扩散卡尔曼滤波器】基于UWB实测数据的基于事件触发的扩散卡尔曼滤波器的定位【DEKF、EKF】(Matlab代码实现)_第4张图片

【事件触发扩散卡尔曼滤波器】基于UWB实测数据的基于事件触发的扩散卡尔曼滤波器的定位【DEKF、EKF】(Matlab代码实现)_第5张图片

【事件触发扩散卡尔曼滤波器】基于UWB实测数据的基于事件触发的扩散卡尔曼滤波器的定位【DEKF、EKF】(Matlab代码实现)_第6张图片

部分代码:

clc; close all ;
keepvars = {'ii'};
clearvars('-except', keepvars{:});

addpath('classes');
addpath('utilities');

%% Supress warnings
warning('off', 'MATLAB:nearlySingularMatrix');

%% Raw Data Log Folder
logname='ped01';
%other logs are ped02,ped03,ped04
logfolder = strcat('logs/',logname,'/');


%% Node/Network configuration
configfile = 'config/nodepositions_nesl_mobile';

%% Create Network Manager
% NetworkManager(nodeconfig, datafolder, ,
nm = NetworkManager(configfile, logfolder, 'config/antennacorrections_mocap', 'config/twrcorrections_mocap', 'config/twrcorrections_mocap' );
node_ids = nm.getNodeIds();
node_names = nm.getNodeNames();

%% Rigid body IDs
nm.setRigidBodyId('ntb-mobile', 1);

%% Black-listed nodes
%nm.blacklistNode('ntb-charlie');

%% Select reference node
nm.setReferenceNode('ntb-alpha');

%% Bootstrap the node positions and clock params before filter starts
% use first second of measurements to bootstrap node states
nm.skipTime(46);
%ped01 --> skip 46
%ped02 --> skip 15
%ped03 --> skip 15
%ped04 --> skip 15
%nm.setStaticNodesToTruePosition();
nm.bootstrapNodeStates( 4.0 );
%

%% Measurement type selection
nm.enableMessageType(nm.MSGTYPE3, true);
nm.enableMessageType(nm.MSGTYPE1, true);
nm.enableMessageType(nm.MSGTYPE2, true);
nm.enableMeasurementType(nm.MEASTYPE_d, true);
nm.enableMeasurementType(nm.MEASTYPE_r, true);
nm.enableMeasurementType(nm.MEASTYPE_R, true);
%nm.setMessageMinInterval(nm.MSGTYPE3, 2.00);
nm.enableSLATS(true);


%% Set some known anchor positions if desired
%known_anchors = {'ntb-alpha', 'ntb-bravo', 'ntb-charlie', 'ntb-delta', 'ntb-hotel', 'ntb-golf', 'ntb-echo', 'ntb-foxtrot'};
known_anchors = {};
for i=1:length(known_anchors)
    aid = known_anchors{i};
    aidx = nm.getNodeIdx( aid );
    nm.nodes{ aidx }.var_p = [0.0; 0.0; 0.0];
end

%% Process Covariances
% Process and Initial noise and state vals are determined by each node object
Q = nm.getProcessVar();

3 参考文献 

文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。(文章内容仅供参考,具体效果以运行结果为准)

 Matlab代码、数据、文章下载

资料获取,更多粉丝福利,MATLAB|Simulink|Python资源获取

                                                           在这里插入图片描述

你可能感兴趣的:(matlab,开发语言)