主要内容

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

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

  • 如何用计算机模拟目标的运动trackingScenario

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

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

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

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

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

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

rng (2020);%以获得可重复的结果。场景=跟踪场景(“更新”,2.5)
scene = trackingScenario with properties: IsEarthCentered: 0 UpdateRate: 2.5000 SimulationTime: 0 StopTime: Inf SimulationStatus: NotStarted

默认情况下,跟踪场景从SimulationTimeStopTime.步长为UpdateRate在赫兹。基于2.5 Hz的更新速率,步长为场景目前,没有目标(用站台)在场景中定义。当StopTime被定义为Inf,直到场景中所有平台的运动结束。在名为的场景中定义平台目标

目标=平台(现场);

您可以检查目标现在已在场景中定义,场景

现场。平台{1}
ans=具有属性的平台:平台ID:1 ClassID:0位置:[0 0 0 0]方向:[0 0 0 0]维度:[1x1结构]网格:[1x1扩展对象网格]轨迹:[1x1运动学轨迹]位置刺激:[1x1 InSensor]发射器:{}传感器:{}特征:{[1x1 Rcsignature][1x1 irSignature 1x1 tsSignature]}

默认情况下,将创建一个无量纲点对象,但您可以指定对象的长度、宽度和高度范围。同时,一个微不足道的运动学与目标关联。要为目标创建轨迹,可以使用waypointTrajectory对象。通过指定目标的一系列路径点和相应的访问时间,可以建立路径点轨迹。您还可以指定其他轨迹属性,如速度和航向。看到waypointTrajectory为更多的细节。

以下代码为直腿为20 km、转弯半径为2 km的目标定义了赛道路径。轨迹的高度为3 km,在本场景中使用的默认东北向下坐标系中定义为–3 km。

h = 3;单位:km路径点= 1e3*[1 10 -1 -10 1 10 10 12 10 -10 -12 -10 0 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”,到达时间);目标轨迹=目标轨迹;

可视化并运行跟踪场景

要在运行时可视化场景,请创建theaterPlot并添加一个trajectoryPlotterplatformPlotter分别显示轨迹和目标。

tp = theaterPlot (“XLimits”, -12年12 * 1 e3,“Ylimits”, -12年12 * 1 e3,“ZLimits”, (1) e4 1 e4));trajPlotter = trajectoryPlotter (tp,“DisplayName的”“轨迹”);/ / / / / / / / / / / / /“DisplayName的”“目标”);

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

虽然advance(scene) && ishghandle(tp.Parent)“真的”);plotPlatform (targetPlotter targetPose.Position);结束

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

使用雷达传感器生成检测

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

对雷达传感器进行建模,并对其探测进行仿真

要将传感器添加到场景中,首先创建平台传感器安装在上面。的平台对象还提供targetPoses函数,可以使用该函数获取目标相对于平台的姿态。

创建一个塔和一个雷达

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

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

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

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

在单站模式下使用fusionRadarSensor实现单站扫描雷达传感器。默认情况下,传感器对象会在安装传感器的平台坐标系中报告检测结果。您可以使用DetectionsCoordinates的属性融合雷达传感器.可用的输出帧为“身体”(默认),“情景”“传感器矩形”“球形传感器”

radar1 = fusionRadarSensor (1,“更新”,2.5,...“安装位置”(0 0 -15),“视野”,[4;45],...“MechanicalAzimuthLimits”, 60 [-60],“MechanicalElevationLimits”[0 0],...“HasElevation”,真的,“FalseAlarmRate”,1e-7)
radar1 = fusionRadarSensor属性:SensorIndex: 1 UpdateRate: 2.5000 DetectionMode:“单站”ScanMode:“机械”InterferenceInputPort: 0 EmissionsInputPort: 0 MountingLocation: [0 0 -15] MountingAngles: [0 0 0] FieldOfView: 45 [4] RangeLimits: 100000年[0]DetectionProbability: 0.9000 FalseAlarmRate: 1.0000 e-07 ReferenceRange:100000 TargetReportFormat: 'Clustered detections'显示所有属性

将传感器安装在塔台上。

塔。传感器= radar1;

生成和模拟检测

您可以可视化雷达覆盖区域和它的扫描波束使用coveragePlottercoverageConfigplotCoverage函数。创建一个detectionPlotter将雷达产生的探测结果可视化。

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

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

重启(场景);虽然advance(场景)和ishghandle(主视图)视图(70,40);%对此进行评论以显示鸟瞰视图;时间= scene.SimulationTime;获得目标姿态并绘制它。poseTarget=姿势(目标,“真的”);绘图平台(目标绘图仪、PositaGet.Position);%获取塔的坐标系中表示的目标姿势。poseInTower=目标姿态(塔);%通过雷达对象获取雷达探测。[detections,numDets]=雷达1(位置电源,时间);%提取检测位置并转换为场景帧。detPos=零(numDets,3);i=1:numDets detPos(i,:)=tower.trackit.Position+detections{i}.Measurement';结束%绘制检测。如果~isempty(detPos)绘图检测(detPlotter,detPos);结束绘制雷达波束和覆盖区域。plotCoverage (radar1Plotter coverageConfig(场景));结束

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

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

或者,您可以使用检测函数。为了说明这种方法,需要向塔台平台添加第二个雷达传感器。您还可以为第二个雷达传感器创建一个覆盖绘图仪。

radar2 = fusionRadarSensor (2“旋转”“更新”,2.5,...“安装位置”(0 0 -15),“视野”(4;45),...“HasElevation”,真的,“FalseAlarmRate”1 e);塔。传感器{2}= radar2;radar2Plotter = coveragePlotter (tp,“DisplayName的”“雷达2梁”“颜色”‘g’);

重新启动场景,根据塔生成检测结果,并绘制检测结果。如仿真所示,两台雷达都能检测到目标。

重启(场景);虽然advance(scene) && ishhandle (tp.Parent) time = scene. simulationtime;获得目标姿态并绘制它。poseTarget=姿势(目标,“真的”);绘图平台(目标绘图仪、PositaGet.Position);%绘制传感器覆盖范围。款= coverageConfig(现场);plotCoverage (radar1Plotter款(1));plotCoverage (radar2Plotter配置(2));%生成检测结果。[towerDetections, numDets] = detect(塔,时间);%提取检测位置并转换为场景帧。detPos =南(numDets, 3);i=1:numDets detPos(i,:) = tower.Trajectory.Position + towerDetections{i}.Measurement';结束%绘制检测。如果numDets plotDetection (detPlotter detPos);结束结束

图中包含一个Axis对象。Axis对象包含6个line、patch类型的对象。这些对象表示弹道、目标、塔、雷达1波束、探测、雷达2波束。

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

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

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

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

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

radar3 = fusionRadarSensor (3“无扫描”“更新”,2.5,“视野”(60, 20),...“HasElevation”,真的,“FalseAlarmRate”1 e);飞机。传感器= radar3;radar3Plotter = coveragePlotter (tp,“DisplayName的”“雷达3梁”“颜色”“y”);

将所有三个雷达的报告帧设置为场景帧。在设置场景帧检测坐标前,需要先开启INS(惯性导航系统)。

释放(radar1);radar1。之内= true;radar1。DetectionCoordinates =“情景”;释放(radar2);radar2.HasINS=true;radar2.DetectionCoordinates=“情景”;radar3.HasINS=true;radar3.DetectionCoordinates=“情景”

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

%隐藏已公布的数字。用预先录制的动画代替。f = tp.Parent.Parent;如果努梅尔(dbstack)>5华氏度。可见=“上”;f.Visible =“关闭”结束重启(场景);虽然推进(场景)& & ishghandle (tp.Parent)获得目标姿态并绘制它。poseTarget=姿势(目标,“真的”);绘图平台(目标绘图仪、PositaGet.Position);获得平面姿态并绘制它。posePlane =构成(平面,“真的”);plotPlatform (planePlotter posePlane.Position);%绘制传感器覆盖范围。款= coverageConfig(现场);plotCoverage (radar1Plotter款(1));plotCoverage (radar2Plotter配置(2));plotCoverage (radar3Plotter款(3));%生成检测结果。scenarioDetections=detect(场景);numDets=numel(scenarioDetections);%提取场景帧中的检测位置。detPos =南(numDets, 3);i=1:numDets detPos(i,:)=scenarioDetections{i}.Measurement';结束%绘制检测。如果numDets plotDetection (detPlotter detPos);结束结束

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

总结

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