主要内容

跟踪场景和模拟传感器检测简介

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

  • 如何模拟目标的运动trackingScenario

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

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

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

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

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

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

rng (2020);%用于可重复的结果。scene = trackingScenario(“UpdateRate”, 2.5)
scene = trackingScenario with properties: isearthcentric: 0 UpdateRate: 2.5000 SimulationTime: 0 StopTime: Inf SimulationStatus:未启动平台:{}

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

目标=平台(场景);

你可以检查目标现在已经在场景中定义了,场景

现场。平台{1}
ans =平台与属性:PlatformID: 1 ClassID: 0位置:[0 0 0]方向:[0 0 0]尺寸:[1x1 struct] Mesh: [1x1 extendedObjectMesh]弹道:[1x1 kinematicTrajectory] PoseEstimator: [1x1 insSensor]发射器:{}传感器:{}签名:{[1x1 rcsSignature] [1x1 irSignature] [1x1 tsSignature]}

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

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

H = 3;% km单位航路点= 1e3*[1 10 -1 -10 1 10 10 10 12 10 -10 -12 -10 0 h h h h h h h h h h h h h h h]';Course = [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);目标。轨迹=目标轨迹;

可视化并运行跟踪场景

要在场景运行时可视化该场景,可以创建theaterPlot然后加上trajectoryPlotter和一个platformPlotter将轨迹和目标分别可视化。

tp = theaterPlot(“XLimits”, -12年12 * 1 e3,“Ylimits”, -12年12 * 1 e3,“ZLimits”, (1) e4 1 e4));trajPlotter =轨迹plotter (tp,“DisplayName的”“轨迹”);plot (trajPlotter,{waypoints}) targetPlotter = platformPlotter(tp,“DisplayName的”“目标”);

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

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

图中包含一个轴对象。axis对象包含2个line类型的对象。这些对象代表轨迹、目标。

使用雷达传感器生成探测

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

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

要向场景中添加传感器,首先要创建一个平台传感器安装在其上。的平台对象还提供了targetPoses函数,你可以使用它来获得目标相对于平台的姿态。

创建一个塔和一个雷达

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

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

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

towerPlotter = platformPlotter(tp,“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 00 -15] MountingAngles: [0 0000] FieldOfView: [4 45] RangeLimits: [0 100000] DetectionProbability: 0.9000 FalseAlarmRate: 1.0000 -07 ReferenceRange: 100000 TargetReportFormat: 'Clustered detectors '显示所有属性

将传感器安装在塔式平台上。

塔。传感器= radar1;

生成并模拟检测

方法可以可视化雷达覆盖区域及其扫描波束coveragePlottercoverageConfig,plotCoverage功能。创建一个detectionPlotter可视化雷达产生的探测。

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

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

重启(现场);advance(scene) && ishhandle (tp.Parent)视图(70,40);注释此显示鸟瞰图;time = scene.SimulationTime;获得目标姿态并绘制它。poseTarget = pose(目标,“真正的”);plotPlatform (targetPlotter poseTarget.Position);获得在塔坐标框架中表示的目标姿态。poseInTower = targetpositions(塔);使用雷达目标获得雷达探测。[detections, numDets] = radar1(poseInTower,time);提取检测位置并转换到场景帧。detPos = 0 (numDets,3);i=1:numDets detPos(i,:) =塔。轨迹。位置+检测{i}.测量';结束%情节检测。如果~ isempty (detPos) plotDetection (detPlotter detPos);结束绘制雷达波束和覆盖区域。plotCoverage (radar1Plotter coverageConfig(场景));结束

图中包含一个轴对象。axis对象包含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(tp,“DisplayName的”雷达2波束“颜色”‘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,:) =塔。轨迹。位置+塔探测{i}.测量';结束%情节检测。如果numDets plotDetection (detPlotter detPos);结束结束

图中包含一个轴对象。axis对象包含line、patch类型的6个对象。这些物体代表轨迹、目标、塔、雷达1波束、探测、雷达2波束。

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

方法还可以从跟踪场景中的所有传感器生成检测检测的函数trackingScenario

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

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

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

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

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

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

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

隐藏已发布的图形。而是显示一个预先录制的动画。f = tp.Parent.Parent;如果数字(dbstack) > 5 f.Visible =“上”;f.Visible =“关闭”结束重启(现场);advance(scene) && 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));生成检测。scenarioDetections =检测(场景);numDets =数字(场景检测);提取场景帧中的检测位置。detPos = NaN(numDets,3);i=1:numDets detPos(i,:) = scenarioDetections{i}.Measurement';结束%情节检测。如果numDets plotDetection (detPlotter detPos);结束结束

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

总结

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