主要内容

跟踪场景和模拟传感器检测导论

本示例介绍了如何在模拟目标运动和传感器检测的跟踪场景中生成合成雷达检测。具体来说,这个例子表明:

  • 如何模拟目标的运动trackingScenario

  • 如何使用传感器对象生成合成传感器检测。您使用三种不同的方法来生成检测——从特定传感器生成检测,为安装在给定平台上的所有传感器生成检测,以及在跟踪场景中生成所有检测。

  • 如何使用我们提供的各种绘图仪theaterPlot可视化场景、传感器覆盖范围和检测。

与传感器记录相比,使用场景生成和传感器模拟的主要好处是能够创建罕见和潜在危险的场景,并使用这些场景测试传感器融合算法。这些雷达探测可用于开发各种跟踪算法,例如trackerGNNtrackerJPDA

模拟一个移动对象及其属性

创建一个带有移动目标的跟踪场景

生成模拟雷达探测的第一步是创建跟踪场景,其中模拟一个或多个移动目标的运动。要设置跟踪场景,首先创建一个trackingScenario对象,它作为以后添加的所有移动目标的模拟环境。

rng (2020);%用于重复结果。scene = trackingScenario()“UpdateRate”, 2.5)
scene = trackingScenario with properties: isearthcentric: 0 UpdateRate: 2.5000 SimulationTime: 0 StopTime: Inf SimulationStatus: NotStarted Platforms: {} SurfaceManager: [1x1 fusion.scenario.SurfaceManager]

默认情况下,跟踪场景从SimulationTimeStopTime。步长由UpdateRate在赫兹。基于2.5 Hz的更新速率,步长为场景是0.4秒。目前,没有目标(使用平台)。当StopTime定义为,该场景将一直运行,直到场景中所有平台的运动结束。在场景中定义平台目标

目标=平台(场景);

你可以检查目标现在在场景中被定义,场景

现场。平台{1}
ans =具有属性的平台:PlatformID: 1 ClassID: 0位置:[0 0 0]方向:[0 0 0]尺寸:[1x1 struct]网格:[1x1 extendedObjectMesh]轨迹:[1x1 kinematicTrajectory] PoseEstimator: [1x1 insSensor]发射器:{}传感器:{}签名:{[1x1 rcsSignature] [1x1 irSignature] [1x1 tsSignature]}

默认情况下,将创建无量纲点对象,但您可以指定对象的长度、宽度和高度范围。还有一个小问题kinematicTrajectory与目标相关联。要为目标创建轨迹,可以使用waypointTrajectory对象。您可以通过指定目标的一系列航路点和相应的访问时间来设置航路点轨迹。您还可以指定其他轨迹属性,例如速度和航向。看到waypointTrajectory了解更多详情。

下面的代码为直腿为20公里、转弯半径为2公里的目标定义了一条跑道路径。轨迹的高度为3公里,在本场景中使用的默认东北向下坐标框架中定义为-3公里。

H = 3;%单位:千米路点= 1 e3 * [1 1 0 1 1 0 1 1 0 10 12 10 -10 -12 -10 0 h h h h h h h h) ';航向= [90 90 180 270 270 0 90 90]';度数单位%timeOfArrival = 60*[0 1.5 1.8 2.1 5.1 5.4 5.7 7.2]';targetTrajectory = waypointTrajectory(“锚点”锚点,“TimeOfArrival”, timeOfArrival);目标。弹道= target弹道;

可视化并运行跟踪场景

要可视化运行的场景,请创建一个theaterPlot然后加上trajectoryPlotter和一个platformPlotter分别把轨迹和目标可视化。

tp = theaterPlot(“XLimits”, -12年12 * 1 e3,“Ylimits”, -12年12 * 1 e3,“ZLimits”, (1) e4 1 e4));轨迹绘图仪=轨迹绘图仪“DisplayName的”“轨迹”);plotplotter (trackplotter,{waypoints}) targetPlotter = platformPlotter(p,“DisplayName的”“目标”);

运行跟踪场景并在鸟瞰视图中可视化目标运动。

advance(场景)&& ishhandle (tp.Parent) targetPose = pose(目标)“真正的”);plotPlatform (targetPlotter targetPose.Position);结束

图包含一个轴对象。具有xlabel X (m), ylabel Y (m)的axes对象包含2个类型为line的对象。一条或多条线仅使用标记显示其值。这些对象表示轨迹、目标。

使用雷达传感器生成探测

在跟踪场景中,您可以用三种不同的方法生成目标检测:

建立雷达传感器模型并模拟其探测

要向场景中添加传感器,首先创建一个平台传感器所在的位置。的平台对象还提供了targetPoses函数,可用于获取目标相对于平台的姿态。

创建一个塔和一个雷达

接下来,创建一个长度、宽度和高度分别为5米、5米和30米的塔平台。将塔放置在目标路径的左侧。设置塔的z坐标为- 15m,使塔底部在场景框架的水平面上。

塔=平台(场景);塔。尺寸= struct (“长度”5,“宽度”5,“高度”30岁的“OriginOffset”, [0 0 0]);tower.Trajectory.Position = [-1e4 0 15];

定义一个平台绘图仪来显示塔。

towerPlotter = platformPlotter“DisplayName的”“塔”“标记”“o”“MarkerFaceColor”,[0 0 0]);plotPlatform (towerPlotter tower.Trajectory.Position、tower.Dimensions tower.Trajectory.Orientation);

使用单站模式的fusionRadarSensor实现单站扫描雷达传感器。默认情况下,传感器对象在其安装的平台的坐标框架内报告检测结果。方法更改输出坐标帧DetectionsCoordinates的属性fusionRadarSensor。可用的输出帧有“身体”(默认),“场景”传感器矩形的,“球形传感器”

radar1 = fusionRadarSensor(1,“UpdateRate”, 2.5,“MountingLocation”,[0 0 -15],“FieldOfView”(4, 45岁),“MechanicalAzimuthLimits”, 60 [-60],“MechanicalElevationLimits”[0 0],“HasElevation”,真的,“FalseAlarmRate”1 e)
radar1 = fusionRadarSensor with properties: SensorIndex: 1 UpdateRate: 2.5000 DetectionMode: 'Monostatic' ScanMode: 'Mechanical' InterferenceInputPort: 0 EmissionsInputPort: 0 MountingLocation: [0 0 -15] MountingAngles: [0 00] FieldOfView: [4 45] LookAngle: [0 0] RangeLimits: [0 100000] DetectionProbability: 0.9000 FalseAlarmRate: 1.0000e-07 ReferenceRange: 100000 TargetReportFormat: 'Clustered detection '显示所有属性

将传感器安装在塔台上。

塔。传感器= radar1;

生成和模拟检测

你可以可视化雷达覆盖区域和扫描波束使用coveragePlottercoverageConfig,plotCoverage功能。创建一个detectionPlotter将雷达探测结果可视化。

radar1Plotter = coveragePlotter“DisplayName的”“Radar1梁”“颜色”“b”);detPlotter = detectionPlotter(p;“DisplayName的”“检测”“标记”“o”“MarkerFaceColor”,[1 0 0]);

重新启动场景,生成检测并绘制检测图。您可以观察到几个错误的检测。

重启(现场);advance(scene) && ishhandle (tp.Parent)视图(70,40);注释这个以显示鸟瞰图;time = scene.SimulationTime;获得目标姿势并绘制它。poseTarget = pose(目标,“真正的”);plotPlatform (targetPlotter poseTarget.Position);获得用塔的坐标系表示的目标姿态。poseInTower = targetpose(塔);%通过该雷达对象获取雷达探测信息。[detection, numDets] = radar1(poseInTower,time);%提取检测位置并将其转换为场景框架。detPos = 0 (numDets,3);i=1:numDets detPos(i,:) = tower. trajectories . position + detections{i}.Measurement';结束%情节检测。如果~ isempty (detPos) plotDetection (detPlotter detPos);结束绘制雷达波束和覆盖区域。plotCoverage (radar1Plotter coverageConfig(场景));结束

图包含一个轴对象。xlabel X (m), ylabel Y (m)的轴对象包含5个类型为line, patch的对象。一条或多条线仅使用标记显示其值。这些对象表示轨迹,目标,塔,雷达1波束,探测。

为安装在平台上的所有传感器生成检测

方法为给定平台上的所有传感器生成检测检测函数。为了说明这种方法,您将第二个雷达传感器添加到塔平台。您还为第二个雷达传感器创建一个覆盖绘图仪。

radar2 = fusionRadarSensor(2,“旋转”“UpdateRate”, 2.5,“MountingLocation”,[0 0 -15],“FieldOfView”(4;45),“HasElevation”,真的,“FalseAlarmRate”1 e);塔。传感器{2}= radar2;radar2Plotter = coveragePlotter(p;“DisplayName的”“雷达波束”“颜色”‘g’);

重新启动场景,根据塔生成检测,并绘制检测图。如仿真所示,两台雷达都对目标产生探测。

重启(现场);advance(scene) && ishhandle (tp.Parent) time = scene. simulationtime;获得目标姿势并绘制它。poseTarget = pose(目标,“真正的”);plotPlatform (targetPlotter poseTarget.Position);%绘制传感器的覆盖范围。configs = coverageConfig(场景);plotCoverage (radar1Plotter款(1));plotCoverage (radar2Plotter配置(2));%生成检测结果。[towerDetections, numDets] = detect(塔,时间);%提取检测位置并将其转换为场景框架。detPos = NaN(numDets,3);i=1:numDets detPos(i,:) = tower.Trajectory.Position + towerDetections{i}.Measurement';结束%情节检测。如果numDets plotDetection (detPlotter detPos);结束结束

图包含一个轴对象。xlabel X (m), ylabel Y (m)的轴对象包含6个类型为line, patch的对象。一条或多条线仅使用标记显示其值。这些对象表示轨迹、目标、塔、雷达1波束、探测、雷达2波束。

生成一个场景中所有传感器的检测结果

,从跟踪场景中的所有传感器生成检测检测的函数trackingScenario

为了说明这种方法,您可以在场景中添加一个平面并定义它的航路点轨迹。飞机从西南向东北飞行,飞行高度为2.9公里。为飞机创建平台绘图仪。

平面=平台(场景);planeTrajectory = waypointTrajectory(“锚点”,1e3*[-10 -10 -2.9;[12 [12 -2.9],“TimeOfArrival”80年[0]);飞机。轨迹= planeTrajectory;planePlotter = platformPlotter“DisplayName的”“平面”“标记”' d '“MarkerEdgeColor”“k”);

在飞机上安装一个视野为50度的瞄准雷达。为雷达创建一个绘图仪。

radar3 = fusionRadarSensor(3,“没有扫描”“UpdateRate”, 2.5,“FieldOfView”(60, 20),“HasElevation”,真的,“FalseAlarmRate”1 e);飞机。传感器= radar3;radar3Plotter = coveragePlotter(p;“DisplayName的”“雷达波束”“颜色”“y”);

将三台雷达的报告框架均设置为场景框架。在将检测坐标设置为场景框架之前,需要开启惯性导航系统。

释放(radar1);radar1。HasINS = true;radar1。DetectionCoordinates =“场景”;释放(radar2);radar2。HasINS = true;radar2。DetectionCoordinates =“场景”;radar3。HasINS = true;radar3。DetectionCoordinates =“场景”;

重新启动并运行场景,生成场景中的所有检测,并绘制检测图。

隐藏已发布的图形并显示预先录制的动画。您可以通过设置f.Visible = 'on'来显示该图形。f = tp.Parent.Parent;f.Visible =“关闭”;重启(现场);advance(场景)&& ishhandle (tp.Parent)获得目标姿势并绘制它。poseTarget = pose(目标,“真正的”);plotPlatform (targetPlotter poseTarget.Position);获得平面姿态并绘制它。posePlane = pose(平面,“真正的”);plotPlatform (planePlotter posePlane.Position);%绘制传感器的覆盖范围。configs = coverageConfig(场景);plotCoverage (radar1Plotter款(1));plotCoverage (radar2Plotter配置(2));plotCoverage (radar3Plotter款(3));%生成检测结果。场景检测(场景);numDets = numel(场景检测);%提取场景框架中的检测位置。detPos = NaN(numDets,3);i=1:numDets detPos(i,:) = scenario detection {i}.Measurement';结束%情节检测。如果numDets plotDetection (detPlotter detPos);结束结束

从结果来看,在一段时间内,飞机上的雷达可以连续探测到目标。飞机上的雷达也产生了几次错误的探测。塔上的两个雷达能探测到飞机。

总结

这个示例向您展示了如何基于传感器、平台和整个场景以三种不同的方法创建跟踪场景、模拟目标运动和模拟雷达探测。它还向您展示了如何可视化目标轨迹,瞬时位置,雷达扫描波束和探测。

Baidu
map