主要内容

雷达场景教程

方法以编程方式构造和可视化一个简单的雷达场景radarScenariotheaterPlot,radarDataGenerator对象。

场景设置

首先,创建一个空雷达场景。所有场景属性都有默认值。该场景默认不包含任何平台。

scenario = radarScenario
scenario = radarScenario with properties: isearthcentric: 0 UpdateRate: 10 SimulationTime: 0 StopTime: Inf SimulationStatus: NotStarted平台:{}SurfaceManager: [1x1 radar.scenario. properties]SurfaceManager] AtmosphereManager: [1x1 radar.scenario.AtmosphereManager]

增加平台

场景由称为平台的对象组成,您可以在其上安装传感器和发射器。要添加平台,请使用平台对象的功能。这里您创建了一个简单的塔。

塔=平台(场景)
塔=平台与属性:PlatformID: 1 ClassID: 0位置:[0 0 0]方向:[0 0 0]尺寸:[1x1 struct]轨迹:[1x1 kinematicTrajectory] PoseEstimator: [1x1 insSensor]发射器:{}传感器:{}签名:{[1x1 rcsSignature]}

平台识别

当你第一次构建一个平台时,它有一个PlatformID,这是一个惟一的标识符,可用于识别平台。该场景按照创建平台的顺序分配平台标识符。您可以指定ClassID表示平台的分类。例如,这里你用3来表示塔。

塔。ClassID = 3;

平台的签名

传感器可以检测平台。对于雷达传感器,一个相关的特征是雷达截面(RCS)。缺省情况下,使用统一的RCS签名:

塔。签名{1}
ans = rcsSignature with properties:涨落模型:转向模式:[2x2 double]方位:[-180 180]仰角:[2x1 double]频率:[0 1.0000e+20]

加载预定义的气缸RCS数据,并使用该数据定义塔平台的RCS。

负载(“RCSCylinderExampleData.mat”“气缸”);塔。签名{1}= rcsSignature(“模式”,缸。RCSdBsm,...“方位”,缸。方位,“高度”,缸。海拔高度,...“频率”, cylinder.Frequency);

平台尺寸

默认情况下,平台没有尺寸,被建模为点目标。您可以选择指定长度、宽度和高度来表示对象的范围,以及从其几何中心到主体框架原点的偏移量。属性指定平台尺寸财产。

你可以这样指定塔的尺寸:

塔。尺寸= struct(...“长度”10...“宽度”10...“高度”现年60岁的...“OriginOffset”, [0 0 30]);

塔的长、宽、高分别为10米、10米和60米。原点偏移量[0 0 30]表示其体框原点(转动中心)在平台局部体轴正z方向上为30米。

平台的轨迹

您可以通过其获取平台的当前位置和方向位置而且取向属性。你可以使用场景的platformpositions方法获取更多关于平台的信息:

scenario.platformPoses
ans = struct with fields: PlatformID: 1 ClassID: 3 Position: [0 0 0] Velocity: [0 0 0] Acceleration: [0 0 0] Orientation: [1x1四元数]AngularVelocity: [0 0 0]

您可以指定平台的位置和方向随时间使用轨迹财产。属性可以指定平台的轨迹kinematicTrajectorywaypoinTrajectory,或geoTrajectory对象。

默认情况下,平台由静态的kineticTrajectory体轴完全居中并与场景轴对齐的人:

塔。轨迹
ans = kinematicTrajectory with properties: SampleRate: 100 Position: [0 00] Orientation: [1x1四元数]Velocity: [0 00] AccelerationSource: 'Input' angularvelocitsource: 'Input'

要获得4度的俯仰角,可以使用取向轨迹对象的属性。使用从欧拉角得到的四元数指定方向。

tYaw = 0;tPitch = 4;tRoll = 0;tower.Trajectory.Orientation =四元数([tYaw tPitch tRoll],“eulerd”“zyx股票”“帧”);

轴约定

雷达工具箱中的大多数例子都使用“东北向下”约定。这意味着x轴指向北方,y轴指向东方,z轴指向下方。此外,局部主体框架的x-、y-和z-方向分别为向前、右和向下方向。

可视化场景

theaterPlotobject提供了一个接口来动态地绘制三维场景中的对象。您可以使用标准的MATLAB坐标轴绘制方法向剧院的坐标轴添加或删除注释,您可以通过其财产。

使用一个platformPlotter设计平台。

正如预期的那样,塔在NED坐标的原点中心,斜度为4度。

tPlot = theaterPlot(“XLim”50 [-50],“YLim”50 [-50],“ZLim”, -100年[0]);pPlotter = platformPlotter(tPlot,“DisplayName的”“塔”);姿势=平台姿势(场景);towerPose = pose(1);towerDims =塔。尺寸;plotPlatform (pPlotter towerPose。位置,towerDims, towerPose.Orientation); set(tPlot.Parent,“YDir”“反向”“ZDir”“反向”);视图(tPlot。父母,-37.5, 30)

向平台添加传感器

若要向平台中添加雷达传感器,可以添加radarDataGenerator对象传感器财产。

请记住,在NED坐标系中,“Z”方向指向下。因此,如果你想在塔顶安装一个雷达,你应该把它的“z”位置设置为-60米。

radarDataGenerator具有在场景坐标中报告检测的选项。在场景坐标中报告检测可以更容易地将生成的检测与场景中对象的位置进行比较。

塔雷达=雷达datgenerator (“SensorIndex”, 1...“UpdateRate”10...“MountingLocation”, [0 0 -60],...“ScanMode”“没有扫描”...“之内”,真的,...“TargetReportFormat”“检测”...“DetectionCoordinates”“场景”);塔。传感器=塔雷达;

可视化覆盖区域

要查看场景中的传感器覆盖率,您可以使用覆盖率绘图仪并绘制场景的覆盖率配置。你可以通过调整内部轴的限制来扩大戏剧情节的范围:

tPlot。XLimits = [-5000 5000];tPlot。YLimits = [-5000 5000];tPlot。ZLimits = [-1000 0];covPlotter = coveragePlotter(tPlot,“DisplayName的”传感器覆盖的);plotCoverage (covPlotter coverageConfig(场景));

平台的签名

您可以在场景中添加其他平台,并调整参数,以影响其他传感器对该平台的观测。你可以使用rcsSignature模拟安装在塔上的雷达能看到什么。

下面的代码创建了一架直升机,并将其雷达横截面全向设置为40 dBsm。

直升机=平台(场景);直升机。维= struct(...“长度”30岁的...“宽度”、1。...“高度”7...“OriginOffset”,[0 8 -3.2]);直升机。签名= rcsSignature(...“模式”, (40 40;40 40),...“高度”, -90;90年),...“方位”[-180180]);

的单元数组中,通过将传感器放置在单元数组中,可以将多个传感器挂载到任何平台传感器财产。

直升机。传感器= {...radarDataGenerator (“SensorIndex”2,...“UpdateRate”, 20岁,...“MountingLocation”, [22 0 0],...“MountingAngles”, [-5 0 0],...“ScanMode”“没有扫描”...“之内”,真的,...“TargetReportFormat”“检测”...“DetectionCoordinates”“场景”),...radarDataGenerator (“SensorIndex”3,...“UpdateRate”30岁的...“MountingLocation”, [22 0 0],...“MountingAngles”, [5 0 0],...“ScanMode”“没有扫描”...“之内”,真的,...“TargetReportFormat”“检测”...“DetectionCoordinates”“场景”)};

平台运动和动画

你可以安排直升机穿过雷达波束的路径。这展示了如何让直升机在250米高度以恒定速度沿着100米直线飞行7秒:

直升机。轨迹= waypointTrajectory([2000 50 -250; 2000 -50 -250],[0 7]);

平台跨时间移动是通过使用while循环和调用场景来执行的推进方法。

你可以在循环中绘制所有平台的位置,方向和尺寸:

profiles = platformProfiles(场景);dimensions = vertcat(profiles.Dimensions);advance(场景)pose = platformpose(场景);position = vertcat(posts . position);取向= vertcat(姿态.取向);plot平台(pPlotter,位置,尺寸,方向);plotCoverage (covPlotter coverageConfig(场景));%以使动画更慢,取消注释下面的行%暂停(0.01)结束

检测平台

在上面的例子中,您添加了三个更新速率不同的雷达:塔台的更新速率为10 Hz,直升机有两个更新速率分别为20 Hz和30 Hz的雷达。

场景可以被放置到一种模式中,在该模式中调用推进根据需要更新模拟的时间,以更新其中包含的每个传感器。可以通过设置UpdateRate将情形变为0。

场景。UpdateRate = 0;

若要显示模拟时间,请向图中添加一个UI控件。

fig =祖宗(tPlot。父母,“图”);timeereadout = uicontrol(图,“风格”“文本”“HorizontalAlignment”“左”“位置”,[0 0 200 20]);timeReadout。字符串=”SimulationTime:“+ scenario.SimulationTime;

现在可以达到适当的传感器时间。你可以使用检测使回路中的每个传感器都能进行检测。检测可以通过构造一个detectionPlotter对象。

dPlotter = detectionPlotter(tPlot,“DisplayName的”“检测”);

您可以通过重新启动模拟并修改它以报告检测来再次运行相同的模拟。

a的检测位置radarDataGenerator能从检测中提取吗测量字段:

重启(场景);(场景)timeReadout前进。字符串=”SimulationTime:“+ scenario.SimulationTime;检测=检测(场景);提取测量位置的列向量allDetections = [detections{:}];如果~isempty(allDetections) measurement = cat(2,allDetections. measurement)';其他的测量=零(0,3);结束plotDetection (dPlotter、测量);姿势=平台姿势(场景);position = vertcat(posts . position);取向= vertcat(姿态.取向);plot平台(pPlotter,位置,尺寸,方向);plotCoverage (covPlotter coverageConfig(场景));结束

请注意,模拟的更新时间不均匀地增加到每个传感器所需的时间。

总结

在本例中,您学习了如何构造和可视化一个简单的场景,并获得雷达数据生成器生成的探测结果。

Baidu
map