【课题推荐】多目标场景下,匹配观测数据与已有航迹;同时处理航迹终点(目标消失后无匹配观测)和起点,避免混淆

在这里插入图片描述

运行结果

本文针对多目标场景下的观测—航迹匹配问题,设计了一个基于 MATLAB 的多目标航迹关联仿真程序。程序能够在多个目标同时运动、观测点存在噪声、目标可能出现或消失的情况下,实现观测数据与已有航迹之间的自动匹配,并对航迹的起点和终点进行合理管理。

在多目标跟踪中,最常见的问题不是单个目标的滤波精度,而是当前时刻的观测点到底属于哪一条历史航迹。当目标数量较多、运动轨迹交叉、观测存在随机误差时,如果仅依靠最近邻方法,很容易出现航迹交换、误匹配或轨迹断裂等问题。因此,本文程序重点模拟以下几类典型情况:

  1. 多个目标同时运动,系统在每一时刻接收一组观测点;
  2. 观测点与已有航迹之间需要建立匹配关系;
  3. 当目标消失后,已有航迹在后续时刻可能没有对应观测,需要判断其是否应当终止;
  4. 当新目标出现时,未匹配观测不能直接混入旧航迹,而应当作为新航迹起点进行管理;
  5. 在航迹起点和终点同时存在时,避免将“目标消失后的空缺”与“新目标出现的观测”混淆。

程序运行后,主要可以得到以下结果:

  • 多目标真实运动轨迹;

在这里插入图片描述

  • 观测点与已有航迹之间的匹配关系;
    在这里插入图片描述

  • 最终形成的多目标航迹估计结果。

在这里插入图片描述

在这里插入图片描述

运行结果表明,该程序能够较好地区分已有航迹延续、新航迹生成、旧航迹终止三类情况。当某个目标消失后,程序不会强行将后续无关观测点分配给该航迹;当新的观测点长期无法匹配到已有航迹时,程序会将其作为新的候选航迹,并在满足确认条件后转化为正式航迹。

程序详解

本文程序的核心任务可以概括为:在第 k k k 个时刻,根据当前观测集合 Z k Z_k Zk 和上一时刻已有航迹集合 T k − 1 T_{k-1} Tk1,建立合理的观测—航迹匹配关系,并更新航迹状态。

设当前时刻的观测集合为

Z k = z k 1 , z k 2 , ⋯   , z k M Z_k={z_k^1,z_k^2,\cdots,z_k^M} Zk=zk1,zk2,,zkM

已有航迹集合为

T k − 1 = T k − 1 1 , T k − 1 2 , ⋯   , T k − 1 N T_{k-1}={T_{k-1}^1,T_{k-1}^2,\cdots,T_{k-1}^N} Tk1=Tk11,Tk12,,Tk1N

其中, M M M 表示当前观测数量, N N N 表示已有航迹数量。每一条航迹中保存了目标的历史位置、当前预测位置、连续未匹配次数、航迹状态等信息。

对于第 i i i 条航迹和第 j j j 个观测点,可以构造匹配代价:

c i j = ∣ z k j − x ^ k ∣ k − 1 i ∣ c_{ij}=\left | z_k^j-\hat{x}_{k|k-1}^i \right | cij= zkjx^kk1i

其中, x ^ k ∣ k − 1 i \hat{x}_{k|k-1}^i x^kk1i 表示第 i i i 条航迹在当前时刻的预测位置, z k j z_k^j zkj 表示第 j j j 个观测点。代价越小,说明该观测点越可能属于该航迹。

为了避免距离过远的观测点被错误匹配,程序中通常设置一个门限 d max ⁡ d_{\max} dmax,即只有满足

c i j < d max ⁡ c_{ij}<d_{\max} cij<dmax

的观测—航迹组合才被认为是有效候选匹配。如果距离超过门限,则将其视为不可匹配项。

在实际程序中,可以将所有航迹与所有观测之间的距离组成代价矩阵:

C = [ c 11 c 12 ⋯ c 1 M   c 21 c 22 ⋯ c 2 M   ⋮ ⋮ ⋱ ⋮   c N 1 c N 2 ⋯ c N M ] C= \begin{bmatrix} c_{11} & c_{12} & \cdots & c_{1M} \ c_{21} & c_{22} & \cdots & c_{2M} \ \vdots & \vdots & \ddots & \vdots \ c_{N1} & c_{N2} & \cdots & c_{NM} \end{bmatrix} C=[c11c12c1M c21c22c2M  cN1cN2cNM]

然后通过最小代价匹配方法完成观测与航迹之间的分配。对于简单仿真,可以使用最近邻匹配;对于目标数量较多或交叉情况较复杂的场景,则可以进一步采用匈牙利算法、全局最近邻方法或联合概率数据关联方法。

本文程序的重点不仅在于匹配本身,还在于对未匹配航迹未匹配观测的处理。

对于已有航迹,如果在当前时刻没有匹配到任何观测,则不能立即删除,而是将其标记为一次漏检。对应的连续未匹配次数更新为

m i ( k ) = m i ( k − 1 ) + 1 m_i(k)=m_i(k-1)+1 mi(k)=mi(k1)+1

当连续未匹配次数超过设定阈值 M max ⁡ M_{\max} Mmax 时,说明该目标很可能已经离开观测区域或已经消失,此时将该航迹终止。这样可以避免由于单帧漏检导致航迹被过早删除。

对于当前时刻没有被分配到任何已有航迹的观测点,也不能简单丢弃。因为这些观测点可能来自新出现的目标。程序会将这些未匹配观测作为候选航迹的起点,并进行临时保存。如果该候选航迹在后续若干帧中持续获得匹配观测,则将其升级为正式航迹。

因此,航迹状态通常可以划分为三类:

航迹状态含义
候选航迹由未匹配观测生成,尚未确认
确认航迹连续多帧匹配成功,认为是真实目标
终止航迹连续多帧未匹配,认为目标已经消失

这种设计可以有效解决多目标跟踪中的两个关键问题:
一是目标消失后,避免将其他目标的观测错误接入旧航迹;
二是新目标出现时,避免将其误认为旧航迹的延续。

在程序实现中,每一条航迹一般包含以下信息:

track.id          % 航迹编号
track.state       % 当前预测状态
track.history     % 历史轨迹点
track.age         % 航迹存在时间
track.missCount   % 连续未匹配次数
track.hitCount    % 连续匹配次数
track.status      % 航迹状态:候选、确认、终止

其中,missCount 用于判断航迹是否需要终止,hitCount 用于判断候选航迹是否可以升级为正式航迹。通过这两个计数变量,可以将航迹起点和航迹终点分开处理,从而降低多目标场景下的航迹混淆风险。

对于已匹配成功的航迹,其状态更新可以采用简单的位置更新方式,也可以进一步引入卡尔曼滤波。若采用匀速运动模型,目标状态可以写为

x k = [ p x p y v x v y ] T x_k= \begin{bmatrix} p_x & p_y & v_x & v_y \end{bmatrix}^{T} xk=[pxpyvxvy]T

状态预测模型为

x k = F x k − 1 + w k x_k=F x_{k-1}+w_k xk=Fxk1+wk

其中,

F = [ 1 0 Δ t 0   0 1 0 Δ t   0 0 1 0   0 0 0 1 ] F= \begin{bmatrix} 1 & 0 & \Delta t & 0 \ 0 & 1 & 0 & \Delta t \ 0 & 0 & 1 & 0 \ 0 & 0 & 0 & 1 \end{bmatrix} F=[10Δt0 010Δt 0010 0001]

观测模型为

z k = H x k + v k z_k=H x_k+v_k zk=Hxk+vk

其中,

H = [ 1 0 0 0   0 1 0 0 ] H= \begin{bmatrix} 1 & 0 & 0 & 0 \ 0 & 1 & 0 & 0 \end{bmatrix} H=[1000 0100]

如需帮助,或有导航、定位滤波相关的代码定制需求,请点击下方卡片联系作者

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

MATLAB卡尔曼

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

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

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

打赏作者

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

抵扣说明:

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

余额充值