以编程方式创建使用驾驶方案设计器应用生成的驾驶方案的变体,便于基元场景的快速组合生成,能够在多个条件下快速测试驾驶算法,一般在自动化测试时很有用。主流的自动驾驶仿真软件中都支持在程序中直接改变场景,比如PreScan、Carla、Apollo和PanoSim等,MATLAB也支持。
国产自动驾驶仿真软件PanoSim的自动化测试操作流程可见下面链接:
PanoSim 5 功能模块简介--TestBuilder - 知乎 (zhihu.com)
使用驾驶方案设计器应用以交互方式生成初始交通场景(包含道路,交通参与者的位置,运动学参数等基础信息)。
导出一个生成与此方案等效的 MATLAB 代码的 MATLAB 函数,此函数便是后续场景更改的基础。
在 MATLAB 编辑器中,修改导出的函数以创建原始场景的变体。
调用该函数以生成表示方案的驱动对象。
将方案对象导入应用以模拟修改后的方案或生成其他方案。或者,要在 Simulink中模拟修改后的方案,请使用方案读取模块将对象导入到 Simulink 模型中。
第一步:将示例文件夹添加到 MATLAB 搜索路径。(便于通过程序的方式直接调用软件自带的实例)。在命令行直接输入如下代码:
addpath(genpath(fullfile(matlabroot,'examples','driving')))
第二步:构建初始场景。
不是本文重点,这里从驾驶方案设计器应用加载的预生成场景之一的驾驶场景。在命令行直接输入如下代码:
drivingScenarioDesigner('LeftTurnScenarioNoSensors.mat')
打开了对应的预定义场景文件。
单击“运行”以模拟该场景。在这种情况下,自车向北行驶并直接穿过一个十字路口。同时,一辆从十字路口左侧驶来的车辆左转,最终在相邻车道上的自车前方。
第三步:导出上述场景的MATLAB函数
查看和模拟运行场景后,可以将场景导出到 MATLAB 命令行。从“驾驶方案设计器”应用工具栏中,选择“导出>导出 MATLAB 函数”。导出的函数包含用于生成在应用程序中创建的方案的 MATLAB 代码。打开导出的函数。
如果不是示例文件,需要将导出的函数重命名并保存下来。
本文是示例文件,可以通过指令打开对应的函数。代码如下:
open LeftTurnScenarioNoSensors.m
函数如下图所示:
调用此函数将返回驾驶方案的这些方面。
scenario
— 场景的道路和参与者,作为场景对象返回。
egoVehicle
— 场景中定义的自车,作为对象返回。
如果场景包含传感器,则返回的函数将包含用于生成传感器的其他代码。如果模拟了包含这些传感器的场景,则该函数还可以生成这些传感器生成的检测。本文不做过多考虑。
第四步:修改函数以创建场景变体
通过修改导出的 MATLAB 函数中的代码,可以生成单个方案的多个变体。一个常见的变化是以不同的速度测试自车。在导出的 MATLAB 函数中,自车辆的速度设置为每秒 10 米的常量值 (speed = 10
)。要生成不同的 ego 车辆速度,可以将速度变量转换为函数的输入参数。
由于是示例文件,这里可以打开包含导出函数的修改版本的脚本。
open LeftTurnScenarioNoSensorsModified.m
下图表述了修改前与修改后的区别:
而且修改后的egoSpeed是作为函数的输入的。
要生成其他变体,可以考虑如下几点:
修改道路和车道参数以查看对车道检测的影响
修改车辆的轨迹或起始位置
修改车辆的尺寸
第五步:调用函数以生成场景
使用修改后的函数,生成自车以每秒 20 米的恒定速度行驶的场景变体。代码如下:
scenario = LeftTurnScenarioNoSensorsModified(20) % m/s
第六步:将修改后的场景导入仿真应用
使用如下代码直接生成新的仿真界面,不影响原有的仿真。
drivingScenarioDesigner(scenario)
在应用程序中处理对象时,请记住这些要点。
要尝试不同的自车速度,请再次调用导出的函数,然后使用该函数导入新对象。该应用程序不包含用于导入这些对象的菜单选项。
如果场景包括传感器,则可以使用以下语法重新打开方案和传感器。
drivingScenarioDesigner(scenario,sensors)
如果对执行组件的维度进行重大更改,请确保执行组件的属性对应于应用中指定的类 ID 值。例如,在应用程序中,汽车的类 ID 为1 ,卡车的类 ID 为 2。如果以编程方式将汽车更改为具有卡车的尺寸,请将该车辆的属性从(汽车)更新为(卡车)。
第七步:将修改后的场景导入Simulink模型中
要将修改后的方案导入 Simulink 模型,使用场景读取(Scenario Reader)模块。此块从从应用程序保存的方案文件或保存到 MATLAB 工作区或模型工作区的变量中读取道路和参与者。将方案读取器块添加到模型并设置这些参数。
将“驾驶方案的来源”设置为 From workspace。
将 MATLAB 或模型工作区变量名称设置为工作区中变量的名称。
第八步:完成后从 MATLAB 搜索路径中删除示例文件夹。
rmpath(genpath(fullfile(matlabroot,'examples','driving')))