使用单一机动传感器的无源测距

该示例说明了如何使用仅来自单个传感器的被动角度测量来跟踪目标。仅被动角度测量包含相对于传感器的方位角和目标的高度。没有范围测量的情况使得当要跟踪的目标只是在某些条件下完全可观察到的问题是具有挑战性的。

在本例中,您将了解通过使用安装在机动平台上的被动红外传感器来解决此问题的一些可能的解决方案。万博 尤文图斯

介绍

缺少目标的距离测量意味着目标状态的不完全可观测性。下图描述了由以恒定速度移动的观测者获得的仅角度测量结果导致(假定恒定速度)目标的多个可能轨迹。

理论结果表明,在满足以下条件之前,目标状态是不可观测的[1]。

  • 传感器必须超出目标,即传感器的运动必须至少比目标高1个数量级。例如,如果目标以恒定速度移动,则观察者必须至少具有恒定加速度。

  • 垂直于视线的传感器机动分量必须为非零。

定义场景

辅助功能HelperCreatePassideringScenario用于定义安装在平台上的单个红外传感器。传感平台通常称为自有平台,开始时以恒定速度移动,然后执行机动以观察目标的范围。假设目标为非机动目标,并在场景中以恒定速度移动。

%设置exPath = fullfile (matlabroot,'例子','融合',“主要”);目录exPath);[场景,认同感,theaterDisplay] = helperCreatePassiveRangingScenario;showScenario (theaterDisplay);

使用笛卡尔坐标系中的EKF跟踪

可以使用笛卡尔坐标中的非线性测量模型的扩展卡尔曼滤波器来配制使用仅角度测量来跟踪目标的问题。在本节中,恒定速度trackingEKF,在全局笛卡尔坐标系中描述状态,用于跟踪目标。

%设置随机种子以获得可重复的结果rng (50);%创建| trackerGNN |以使用% FilterInitializationFcn作为@initCartesianEKF。跟踪器(“FilterInitializationFcn”@initCartesianEKF,...“AssignmentThreshold”, 50岁,...“MaxNumTracks”,5); [tem,tam]=HelperPassiveringErrorMetrics(所有权,false);theaterDisplay.ErrorMetrics=tem;轨道=[];%先进的场景,模拟检测和跟踪预演(现场)%从跟踪场景中获取时间信息。真相=平台姿态(场景);时间=场景。模拟时间;%从自己的船生成检测检测=检测(认同感,时间);通过检测到跟踪器如果~isempty(检测)轨迹=跟踪器(检测,时间);埃尔塞夫isLocked(tracker) tracks = predictTracksToTime(tracker,“确认”,时间);终止%更新错误和分配度量tam(轨道、真相);[trackid,truthIDs]=当前分配(tam);tem(轨迹、轨迹ID、真理、真理);%更新显示剧院显示器(轨迹、检测、跟踪器);终止

曲目是使用范围内的高协方差初始化的,以解释缺失的测量。请注意剧场图初始化后轨道范围内的协方差。随着角度估计的相当准确,目标不确定性由薄的协方差椭圆描述。

展品展览(剧院展览,1);

下图显示了传感器在方案中启动操作后的过滤器性能。使用范围和范围率估算图errorbar并显示\σ美元(标准偏差)轨迹估计的界限。

展品(剧院展示,2);

笛卡尔坐标系下EKF的稳定性

在笛卡尔坐标中使用扩展卡尔曼滤波器进行跟踪是很有吸引力的,因为易于问题的表述。状态动力学由一组线性方程表示,而非线性则采用两个(相对)简单的方位角和仰角方程。

也就是说,扩展卡尔曼滤波器的行为是不稳定的,并且经常是不稳定的。这是因为状态(位置和速度)和不可观测范围是高度耦合的。当距离不可观测时,即在传感平台运动的恒定速度阶段,滤波器根据测量历史和相关噪声值“错误”估计目标的距离。这可能导致协方差椭圆过早崩溃,这可能导致滤波器需要很长时间才能收敛(甚至发散)[2],即使在满足足够的可观测性条件后也是如此。

使用不同的随机种子观察笛卡尔坐标系下扩展卡尔曼滤波器的早熟收敛。

%设置随机种子rng (2015);重置剧场显示以捕获快照与新的场景。发布(剧院展示);theaterDisplay.GrabFigureFcn=@(fig,场景)helperGrabPassiveRangingDisplay(fig,场景,“CartEKF2”);helperRunPassiveRangingSimulation(场景,theaterDisplay, @initCartesianEKF);

2秒后,范围内的协方差已经崩溃,使得滤波器错误地相信它对范围的估计。注意,目标位于轨道状态的协方差椭圆之外,距离估计图中的零误差线也是如此。

展览(剧院展览,3);

因为滤波器对它估计的范围保持自信,它需要花费更长的时间来收敛到更接近实际的范围值。

showGrabs (theaterDisplay 4);

使用修正球坐标系中的EKF跟踪(MSC-EKF)

修改的球形坐标(MSC)呈现了一种稳定的坐标系,用于使用仅角度测量跟踪。通过将状态解耦到可观察和不可观察的部件中,过滤器克服了EKF在笛卡尔坐标中施加的限制。修改的球形坐标中的状态以相对方式定义,即[目标 - 观察者],因此需要从未来预测状态的观察者的输入。这可以在以下等式中看到,其中更高阶项是指未被恒定速度模型捕获的观察者运动。

$x=x{t}-x{o}$

$\dot{x}=\dot{x{t}-\dot{x{o}$

$\dot{x}=Ax{t}-(Ax{0}+\mathcal{O}(t^{2})+\mathcal{O}(t^{3})+…)$

$ \ dot {x} = a(x_ {t}  -  x__ {0})+ \ mbox {越高} \ mbox {order} \ mbox {术语} $

%设置相同的随机种子与相同的检测进行比较rng (2015);%重新启动场景重启(场景);发布(剧院展示);theaterDisplay.GrabFigureFcn=@(fig,场景)helperGrabPassiveRangingDisplay(fig,场景,“MSCEKF”); [tem,tam]=HelperPassiveringErrorMetrics(所有权,true);theaterDisplay.ErrorMetrics=tem;%使用| trackerGNN |和MSC-EKF过滤器初始化创建跟踪器。跟踪器(“FilterInitializationFcn”,@initMSCEKF,...“AssignmentThreshold”, 50);曲目携带一个状态,该状态是非线性取决于位置的状态。告诉剧场显示轨道的状态和位置是非线性的%可以使用函数句柄提取。theaterDisplay。HasNonLinearState = true;theaterDisplay。NonLinearTrackPositionFcn = @getTrackPositionsMSC;%MSC-EKF的初始化。普遍=姿势(自己,“真正的”);LastOrctionTime = 0;AllTracks = [];%先进的场景,模拟检测和跟踪advance(scene) time = scene. simulationtime;真理= platformPoses(现场);%从自己产生检测检测=检测(认同感,时间);%更新来自船主的输入,即自去年以来的机动%修正时间。currentPose =姿势(认同感,“真正的”);dt =时间 -  lastcorrectiontime;Observermaneuver = CalculateManeuver(函第回动,常牙,DT);对于i=1:numel(所有轨道)%使用| setTrackFilterProperties设置ObserverInput属性|%跟踪器的功能setTrackFilterProperties(跟踪器,所有轨迹(i).TrackID,“ObserverInput”观察者动作);终止通过检测到跟踪器如果~ is空(检测)lastCorrectionTime =时间;%存储上一个姿势以计算机动prevPose = currentPose;[追踪,~,allTracks] =追踪(检测、时间);埃尔塞夫isLocked(tracker) tracks = predictTracksToTime(tracker,“确认”,时间);终止%更新错误和分配度量tam(轨道、真相);[trackid,truthIDs]=当前分配(tam);tem(轨迹、轨迹ID、真理、真理);%更新显示theaterDisplay.NonLinearStateInput=currentPose.Position(:);剧院显示器(探测、跟踪、跟踪器);终止

MSC-EKF尝试在范围内保持协方差,直到传感器未进行机动。这主要是由于状态中可观测和不可观测部分的解耦。

showGrabs (theaterDisplay 5);

在笛卡尔坐标系中,滤波器比EKF更快地收敛到更接近真值,并且\σ美元界提供了对误差的真实的、无偏的估计。

showGrabs (theaterDisplay 6);

使用范围参数化MSC-EKF跟踪

MSC-EKF方法在预测步骤中使用线性化技术来投影协方差。初始化时范围内的协方差通常很高,状态转移动力学是高度非线性的,这可能会导致滤波器收敛问题。

本节演示高斯和滤波器的使用,trackingGSF,用一组过滤器来描述状态,每个过滤器都在不同的范围假设下初始化。这种技术通常称为范围参数化[3]。

%设定随机种子rng (2015);%重新启动场景重启(场景);发布(剧院展示);theaterDisplay.GrabFigureFcn=@(fig,场景)helperGrabPassiveRangingDisplay(fig,场景,“MSCRPEKF”);%创建错误和分配指标。[TEM,TAM] = HelperPassiverangingErrormetrics(自己,真实);TheaterDisplay.Errormetrics = TEM;使用|trackerGNN|和范围参数化MSC-EKF创建一个跟踪器%过滤器初始化。跟踪器(“FilterInitializationFcn”,@initMSCRPEKF,...“AssignmentThreshold”,50); theaterDisplay.hasnollinearState=true;theaterDisplay.NonLinearTrackPositionFcn=@getTrackPositionsMSC;MSC-RPEKF的初始化普遍=姿势(自己,“真正的”);LastOrctionTime = 0;AllTracks = [];%先进的场景,模拟检测和跟踪advance(scene) time = scene. simulationtime;真理= platformPoses(现场);%从自己产生检测检测=检测(认同感,时间);%更新来自船主的输入,即自去年以来的机动%修正时间。currentPose =姿势(认同感,“真正的”);dt =时间 -  lastcorrectiontime;Observermaneuver = CalculateManeuver(函第回动,常牙,DT);从trackingGSF属性TrackingFilters中获取每个过滤器使用%the | gettrackfilterproperties |跟踪器的功能。对于i = 1:numel(allTracks) trackingFilters = getTrackFilterProperties(tracker,allTracks(i))。TrackID,“TrackingFilters”);%为每个跟踪过滤器设置ObserverInput对于m=1:numel(trackingFilters{1})trackingFilters{1}{m}.ObserverInput=observerManeuver;终止终止通过检测到跟踪器如果~ is空(检测)lastCorrectionTime =时间;%存储上一个姿势以计算机动prevPose = currentPose;[追踪,~,allTracks] =追踪(检测、时间);埃尔塞夫isLocked(tracker) tracks = predictTracksToTime(tracker,“确认”,时间);终止%更新错误和分配度量tam(轨道、真相);[trackid,truthIDs]=当前分配(tam);tem(轨迹、轨迹ID、真理、真理);%更新显示theaterDisplay.NonLinearStateInput=currentPose.Position(:);剧院显示器(探测、跟踪、跟踪器);终止

下图显示了跟踪初始化后的范围参数化过滤器以及过滤器的跟踪性能。范围参数化过程允许每个滤波器在范围内携带相对较小的协方差,因此不易受到线性化问题的影响。在这种情况下,距离参数化滤波器的收敛时间类似于MSC-EKF。然而,当传感器进入轨道的第二个主要机动阶段(即模拟开始35到40秒)时,滤波器表现出较少的瞬态行为。请注意,上面的MSC-EKF距离估计图产生了10+km的距离误差。距离参数化滤波器的估计误差约为5km。

展品(剧院陈列,[7 8]);

关闭显示

展品(剧院展示,[]);

多目标场景

使用MSC-EKF和范围参数化MSC-EKF的说明方法适用于1多个目标。要观察每个目标,传感器必须出现在它们中的每一个。由于MSC-EKF等滤波器可以在非操纵阶段维持范围协方差,因此当传感器对其进行操纵时,每个轨道的估计应更接近目标。

MSC-EKF.

%设定随机种子rng (2015);%创建一个双目标场景和剧场显示。[Scentwo,〜,TheaterDisplytwo] = HelpercreatePassivingsCenseCenario(2);%使用helper函数使用@initMSCEKF运行模拟。HelperRunPassiveringSimulation(sceneTwo,theaterDisplayTwo,@initMSCEKF);
%显示结果ShowGrabs(TheaterDisplaytwo,1);

距离参数化MSC-EKF

%设定随机种子rng (2015);释放(TheaterDisplaytwo);%使用范围参数化MSC-EKF进行模拟HelperRunPassiveringSimulation(sceneTwo,theaterDisplayTwo,@initMSCRPEKF);
%显示结果showGrabs (theaterDisplayTwo 2);rmpath (exPath);

概括

这个例子说明了与单传感器纯角度跟踪问题相关的挑战,并演示了如何使用不同的跟踪算法来估计目标的距离和距离速率。你学会了如何使用initcvekf,initcvmscekftrackingGSF为被动测距定义定制的Cartesian-EKF,MSC-EKF和范围参数化MSC-EKF。您还学习了如何使用带GNN跟踪器的定义过滤器,Trackergnn..

万博1manbetx支持功能

过滤器初始化函数

以下部分列出了所有过滤器初始化FCN用于Trackergnn.对象。

initCartesianEKF从仅角度检测初始化trackingEKF

函数filter=initCartesianEKF(检测)%在距离估计中创建一个具有高协方差的完整检测。范围= 5E4;RangeCov = 16E8;Fulldetection =检测;Fulldetection.measurement = [Fulldetection.measurent; RangeStimate];Fulldetection.measurementnoise = Blkdiag(Fulldetection.MeasurementNoise,RangeCov);%更新测量参数以包括范围。Fulldetection.measurementParameters(1).hasrange = true;%使用initcvekf函数初始化trackingekf使用%富尔丁特。fullFilter = initcvekf (fullDetection);%| initcvekf |定义速度与100的速度。这个%将速度的标准偏差不确定度定义为10 m/s%速度协方差为400,即等效速度标准%偏差为200米/秒velCov=fullFilter.状态协方差(2:2:end,2:2:end);状态协方差(2:2:end,2:2:end)=400*velCov;%fullFilter只能通过[az el r]测量值进行校正。%create a | trackingekf |使用状态和StateCovariance% fullFilter。filter = trackingekf(@ constvel,@ cvmeas,fullfilter.state,...“StateCovariance”, fullFilter。StateCovariance,...“状态转换JacobianFCN”,@constveljac,...“测量JacobianFCN”,@cvmeasjac,...“HasAdditiveProcessNoise”、假);%单位标准偏差加速度噪声过滤器。过程噪声=眼睛(3);终止

initmscekf.从仅角度检测初始化MSC-EKF

函数过滤器= initMSCEKF(检测)%使用第二个输入| initcvmscekf |功能提供距离估计和距离标准差的%。范围估计=5e4;范围σ=4e4;filter=initcvmscekf(检测,[范围估计,范围西格玛]);%initcvmscekf假设速度标准偏差为10 m/s,即%线性转换为方位角速率、仰角速率和vr/r。%缩放速度协方差400以指定目标可以移动20%时间快了。filter.stateConvariance(2:2:end,2:2:end)=400*filter.stateConvariance(2:2:end,2:2:end);filter.ProcessNoise=eye(3);终止

initMSCRPEKF从仅角度检测初始化范围参数化MSC-EKF

函数过滤器= initMSCRPEKF(检测)使用高斯和滤波器可以定义范围参数化MSC-EKF%(trackingGSF)包含多个| trackingMSCEKF | as TrackingFilters。%范围 - 参数化常数rMin = 3 e4;征求= 8 e4;numFilters = 10;ρ=(征求/ rMin) ^ (1 / numFilters);Cr = 2*(rho - 1)/(rho + 1)/根号(12);indFilters =细胞(numFilters, 1);对于i = 1:numfilters范围= rmin / 2 *(rho ^ i + rho ^(i-1));rangesigma = Cr *范围;%使用initcvmscekf函数创建具有提供的跟踪mscekf%范围和范围。indFilters{i}=initcvmscekf(检测,[范围范围西格玛]);%更新每个过滤器的速度协方差。indFilters{i}.状态协方差(2:2:end,2:2:end)=400*indFilters{i}.状态协方差(2:2:end,2:2:end);终止过滤器= trackingGSF (indFilters);终止

效用函数CalculateManeuver

函数机动= calculateManeuver (currentPose prevPose dT)%计算机动装置i.e. 1st oder + Observer的运动。这是%通常使用以更高速率运行的传感器获得。v=前置速度;prevPos=prevPose.位置;PrevLevel=prevPose.速度;currentPos=当前姿势位置;currentVel=currentPose.速度;%位置与恒定速度运动相比变化deltap = currentpos  -  prevpos  -  v * dt;%速度变化deltaV=当前电平-前置电平;机动=零(6,1);机动(1:2:end)=deltaP;机动(2:2:end)=deltaV;终止

getTrackPositionsMSC

函数(pos机,x) = getTrackPositionsMSC(跟踪、observerPosition)如果isstract(轨道)||isa(轨道,“objectTrack”)%的轨道结构state = [tracks.state];Statecov = cat(3,tracks.statecovariance);埃尔塞夫isa(轨道,“跟踪mscekf”)%跟踪滤波器state=tracks.state;stateCov=tracks.StateCovariance;终止%使用测量功能获取相对位置。relPos=cvmeasmsc(状态,“矩形”);%添加观察者位置pos=relPos+observer位置;pos=pos';如果nargout>1 cov=零(3,3,numel(轨迹));对于i = 1:元素个数(跟踪)位置测量的雅可比矩阵jac=CVMEASMSCCJAC(状态(:,i),“矩形”);COV(:,:,i)= Jac * Statecov(:,:,i)* jac';终止终止终止

参考

[1] 福格尔、伊莱和莫蒂·盖维。“从角度测量的N阶动力学目标可观测性”,《航空航天和电子系统IEEE学报》24.3(1988):305-308。

[2] Adala,Vincent和Sherry Hammel。“利用修改的极性坐标进行轴承跟踪。”自动控制IEEE交易28.3(1983):283-294。

[3]桃子,N。“使用一组距离参数化扩展卡尔曼滤波器进行仅方位跟踪。”控制理论与应用142.1(1995):73-80。