主要内容

在以地球为中心的场景中模拟和跟踪航路中的飞机

此示例显示了如何使用以地球为中心的trackingScenariogeoTrajectory物体模型的飞行轨迹跨越数千公里。你使用两种不同的模型来生成飞机的综合探测:单基地雷达和ADS-B报告。您可以使用多目标跟踪器来估计平面轨迹,比较跟踪性能,并探索ADS-B对整体跟踪质量的影响。

在美国,联邦航空管理局(FAA)负责管理整个国家领空每天成千上万的航班。商业航班从出发机场到抵达机场,通常都被跟踪。空中交通管制系统是一个复杂的多级系统。机场管制塔负责对机场附近区域进行监视和处理,航路交通管制中心(ARTCC)负责对构成国家空域的各个区域进行远程航路监视。

在过去的几十年中,空中交通/监控雷达的能力以及复杂性显着增加。在飞机上添加转发器在雷达设施和飞机之间增加了双向通信,这允许非常准确的位置估计和在控制中心的决策中获益。在2020年,所有飞机的飞行都需要配备自动依赖监视广播(ADS-B)转发器,以广播其在板上的估计位置。通过空中交通管制中心收到和处理此消息。

创建一个航路上的空中交通场景

您首先创建以地球为中心的场景。

%保存当前随机生成器状态s =提高;%为可预测的结果设置随机种子rng(2020年);%创建方案场景=跟踪Cenario(“IsEarthCentered”,真的,“更新”,1);

定义飞机模型和轨迹

的matfileflightwaypoints附在本例中包含从威奇托到芝加哥飞行轨迹的合成坐标和时间信息。你使用geoTrajectory物体创建飞行轨迹。

负载('flightwaypointss.mat') flightRoute = geoTrajectory(lla,到达时间);飞机=平台(场景,'弹道',飞行路线);

如今,商用飞机都配备了GPS接收机。车载GPS作为ADS-B的骨干,其精度可设置为符合ADS-B要求。ADS-B中用于位置和速度的导航精度类别分别称为NACp和NACv。根据FAA法规[1],NACp必须小于0.05海里,NACv必须小于10米/秒。在本例中,使用GPS传感器模型的位置精度为50米,速度精度为10米/秒配置adsbTransponder模型。您还可以使用更现实的RCS签名来为飞机,灵感来自波音737。

posAccuracy = 50;%米精度=10;% 多发性硬化症全球定位系统(gps) = gpsSensor (“PositionInputFormat”“大地测量学”“水平定位精度”posAccuracy,...'witherPositionAccuracy',准确度,“速度准确性”,10);ADSBTX = ADSBTRANSPONDER('mw2020'“更新”, 1'全球定位系统',全球定位系统,“类别”, adsbCategory.Large);负载(“737rcs.mat”); 飞机.签名{1}=boeing737rcs;

沿着路线添加监控站

FAA使用的远程监视雷达有几种型号。航路监视雷达4(ARSR-4)是20世纪90年代引进的一种雷达,它可以在250海里(463公里)的远程范围内提供任何1平方米物体的3D返回。大多数ARSR-4雷达位于美国大陆边界,而射程稍短的雷达大多位于该大陆的FAA雷达站点。在本例中,单个雷达类型按照ARSR-4的通用规范建模,如下所示:

  • 更新率:12秒

  • 最大射程(1米平方目标):463公里

  • 距离分辨率:323米

  • 测距精度:116米

  • 方位视场:360度

  • 方位分辨率:1.4 deg

  • 方位精度:0.176°

  • 高度精度:900米

每个雷达站点的场景中都添加了一个平台。这些平台的RCS特征设置为 - 50分贝避免创建不需要的雷达返回。

默认情况下,雷达检测报告在雷达安装平台主体框架中,在本例中,该框架是每个雷达站点位置的本地东北向下框架。但是,在本例中,您设置探测坐标财产场景为了在以地球为中心的固定地球(ECEF)帧中输出探测结果,这允许跟踪器在一个共同的帧中处理来自不同雷达站点的所有探测结果。

%ARSR-4雷达模型更新率=1/12;fov=[360;30.001];误差=atan2d(0.9463);%900m精度@ max范围埃尔比亚斯分数=0.1;arsr4=融合雷达传感器(1,“更新”,更新,...'fieldofview', 360;30.001),...'haselevation',真的,...'scanmode'“机械”...“MechanicalAzimuthLimits”360年[0],...“机械蒸发限制”(-30 0),...“哈金斯”,真的,...“HasRangeRate”,真的,...“HasFalseAlarms”错误的...“参考范围”,463000,...'referencercs',0,...“范围限制”463000年[0],...'azimuthresolution',1.4,...“AzimuthBiasFraction”,0.176/1.4,...“ElevationResolution”elAccuracy / elBiasFraction...“ElevationBiasFraction”,elbiasfraction,...'rangeresolution', 323,...“RangeBiasFraction”,116/323,...精度/决议'rangerateresolution', 100,...“检测坐标”'设想');在每个ARTCC站点增加ARSR-4雷达radarsitesLLA = [41.4228 -88.0583 0;...40.6989 -89.8258 0;...39.2219 -95.2461 0];I =1:3雷达=克隆(arsr4);雷达。SensorIndex =我;平台(场景,'位置',Radarsiteslla(我,:),...“签名”rcsSignature ('图案', -50),“传感器”,{雷达});终止

你使用adsbreceiver.对ADS-B消息的接收进行建模。ADS-B信息包含由飞机自身的GPS仪器测量的位置。该信息通常被编码并在1090mhz信道上广播,以供附近的ADS-B接收机接收。在每个监测站周围设定200公里的接收范围。在这个例子中,你假设监视站之间有完美的通信。因此,中央接收器接收至少一个电台范围内的广播ADS-B消息。

%定义中央adsbreceiveradsbRx = adsbReceiver (“破产管理人指数”2);adsbRange = 2 e5;

想象这个场景

你用了trackingGlobeViewer显示地球上的平台,轨迹,检测和轨道。

查看器=跟踪GlobeViewer(“技术”“streets-dark”...“TrackLabelScale”, 1.3,“跟踪历史深度”,4000,...“覆盖模式”“报道”);%显示雷达站点plotplatform(查看器,scene.platforms(2:结束));%显示雷达覆盖范围covcon=coverageConfig(场景);plotCoverage(查看器、covcon、,“ECEF”“阿尔法”, 0.1);%显示航线plotTrajectory(观众、flightRoute);

监视雷达有一个天线盲锥,有时也被称为“沉默锥”。它是一个直接位于雷达上方的空间,由于天线扫描的限制而无法被监视。雷达网络重叠覆盖是该盲区常见的缓解策略。然而,如果采用重叠策略,仍有可能存在未被网络完全覆盖的区域。在这个例子中,最南端的雷达的沉默锥(在上面的图片中显示为橙色)只被网络中相邻的雷达部分覆盖。这就造成了飞机无法被雷达探测到的盲点。

定义中央雷达跟踪器和轨道定影器。

通常情况下,一个ARTCC对其监视区内的所有物体保持跟踪,并在物体飞进新区域时将跟踪信息传递给下一个ARTCC。在本例中,您为所有雷达定义了一个集中跟踪器。你使用Trackergnn.对象熔断来自多个雷达的平面的雷达检测。

radarGNN = trackerGNN ('trackerindex',1,...“MaxNumTracks”,50,...“FilterInitializationFcn”@initfilter,...“ConfirmationThreshold”,[3 5],...'deletionthreshold', 5 [5],...“AssignmentThreshold”,[250 2000]);

你们还将雷达轨迹与ADS-B接收机获得的ADS-B轨迹融合。为此,您需要配置一个中心跟踪定影器对象。你设置ConfirmationThresholdDeletionThreshold用于解释ADS-B接收机速率在1 Hz时与雷达跟踪器速率在1/12 Hz时的更新速率差异。为了允许至少两个雷达轨迹被分配到一个中心轨迹,命中次数必须至少是 2 × 12

熔化炉= trackFuser ('fuserIndex',3,“MaxNumSources”2,...“AssignmentThreshold”,[250 500],...“立式度”'路口'...“StateFusionParameters”“跟踪”...“ConfirmationThreshold”,[2 3 * 12],...'deletionthreshold',[4 4] * 12);

使用雷达和ADS-B跟踪航班

在本节中,您将模拟场景,并步进雷达跟踪器、航迹融合器、ADS-B应答器和接收机。

%声明一些变量detBuffer = {};radartracklog = {};fusedtracklog = {};Adsbtracklog = {};图像= {};Snaptimes = [84,564,1128,2083];%跟踪标签和颜色adsblabel =“ADS-B”;Radarlabel =“雷达”;fusedlabel =字符串(sprintf ('%s \ n'""“融合”));Adsbclr = [183 70 255]/255;Radarclr = [255 255 17]/255;Fusedclr = [255 105 41]/255;虽然advance(scene) time = scene. simulationtime;%更新飞机在地球上的位置plotPlatform(观众、飞机、“TrajectoryMode”'没有任何');%生成并绘制合成雷达探测图[dets,configs]=检测(场景);dets=后处理检测(dets);detBuffer=[detBuffer;dets];%#好的detBuffer plotDetection(查看器,“ECEF”);%的踪迹Adsbtracks = ObjectTrack.empty;Radartracks = ObjectTrack.empty;FusedTracks = ObjectTrack.empty;%生成ADS-B消息真姿势=姿势(飞机,“真的”“CoordinateSystem”“大地测量学”);adsbMessage = adsbTx (truePose。位置,truePose.Velocity);可以在每个监视站的范围内接收%消息如果isWithinRange (radarsitesLLA truePose。Position, adsbRange) adsbTracks = adsbRx(adsbMessage, time);终止%在扫描结束时更新雷达跟踪器如果all([configs.IsValidTime]) && (~isempty(detBuffer) || isLocked(radarGNN)) radarTracks = radarGNN(detBuffer,time);detBuffer = {};终止%熔丝轨迹如果略锁(定影)||〜isempty([adsbtracks; radartracks])fusedtracks = fuser([adsbtracks; radartracks],时间);终止每次雷达扫描只跟踪一次如果所有([configs.IsValidTime])标签=[repmat(adsblabel,1,numel(adsbTracks)),...repmat (radarlabel 1元素个数(radarTracks)),...Repmat(Fusedlabel,1,Numel(FusedTracks))];颜色= [Repmat(Adsbclr,Numel(Adsbtracks),1);...repmat(雷达雷达、numel(雷达支架)1台);...repmat (fusedclr元素个数(fusedTracks), 1)];plotTrack(观众[adsbTracks;radarTracks;fusedTracks),“ECEF”...“LabelStyle”“习俗”“CustomLabel”、标签'颜色'、颜色、...'行宽',3);终止%记录估计的飞机数据的指标fusedTrackLog = [fusedTrackLog, {fusedTracks}];%#好的radartracklog = [radartracklog,{radartracks}];%#好的adsbTrackLog=[adsbTrackLog,{adsbTracks}];%#好的%移动相机并拍摄快照图像=移动摄影机(查看器、飞机、时间、快照、图像);终止
图imshow(图像{1});

在场景开始时,飞机远离最南端的监视站,没有发送ADS-B信息。因此,飞机只能通过雷达跟踪。请注意,ARSR探测在高度上相对不准确,这通常是可以接受的,因为空中交通管制员将飞机水平分开,而不是垂直分开。最不准确的探测是由距离较远的雷达站点产生的。尽管如此,这些探测还是与轨道有关。在图中,白线表示真实轨迹,黄线表示雷达跟踪器估计的轨迹。飞行的第一段距离任何雷达都很远,相应的探测具有很高的测量噪声。此外,在起飞后的初始飞行转弯期间,恒定速度运动模型不能很好地模拟运动。雷达航迹被传递到定影器,定影器输出一条以橙色显示的融合航迹,紧跟着雷达航迹。融合后的航迹与雷达航迹不同,因为融合器会在航迹状态中添加自身的过程噪声。

图imshow(图像{2});

在上面的快照中,飞机处于ADS-B通信范围内,建立了新的ADS-B航迹。该熔断器对这种新轨道进行了处理,提高了熔断器的精度。

{3}图imshow(图像);

在上面的快照中,飞机进入了静锥区。雷达跟踪器在几次更新后删除轨迹,而没有任何新的检测。在这一点上,引信只依靠ADS-B轨道来估计飞机的位置。

{4}图imshow(图像);

当飞机进入第二和第三监视雷达站所覆盖的区域时,建立了新的雷达轨迹。来自两个雷达站的探测被雷达跟踪器融合,跟踪引信器将新的雷达轨迹与ADS-B轨迹融合。

分析结果

您可以比较雷达和ADS-B的录制的轨道数据。真正的位置和速度可从中获得geoTrajectory。您可以使用OSPA度量来比较仅从雷达、仅ADS-B和与ADS-B融合的雷达的跟踪质量。的默认设置TrackOvMetric.目的比较轨道位置和探测分配的归一化估计误差平方(NEES)。

OSPA = TRACKOMETRIC;Radarospa =零(CEIL(NUMER(RADARTRACKLOG)/ 12),1);%Compute Radar Tracker OSPAi=1:12:numel(radarTrackLog) tracks = radarTrackLog{i};[真相。〜,,真相。velocity] =看起来(flightroute,i-1,“ECEF”);Radarospa (i) = ospa(轨道,真理);终止%计算ADS-B OSPAAdsbospa = Zeros(Numel(Adsbtracklog),1);重置(ospa);i = 1:numel(adsbtracklog)曲目= adsbtracklog {i};[真相。〜,,真相。velocity] =看起来(flightroute,i-1,“ECEF”);Adsbospa(i)= OSPA(曲目,真相);终止%compute融合ospafusedospa = 0(元素个数(fusedTrackLog), 1);重置(ospa);i = 1:numel(fusedtracklog)曲目= fusedtracklog {i};[真相。〜,,真相。velocity] =看起来(flightroute,i-1,“ECEF”); fusedospa(i)=ospa(轨迹、真相);终止
%绘制OSPA数字保持在…上图((0:12:numel(radarTrackLog)-1))/60,radarospa(1:12:end),“颜色”,radarclr);图((0 :( numel(adsbtracklog)-1))/ 60,adsbospa,“颜色”,adsbclr,'行宽'2);情节((0:(元素个数(fusedTrackLog) 1)) / 60, fusedospa,“颜色”,fusedclr);l =图例(“雷达”“ads - b”'雷达+ ADS-B');l.Color=[0.10.10.1];l.TextColor=[1];xlabel(的时间(分钟))伊拉贝尔('OSPA') ax = gca;网格在…上;盒子在…上;AX.COLOR = [0.1 0.1 0.1];ax.gridcolor = [1 1];

OSPA指标显示了融合ADS-B跟踪与雷达跟踪的改进。从模拟时间19分钟到25分钟,由于飞机在雷达网络盲点上空飞行,雷达只有OSPA高。正如融合的OSPA所表明的那样,ADS-B在这一领域的可用性显著提高了跟踪性能。此外,该度量在开始时出现了两个峰值,这可以归因于恒速滤波器在轨迹初始转弯时的性能较差和ADS-B的不可用。在40分钟左右,由于区域内ADS-B的可用性降低,仅ADS-B OSPA降级。在后面的仿真部分,雷达和ADS-B都是可用的。只有OSPA雷达总体上比只有ADS-B雷达差。这是因为与GPS相比,雷达的垂直精度较差。

总结

在本例中,您学习了如何创建以地球为中心的场景,并使用大地坐标定义轨迹。您还学习了如何对航路监视雷达建模和生成合成探测。您可以将这些检测结果反馈给多目标跟踪器,并估计飞机的位置、速度和航向。通过添加和融合ADS-B信息,提高了跟踪性能。您为ADS-B报告建模并将其集成到跟踪解决方案中。在本例中,仅对单个航班进行了建模。在空中交通管制员必须保持安全间隔距离的情况下,ADS-B的优势可以在模拟多个航班时得到进一步体现。

金宝app支持功能

initFilter.定义扩展卡尔曼滤波器Trackergnn..飞机运动可用匀速运动模型很好地近似。因此,使用相对较小的过程噪声来为动态分配更多的权重,而测量预期在较长的距离上会有相当大的噪声。

作用filter = initFilter(检测)滤波器= initcvekf(检测);filter.statecovariance = 100 * filter.statecovariance;%initcvekf使用测量噪声作为默认值过滤器。ProcessNoise = 0.1;终止

postProcessDetectionpost通过两个操作处理检测:

  1. 它消除了位于地球表面以下的雷达探测,因为真正的雷达无法产生这些探测。

  2. 它增加了垂直于径向分量的速度测量分量的检测噪声级。

作用Detsout =后处理(Detsin)n = numel(脱果);保持=零(1,n,“逻辑”);i=1:n meas=detsin{i}.Measurement(1:3)';lla=fusion.internal.frames.ecef2lla(meas);如果Lla (3)>0 keep(i) = true;其他的保持(i) = false;终止终止脱扣=斗争(保持);VelcovTransversal = 100 ^ 2;i=1:numel(detsout) velCov = detsout{i}.MeasurementNoise(4:6,4:6);[P、D] = eig (velCov);位于印第安纳州[m] = min(诊断接头(D));D = velCovTransversal * eye(3);D(印第安纳州)= m;correctedCov = P * D * P ';detsout{我}.MeasurementNoise (4:6 - 4:6) = correctedCov;终止终止

在范围之内如果飞机位置在任何监视站的ADS-B接收器范围内,则返回TRUE。

作用flag=isWithinRange(stationsla,pos,range)cartdestance=fusion.internal.frames.lla2ecef(stationsla)-fusion.internal.frames.lla2ecef(pos);flag=any(vecnorm(cartdestance,2,2)终止

movecamera.指定新的相机位置,以遵循飞机并拍摄快照。

作用图像= Movecamera(查看者,飞机,时间,snaptimes,图像)如果mod(time,12) == 0 pos = plane. position;如果时间== 0 campos(viewer, pos(1),pos(2), 2e4);elseif时间== 1100.%缩小坎波斯(观众、pos (1), pos (2), 1 e5);elseif时间== 2000.%放大坎波斯(观众,位置(1)、位置(2)、2.6e4);其他的保持先前的高度,但跟随飞机坎波斯(观众,位置(1)和位置(2));终止终止%快照如果任何(time == snaptimes)rawingomg =快照(查看者);图像= [图像,{img}];终止终止

参考

[1]FAR§91.227自动相关监视广播(ADS-B)输出设备性能要求