机动目标跟踪

这个例子展示了如何使用各种跟踪过滤器跟踪机动目标。这个例子展示了使用单个运动模型和多个运动模型的过滤器之间的区别。

定义一个场景

在本例中,您定义了一个单一目标,它最初以200米/秒的恒定速度飞行33秒,然后进入10度/秒的恒定旋转。转弯持续33秒,然后目标直线加速,速度为3米/秒方。

[trueState, time, fig1] = helperGenerateTruthData;dt = diff(时间(1:2));numSteps =元素个数(时间);图(图一)

将测量值定义为位置,并向测量值添加标准偏差为1的正常随机噪声。

%设置可重复结果的RNG种子s =提高;rng (2018);positionSelector = [1 0 0 0 0 0;0 0 0 0;0 0 0 0 1];状态起始位置%truePos = positionSelector * trueState;measNoise = randn(大小(truePos));measPos = truePos + measNoise;

使用恒速滤波器跟踪

你定义一个trackingEKF具有恒速运动模型。您使用第一个度量来定义初始状态和状态协方差,并将过程噪声设置为非添加性,以便根据x、y和z分量中的未知加速度来定义过程噪声。这个定义类似于函数的定义initcvekf的工作原理。

initialState = positionSelector' * measPos(:,1);initialCovariance =诊断接头([1,1 e4 1 1 e4, 1, 1 e4]);%速度未测量(@constvel, @cvmeas, initialState,“StateTransitionJacobianFcn”@constveljac,“MeasurementJacobianFcn”@cvmeasjac,“StateCovariance”initialCovariance,“HasAdditiveProcessNoise”假的,“ProcessNoise”、眼睛(3));

对于每一次测量,您都要预测滤波器,计算预测状态到真实位置的距离,并使用测量来校正滤波器以获得经过滤波的位置估计。

dist = 0(1、numSteps);numSteps estPos = 0(3日);i = 2:size(measPos,2) predict(cvekf, dt);dist (i) =距离(cvekf truePos(:,我));%到真实位置的距离estPos(:,i) = positionSelector * correct(cvekf, measPos(:,i));结束图(图一);情节(estPos (1:), estPos (2:)“.g”,“DisplayName的”,“简历PN低”)标题(“真实和估计的位置”)轴([5000 8000 -500 2500])

如图所示,过滤器能够很好地跟踪运动的恒速部分,但当目标执行转弯时,过滤器估计的位置偏离了真实位置。在下面的图中,你可以看到估计值与真实值之间的距离。在转弯过程中,33-66秒时,归一化距离跳跃到非常高的值,这意味着过滤器无法跟踪机动目标。

图=图;持有阴谋(1:numSteps) * dt,经销,‘g’,“DisplayName的”,“简历PN低”)标题(“从估计位置到真位置的归一化距离”)包含(“时间(s)”) ylabel (“归一化距离”传说)

增加过程噪声

一个可能的解决方案是增加过程噪声。过程噪声代表了运动模型中的未建模项。对于等速模型,这些是未知的加速度项。通过增加过程噪声,你允许在运动模型中有更大的不确定性,这导致过滤器更多地依赖于测量而不是模型。下面的线条创建了一个恒速滤波器,具有高处理噪声值,相当于大约5克转弯。

(@constvel, @cvmeas, initialState,“StateTransitionJacobianFcn”@constveljac,“MeasurementJacobianFcn”@cvmeasjac,“StateCovariance”initialCovariance,“HasAdditiveProcessNoise”假的,“ProcessNoise”诊断接头([50 50 1]));%水平加速度不确定度大dist = 0(1、numSteps);numSteps estPos = 0(3日);i = 2:size(measPos,2) predict(cvekf2, dt);dist (i) =距离(cvekf2 truePos(:,我));%到真实位置的距离estPos(:,i) = positionSelector * correct(cvekf2, measPos(:,i));结束图(图一)情节(estPos (1:), estPos (2:)“c”,“DisplayName的”,“简历PN高”)轴([5000 8000 -500 2500])

增加过程噪声显著提高了过滤器在转弯过程中跟踪目标的能力。然而,有一个代价:过滤器是不太能够平滑的测量噪声在恒定的速度周期的运动。尽管转弯时的归一化距离显著减少,但在运动的恒速周期内,归一化距离在前33秒内增加了。

图(图)图((1:numSteps) * dt,经销,“c”,“DisplayName的”,“简历PN高”)轴([0 100 0 50])

使用交互的动作模型过滤器

另一个解决方案是使用一个可以同时考虑所有运动模型的过滤器,称为交互多模型(IMM)过滤器。IMM滤镜可以维护尽可能多的运动模型,但通常使用2-5运动模型。对于这个例子,三个模型是足够的:一个恒定速度模型,一个恒定转弯模型,和一个恒定加速度模型。

imm = trackingIMM (“TransitionProbabilities”, 0.99);%默认IMM有所有三种型号%根据第一个模型初始化状态和状态协方差初始化(imm initialState initialCovariance);

使用IMM滤波器的方式与使用EKF的方式相同。

dist = 0(1、numSteps);numSteps estPos = 0(3日);numSteps modelProbs = 0(3日);modelProbs (: 1) = imm.ModelProbabilities;i = 2:size(measPos,2) predict(imm, dt);dist (i) =距离(imm, truePos(:,我));%到真实位置的距离estPos(:,i) = positionSelector * correct(imm, measPos(:,i));modelProbs (:, i) = imm.ModelProbabilities;结束图(图一)情节(estPos (1:), estPos (2:)“m”,“DisplayName的”,“IMM”)

trackingIMM滤波器能够跟踪机动目标在所有三个部分的运动。

检查过滤器的预测状态和真实位置之间的距离,你会发现IMM过滤器能够减少运动的所有部分的距离。事实上,IMM滤波器比之前使用的其他两个恒速模型更擅长跟踪运动。

图(图二)阴谋(1:numSteps) * dt,经销,“米”,“DisplayName的”,“IMM”)轴([0 100 0 50])

为了更好地理解IMM过滤器的工作原理,绘制模型概率作为时间的函数。从图中可以看出,filter是用具有相同概率的三个模型初始化的。当过滤器更新,它很快收敛到一个非常高的概率模型是一个恒定速度模型。经过33秒的运动后,恒速模型不再成立,在转弯的持续时间内,恒速模型的概率变得非常高。在运动的最后一部分,在恒定加速度的机动过程中,IMM过滤器赋予运动恒定加速度的高概率,但是过滤器对正确的运动模型不太确定,大约有0.3的概率是恒定速度的运动。

图plot((1:numSteps)*dt, modelProbs)“模型概率与时间”)包含(“时间(s)”) ylabel (“模型概率”)传说(“IMM-CV”,“IMM-CA”,“IMM-CT”)%返回RNG到以前的状态rng (s)

总结

这个例子向您展示了如何跟踪具有恒定转弯和恒定加速度运动的目标机动。该示例展示了如何通过增加过程噪声来捕获未知机动的恒速模型。您还了解了如何使用IMM滤波器改进机动目标的跟踪。

万博1manbetx支持功能

helperGenerateTruthData

这个函数生成ground truth轨迹。

函数[Xgt, tt, figs] = helperGenerateTruthData%生成地面真值vx = 200;% m / sω= 10;%度/秒acc = 3;% m / s / sdt = 0.1;tt = (0: dt:地板(1000 * dt));无花果= [];元素个数Xgt =南(9日(tt));Xgt (: 1) = 0;%恒定的速度seg1 =地板(元素个数(tt) / 3);Xgt (2, 1) = vx;slct =眼(9);slct(三3:最终,)= [];2:seg1 X0 = slct*Xgt(:,m-1);X1 = constvel(X0, dt);X1 = slct ' * X1;Xgt(:,米)= X1;结束%不变转seg2 =地板(2 *元素个数(tt) / 3);slct =眼(9);slct(三3:最终,)= [];seg2 X0 = slct*Xgt(:,m-1);X0 = (X0(1:4);ω);X1 = constturn(X0, dt);X1 = X1 (1:4);X1 = [X1 (1:2); 0; X1 (3:4); 0; 0 (3,1)];Xgt(:,米)= X1;结束%恒定加速度首先= true;m = seg2+1:numel(tt) X0 = Xgt(:,m-1);如果第一次vel = X0(2:3:end);ua =韦尔/规范(或者);弗吉尼亚州= acc * ua;弗吉尼亚州X0(三3:结束)=;首先= false;结束X1 = constacc(X0, dt);Xgt(:,米)= X1;结束下降加速度维数slct =眼(9);slct(三3:最终,)= [];Xgt = slct * Xgt;无花果=[无花果图];情节(Xgt (1,1: seg1), Xgt(3、1:seg1),“。”);持有;情节(Xgt (1, seg1 + 1: seg2), Xgt (3, seg1 + 1: seg2),“。”);情节(Xgt (1, seg2 + 1:结束),Xgt (3, seg2 + 1:结束),“。”);网格;包含(“X位置(m)”);ylabel (“Y位置(m)”);标题(“正确的位置”)轴平等的;传奇(“恒定速度”,“恒转”,“恒定加速度”)结束