这个例子展示了如何通过编程方式创建一个使用driving scenario Designer应用程序构建的驾驶场景的变体。通过编程方式创建一个场景的变体,您可以在多种情况下快速测试您的驾驶算法。
要创建一个驾驶场景的程序化变化,请遵循以下步骤:
类来交互式地构建一个驾驶场景驾驶场景设计师应用程序。
导出一个MATLAB®函数,该函数生成与此场景等价的MATLAB代码。
在MATLAB编辑器中,修改导出的函数以创建原始场景的变体。
调用该函数来生成drivingScenario
表示场景的对象。
将scenario对象导入app中,模拟修改后的场景或生成额外的场景。或者,要在Simulink®中模拟修改后的场景,可以使用金宝app场景的读者块。
该图显示了此工作流的可视化表示。
在开始这个示例之前,将示例文件文件夹添加到MATLAB搜索路径。
目录(genpath (fullfile (matlabroot,“例子”,“开车”)))
使用驾驶场景设计器交互式地构建一个用于测试算法的驾驶场景。有关构建场景的更多细节,请参见建立一个驾驶场景,并生成合成检测。
本例使用了一个基于您可以从driving scenario Designer应用程序加载的一个预构建场景的驾驶场景。
在应用程序中打开场景文件。
drivingScenarioDesigner (“LeftTurnScenarioNoSensors.mat”)
点击运行来模拟场景。在这个场景中,ego车辆向北行驶,径直穿过一个十字路口。与此同时,从十字路口左侧驶来的一辆车向左转弯,停在了伊果车前面的相邻车道上。
为简单起见,此场景不包括安装在ego车辆上的传感器。
在查看和模拟场景之后,可以将场景导出到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]
若要将修改后的车辆导入应用程序,请使用drivingScenarioDesigner
函数。指定drivingScenario
对象作为输入参数。
drivingScenarioDesigner(场景)
之前,另一辆车先过了十字路口。现在,随着伊果车的速度从10米/秒增加到20米/秒,伊果车首先通过十字路口。
在处理drivingScenario
应用程序中的对象,请记住这些点。
尝试不同的自我车辆速度,再次调用导出的功能,然后导入新的drivingScenario
对象使用drivingScenarioDesigner
函数。该应用程序不包含用于导入这些对象的菜单选项。
如果你的场景包括传感器,你可以重新打开场景和传感器使用以下语法:drivingScenarioDesigner(场景、传感器)
。
如果您对actor的维度进行了重大更改,请确保ClassID
行动者的属性对应于a类ID值在应用程序指定。例如,在应用程序中,汽车有类ID的1
卡车有一个类ID的2
。如果您以编程方式将汽车更改为卡车的大小,请更新ClassID
那辆车的财产1
(汽车)2
(卡车)。
若要将修改后的场景导入Simulink模型,请使用金宝app场景的读者块。此块从应用程序保存的场景文件或drivingScenario
保存到MATLAB工作空间或模型工作空间的变量。向模型中添加一个场景读取器块并设置这些参数。
集驾驶场景的来源来从工作空间
。
集MATLAB或模型工作空间变量名的名字drivingScenario
工作空间中的变量。
在处理drivingScenario
在Simulink中,金宝app记住这些点。
当自我载体来源被设置为场景
,模型使用您定义的自我车辆drivingScenario
对象。块决定哪个角色是基于指定的自我载体ActorID
行为人的属性。这个演员一定是a车辆
对象(如车辆
)。更改指定的自我车辆,更新自我车辆ActorID参数。
当连接输出actor时,它会对雷达检测发电机或视觉检测发电机块,更新这些传感器块以直接从drivingScenario
对象。默认情况下,这些块对所有参与者使用相同的参与者配置文件集,其中的配置文件定义在演员简介块的制表符。方法从对象获取配置文件演员简介每个传感器块的制表符,设置选择指定参与者配置文件的方法参数MATLAB的表情
。然后,设置演员配置文件的MATLAB表达式参数来调用actorProfiles
对象上的函数。例如:actorProfiles(场景)
。
完成此示例后,请从MATLAB搜索路径中删除示例文件文件夹。
rmpath (genpath (fullfile (matlabroot,“例子”,“开车”)))