这个例子介绍了如何在跟踪场景中生成合成雷达检测,模拟目标运动和传感器检测。具体来说,这个例子显示了:
如何用计算机模拟目标的运动跟踪Cenario.
。
如何使用传感器对象生成合成传感器检测。您可以使用三种不同的方法来生成检测—从特定的传感器生成检测,为安装在给定平台上的所有传感器生成检测,以及在跟踪场景中生成所有检测。
如何使用由提供的各种绘图仪theaterPlot
可视化场景、传感器覆盖范围和检测。
在传感器记录上使用场景生成和传感器模拟的主要好处是能够创建罕见和潜在危险场景,并使用这些场景测试传感器融合算法。这些雷达探测可用于开发各种跟踪算法,例如跟踪器
和trackerjpda.
。
创建一个带有移动目标的跟踪场景
生成模拟雷达探测的第一步是创建跟踪场景,其中模拟一个或多个运动目标的运动。要设置跟踪场景,首先要创建跟踪Cenario.
对象,该对象用作以后添加的所有移动目标的模拟环境。
rng (2020);%以获得可重复的结果。场景=跟踪场景(“更新”,2.5)
scene = trackingscenario with属性:Isearthcredered:0 updaterate:2.5000仿真时间:0停止时间:INF SimulationStatus:Notstarted平台:{}
默认情况下,跟踪场景从SimulationTime
到停止
。步长给出updaterate.
在赫兹。基于2.5 Hz的更新速率,步长为场景
目前,没有目标(用站台
)在场景中定义。当停止
被定义为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 * [11 0 -1 -1 0 1 1 0 10 12 10 -10 -12 -10 0 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 ('waypoints'锚点,'抵达时间',到达时间);目标轨迹=目标轨迹;
可视化并运行跟踪场景
要在运行时可视化场景,请创建theaterPlot
并添加一个trajectoryPlotter
和platformPlotter
分别显示轨迹和目标。
tp = theaterplot(“XLimits”,[ - 12 12] * 1E3,“Ylimits”,[ - 12 12] * 1E3,“ZLimits”,[ - 1E4 1E4]);trajplotter = trajectoryplotter(tp,'显示名称'那“轨迹”);/ / / / / / / / / / / / /'显示名称'那'目标');
运行跟踪场景并在鸟瞰视图中可视化目标运动。
虽然advance(scene) && ishghandle(tp.Parent)“真的”);plotPlatform (targetPlotter targetPose.Position);结束
在跟踪场景中,您可以使用三种不同的方法生成目标检测:
要将传感器添加到场景中,首先创建平台
安装传感器的位置。这平台
对象还提供了一个针对性的
您可以使用的功能来获取相对于平台的目标姿势。
创建塔和雷达
接下来,您可以分别创建塔平台,其尺寸为5米,5米,30米的长度,宽度和高度。将塔定位到左侧目标路径。将塔式位置的Z坐标设置为-15 m,使得塔底位于场景框架的水平面上。
塔=平台(场景);tower.dimensions = struct(“长度”5.“宽度”5.“高度”,30,'OriginOffset',[0 0 0]);tower.trajectory.position = [-1e4 0 15];
定义一个平台绘图仪来显示塔。
towerPlotter = platformPlotter (tp,'显示名称'那“塔”那“标记”那“哦”那“MarkerFaceColor”,[0 0 0]);plotplatform(towerplotter,tower.traptory.position,tower.dimensions,tower.trajection.orientation);
在单站模式下使用fusionRadarSensor实现单站扫描雷达传感器。默认情况下,传感器对象会在安装传感器的平台坐标系中报告检测结果。您可以使用检测控制
的属性融合雷达传感器
。可用的输出帧是'身体'
(默认),“情景”
那“传感器矩形”
和“球形传感器”
。
Radar1 = Fusionradarsensor(1,“更新”,2.5,......“安装位置”(0 0 -15),“视野”,[4;45],......'Meacherazimuthlimits', 60 [-60],“MechanicalElevationLimits”[0 0],......“HasElevation”,真的,'falsealmarrate',1e-7)
Radar1 =具有属性的FusionRadarSensor:SensorIndex:1 updaterate:2.5000检测码:'单体'扫描码:'机械'干扰inputport:0 emissionsInputport:0 onemingLocation:[0 0 -15] uditingangles:[0 0] FieldOfView:[4 45] Rangelimits:[0 100000]检测可力性:0.9000 FalsealRate:1.0000E-07引用管理:100000 TargetReportFormat:'群集检测'显示所有属性
将传感器安装在塔式平台上。
Tower.Sensors = Radar1;
生成和模拟检测
您可以使用该区域可视化雷达覆盖区域及其扫描波束CoverageClotter.
那cuckageConfig.
和Plotcoverage.
函数。创建一个检测普勒
将雷达产生的探测结果可视化。
radar1Plotter = coveragePlotter (tp,'显示名称'那“Radar1梁”那“颜色”那'B');detPlotter = detectionPlotter (tp,'显示名称'那“检测”那......“标记”那“哦”那“MarkerFaceColor”,[1 0 0]);
重新启动场景,生成检测并绘制检测。您可以观察到多个错误检测。
重启(场景);虽然advance(场景)和ishghandle(主视图)视图(70,40);%对此进行评论以显示鸟瞰视图;Time = 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(场景));结束
或者,您可以使用检测
函数。为了说明这种方法,需要向塔台平台添加第二个雷达传感器。您还可以为第二个雷达传感器创建一个覆盖绘图仪。
radar2 = fusionRadarSensor (2'旋转器'那“更新”,2.5,......“安装位置”(0 0 -15),“视野”(4;45),......“HasElevation”,真的,'falsealmarrate'1 e);Tower.Sensors {2} = RADAR2;Radar2plotter = CoverageClotter(TP,'显示名称'那“雷达2梁”那“颜色”那‘g’);
重新启动场景,根据塔生成检测结果,并绘制检测结果。如仿真所示,两台雷达都能检测到目标。
重启(场景);虽然advance(scene) && ishhandle (tp.Parent) time = scene. simulationtime;获得目标姿态并绘制它。poseTarget=姿势(目标,“真的”);绘图平台(目标绘图仪、PositaGet.Position);%绘制传感器覆盖范围。configs = cockageConfig(场景);Plotcoverage(Radar1plotter,configs(1));Plotcoverage(Radar2plotter,configs(2));%生成检测结果。[towerDetections, numDets] = detect(塔,时间);%提取检测位置并将其转换为场景帧。Detpos = Nan(Numdets,3);为i = 1:numdets detpos(i,:) = tower.trajectory.position + towerdetections {i} .measurement';结束%绘图检测。如果numdets plotdetection(剥离器,detpos);结束结束
的方法还可以从跟踪场景中的所有传感器生成检测检测
的函数跟踪Cenario.
。
为了说明这种方法,您在场景中添加一架飞机并定义其航路点轨迹。飞机从西南向东北飞行,高度为2.9公里。为飞机创建一个平台绘图仪。
平面=平台(场景);平面轨迹=航路点轨迹('waypoints',1e3*[-10-10-2.9;12-2.9],'抵达时间'80年[0]);飞机。轨迹= planeTrajectory;planePlotter = platformPlotter (tp,'显示名称'那“飞机”那“标记”那'D'那“MarkerEdgeColor”那“k”);
在飞机上安装一个凝视雷达,视野为50度。为雷达创建一个绘图仪。
Radar3 = FusionRadarsensor(3,“无扫描”那“更新”,2.5,“视野”,[60,20],......“HasElevation”,真的,'falsealmarrate'1 e);飞机。传感器= radar3;radar3Plotter = coveragePlotter (tp,'显示名称'那“雷达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);%绘制传感器覆盖范围。configs = cockageConfig(场景);Plotcoverage(Radar1plotter,configs(1));Plotcoverage(Radar2plotter,configs(2));Plotcoverage(Radar3plotter,Configs(3));%生成检测结果。scenarioDetections=detect(场景);numDets=numel(scenarioDetections);%提取场景帧中的检测位置。Detpos = Nan(Numdets,3);为i=1:numDets detPos(i,:)=scenarioDetections{i}.Measurement';结束%绘图检测。如果numdets plotdetection(剥离器,detpos);结束结束
从结果,在一段时间内,平面上的雷达可以连续地检测目标。平面上的雷达也产生了几个错误的检测。塔上的两个雷达可以检测到平面。
此示例显示了如何创建跟踪方案,模拟目标运动,并根据传感器,平台和整个场景以三种不同的方法模拟雷达检测。它还向您展示了如何可视化目标轨迹,瞬时位置,雷达扫描波束和检测。