主要内容

空中交通管制

这个例子展示了如何生成一个空中交通管制的情况下,模拟雷达探测从机场监视雷达(ASR)和配置全球最近邻(GNN)跟踪器跟踪模拟使用雷达探测目标。这使您能够评价不同的目标场景,雷达的需求,和跟踪配置不需要昂贵的飞机或设备的访问。这个例子涵盖整个合成数据工作流。

空中交通管制情况

模拟一个空中交通管制(ATC)塔和移动目标的场景平台。模拟场景的运动平台的管理trackingScenario

创建一个trackingScenario和ATC塔添加到场景中。

%创建跟踪场景场景= trackingScenario;%添加一个静止的ATC塔平台模型塔=平台(场景);

机场监视雷达

添加一个机场监视雷达(ASR) ATC塔。一个典型的ATC塔雷达安装离地面15米。该雷达扫描机械在固定利率提供方位360度覆盖附近的ATC塔。常见的规格的ASR列出:

  • 灵敏度:0 dBsm @ 111公里

  • 机械扫描:方位

  • 机械扫描率:12.5 RPM

  • 电子扫描:没有

  • 视野:1.4度方位,10度仰角

  • 方位分辨率:1.4度

  • 距离分辨率:135米

模型上面的ASR的规范使用fusionRadarSensor

rpm = 12.5;fov = (1.4; 10);scanrate = rpm * 360/60;%度/秒updaterate = scanrate /视场(1);%赫兹雷达= fusionRadarSensor (1,“旋转”,“UpdateRate”updaterate,%赫兹“FieldOfView”fov,% (az; el)度“MaxAzimuthScanRate”scanrate,%度/秒“AzimuthResolution”fov (1),%度“ReferenceRange”111年e3,% m“ReferenceRCS”0,% dBsm“RangeResolution”,135,% m“之内”,真的,“DetectionCoordinates”,“场景”);%安装雷达塔的顶部雷达。MountingLocation = [0 0 -15);塔。传感器=雷达;

倾斜的雷达,调查地区开始在2度在地平线上。要做到这一点,使海拔和设置机械扫描的极限跨度的雷达仰角的视野开始在2度在地平线上。因为trackingScenario使用一个North-East-Down (NED)坐标系,负海拔对应点在地平线上。

%启用仰角扫描雷达。HasElevation = true;%设置机械仰角扫描开始在2度在地平线上elFov = fov (2);倾斜= 2;%度雷达。MechanicalElevationLimits =[视场(2)0]倾斜;%度

设置高程的视野要比由扫描张成的高度限制。这样可以防止在高度和倾斜光栅扫描雷达仰角扫描点的限制。

radar.FieldOfView (2) = elFov + 1 e - 3;

fusionRadarSensor由于大气折射模型范围和高程偏差。这些偏见在低海拔地区变得更加明显,目标长时间范围。因为折射率变化(减少)与高度,沿着弯曲的雷达信号传播路径。这导致雷达观测目标的海拔高于他们的真实高度和范围超出了他们的视线范围内。

添加三个航班在ATC控制部门。ATC从远程客机的方法,另一个离开,第三是切向飞往塔。模型飞机的运动超过60秒的时间间隔。

trackingScenario使用一个North-East-Down (NED)坐标系。当定义下面的路径点的航班,z坐标对应,所以离地面高度设置为负值。

%的场景sceneDuration = 60;% s%的入站客机ht = 3 e3;社民党= 900 * 1 e3/3600;% m / swp = [5 e3 -40年e3 ht; 5 e3 -40年e3 +社民党* sceneDuration ht);traj = waypointTrajectory (“锚点”wp,“TimeOfArrival”[0 sceneDuration]);平台(场景中,“轨迹”,traj);%出站客机ht = 4 e3;社民党= 700 * 1 e3/3600;% m / swp = [20 e3 10 e3 ht; 20 e3 +社民党* sceneDuration 10 e3 ht);traj = waypointTrajectory (“锚点”wp,“TimeOfArrival”[0 sceneDuration]);平台(场景中,“轨迹”,traj);%切线客机ht = 4 e3;社民党= 300 * 1 e3/3600;% m / swp =[-20年e3社民党* sceneDuration / 2 ht; -20年e3社民党2 * sceneDuration / ht);traj = waypointTrajectory (“锚点”wp,“TimeOfArrival”[0 sceneDuration]);平台(场景中,“轨迹”,traj);

GNN追踪

创建一个trackerGNN形成的跟踪雷达检测产生的三个航班。更新的跟踪检测完成后生成一个完整的360度扫描方位。

跟踪器使用initFilter金宝app支持函数来初始化一个恒定的速度扩展卡尔曼滤波为每个新轨道。initFilter修改返回的过滤器initcvekf匹配目标速度和跟踪更新间隔。

追踪= trackerGNN (“作业”,“拍卖”,“AssignmentThreshold”,50岁,“FilterInitializationFcn”,@initFilter);

在地图上可视化

你使用trackingGlobeViewer可视化的地图显示的结果。你当地的起源North-East-Down (NED)坐标系统塔所使用的雷达和跟踪在波士顿洛根机场的位置。原点位于42.36306和-71.00639经度和纬度50米以上的海平面。

起源= (42.366978,-71.022362,50);mapview = trackingGlobeViewer (“ReferenceLocation”起源,“技术”,“streets-dark”);坎波斯(mapview起源+ (0 0 1 e5));drawnow;plotScenario (mapview场景);快照(mapview);

模拟和跟踪飞机

下面的循环发展平台的位置,直到结束的场景。每一步的场景中,雷达探测来自目标的视野。更新追踪这些探测雷达后完成了一个360度扫描方位。

%设置模拟雷达的发展更新的速度场景。UpdateRate = radar.UpdateRate;%创建一个缓冲区来收集的全扫描雷达的探测scanBuffer = {};%初始化跟踪数组跟踪= objectTrack.empty;%保存每个扫描可视化快照allsnaps = {};scanCount = 0;%设置随机种子可重复的结果s =提高;rng (2020)推进(场景)%更新飞机位置plotPlatform (mapview场景。平台([2 3 4]),“TrajectoryMode”,“全部”);%生成检测目标在雷达领域当前的视图中[引爆器,配置]=检测(场景);scanBuffer = (scanBuffer;依据);% #好< AGROW >%绘制梁和检测plotCoverage (mapview coverageConfig(场景)plotDetection (mapview scanBuffer);%更新追踪360度扫描完成时simTime = scenario.SimulationTime;isScanDone = config.IsScanDone;如果isScanDone scanCount = scanCount + 1;%更新追踪[痕迹,~,~,信息]=追踪(scanBuffer simTime);%清晰扫描缓冲区下扫描scanBuffer = {};elseifisLocked(跟踪)%预测跟踪当前仿真时间跟踪= predictTracksToTime(追踪,“确认”,simTime);结束%更新地图和快照allsnaps = snapPlotTrack (mapview、跟踪、isScanDone scanCount, allsnaps);结束allsnaps = [allsnaps,{快照(mapview)});

显示第一个快照完成雷达的第二次扫描。

图imshow (allsnaps {1});

前面的图显示了场景的雷达的第二个360度扫描。雷达信号检测,显示为淡蓝色小点,为每个模拟飞机的存在。在这一点上,追踪已经由一个完整的雷达扫描更新。在内部,跟踪初始化跟踪每个航班的。这些痕迹会显示更新后这扫描后,当轨道提升为确认,会议追踪确认要求的2支安打的3更新。

接下来的两个快照显示跟踪出站客机。

图imshow (allsnaps {2});

图imshow (allsnaps {3});

之前的数据显示,追踪照片之前和之后的跟踪雷达的第二次扫描后更新。图中的检测前跟踪更新用于更新和确认初始化跟踪以前的扫描检测的客机。下一个图显示确认跟踪的位置和速度。跟踪的位置的不确定性估计显示为黄色的椭圆。只有两个检测后,跟踪器建立了一个准确的估计出站飞机的位置和速度。飞机的旅行真正的高度是4公里,北700公里/小时。

图imshow (allsnaps {4});

图imshow (allsnaps {5});

出站客机的轨道滑行的状态结束的第三个扫描和上图所示客机连同最近的检测。注意跟踪的不确定性已经更新以来在前面的图中。跟踪已更新后的检测下一个图所示。你注意到轨道位置的不确定性降低后更新。更新之间的跟踪不确定性的增加和减少,不管它是更新一个新的测量。你还观察到,第三次更新之后,跟踪躺在飞机的真实位置。

图imshow (allsnaps {6});

最后一个图显示所有三个航班的状态跟踪结束时的场景。有一个跟踪的三个航班。相同的曲目数量分配给每个人的整个时间场景的客机,表明这些歌曲是在场景中删除。估计跟踪匹配真实飞机的位置和速度。

truthTrackTable = tabulateData(场景中,跟踪)% #好< NOPTS >
truthTrackTable =3×4表TrackID高度方向速度真的估计真的估计正确估计_________ _________________ _________________ _________________ T1 4000 4051 90 90 700 710”T2“4000 4070 0 359 300 300“T3 0 359 900 908 3000 3057

3 d可视化跟踪估计海拔的为了更好地了解。

%重新定位和东方相机显示地图的三维特性camPosition =起源+ (0.367,0.495,1.5 e4);camOrientation = (235、-17、0);%西南,17度地平线以下坎波斯(mapview camPosition);camorient (mapview camOrientation);drawnow

下图显示了一个3 d场景的地图。你可以看到模拟飞机在白色三角形轨迹描绘成白线。雷达波束显示为蓝色圆锥与蓝点代表雷达探测。轨道所示黄色,橙色,蓝色和他们的信息列在各自的颜色。由于三维显示的性质,一些标记可能隐藏在他人。

您可以使用以下控件在地图上得到不同的场景视图:

  • 锅的地图,你左点击鼠标并拖动地图。

  • 旋转地图,按住ctrl键,你左点击鼠标并拖动地图。

  • 缩放地图,您可以使用鼠标滚轮。

快照(mapview);

总结

这个例子展示了如何生成一个空中交通管制的情况下,模拟雷达探测从机场监视雷达(ASR)和配置全球最近邻(GNN)跟踪器跟踪模拟使用雷达探测目标。在这个示例中,您了解了如何基于跟踪的历史逻辑促进轨道。您还了解了如何跟踪不确定性增长轨道滑行时,跟踪更新时减少了一个新的检测。

金宝app支持功能

initFilter

这个函数修改功能initcvekf处理速度更高的目标,如飞机在ATC的场景。

函数过滤器= initFilter(检测)过滤器= initcvekf(检测);classToUse =类(filter.StateCovariance);%客机可以移动速度900公里/小时左右。速度是%初始化为0,但将需要能够快速适应%的飞机在这些速度移动。使用900 km / h 1标准差%初始化跟踪速度的噪音。社民党= 900 * 1 e3/3600;% m / svelCov =投(社民党^ 2,classToUse);x = filter.StateCovariance;浸(2,2)= velCov;浸(4,4)= velCov;过滤器。StateCovariance =浸;%设置过滤的过程噪声匹配滤波器的更新率scaleAccelHorz =投(1、classToUse);scaleAccelVert =投(1、classToUse);Q = blkdiag (scaleAccelHorz ^ 2, scaleAccelHorz ^ 2, scaleAccelVert ^ 2);过滤器。ProcessNoise =问;结束

tabulateData

这个函数返回一个表比较地面真理和跟踪

函数truthTrackTable = tabulateData(场景中,跟踪)%处理真实数据平台= scenario.Platforms(2:结束);% 1是雷达平台numPlats =元素个数(平台);trueAlt = 0 (numPlats, 1);trueSpd = 0 (numPlats, 1);trueHea = 0 (numPlats, 1);i = 1: numPlats traj ={我}.Trajectory平台;路点= traj.Waypoints;* = traj.TimeOfArrival;trueAlt (i) =锚点(结束,3);trueVel =(锚点(最终,:)-锚点(end-1:)) /(时间(结束)两度(end-1));trueSpd (i) =规范(trueVel) * 3600/1000;%转换为km / htrueHea (i) = atan2d (trueVel (1) trueVel (2));结束trueHea =国防部(trueHea, 360);%将跟踪与目标丙氨酸= [tracks.ObjectAttributes];tgtInds = [atts.TargetIndex];%过程跟踪假设一个恒定的速度模型numTrks =元素个数(跟踪);estAlt = 0 (numTrks, 1);estSpd = 0 (numTrks, 1);estHea = 0 (numTrks, 1);truthTrack = 0 (numTrks 7);i = 1: numTrks estAlt (i) =圆(跟踪(i) .State (5));estSpd (i) =圆(规范(跟踪(i) .State (2:2:6)) * 3600/1000);%转换为km / h;estHea (i) =圆(atan2d(跟踪(i) .State(2),追踪(i) .State (4)));estHea (i) =国防部(estHea(我),360);platID = tgtInds(我);platInd = platID - 1;truthTrack(我:)= ((i)。TrackID trueAlt (platInd), estAlt(我),trueHea (platInd) estHea(我),trueSpd (platInd) estSpd (i)];结束%组织一个表中的数据名称= {“TrackID”,“TrueAlt”,“EstimatedAlt”,“TrueHea”,“EstimatedHea”,“TrueSpd”,“EstimatedSpd”};truthTrackTable = array2table (truthTrack,“VariableNames”、名称);truthTrackTable = mergevars (truthTrackTable(者),“NewVariableName”,“速度”,“MergeAsTable”,真正的);truthTrackTable。(6) . properties。VariableNames = {“真正的”,“估计”};truthTrackTable = mergevars (truthTrackTable (4:5),“NewVariableName”,“标题”,“MergeAsTable”,真正的);truthTrackTable。(4) . properties。VariableNames = {“真正的”,“估计”};truthTrackTable = mergevars (truthTrackTable (2:3),“NewVariableName”,“高度”,“MergeAsTable”,真正的);truthTrackTable。(2) . properties。VariableNames = {“真正的”,“估计”};truthTrackTable。TrackID =“T”+字符串(truthTrackTable.TrackID);结束

snapPlotTrack

这个函数处理移动相机,把相关的快照和更新跟踪视觉效果。

函数allsnaps = snapPlotTrack (mapview、跟踪、isScanDone scanCount, allsnaps)%保存快照在前4扫描如果isScanDone & &任何(scanCount = = 3 [2]) newsnap =快照(mapview);allsnaps = (allsnaps, {newsnap});%移动相机如果scanCount = = 2%显示出站客机坎波斯(mapview 7 e3 [42.5650 - -70.8990]);drawnow newsnap =快照(mapview);allsnaps = (allsnaps, {newsnap});结束结束%更新显示与当前跟踪的位置plotTrack (mapview,跟踪,“LabelStyle”,ATC的);如果isScanDone & &任何(scanCount = = 3 [2])%快照的跟踪确认drawnow newsnap =快照(mapview);allsnaps = (allsnaps, {newsnap});%重置相机视图来完整的场景如果起源scanCount = = 3 = (42.366978, -71.022362, 50);坎波斯(mapview起源+ (0 0 1 e5));drawnow结束结束结束