【无人机】基于EKF、UKF、PF、改进PF滤波算法的无人机航迹预测(Matlab代码实现)

💥💥💥💞💞💞欢迎来到本博客❤️❤️❤️💥💥💥

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

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

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

👨‍💻4 Matlab代码实现

💥1 概述

     工程测量中应用无人机航测技术,无人机不需要专业驾驶员进行操作作业,只需要无人机控制人员对拍摄影像随时注意查看,注意观察无人机的飞行状态。无人机操作技术也越来越简单,小型无人机机身、体积及重量都大大减少,最小的无人机只有巴掌大小,在手上就可以实现起飞与降落。无人机航测技术相较于传统客机航测技术大大减少了选择起飞降落地点的问题,其机身质量增加,在低空飞行可以很好地适应风向变化,降低飞行设备振动,避免对拍摄数据与图像采集造成影响。使用无人机航测技术只需要提前设定无人机飞行路线,随时观察无人机的飞行状态,根据实际情况修正。无人机系统发生问题时可以自行降落或飞回至起点排除故障,由于无人机结构简单,维修或零件更换成本较低,排除故障后可以重新飞行测量。

      无人机航测技术具有数据采集能力强、精确度高的优点,对无人机操作人员技术水平要求较低,极大程度减少了无人机操作时间与数据分析处理时间,无人机自身所携带的高清摄影相机与专业测绘仪器,可以将工程拍摄影像质量大幅度提高,提升工程测绘精确度。无人机具有一定的智能与自动化,可以在一定程度减少工作压力,提高工作效率质量。无人机还可以使用低空遥感模式对工程地理信息完成勘测,不管在高空还是超低空下都可以正常完成测绘作业,广泛应用于工程测量与应急救援领域中。

      无人机测绘技术在工程测量中应用具有较短的飞行周期,可以实现快速起飞降落,在数据获取分析及处理中,只需要投入较少时间。无人机测绘技术成本相较于传统客机测绘技术成本非常低,主要由于无人机制造材料成本低,保养频率低,零件构造简单,后期维修费用少,极大程度减少了工程测绘成本。无人机具有简单的操作模式,测绘人员可以在短时间内学会无人机设备操作和拍摄程序的使用,无需再投入其他成本,具有使用成本低的优点。

📚2 运行结果

部分代码:

%% %%%%%%%%%%% EKF滤波算法 %%%%%%%%%%%%
Qekf = Q;                   % EKF过程噪声方差
Rekf = R;                   % EKF过程噪声方差 
Xekf=zeros(9,T);            % 滤波状态
Xekf(:,1)=X(:,1);           % EKF滤波初始化
Pekf = P0;                  % 协方差
Tekf=zeros(1,T);            % 用于记录一个采样周期的算法时间消耗
%% %%%%%%%%%%% UKF滤波算法 %%%%%%%%%%%%           
Qukf = Q;              % UKF过程噪声方差
Rukf = R;              % UKF观测噪声方差 
Xukf=zeros(9,T);       % 滤波状态
Xukf(:,1)=X(:,1);      % UKF滤波初始化
Pukf = P0;             % 协方差
Tukf=zeros(1,T);       % 用于记录一个采样周期的算法时间消耗 
%% %%%%%%%%%%% PF滤波算法 %%%%%%%%%%%%
N = 200;                 % 粒子数              
Xpf=zeros(n,T);        % 滤波状态
Xpf(:,1)=X(:,1);       % PF滤波初始化
Xpfset=ones(n,N);      % 粒子集合初始化
for j=1:N   % 粒子集初始化
    Xpfset(:,j)=state0;  % 全都初始化为x0,每个粒子的值相等
end
Tpf=zeros(1,T);        % 用于记录一个采样周期的算法时间消耗 

%% %%%%%%%%%%% PF2滤波算法 %%%%%%%%%%%%
N2 = 200;                 % 粒子数 
R2 = [5000 0 0;                 % 观测噪声协方差矩阵  
    0 0.01^2 0                   % 角度的观测值偏差不能给的太大
    0 0 0.01^2];
Xpf2=zeros(n,T);        % 滤波状态
Xpf2(:,1)=X(:,1);       % PF滤波初始化
Xpf2set=ones(n,N2);      % 粒子集合初始化
for j=1:N2   % 粒子集初始化
    Xpf2set(:,j)=state0;  % 全都初始化为x0,每个粒子的值相等
end

%% %%%%%%%%%%% PF3滤波算法 %%%%%%%%%%%%
N3 = 400;                 % 粒子数 
R3 = [5000 0 0;                 % 观测噪声协方差矩阵  
    0 0.01^2 0                   % 角度的观测值偏差不能给的太大
    0 0 0.01^2];
Xpf3=zeros(n,T);        % 滤波状态
Xpf3(:,1)=X(:,1);       % PF滤波初始化
Xpf3set=ones(n,N3);      % 粒子集合初始化
for j=1:N3   % 粒子集初始化
    Xpf3set(:,j)=state0;  % 全都初始化为x0,每个粒子的值相等
end

%% %%%%%%%%%%% EPF滤波算法 %%%%%%%%%%%% 
Xepf=zeros(9,T);       % 滤波状态
Xepf(:,1)=X(:,1);      % EPF滤波初始化
Xepfset=ones(n,N);     % 粒子集合初始化,这里需要定义为一个3维数组,或者简单起见,一次性写完,定义为一个(9xN)的二维数组,表示当前状态的所有粒子
for j=1:N   % 粒子集初始化
    Xepfset(:,j)=state0;  % 全都初始化为state0,每个粒子的值相等
end
Pepf = P0*ones(n,n*N);% 各个粒子的协方差,这里需要定义为一个3维数组,或者简单起见,一次性写完,定义为一个9x(9xN)的二维数组
Tepf=zeros(1,T);       % 用于记录一个采样周期的算法时间消耗   

%% %%%%%%%%%%% EPF2滤波算法 %%%%%%%%%%%%
Rekf2 = R2;
Xepf2=zeros(9,T);       % 滤波状态
Xepf2(:,1)=X(:,1);      % EPF滤波初始化
Xepf2set=ones(n,N2);     % 粒子集合初始化,这里需要定义为一个3维数组,或者简单起见,一次性写完,定义为一个(9xN)的二维数组,表示当前状态的所有粒子
for j=1:N2   % 粒子集初始化
    Xepf2set(:,j)=state0;  % 全都初始化为state0,每个粒子的值相等
end
Pepf2 = P0*ones(n,n*N2);% 各个粒子的协方差,这里需要定义为一个3维数组,或者简单起见,一次性写完,定义为一个9x(9xN)的二维数组

%% %%%%%%%%%%% EPF3滤波算法 %%%%%%%%%%%%
Rekf3 = R3;
Xepf3=zeros(9,T);       % 滤波状态
Xepf3(:,1)=X(:,1);      % EPF滤波初始化
Xepf3set=ones(n,N3);     % 粒子集合初始化,这里需要定义为一个3维数组,或者简单起见,一次性写完,定义为一个(9xN)的二维数组,表示当前状态的所有粒子
for j=1:N3   % 粒子集初始化
    Xepf3set(:,j)=state0;  % 全都初始化为state0,每个粒子的值相等
end
Pepf3 = P0*ones(n,n*N3);% 各个粒子的协方差,这里需要定义为一个3维数组,或者简单起见,一次性写完,定义为一个9x(9xN)的二维数组

%%%%%%%%%%%%% UPF滤波算法 %%%%%%%%%%%%  
Xupf=zeros(n,T);       % 滤波状态  
Xupf(:,1)=X(:,1);      % UPF滤波初始化
Xupfset=ones(n,N);     % 粒子集合初始化     
for j=1:N   % 粒子集初始化
    Xupfset(:,j)=state0;  % 全都初始化为state0,每个粒子的值相等
end
Pupf = P0*ones(n,n*N); % 各个粒子的协方差    
Tupf=zeros(1,T);       % 用于记录一个采样周期的算法时间消耗        
 

Xmupf = zeros(n,T);       % 滤波状态  
Tmupf = zeros(1,T);
%% %%%%%%%%%%%%%%%%%%%% 模拟系统运行 %%%%%%%%%%%%%%%%%%%%%%%%%

for t=2:T
    % 模拟系统状态运行一步
    [y1,y2,y3,y4,y5,y6,y7,y8,y9] = feval('ffun',X(:,t-1));
    X(:,t)= [y1,y2,y3,y4,y5,y6,y7,y8,y9]'+ sqrtm(Q) * randn(n,1);  % 产生实际状态值
end

%% 模拟目标运动过程,观测站对目标观测获取距离数据
for t=1:T
    [dd,alpha,beta]=hfun(X(:,t),Station);
    Z(:,t)= [dd,alpha,beta]'+sqrtm(R)*randn(3,1);
end

sum_pf = 0;
sum_epf = 0;
for t=2:T
    % 调用EKF算法
    tic
    [Xekf(:,t),Pekf]=ekf(Xekf(:,t-1),Z(:,t),Pekf,Qekf,Rekf,Station);                 
    Tekf(t)=toc;
    
    % 调用UKF算法
    tic
    [Xukf(:,t),Pukf]=function_ukf(Station,Xukf(:,t-1),Pukf,Z(:,t),Qukf,Rukf);        
    Tukf(t)=toc;
    
    % 调用PF算法
    tic
    [Xpf(:,t),Xpfset,Neffpf]=pf(Xpfset,Z(:,t),N,n,R,Q,Station);                             
    Tpf(t)=toc;
    sum_pf = sum_pf + Neffpf;
    
    % 调用PF2算法
    [Xpf2(:,t),Xpf2set,Neffpf]=pf(Xpf2set,Z(:,t),N2,n,R2,Q,Station);                             
    
    % 调用PF3算法
    [Xpf3(:,t),Xpf3set,Neffpf]=pf(Xpf3set,Z(:,t),N3,n,R3,Q,Station);                             
    
    
    % 调用EPF算法
    tic
    [Xepf(:,t),Xepfset,Pepf,Neffepf]=epf(Xepfset,Z(:,t),n,Pepf,N,R,Qekf,Rekf,Station);       
    Tepf(t)=toc;
    sum_epf = sum_epf + Neffepf;
    
    % 调用EPF2算法
    [Xepf2(:,t),Xepf2set,Pepf2,Neffepf]=epf(Xepf2set,Z(:,t),n,Pepf2,N2,R2,Qekf,Rekf2,Station);       % 搞定
    
    % 调用EPF3算法
    [Xepf3(:,t),Xepf3set,Pepf3,Neffepf]=epf(Xepf3set,Z(:,t),n,Pepf3,N3,R3,Qekf,Rekf3,Station);       % 搞定
    
    % 调用UPF算法
    %tic
    %[Xupf(:,t),Xupfset,Pupf]=upf(Xupfset,Z(:,t),n,Pupf,N,R,Qukf,Rukf,Station);         % 1
    %Tupf(t)=toc;

end

 

🎉3 参考文献

[1]李帅,张杰,杜立杰,李盼.工程测量中无人机航测技术的应用[J].黑龙江科学,2022,13(16):56-58. 

👨‍💻4 Matlab代码实现

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
单变量非静态模型是一个根据时间和状态变量变化而变化的数学模型,其仿真需要对状态进行推算和估计。其中,ekf算法pf算法是两种可用于状态估计的滤波算法ekf算法是一个经典的非线性滤波算法,适用于具有非线性状态转移和观测方程的模型。它使用卡尔曼滤波的思想,利用当前时刻的状态估计和观测值,通过一些非线性函数对其进行预测,并根据预测和实际观测值的误差来更新状态估计值。ekf算法的核心是对非线性函数进行泰勒展开,从而转化为一个线性高斯模型,然后通过类似于卡尔曼滤波方法进行状态估计。 相比之下,pf算法是一种基于粒子的滤波算法,适用于各种状态转移和观测方程的非线性问题。其基本思想是通过一系列随机采样的粒子来表示状态空间的概率密度函数,然后根据观测值的概率密度函数进行重要性采样和重采样,从而不断更新粒子的权重和状态估计值,最终得到状态的后验概率密度函数。 在单变量非静态模型的仿真中,使用ekf算法pf算法进行状态估计,都需要考虑模型的非线性性质和不确定性。ekf算法适用于模型简单、非线性度不高的问题,精度高、运算速度快,但在高度非线性的复杂问题中表现不佳。pf算法则适用于各种高度非线性、噪声较大的问题,但需要大量的计算资源和粒子数,运算速度比ekf慢。 因此,在实际的仿真中,需要根据具体问题选择合适的滤波算法,并通过对算法参数的优化和调整,以达到最佳的状态估计效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荔枝科研社

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值