主要内容

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

这个例子向您展示了如何使用一个地球trackingScenario和一个geoTrajectory对象模型一个横跨数千公里的飞行轨迹。您使用两个不同的模型来生成合成检测飞机:单站雷达和ads - b报告。你用多目标跟踪器估计飞机轨迹,比较跟踪性能,并探索影响ads - b提供了对整个跟踪质量。

在美国,美国联邦航空管理局(FAA)负责监管成千上万的航班每天在整个国家领空。商业航班通常追踪,从出发地到达。一个空中交通控制系统是一个复杂的多层次的系统。机场控制塔负责监测和处理机场附近的航路交通管制中心(航线)负责远程航路监视多个地区组成国家领空。

空中交通的能力以及复杂性/监视雷达在过去的几十年中显著增加。转发器的飞机上添加了一个雷达设备和飞机之间的双向通信,可以非常准确的位置估计和福利决策控制中心。在2020年,所有飞机飞行10000英尺以上都需要配备自动相关监视(ads - b)应答器播放广播他们的车载估计位置。这个消息是空中交通控制中心接收并处理。

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

首先创建一个地球的场景。

%保存当前随机发生器状态s =提高;%设置随机种子可预测的结果rng (2020);%创建场景现场= trackingScenario (“IsEarthCentered”,真的,“UpdateRate”1);

定义了飞机模型和轨迹

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

负载(“flightwaypoints.mat”)flightRoute = geoTrajectory (lla timeofarrival);飞机=平台(场景,“轨迹”,flightRoute);

如今,商用飞机都配备了GPS接收器。ads - b的支柱,车载GPS定位的准确性可以设置为符合ads - b的要求。导航精度分类中使用ads - b,位置和速度被称为有色人种协进会NACv,分别。每个联邦航空局规定[1],有色人种协进会必须小于0.05海里,NACv必须小于10米每秒。在本例中,您使用一个gpsSensor模型50米的位置精度和速度10 m / s配置的准确性adsbTransponder模型。您还可以使用一个更现实的飞机的RCS签名,灵感来自波音737。

posAccuracy = 50;%米velAccuracy = 10;% m / s全球定位系统(gps) = gpsSensor (“PositionInputFormat”,“大地”,“HorizontalPositionAccuracy”posAccuracy,“VerticalPositionAccuracy”posAccuracy,“VelocityAccuracy”10);adsbTx = adsbTransponder (“MW2020”,“UpdateRate”, 1“全球定位系统”全球定位系统(gps),“类别”,adsbCategory.Large);负载(737 rcs.mat);飞机。签名{1}= boeing737rcs;

添加监视站沿线

有几种型号的远程监视雷达由联邦航空局使用。航路监视雷达4 (ARSR-4)是雷达在1990年代引入提供3 d返回任何1平方米的对象的远程250海里(463公里)。ARSR-4雷达大多位于美国大陆的边界,而稍短的雷达范围大多位于FAA雷达站点在欧洲大陆。在这个例子中,单个雷达类型建模ARSR-4的常见规格如下所示:

  • 更新率:12秒

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

  • 距离分辨率:323米

  • 范围的准确性:116米

  • 方位的视野:360度

  • 方位分辨率:1.4度

  • 方位精度:0.176度

  • 高度的准确性:900米

一个平台为每个雷达站点添加到场景中。这些平台的RCS签名设置 - - - - - - 50分贝,以免造成不必要的雷达的回报。

默认情况下,雷达检测报告在雷达安装平台车身骨架,在本例中是当地东北框架在每个雷达站点的位置。然而,在这个例子中设置DetectionCoordinates财产场景为了输出检测地球地球定点(ECEF)框架,它允许从不同的雷达跟踪处理所有的检测网站在一个共同的框架。

%模型ARSR-4雷达updaterate = 1/12;fov = (360; 30.001);,463 elAccuracy = atan2d (0.9);% 900 @ max精度范围elBiasFraction = 0.1;arsr4 = fusionRadarSensor (1,“UpdateRate”updaterate,“FieldOfView”,360;30.001),“HasElevation”,真的,“ScanMode”,“机械”,“MechanicalAzimuthLimits”360年[0],“MechanicalElevationLimits”(-30 0),“之内”,真的,“HasRangeRate”,真的,“HasFalseAlarms”假的,“ReferenceRange”,463000,“ReferenceRCS”0,“RangeLimits”463000年[0],“AzimuthResolution”,1.4,“AzimuthBiasFraction”,0.176/1.4,“ElevationResolution”elAccuracy / elBiasFraction“ElevationBiasFraction”elBiasFraction,“RangeResolution”,323,“RangeBiasFraction”,116/323,精度/决议“RangeRateResolution”,100,“DetectionCoordinates”,“场景”);%在每个航线网站添加ARSR-4雷达radarsitesLLA = (41.4228 - -88.0583 0;40.6989 - -89.8258 0;39.2219 - -95.2461 0);我= 1:3雷达=克隆(arsr4);雷达。SensorIndex =我;平台(场景,“位置”radarsitesLLA(我,:)“签名”rcsSignature (“模式”,-50),“传感器”,{雷达});结束

你使用adsbReceiver模型ads - b消息的接收。一个ads - b消息包含位置测量飞机的GPS仪器。消息通常是编码和广播在1090 MHz通道附近的ads - b接收器拾取。你定义一个接待每个监视站200公里的范围。在这个例子中你认为监视站有完美的互相之间的沟通。因此,中央接收器挑选播放ads - b的信息范围内的至少一个站。

%定义中央adsbReceiveradsbRx = adsbReceiver (“ReceiverIndex”2);adsbRange = 2 e5;

想象这个场景

您使用trackingGlobeViewer显示平台、轨迹、检测和追踪地球上。

观众= trackingGlobeViewer (“技术”,“streets-dark”,“TrackLabelScale”,1.3,“TrackHistoryDepth”,4000,“CoverageMode”,“报道”);%显示雷达站点plotPlatform(观众,scene.Platforms(2:结束);%显示雷达覆盖covcon = coverageConfig(现场);covcon plotCoverage(查看器,“ECEF”,“α”,0.1);%显示飞行路线plotTrajectory(观众、flightRoute);

监视雷达天线盲目锥,有时被称为“沉默的锥”。它的体积空间,无法监视雷达的正上方,由于天线扫描的局限性。重叠网络保险的雷达是一种常见的缓解策略对于这个盲目的锥形区域。重叠的策略,然而,仍然可以没有完全覆盖的区域网络。在这个例子中,最南端的雷达锥的沉默(上图中的橙色所示)只是部分覆盖的网络中相邻的雷达。这将创建一个盲点,飞机将不会被任何雷达。

定义一个中央雷达追踪和跟踪熔化炉。

通常,一个航线维护跟踪监测区域内所有对象并将跟踪信息传递到下一个航线的对象飞到一个新的区域。在本例中,您定义一个集中的所有雷达的跟踪。你使用trackerGNN对象融合来自多个雷达的飞机的雷达探测。

radarGNN = trackerGNN (“TrackerIndex”,1“MaxNumTracks”,50岁,“FilterInitializationFcn”@initfilter,“ConfirmationThreshold”[3 - 5],“DeletionThreshold”,5 [5],“AssignmentThreshold”2000年[250]);

你也融合雷达跟踪与ads - b从ads - b获得跟踪接收机。要做到这一点,您配置一个中央trackFuser对象。你设置ConfirmationThresholdDeletionThreshold占更新率差异ads - b接收机速度1赫兹,和雷达跟踪速度1/12 Hz。允许至少两个雷达跟踪分配给一个中央,至少达到必须的数量 2 × 12

熔化炉= trackFuser (“FuserIndex”3,“MaxNumSources”2,“AssignmentThreshold”(250 500),“StateFusion”,“十字路口”,“StateFusionParameters”,“跟踪”,“ConfirmationThreshold”(2 3 * 12),“DeletionThreshold”4 [4]* 12);

使用雷达和ads - b轨道飞行

在本节中,您模拟场景和雷达追踪,追踪熔化炉,ads - b应答器和接收器。

%声明一些变量detBuffer = {};radarTrackLog = {};fusedTrackLog = {};adsbTrackLog = {};图像= {};snapTimes = (84564、1128、2083);%跟踪标签和颜色adsblabel =“ads - b”;radarlabel =“雷达”;fusedlabel =字符串(sprintf (“% s \ n”,”“,“融合”));adsbclr = (183 70 255) / 255;radarclr = (255 255) / 255;fusedclr = [41 255 105] / 255;(场景)= scene.SimulationTime;时间提前%更新全球飞机的位置plotPlatform(观众、飞机、“TrajectoryMode”,“没有”);%生成合成雷达探测和情节[引爆器,配置]=检测(现场);依据= postProcessDetection(依据);detBuffer = [detBuffer;依据);% #好< AGROW >detBuffer plotDetection(查看器,“ECEF”);%的踪迹adsbTracks = objectTrack.empty;radarTracks = objectTrack.empty;fusedTracks = objectTrack.empty;%生成ads - b消息truePose =姿势(飞机,“真正的”,“CoordinateSystem”,“大地”);adsbMessage = adsbTx (truePose。位置,truePose.Velocity);%消息可以收到每个监视站的范围内如果isWithinRange (radarsitesLLA truePose。位置,adsbRange) adsbTracks = adsbRx (adsbMessage、时间);结束%更新雷达跟踪扫描结束如果([configs.IsValidTime]) & & (~ isempty (detBuffer) | | isLocked (radarGNN)) radarTracks = radarGNN (detBuffer、时间);detBuffer = {};结束%融合跟踪如果isLocked(熔化炉)| | ~ isempty ([adsbTracks; radarTracks]) fusedTracks =熔化炉([adsbTracks; radarTracks]、时间);结束%情节追踪一次雷达扫描如果所有([configs.IsValidTime])标签= [repmat (adsblabel 1元素个数(adsbTracks)),repmat (radarlabel 1元素个数(radarTracks)),repmat (fusedlabel 1元素个数(fusedTracks)));颜色= [repmat (adsbclr元素个数(adsbTracks), 1);repmat (radarclr元素个数(radarTracks), 1);repmat (fusedclr元素个数(fusedTracks), 1)];plotTrack(观众[adsbTracks;radarTracks;fusedTracks),“ECEF”,“LabelStyle”,“自定义”,“CustomLabel”、标签“颜色”、颜色、“线宽”3);结束%记录估计飞机数据指标fusedTrackLog = (fusedTrackLog, {fusedTracks});% #好< AGROW >radarTrackLog = (radarTrackLog, {radarTracks});% #好< AGROW >adsbTrackLog = (adsbTrackLog, {adsbTracks});% #好< AGROW >%移动相机和拍照图像= moveCamera(观众、飞机、时间、snapTimes、图片);结束
图imshow(图片{1});

初的场景中,飞机远离最南端的监视站和没有ads - b的信息传播。因此,飞机只跟踪雷达。注意ARSR检测相对不准确的高度,这是普遍接受的是空中交通控制器单独飞机水平而不是垂直。最准确的检测是由雷达站点位于长范围。这些检测仍然相关。在图中,白线代表真正的轨迹和黄线代表轨迹估计的雷达跟踪。第一回合的飞行距离任何雷达和相应的检测有很高的测量噪声。此外,匀速运动模型没有很好的模型运动在最初的航班起飞后。雷达跟踪传递给输出融合跟踪的熔化炉,橙色,密切关注雷达跟踪。融合跟踪不同于雷达跟踪因为fuser添加自己的过程噪声到跟踪状态。

图像图imshow ({2});

在上面的快照,飞机在ads - b通信范围和建立新的ads - b跟踪。fuser处理这个新的跟踪和改进的融合跟踪的准确性。

{3}图imshow(图像);

在上面的快照,飞机进入锥的沉默。雷达跟踪删除几个更新没有任何新检测后的跟踪。此时fuser只依赖ads - b跟踪评估飞机的位置。

{4}图imshow(图像);

当飞机进入第二和第三所覆盖的区域监视雷达,建立了新的雷达跟踪。检测融合两个雷达站的雷达追踪和跟踪熔化炉引线ads - b的新雷达跟踪跟踪。

分析结果

你比较记录跟踪雷达和ads - b的数据。真正的位置和速度可从geoTrajectory。你使用OSPA指标比较的质量跟踪从雷达,ads - b,从雷达融合ads - b。您使用的默认设置trackOSPAMetric对象比较需要雇(归一化估计误差的平方)跟踪位置和检测任务。

ospa = trackOSPAMetric;radarospa = 0(装天花板(元素个数(radarTrackLog) / 12), 1);%计算雷达追踪OSPA我= 1:12:元素个数(radarTrackLog)跟踪= radarTrackLog {};(真理。位置,~,真理。速度]= lookupPose (flightRoute,张,“ECEF”);radarospa (i) = ospa(痕迹,真理);结束%计算ads - b OSPAadsbospa = 0(元素个数(adsbTrackLog), 1);重置(ospa);i = 1:元素个数(adsbTrackLog)跟踪= adsbTrackLog {};(真理。位置,~,真理。速度]= lookupPose (flightRoute,张,“ECEF”);adsbospa (i) = ospa(痕迹,真理);结束%计算融合OSPAfusedospa = 0(元素个数(fusedTrackLog), 1);重置(ospa);i = 1:元素个数(fusedTrackLog)跟踪= fusedTrackLog {};(真理。位置,~,真理。速度]= lookupPose (flightRoute,张,“ECEF”);fusedospa (i) = ospa(痕迹,真理);结束
%绘制OSPA图保存情节(0:12:(元素个数(radarTrackLog) 1)) / 60, radarospa(1:12:结束),“颜色”,radarclr);情节((0:(元素个数(adsbTrackLog) 1)) / 60, adsbospa,“颜色”adsbclr,“线宽”2);情节((0:(元素个数(fusedTrackLog) 1)) / 60, fusedospa,“颜色”,fusedclr);l =传奇(“雷达”,“ads - b”,“雷达+ ads - b”);l颜色= (0.1 0.1 0.1);l输入TextColor = (1 1 1);包含(的时间(分钟))ylabel (“OSPA”甘氨胆酸)ax =;网格;盒子;斧子。颜色= (0.1 0.1 0.1);斧子。GridColor = (1 1 1);

OSPA度量显示改进获得融合ads - b与雷达追踪痕迹。从仿真时间19分钟到25分钟,雷达只有OSPA高因为飞机飞过雷达网络的盲点。ads - b在这一领域的可用性大大增加了跟踪性能,熔融OSPA表示的。此外,开始的指标显示了两个峰值,这可以归因于常速过滤在最初的表现不佳的ads - b的轨迹和不可用。在ads - b时间40分钟,只有OSPA退化损失的ads - b在该地区的可用性。后一部分的模拟、雷达和ads - b都是可用的。雷达只有OSPA总体比ads - b。这是由于雷达垂直精度相比差GPS。

总结

在本例中您已经了解了如何创建一个地球场景和使用大地坐标系定义轨迹。您还了解了如何合成检测模型航路监视雷达和生成。你喂这些检测多目标跟踪和估计位置,速度,和飞机的航向。提高跟踪性能通过添加和ads - b信息的融合。你模仿ads - b报告和综合跟踪方案。在这个例子中,只有一个航班被建模。ads - b的好处可以进一步体现建模时多个航班在场景安全的分离距离必须维护空中交通管制员。

金宝app支持功能

initfilter定义使用的扩展卡尔曼滤波器trackerGNN。飞机运动近似匀速运动模型。因此,使用一个相对较小的过程噪声对动态分配更多的重量比预计的测量非常嘈杂的范围。

函数过滤器= initfilter(检测)过滤器= initcvekf(检测);过滤器。StateCovariance = 100 * filter.StateCovariance;% initcvekf使用测量噪声为默认过滤器。ProcessNoise = 0.1;结束

postProcessDetection后处理的检测两个操作:

  1. 它消除了雷达探测,地球表面以下,因为这些不能由一个真正的雷达。

  2. 它增加了检测噪声水平径向速度测量组件的正常组成部分。

函数detsout = postProcessDetection (detsin) n =元素个数(detsin);保持= 0 (1,n,“逻辑”);i = 1: n量= detsin{我}.Measurement (1:3)”;lla = fusion.internal.frames.ecef2lla(量);如果lla (3) > 0 (i) = true;其他的保持(i) = false;结束结束detsout = detsin(保持);velCovTransversal = 100 ^ 2;i = 1:元素个数(detsout) velCov = detsout{我}.MeasurementNoise (4:6 - 6);[P、D] = eig (velCov);位于印第安纳州[m] = min(诊断接头(D));D = velCovTransversal *眼(3);D(印第安纳州)= m;correctedCov = P * D * P ';detsout{我}.MeasurementNoise (4:6 - 4:6) = correctedCov;结束结束

isWithinRange返回true,如果飞机位置是ads - b接收范围内的监视站。

函数国旗= isWithinRange (stationsLLA、pos、范围)cartDistance = fusion.internal.frames.lla2ecef (stationsLLA)——fusion.internal.frames.lla2ecef (pos);国旗=任何(vecnorm (cartDistance 2 2) <范围);结束

moveCamera指定新相机位置跟随飞机并采取快照。

函数图像= moveCamera(观众、飞机、时间、snapTimes、图片)如果国防部(时间,12)= = 0 pos = airplane.Position;如果时间= = 0坎波斯(观众、pos (1)、pos (2), 2 e4);elseif时间= = 1100%缩小坎波斯(观众、pos (1), pos (2), 1 e5);elseif时间= = 2000%放大坎波斯(观众、pos (1), pos (2), 2.6 e4);其他的%保持以前的身高,但是跟随飞机坎波斯(观众、pos (1), pos (2));结束结束%的快照如果任何(时间= = snapTimes) drawnow img =快照(观众);图像=(图像、{img});结束结束

参考

[1]远§91.227自动依赖监控广播”(ads - b)设备性能要求