基于MATLAB&SIMULINK开发自动驾驶系统第十六讲将OpenDRIVE道路导入到驾驶场景中
OpenDRIVE是一种开放的文件格式,可以让指定大型复杂的道路网络。使用驾驶场景设计器APP,可以将OpenDRIVE文件中的道路和车道导入驾驶场景。然后,可以将执行器和传感器添加到场景中,并生成合成的车道和物体探测,以测试 在 MATLAB 中开发的驾驶算法。另外,为了测试在Simulink中开发的驾驶算法,可以使用Scenario Reader块将道路网络和行为体读取到模型中。
要将 OpenDRIVE 道路和车道导入到 drivingScenario 对象中,而不是导入到应用程序中,请使用 roadNetwork 函数。
16.1 导入OpenDRIVE文件
打开 "驾驶场景设计器 "应用程序。在 MATLAB 命令提示符下,输入
drivingScenarioDesigner
要导入OpenDRIVE文件,请在应用程序工具栏上选择导入 > OpenDRIVE路网。选择的文件必须是有效的OpenDRIVE文件,类型为.xodr或.xml。此外,该文件必须
符合OpenDRIVE格式规范1.4H版本。从 的MATLAB根文件夹中,导航到并打开这个文件:matlabroot/examples/driving/data/intersection.xodr
由于不能将OpenDRIVE道路网导入现有的场景文件中,因此应用程序会提示保存当前的驾驶场景。
在应用的场景画布中会显示导入的道路网。该网络中的道路长达数千米。放大(按Ctrl+Plus)道路,可以更仔细地观察它。
16.2 检查道路
导入道路网显示,一对双车道与一条双车道相交。
验证导入的路网是否符合预期,请记住以下限制和应用程序内的行为。
16.3 OpenDRIVE导入限制
驾驶场景设计器应用程序不能支持OpenDRIVE规范的所有组件。
- 只能导入车道、车道类型信息和道路。不支持导入道路对象和交通信号灯。
- 包含大型道路网的OpenDRIVE文件可能需要数分钟才能加载。此外,这些道路网可能会导致应用程序画布上的交互缓慢。大型道路网的例子包括仿真城市道路的道路或具有数千米长的道路。
- 不支持宽度可变的车道。宽度被设置为该车道内的最高宽度。例如,如果一条车道的宽度从2米到4米不等,则应用程序将车道宽度全部设置为4米。
- 车道类型信息指定为行驶、边界、限制、路肩的道路。
- 支持停车。具有任何其他车道类型信息的车道都会作为边界车道导入。
- 支持具有指定为 "未标记"、"实心"、"双实心"、"虚线"、"双虚线"、"实心虚线 "和 "虚线实心 "等多种车道标记样式的道路。
- 不支持 "瓶子" 泥点、"路边 "和 "草地 "等车道标记样式。具有这些标记样式的车道将作为未标记导入。
16.4 道路方向
在 "驾驶场景设计器 "应用程序中,道路的方向可能与显示 OpenDRIVE 道路的其他工具中的道路方向不同。表中显示了应用程序和OpenDRIVE ODR Viewer之间的这种方向差异。
|
|
在 OpenDRIVE ODR 查看器中,X 轴沿查看器底部运行,Y 轴沿查看器左侧运行。
在 Driving Scenario Designer 应用程序中,Y 轴沿画布底部运行,X 轴沿画布左侧运行。应用程序中的这个世界坐标系与车辆在行驶场景中使用的车辆坐标系(XV,YV),其中。
- XV轴(纵轴)指向场景中车辆的前方。
- YV轴(横向轴)指向车辆的左侧,如朝前看。
有关坐标系的详细信息,请参见 "《基于MATLAB&SIMULINK开发自动驾驶系统第一讲之传感器配置和坐标系转换》"。
16.5 边缘的道路中心
在驾驶场景设计器应用中,道路的位置和方向由道路中心定义。当在应用程序中创建道路时,道路中心总是在道路的中间。
但是,当将 OpenDRIVE 道路网络导入应用程序时,有些道路的道路中心位于道路边缘。当OpenDRIVE道路被明确指定为右车道或左车道时,就会出现这种行为。
考虑导入的OpenDRIVE文件中的分割公路。首先,启用道路交互,这样就可以看到道路中心。在场景画布的左下角,点击配置场景画布按钮 ,然后选择启用道路交互。
- 高速公路右侧的车道的道路中心位于右侧边缘。
- 高速公路左侧的车道,其道路中心在左侧边缘。
将执行器和传感器添加到场景中
可以在包含OpenDRIVE道路的场景中添加执行器和传感器。但是, 不能向场景中添加其他道路。如果场景中包含OpenDRIVE道路网络,则应用工具条中的 "添加道路 "按钮将被禁用。此外,不能导入额外的OpenDRIVE道路网络到场景中。
在添加执行器和传感器之前,如果启用了道路交互,请考虑禁用它们,以防止 意外地拖动道路中心并改变道路网络。如果道路启用交互,在场景画布的左下角,单击"配置"。场景画布按钮 ,然后清除 "禁用道路交互"。
将被控车辆添加到场景中,右击画布中的一条道路,选择添加汽车。要指定汽车的跟踪,在画布中右击汽车,选择添加航点,沿道路添加航点,让汽车通过。在添加了沿路的最后一个航点之后, 就可以在画布中选择添加航点。
按Enter键,汽车就会朝第一个航点的方向自动转弯。汽车会自动向第一个航点的方向转动。
为被控车辆添加摄像头传感器。在应用工具条上,点击添加摄像头。然后,在传感器画布上,将摄像头添加到代表汽车前窗的预定义位置。
将摄像机配置为探测车道。在左窗格中,在传感器选项卡上,展开探测参数部分。然后,将探测类型参数设置为车道。
16.6生成合成探测
要从摄像头生成车道探测,在应用工具条上,点击运行。当场景运行时,"被控中心视图 "从被控车辆的角度显示场景。鸟眼图显示被控车辆的左车道和右车道边界。
要将探测结果导出到MATLAB工作区,请在应用程序工具条上,单击 "导出">"导出传感器数据"。命名工作区变量并单击 "确定"。
导出 > 导出 MATLAB 函数选项被禁用。如果场景包含 OpenDRIVE 道路,那么无法导出生成场景及其探测的 MATLAB 函数。
16.7 保存场景
生成探测后,单击 "保存 "保存场景文件。此外,还可以将传感器模型保存为单独的文件。也可以将道路和执行器模型一起保存为单独的 场景文件。
可以从应用程序中重新打开这个场景文件。另外,在MATLAB命令提示符下, 可以使用这个语法。
drivingScenarioDesigner(scenarioFileName)
当重新打开这个文件时,"添加道路 "按钮仍然是无效的。
如果正在Simulink中开发驾驶算法,可以使用Scenario Reader块将场景文件中的道路和行为体读取到的模型中。包含大型OpenDRIVE道路网络的场景文件可能需要数分钟才能读入模型。
如果正在Simulink中开发驾驶算法,可以使用Scenario Reader块从场景文件或drivingScenario对象中读取道路和执行器到的模型中。该块不直接读取传感器数据。要将应用程序中创建的传感器添加到Simulink模型中,可以选择"导出">"导出Simulink",生成包含的场景和传感器的模型。在该模型中,场景读取器块读取场景,雷达探测生成器和视觉探测生成器块对传感器进行建模。