前言

毫米波雷达最近在多目标识别上取得了很多成果,可以应用在自动驾驶和一些隐私场景中的人员检测(例如厕所、卧室等私密环境中的人员检测),因此本文将分享利用毫米波雷达对多目标进行识别跟踪的一个小demo,算法流程涉及基础的测速,测距测角以及静态目标滤除和CFAR,卡尔曼滤波,最近邻数据关联算法。本文将重点介绍卡尔曼滤波和最近邻数据关联算法。文章后面将展示demo效果。


一、卡尔曼滤波

以多个行人为例,我们可以将行人运动简化为CV(Constant Velocity, CV)模型,也就是恒加速度模型,我们利用毫米波雷达采集到行人的二维数据,因为使用的传感器为德州仪器的IWR1642,它的天线阵列只能采集水平角,无法采集俯仰角。因此仅对二维平面上的位置和速度进行估计。以下是简化的模型和公式:

1.初始化阶段

(1) 状态向量
目标的二维位置和速度构成状态向量:
S k = [ x k x ˙ k y k y ˙ k ] \mathbf{S}_k= \begin{bmatrix} x_k \\ \dot{x}_k \\ y_k \\ \dot{y}_k \end{bmatrix} Sk= xkx˙kyky˙k
其中:
x k x_k xk y k y_k yk表示目标的二维位置。​
x ˙ k \dot{x}_k x˙k y ˙ k \dot{y}_k y˙k表示目标在 x x x y y y 方向上的速度。

(2)状态转移矩阵
状态转移矩阵 F F F 表示目标的运动模型,在恒速运动模型下为:

F = [ 1 0 Δ t 0 0 1 0 Δ t 0 0 1 0 0 0 0 1 ] \mathbf{F}= \begin{bmatrix} 1 & 0 & \Delta t & 0 \\ 0 & 1 & 0 & \Delta t \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} F= 10000100Δt0100Δt01

2. 预测阶段

(1) 状态预测
根据上一时刻的状态和状态转移矩阵,预测下一时刻的状态:

S k ∣ k − 1 = F ⋅ S k − 1 \mathbf{S}_{k|k-1}=\mathbf{F}\cdot\mathbf{S}_{k-1} Skk1=FSk1

预测的状态向量包括位置和速度。

(2)协方差预测
协方差矩阵随时间传播,描述了状态的不确定性:

P k ∣ k − 1 = F ⋅ P k − 1 ⋅ F ⊤ + Q \mathbf{P}_{k|k-1}=\mathbf{F}\cdot\mathbf{P}_{k-1}\cdot\mathbf{F}^\top+\mathbf{Q} Pkk1=FPk1F+Q

3. 测量更新阶段

在测量更新阶段,通过传感器的观测数据对预测结果进行校正。
(1)观测模型*(之所以将观测模型改为极坐标是为了数据关联算法那里更好计算)*
雷达测量数据在极坐标系下表示为:

z k = [ r θ v r ] \mathbf{z}_k= \begin{bmatrix} r \\ \theta \\ v_r \end{bmatrix} zk= rθvr

其中 r = x 2 + y 2 r=\sqrt{x^{2}+y^{2}} r=x2+y2 :为目标距离。

θ = arctan ⁡ ( y / x ) : \theta=\arctan(y/x){:} θ=arctan(y/x):为目标方位角。

v r = x ⋅ x ˙ + y ⋅ y ˙ x 2 + y 2 : v_{r}=\frac{x\cdot\dot{x}+y\cdot\dot{y}}{\sqrt{x^{2}+y^{2}}}: vr=x2+y2 xx˙+yy˙:为目标径向速度。

(2)将状态向量映射到观测空间,定义观测矩阵 H H H

H = [ x r y r 0 0 − x r 2 x r 2 0 0 x ˙ y − x y ˙ r 2 y ˙ x − x ˙ y r 2 x r y r ] \mathbf{H}= \begin{bmatrix} \frac{x}{r} & \frac{y}{r} & 0 & 0 \\ -\frac{x}{r^2} & \frac{x}{r^2} & 0 & 0 \\ \frac{\dot{x}y-x\dot{y}}{r^2} & \frac{\dot{y}x-\dot{x}y}{r^2} & \frac{x}{r} & \frac{y}{r} \end{bmatrix} H= rxr2xr2x˙yxy˙ryr2xr2y˙xx˙y00rx00ry

(3)计算卡尔曼增益 K K K,用于更新预测的状态:

K k = P k ∣ k − 1 H ⊤ ( H P k ∣ k − 1 H ⊤ + R ) − 1 \mathbf{K}_k=\mathbf{P}_{k|k-1}\mathbf{H}^\top\left(\mathbf{HP}_{k|k-1}\mathbf{H}^\top+\mathbf{R}\right)^{-1} Kk=Pkk1H(HPkk1H+R)1

(4)状态更新
结合测量值 z k z_{k} zk和预测值,更新状态向量:

S k = S k ∣ k − 1 + K k ( z k − H S k ∣ k − 1 ) \mathbf{S}_k=\mathbf{S}_{k|k-1}+\mathbf{K}_k \begin{pmatrix} \mathbf{z}_k-\mathbf{H}\mathbf{S}_{k|k-1} \end{pmatrix} Sk=Skk1+Kk(zkHSkk1)

更新协方差矩阵,减少对状态的不确定性:

P k = ( I − K k H ) P k ∣ k − 1 \mathbf{P}_k=\left(\mathbf{I}-\mathbf{K}_k\mathbf{H}\right)\mathbf{P}_{k|k-1} Pk=(IKkH)Pkk1

二、数据关联算法

最近邻算法的目标是找到观测值和目标预测之间的最近邻匹配。假设有 M 个目标和 N 个观测值,算法计算每个目标与每个观测值之间的距离(或代价),然后选择距离最小的匹配对。

1.计算残差

残差(创新向量)表示观测值与目标预测值的差异:

y i j = z j − H S i \mathbf{y}_i^j=\mathbf{z}_j-\mathbf{H}\mathbf{S}_i yij=zjHSi

其中: z j {z}_j zj为第 j j j个观测值
S i {S}_i Si i i i个目标的状态预测值

2.计算马氏距离

为了度量目标和观测值的匹配度,使用马氏距离(Mahalanobis distance),定义为:

d i , j 2 = y i j ⊤ S − 1 y i j d_{i,j}^2=\mathbf{y}_i^{j\top}\mathbf{S}^{-1}\mathbf{y}_i^j di,j2=yijS1yij
S = H P H ⊤ + R \mathbf{S}=\mathbf{H}\mathbf{P}\mathbf{H}^{\top}+\mathbf{R} S=HPH+R

马氏距离综合考虑了观测噪声和目标预测的不确定性。

3.数据关联步骤

(1)距离矩阵计算: 构造距离矩阵 D D D,其中 D i , j = d i , j D_{i,j}=d_{i,j} Di,j=di,j是第 i i i 个目标和第 j j j 个观测值之间的马氏距离。

(2)寻找最近邻匹配: 对每个目标 i i i,找到与其最近的观测值 j j j
j = arg ⁡ min ⁡ j D i , j j=\arg\min_{j}D_{i,j} j=argminjDi,j
其中 argmin 表示找到使距离最小的观测索引。

(3)关联门限检查: 为减少误匹配,设置关联门限 𝜏。仅当最近距离满足以下条件时,才进行关联:
D i , j < τ D_{i,j}<\tau Di,j<τ
否则认为该目标未被观测到(丢失目标)。

(4)多目标情况处理: 如果一个观测值被多个目标同时选中,只保留距离最小的关联,解除其他目标的关联。

三.效果展示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结

以上就是今天分享的内容,本文简单介绍了毫米波雷达多目标跟踪的应用,详细给出了卡尔曼滤波和最近邻数据关联算法的公式,最后给出了实现效果图,若想要代码学习可以私聊我。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐