毫米波雷达利用卡尔曼滤波算法和最近邻数据关联算法实现多目标跟踪
前言
毫米波雷达最近在多目标识别上取得了很多成果,可以应用在自动驾驶和一些隐私场景中的人员检测(例如厕所、卧室等私密环境中的人员检测),因此本文将分享利用毫米波雷达对多目标进行识别跟踪的一个小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} Sk∣k−1=F⋅Sk−1
预测的状态向量包括位置和速度。
(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} Pk∣k−1=F⋅Pk−1⋅F⊤+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+y2x⋅x˙+y⋅y˙:为目标径向速度。
(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= rx−r2xr2x˙y−xy˙ryr2xr2y˙x−x˙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=Pk∣k−1H⊤(HPk∣k−1H⊤+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=Sk∣k−1+Kk(zk−HSk∣k−1)
更新协方差矩阵,减少对状态的不确定性:
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=(I−KkH)Pk∣k−1
二、数据关联算法
最近邻算法的目标是找到观测值和目标预测之间的最近邻匹配。假设有 M 个目标和 N 个观测值,算法计算每个目标与每个观测值之间的距离(或代价),然后选择距离最小的匹配对。
1.计算残差
残差(创新向量)表示观测值与目标预测值的差异:
y i j = z j − H S i \mathbf{y}_i^j=\mathbf{z}_j-\mathbf{H}\mathbf{S}_i yij=zj−HSi
其中: 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=yij⊤S−1yij
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)多目标情况处理: 如果一个观测值被多个目标同时选中,只保留距离最小的关联,解除其他目标的关联。
三.效果展示



总结
以上就是今天分享的内容,本文简单介绍了毫米波雷达多目标跟踪的应用,详细给出了卡尔曼滤波和最近邻数据关联算法的公式,最后给出了实现效果图,若想要代码学习可以私聊我。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)