以编程方式创建驾驶场景变化

这个例子展示了如何通过编程方式创建一个使用driving scenario Designer应用程序构建的驾驶场景的变体。通过编程方式创建一个场景的变体,您可以在多种情况下快速测试您的驾驶算法。

要创建一个驾驶场景的程序化变化,请遵循以下步骤:

  1. 类来交互式地构建一个驾驶场景驾驶场景设计师应用程序。

  2. 导出一个MATLAB®函数,该函数生成与此场景等价的MATLAB代码。

  3. 在MATLAB编辑器中,修改导出的函数以创建原始场景的变体。

  4. 调用该函数来生成drivingScenario表示场景的对象。

  5. 将scenario对象导入app中,模拟修改后的场景或生成额外的场景。或者,要在Simulink®中模拟修改后的场景,可以使用金宝app场景的读者块。

该图显示了此工作流的可视化表示。

在开始这个示例之前,将示例文件文件夹添加到MATLAB搜索路径。

目录(genpath (fullfile (matlabroot,“例子”,“开车”)))

在App中构建场景

使用驾驶场景设计器交互式地构建一个用于测试算法的驾驶场景。有关构建场景的更多细节,请参见建立一个驾驶场景,并生成合成检测

本例使用了一个基于您可以从driving scenario Designer应用程序加载的一个预构建场景的驾驶场景。

在应用程序中打开场景文件。

drivingScenarioDesigner (“LeftTurnScenarioNoSensors.mat”)

点击运行来模拟场景。在这个场景中,ego车辆向北行驶,径直穿过一个十字路口。与此同时,从十字路口左侧驶来的一辆车向左转弯,停在了伊果车前面的相邻车道上。

为简单起见,此场景不包括安装在ego车辆上的传感器。

导出场景的MATLAB函数

在查看和模拟场景之后,可以将场景导出到MATLAB命令行。从驾驶场景设计器app工具栏中选择导出>导出MATLAB函数。导出的函数包含用于生成应用程序中创建的场景的MATLAB代码。打开导出的函数。

开放LeftTurnScenarioNoSensors.m

调用此函数将返回驾驶场景的这些方面。

  • 场景-道路和演员的场景,作为一个返回drivingScenario对象。

  • egoVehicle-自我车辆在场景中定义,作为一个返回车辆对象。有关详细信息,请参见车辆函数。

如果您的场景包含传感器,那么返回的函数包含用于生成传感器的额外代码。如果您模拟了包含这些传感器的场景,那么该函数还可以生成由这些传感器产生的检测结果。

修改函数以创建场景变化

通过修改导出的MATLAB函数中的代码,可以生成单个场景的多个变体。一个常见的变化是测试自我车辆在不同的速度。在导出的MATLAB函数中,ego车辆的速度被设置为10米/秒的恒定值(速度= 10)。要生成不同的车辆速度,您可以将速度变量转换为函数的输入参数。打开包含导出函数的修改版本的脚本。

开放LeftTurnScenarioNoSensorsModified.m

在修改后的函数中:

  • egoSpeed作为输入参数包含。

  • 速度,常数变量被删除。

  • 为了计算车辆的轨迹,egoSpeed被用来代替速度

该图显示了这些脚本修改。

为了产生更多的变化,请考虑:

  • 修改道路和车道参数以查看对车道检测的影响

  • 改变飞行器的轨迹或起始位置

  • 修改车辆的尺寸

调用函数生成可编程的场景

使用修正后的函数,生成一个场景的变化,其中自我车辆以20米每秒的恒定速度行驶。

场景= LeftTurnScenarioNoSensorsModified (20)% m / s
带有属性的场景:SampleTime: 0.0400 StopTime: Inf SimulationTime: 0 IsRunning: 1 Actors: [1x2 driving.scenario.Vehicle]

将修改后的场景导入App

若要将修改后的车辆导入应用程序,请使用drivingScenarioDesigner函数。指定drivingScenario对象作为输入参数。

drivingScenarioDesigner(场景)

之前,另一辆车先过了十字路口。现在,随着伊果车的速度从10米/秒增加到20米/秒,伊果车首先通过十字路口。

在处理drivingScenario应用程序中的对象,请记住这些点。

  • 尝试不同的自我车辆速度,再次调用导出的功能,然后导入新的drivingScenario对象使用drivingScenarioDesigner函数。该应用程序不包含用于导入这些对象的菜单选项。

  • 如果你的场景包括传感器,你可以重新打开场景和传感器使用以下语法:drivingScenarioDesigner(场景、传感器)

  • 如果您对actor的维度进行了重大更改,请确保ClassID行动者的属性对应于a类ID值在应用程序指定。例如,在应用程序中,汽车有类ID1卡车有一个类ID2。如果您以编程方式将汽车更改为卡车的大小,请更新ClassID那辆车的财产1(汽车)2(卡车)。

将修改后的场景导入Simulink金宝app

若要将修改后的场景导入Simulink模型,请使用金宝app场景的读者块。此块从应用程序保存的场景文件或drivingScenario保存到MATLAB工作空间或模型工作空间的变量。向模型中添加一个场景读取器块并设置这些参数。

  1. 驾驶场景的来源从工作空间

  2. MATLAB或模型工作空间变量名的名字drivingScenario工作空间中的变量。

在处理drivingScenario在Simulink中,金宝app记住这些点。

  • 自我载体来源被设置为场景,模型使用您定义的自我车辆drivingScenario对象。块决定哪个角色是基于指定的自我载体ActorID行为人的属性。这个演员一定是a车辆对象(如车辆)。更改指定的自我车辆,更新自我车辆ActorID参数。

  • 当连接输出actor时,它会对雷达检测发电机视觉检测发电机块,更新这些传感器块以直接从drivingScenario对象。默认情况下,这些块对所有参与者使用相同的参与者配置文件集,其中的配置文件定义在演员简介块的制表符。方法从对象获取配置文件演员简介每个传感器块的制表符,设置选择指定参与者配置文件的方法参数MATLAB的表情。然后,设置演员配置文件的MATLAB表达式参数来调用actorProfiles对象上的函数。例如:actorProfiles(场景)

完成此示例后,请从MATLAB搜索路径中删除示例文件文件夹。

rmpath (genpath (fullfile (matlabroot,“例子”,“开车”)))

另请参阅

应用程序

功能

对象

相关的话题