基于自适应卷积粒子滤波器(CPF)的无人机(UAVs)识别和跟踪研究(Matlab代码实现)

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

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

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

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码、数据、文章


💥1 概述

摘要:

自主系统,如无人机(UAVs),需要能够识别和跟踪人群,例如用于救援和监视。大型群体会产生多个具有不确定起源的测量值。此外,传感器噪声特性通常是未知的,但测量值限制在某些区间内。在这项工作中,我们提出了两种解决人群跟踪问题的方法——一种是使用盒子粒子滤波方法,另一种是使用卷积粒子滤波方法。开发的滤波器可以以优雅的方式处理测量起源的不确定性,即解决数据关联问题。对于盒子粒子滤波器(PF),我们推导了在存在杂波的情况下的广义似然函数的理论表达式。还开发了一种自适应卷积粒子滤波器(CPF),并将两种滤波器的性能与标准的顺序重要性重采样(SIR)PF进行了比较。通过一个真实场景(代表体育场中人群运动)对两种滤波器的优缺点进行了说明,用于大量行人的大型群体。实现了准确的估计结果。

引言
跟踪大量对象需要可扩展的算法,能够处理大量数据,其特点是存在杂乱。尽管群体由许多个体组成,但它们通常保持某些运动模式,例如行人群(Ali & Dailey, 2009)的情况。当群体中的对象数量巨大时,例如数百或数千个,跟踪它们每一个是不切实际的(也是不可能的)。与其跟踪每个单独的组件,不如将群体视为一个整体实体。大群体技术识别和跟踪浓度,通常是群体的运动状态和其范围参数(Koch, 2008)。

最近的研究结果涉及群体的建模、模拟和视觉分析,以计算机视觉、交通系统和监视的角度来自Ali、Nishino、Manocha和Shah(2014)。社会力模型(Ali等人,2014年;Helbing和Molnár,1995年;Mazzon和Cavallaro,2013年)已被用来模拟行人的行为,包括通过瓶颈疏散人群。社会力模型还与一些过滤技术结合,用于Pellegrini、Ess、Schindler和Van Gool(2009)中的多目标跟踪。

有大量方法被开发用于跟踪大规模人群的运动状态(例如人群的中心)和它们的大小(范围参数)。最近的一项调查(Mihaylova等人,2014)介绍了该领域的关键趋势。尽管文献中关于跟踪大群体的问题已受到关注,但由于存在的各种挑战,这个问题远未得到解决。其中一些挑战涉及模拟人群实体之间的相互作用、数据关联和人群的动态形状变化。一些提出的方法包括高斯分量混合(Carmi、Septier和Godsill,2012年)和丰富的随机有限集(RFS)方法,例如Grandström(2012)、Granström、Lundquist和Orguner(2011)、Mahler(2007)、Mahler(2009)、Mahler(2013)和Mahler和Zajic(2002)。

本文提出了基于最近开发的箱粒子滤波器(PF)(Gning、Ristic、Mihaylova和Abdallah,2013)和卷积粒子滤波器(CPF)(Angelova等,2013;Campillo和Rossi,2009;Rossi和Vila,2006)框架的两种新型解决方案,用于人群跟踪问题。

箱PF(Abdallah等人,2008年;Gning、Mihaylova等人,2012年;Gning等人,2013年)依赖于箱粒子的概念,该粒子占据在状态空间中具有非零体积的小型可控矩形区域。箱PF能够解决由人群产生的多个测量所引起的数据关联问题。当一架无人机飞越一个区域并收集数据时,从上方看到这个区域时,这是一个常见情况。

与我们以前的作品(例如Petrov、Gning、Mihaylova和Angelova,2012年;Petrov、Ulmke等人,2012年;Petrov、Mihaylova、de Freitas和Gning,2014年)相比,本文具有几个新的贡献:(i) 当状态向量由运动状态和范围参数组成时,导出了箱PF的广义似然函数;(ii) 根据优化,计算了箱PF的似然性,通过解决具有多个测量的约束满足问题(CSP);(iii) 对人群和杂波测量率进行了在线估计;(iv) 提出了自适应CPF。开发的CPF能够处理多个测量,包括高水平的杂波。它能够解决数据关联问题,而不需要人群和杂波测量率。自适应CPF可以估计动态运动状态和动态参数,这是与Angelova等人(2013年)、Campillo和Rossi(2009年)以及Rossi和Vila(2006年)提出的基于CPF的静态参数方法不同的解决方案。

这两种滤波器在解决非线性估计问题方面具有非常吸引人的特性。这两种滤波器都在不确定和不完美的观测条件下操作:传感器报告的数量波动。

对于两种不同情况评估了箱PF和CPF的性能。首先,在完全匹配的情况下,滤波器使用的模型直接匹配模拟器使用的模型;其次,在通过瓶颈的现实人群的不匹配场景中。将箱PF和CPF与标准的顺序重要性重采样PF(SIR PF)(Doucet、De Freitas和Gordon,2001)在滤波器准确性和计算复杂性方面进行比较。

📚2 运行结果

主函数代码:

%% PURPOSE :
%% Group tracking by means of Convolution Particle Filtering
%% rectangular approximation of the group size
%% group center state = [x_pos, x_speed, y_pos, y_speed]'
%% extent parameters = [a, b]';
clear all
close all

global dt_s N nx nz nv R_sqrt clut clutterRo ones_N

%*******************************************************************
% INITIAL CONDITIONS:
% ==============================
clut = 1; % 0 - no clutter. 1 - clutter added.
clutterRo = 1e-2;

%------ sensor data
%
nz   =  2;              % dimension of the measurement vector (x, y)
nv   =  2;              % dimension of the measurement noise vector
std_x = 0.1;            %[m] measurement error standard deviations
std_y = 0.1;            %[m]

% measurement error covariance matrix ;
R_sqrt  =  [ std_x   0 ; 0   std_y];
R  =       [ std_x^2 0 ; 0   std_y^2];

% ------ dynamic model data
%
nx   =  6;         % dimension of the filter state vector
ne   =  2;         % dimension of the extent parameters vector

state = [100,0,100,0,40,40]; % initial state
t_max_s = 40; % simulation time
dt_s = 0.125; % sampling time
kmax = ceil(t_max_s/dt_s); % maximum number of time steps (final time step)
N = 1000;              % Number of particles
MC_runs = 1;           % number of Monte Carlo runs

x_est_all    = zeros(MC_runs,nx-ne,kmax);
tita_est_all = zeros(MC_runs,ne,kmax);

%----- initial state
%
std_x0 =[50,10,50,10,30,30]';

%
% ----- CPF constant parameters
%
ones_N = ones(1,N);

if MC_runs > 1
    try
        load MCRuns
        start = length(time_pf)+1;
    catch
        start = 1;
    end
else
    start = 1;
end
%  ===== Begin the Monte Carlo runs =====
for m = start:MC_runs
    
    rand('state',sum(500*clock));    % Shuffle the pack!
    randn('state',sum(800*clock));   % Shuffle the pack!   Bernoulli
    fprintf('run = %i / %i :  \r',m,MC_runs);
    
    crowdInitialise; % Generate ground truth data and measurements
    [grState.true_state] = state(1,1:4)';
    [grState.true_extent] = state(1,5:6)';
    x_0 = [grState.true_state;grState.true_extent];
    [xParticle_pf, w] = init_group_state(x_0,std_x0);
    tic;               % Initialise timer for benchmarking
    %
    % / ========= Evolution in time =========//
    for k = 3:kmax
        %
        fprintf('run = %i / %i :  PF : k =  %i / %i  \r',m,MC_runs,k,kmax);
        %
        % ----- prediction step
        %
        [xParticle_pred, c, ...
            ]= PF_prediction(xParticle_pf);
        
        clust.measurements= measurements(k).m';
        [grState.true_state] = state(k,1:4)';
        [grState.true_extent] = state(k,5:6)';
        
        % ===== EVALUATE IMPORTANCE WEIGHTS =====
        [w]= CPF_likelihood(xParticle_pred,...
            c, clust.measurements, w);
        %  output estimate
        x_est_k = xParticle_pred * w';
        %  resampling
        [xParticle_pf,w]= resampling(xParticle_pred',...
            w');
        
        x_est_all(m,:,k)      = x_est_k(1:4);
        tita_est_all(m,:,k) = x_est_k(5:6);
        perf.est(k,:,m) = x_est_k;
        perf.state(k,:,m) = [grState.true_state;grState.true_extent];
    end
    
    time_pf(m) = toc;       % How long did this take?
    %
    save('MCRuns','perf','time_pf')
end;


mean_time_pf      = mean(time_pf);
%
% display final results
disp(' ');
disp('Mean Execution time (seconds)');
disp('-------------------------');
disp(' ');
disp(['PF           = ' num2str(mean_time_pf)]);
%************************************************************
plot_crowd
 

🎉3 参考文献

文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。

🌈4 Matlab代码、数据、文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值