这个例子介绍了如何在跟踪场景中生成合成雷达检测,模拟目标运动和传感器检测。具体来说,这个例子显示了:
如何模拟目标的运动使用trackingScenario。
如何使用传感器对象生成合成传感器检测。您可以使用三种不同的方法来生成检测—从特定的传感器生成检测,为安装在给定平台上的所有传感器生成检测,以及在跟踪场景中生成所有检测。
如何使用由公司提供的各种绘图仪theaterPlot
可视化场景、传感器覆盖和检测。
与传感器记录相比,使用场景生成和传感器模拟的主要好处是能够创建罕见和潜在危险的场景,并使用这些场景测试传感器融合算法。这些雷达探测可用于开发各种跟踪算法,如trackerGNN
和trackerJPDA
.
创建一个带有移动目标的跟踪场景
生成模拟雷达探测的第一步是创建跟踪场景,其中模拟一个或多个运动目标的运动。要设置跟踪场景,首先要创建trackingScenario
对象,作为以后添加的所有运动目标的仿真环境。
rng (2020);%用于可重复的结果。现场= trackingScenario (“UpdateRate”, 2.5)
scene = trackingScenario with properties: IsEarthCentered: 0 UpdateRate: 2.5000 SimulationTime: 0 StopTime: Inf IsRunning: 1
默认情况下,跟踪场景从SimulationTime
到StopTime
.步长为UpdateRate
在赫兹。基于2.5 Hz的更新速率,步长为场景
目前,没有目标(用平台
)。当StopTime
被定义为正
,直到场景中所有平台的运动结束。在名为的场景中定义平台目标
:
目标=平台(现场);
您可以检查目标现在已在场景中定义,场景
.
现场。平台{1}
ans =平台属性:PlatformID: 1 ClassID: 0 Position: [0 0] Orientation: [0 0 0] Dimensions: [1×1 struct] Mesh: [1×1 extendedObjectMesh] Trajectory: [1×1 kinematicTrajectory] PoseEstimator: [1×1 insSensor] emitter: {} Sensors: {} Signatures: {[1×1 rcsSignature] [1×1 irSignature] [1×1 tsSignature]}
默认情况下,将创建一个无量纲点对象,但您可以指定对象的长度、宽度和高度范围。同时,一个微不足道的kinematicTrajectory
与目标相关联。为目标创造轨迹,你可以使用waypointTrajectory
对象。通过指定目标的一系列路径点和相应的访问时间,可以建立路径点轨迹。您还可以指定其他轨迹属性,如速度和航向。看到waypointTrajectory
为更多的细节。
下面的代码为直腿为20公里、转弯半径为2公里的目标定义了一条跑道路径。弹道的高度是3km,在本场景中使用的默认的东北-下坐标系中定义为- 3km。
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”, timeOfArrival);目标。轨迹= targetTrajectory;
可视化并运行跟踪场景
要在运行时可视化场景,请创建theaterPlot
并添加一个trajectoryPlotter
和一个platformPlotter
分别可视化弹道和目标。
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);结束
在跟踪场景中,您可以使用三种不同的方法生成目标检测:
要向场景中添加传感器,首先要创建平台
传感器安装在上面。的平台
对象还提供targetPoses
函数,可以使用该函数获取目标相对于平台的姿态。
创建一个塔和一个雷达
接下来,创建一个长、宽和高分别为5米、5米和30米的塔平台。把塔放在目标路径的左边。设置塔位置z坐标为- 15m,使塔底与场景框架水平面一致。
塔=平台(现场);塔。尺寸= 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);
创建一个单静态扫描雷达传感器。默认情况下,传感器对象在安装传感器的平台的坐标系中报告检测结果。控件可以更改输出坐标框架DetectionsCoordinates
的属性mononstaticRadarSensor
.可用的输出帧为“身体”
(默认),“场景”
,传感器矩形的
,“球形传感器”
.
radar1 = monostaticRadarSensor (1,“UpdateRate”, 2.5,...“MountingLocation”(0 0 -15),“FieldOfView”(4, 45岁),...“MechanicalScanLimits”(-60 60; 0 0),“HasElevation”,真的,“FalseAlarmRate”1 e)
radar1 = monostaticRadarSensor属性:SensorIndex: 1 UpdateRate: 2.5000 ScanMode:“机械”MountingLocation: [0 0 -15] MountingAngles: [0 0 0] MaxUnambiguousRange: 100000 MaxUnambiguousRadialSpeed: 200 FieldOfView:[2×1双]MaxMechanicalScanRate:[2×1双]MechanicalScanLimits:[2×2双]MechanicalAngle:[2×1 double] LookAngle: [2×1 double] DetectionProbability: 0.9000 FalseAlarmRate: 1.0000e-07显示所有属性
将传感器安装在塔台上。
塔。传感器= radar1;
生成和模拟检测
您可以可视化雷达覆盖区域和它的扫描波束使用coveragePlotter
,coverageConfig
,plotCoverage
功能。创建一个detectionPlotter
将雷达产生的探测结果可视化。
radar1Plotter = coveragePlotter (tp,“DisplayName的”,“Radar1梁”,“颜色”,“b”);detPlotter = detectionPlotter (tp,“DisplayName的”,“检测”,...“标记”,“o”,“MarkerFaceColor”, (1 0 0));
重新启动场景,生成检测,并绘制检测图。你可以观察到一些错误的检测。
重启(现场);而advance(scene) && ishhandle (tp.Parent) view(70,40);注释此以显示鸟瞰图;时间= scene.SimulationTime;获得目标姿态并绘制它。poseTarget =姿势(目标,“真正的”);plotPlatform (targetPlotter poseTarget.Position);获得塔坐标系中表示的目标位姿。poseInTower = targetPoses(塔);%通过雷达对象获取雷达探测。[detections, numDets] = radar1(poseInTower,time);%提取检测位置并转换为场景帧。detPos = 0 (numDets, 3);为i=1:numDets detPos(i,:) = tower.Trajectory.Position + detections{i}.Measurement';结束%绘制检测。如果~ isempty (detPos) plotDetection (detPlotter detPos);结束绘制雷达波束和覆盖区域。plotCoverage (radar1Plotter coverageConfig(场景));结束
或者,您可以使用检测
函数。为了说明这种方法,需要向塔台平台添加第二个雷达传感器。您还可以为第二个雷达传感器创建一个覆盖绘图仪。
radar2 = monostaticRadarSensor (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 =姿势(目标,“真正的”);plotPlatform (targetPlotter poseTarget.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);结束结束
的方法还可以从跟踪场景中的所有传感器生成检测检测
的函数trackingScenario
.
为了说明这种方法,您可以在场景中添加一个平面并定义其航路点轨迹。飞机从西南向东北飞行,高度为2.9公里。为平面创建一个平台绘图仪。
飞机=平台(现场);planeTrajectory = waypointTrajectory (“锚点”1 e3 * [-10 -10 -2.9;12 12 -2.9),“TimeOfArrival”80年[0]);飞机。轨迹= planeTrajectory;planePlotter = platformPlotter (tp,“DisplayName的”,“平面”,“标记”,' d ',“MarkerEdgeColor”,“k”);
在飞机上安装一个视野为50度的凝视雷达。为雷达创建一个绘图器。
radar3 = monostaticRadarSensor (3“没有扫描”,“UpdateRate”, 2.5,“FieldOfView”(60, 20),...“HasElevation”,真的,“FalseAlarmRate”1 e);飞机。传感器= radar3;radar3Plotter = coveragePlotter (tp,“DisplayName的”,“雷达3梁”,“颜色”,“y”);
将所有三个雷达的报告帧设置为场景帧。在设置场景帧检测坐标前,需要先开启INS(惯性导航系统)。
释放(radar1);radar1。之内= true;radar1。DetectionCoordinates =“场景”;释放(radar2);radar2。之内= true;radar2。DetectionCoordinates =“场景”;radar3。之内= true;radar3。DetectionCoordinates =“场景”;
重新启动并运行场景,生成场景中的所有检测,并绘制检测图。
%隐藏已公布的数字。用预先录制的动画代替。f = tp.Parent.Parent;如果numel(dbstack) > 5 f.Visible =“上”;f.Visible =“关闭”;结束重启(现场);而推进(场景)& & ishghandle (tp.Parent)获得目标姿态并绘制它。poseTarget =姿势(目标,“真正的”);plotPlatform (targetPlotter poseTarget.Position);获得平面姿态并绘制它。posePlane =构成(平面,“真正的”);plotPlatform (planePlotter posePlane.Position);%绘制传感器覆盖范围。款= coverageConfig(现场);plotCoverage (radar1Plotter款(1));plotCoverage (radar2Plotter配置(2));plotCoverage (radar3Plotter款(3));%生成检测。scenarioDetections =检测(现场);numDets =元素个数(scenarioDetections);%提取场景帧中的检测位置。detPos =南(numDets, 3);为i=1:numDets detPos(i,:) = scenarioDetections{i}.Measurement';结束%绘制检测。如果numDets plotDetection (detPlotter detPos);结束结束
从结果来看,在一段时间内,飞机上的雷达可以连续探测到目标。飞机上的雷达也产生了几次错误的探测。塔台上的两个雷达可以探测到这架飞机。
这个示例向您展示了如何创建跟踪场景,模拟目标运动,以及基于传感器、平台和整个场景的三种不同方法模拟雷达检测。它还展示了如何可视化目标轨迹、瞬时位置、雷达扫描波束和探测。