高速公路车道跟随与RoadRunner场景
这个例子展示了如何使用RoadRunner 3D场景编辑工具创建的场景来配置和模拟高速公路车道。此示例遵循高速公路车道后的例子。
简介
高速公路车道跟踪系统引导车辆在标明的车道内行驶。它还能与同一车道上的前车保持固定的速度或安全距离。该系统通常包括视觉处理、传感器融合、决策逻辑和控制组件。为了确保功能安全和互操作性,该系统需要在各种路况下进行测试。例如,在具有不同阴影、车道标记类型和道路材料的场景中进行测试可以更容易地识别边缘情况。
走鹃是一个交互式编辑器,使您能够设计模拟和测试自动驾驶系统的3D场景。您可以使用RoadRunner在3D环境中创建道路、车道标记、路标、植被和具有不同复杂性的场景。
的高速公路车道后本例所基于的示例演示了如何模拟弯曲和直线道路场景。这个例子演示了如何使用在RoadRunner中创建的场景来模拟场景。该场景包含阴影、车道标记类型和道路材料的变化,旨在测试视觉处理对系统功能的影响。在这个例子中,你将:
复习场景:探索在RoadRunner中创建的场景和道路片段。
将场景融入驾驶场景:将RoadRunner场景中的路网导出到OpenDRIVE®文件中,然后将该文件导入到驾驶场景中。然后,在该场景中添加一辆汽车,并对该场景进行模拟。
将场景整合到虚幻引擎场景中:导出RoadRunner场景到虚幻引擎®游戏,并连接一个Simulink®模型到该场景。导入的驾驶场景指定车辆的姿态。在车辆上添加传感器,模拟场景。
将场景融入车道以下应用:使用前面章节中描述的技术,您可以将RoadRunner场景集成到高速公路车道跟踪场景中。然后,将附加的目标车辆添加到场景中,并在从无阴影过渡到有阴影的场景中模拟系统。
探索更多的场景:模拟车道标记和道路类型变化的其他场景。将这些技术应用到您自己的设计中。
您可以使用本例中使用的建模模式和技术来导入您自己的场景并测试您的算法。
在本例中,您通过与Epic Games®的虚幻引擎集成来启用系统级模拟。该模拟环境需要Windows®64位平台。
如果~ ispc错误([“3D模拟只支持微软”char (174),...“窗口”char (174),“。”]);结束
为保证模拟结果的重现性,设置随机种子。
rng (0);
本示例还要求您下载用于虚幻引擎4项目的自动驾驶工具箱™接口支持包。
pathToUnrealExe = fullfile (...matlabshared.supportpkg.getSupportPackageRoot,...“工具箱”,“共享”,“sim3dprojects”,“开车”,“RoadRunnerScenes”,....“WindowsPackage”,“RRScene.exe”);如果(~存在(pathToUnrealExe“文件”)错误(“此示例要求您下载并安装用于虚幻引擎4项目支持包的自动驾驶工具箱接口”);结束
检查现场
这个例子包括一个场景(RRHighway.rrscene
),这是在《RoadRunner》中设计的。如果您安装了RoadRunner,您可以按照RoadRunner项目和场景系统(走鹃)主题来打开RRHighway.rrscene
现场。
这个场景的设计是为了对车道跟随系统提出挑战。这幅图显示了路网被划分为六个部分。每个部分会增加场景的变化,如下所示:
第1段包含没有护栏的虚线车道。
第2段包含有护栏的虚线车道。
第三部分增加了在车道标记上投下阴影的树木。
第4部分包含不会在车道标记上投下阴影的树木。
第5节包含实心车道标志而不是虚线车道标志。
与其他路段相比,第六段路面材质质地较轻。
例如,下图显示了Section-3(树木不会在车道标记上投下阴影)和Section-4(树木会在车道标记上投下阴影)之间的过渡。
下图显示了第4部分(有虚线车道标记)和第5部分(有实心车道标记)之间的过渡。
下图显示了第5部分(较暗的道路材料)和第6部分(较浅的道路材料)之间的过渡。
将场景融入到驾驶场景中
将场景导入到驾驶场景的一个常见动机是支持添加车辆和轨迹,无论是交互的还是编程的。你可以通过以下步骤将RoadRunner场景中的路网集成到驾驶场景中:
从RoadRunner导出OpenDRIVE文件。
导入OpenDRIVE文件到驱动场景。
在驾驶场景中添加车辆和轨迹。
模拟驾驶的场景。
从RoadRunner导出OpenDRIVE文件
RoadRunner支持将场景导出为多种文件格式,包括OpenDRIVE®。要了解更多关于OpenDRIVE导出工作流的信息,请参见导出到ASAM OpenDRIVE(走鹃).此示例包含一个OpenDRIVE文件(RRHighway.xodr
),从RoadRunner场景导出(RRHighway.rrscene
)使用该主题中描述的过程。
导入OpenDRIVE文件到驱动场景
OpenDRIVE文件可以导入到长方体驱动场景中。要了解关于此工作流的更多信息,请参见基于Frenet参考路径的公路轨迹规划.
创建一个驾驶场景,导入OpenDRIVE路网。出于本例的目的,关闭来自OpenDRIVE导入器的警告。
场景= drivingScenario;
例如,关闭OpenDRIVE导入器的警告
警告(“关闭”,“开车:场景:OpenDRIVEWarnings”);roadNetwork(场景中,“OpenDrive”,“RRHighway.xodr”);
在驾驶场景中添加车辆和轨迹
您可以通过编程方式或交互方式将车辆添加到场景中。这个例子展示了编程工作流。要以交互方式添加车辆,请使用驾驶场景设计师应用程序。
使用一组预定义的路径点将车辆添加到路网中。这些路径点作为辅助文件附加,manualwaypoints.mat
.
v =车辆(场景中,“ClassID”1);负载(“manualWaypoints.mat”,“锚点”);速度= 20;% m / s轨迹(v,锚点、速度);
驾驶模拟场景
在世界坐标中绘制驾驶场景。还可以使用追逐情节从车辆的角度来绘制场景。
hFigScenario =图;p1 = uipanel (“位置”,[0 0 0.5 1]);h1 =轴(“父”, p1);情节(场景中,“锚点”,“上”,“父”、h1);p2 = uipanel (“位置”,[0.5 0 0.5 1]);h2 =轴(“父”, p2);chasePlot (v,“父”、h2);
将图的可见性设置为关闭。
集(hFigScenario,“可见”,“关闭”);
您可以选择在中继续探索、模拟和编辑场景驾驶场景设计师drivingScenarioDesigner(场景)
.
将场景整合到虚幻引擎场景中
将场景导入虚幻引擎的一个常见动机是启用带有相机、雷达和激光雷达传感器模型的模拟系统。您可以使用以下步骤将RoadRunner场景与虚幻引擎驾驶场景模拟集成在一起:
从RoadRunner导出虚幻引擎场景。
配置虚幻引擎场景。
创建测试台架模型。
模拟试验台模型。
导出虚幻引擎场景从RoadRunner
RoadRunner支持导出到虚幻引擎场景。要了解关于此工作流的更多信息,请参见导出到虚幻使用Filmbox (.fbx)文件(走鹃).工作流包括导出Filmbox (.fbx)和XML文件,这些文件可以导入到虚幻编辑器中。当你在虚幻引擎编辑器中打开一个场景后,你可能想要调整其他场景方面,如照明。
这个例子使用了一个虚幻引擎场景(RRHighway
),从RoadRunner场景导出(RRHighway.rrscene
).
配置虚幻引擎场景
虚幻引擎场景可以与Simulink使用一个MathWorksSimulation
插件的用于虚幻引擎4项目的自动驾驶工具箱接口支持包。要安装支持包,请按照下面的步骤操作安装定制场景支持包.
虚幻引擎场景(RRHighway
)已使用MathWorksSimulation
插件。
创建测试台架模型
您可以将Simulink模型连接到虚幻引擎进行联合仿真。要了解关于此工作流的更多信息,请参见在虚幻引擎环境中模拟简单的驾驶场景和传感器.开环试验台模型(RRHighwayTestBench.slx
)使用此工作流连接到虚幻引擎场景(RRHighway
).
打开场景的测试台架模型。
open_system (“RRHighwayTestBench”);
打开此模型运行helperSLRRHighwaySetup
脚本。脚本中的模拟3D场景配置块RRHighwayTestBench
模型。
这个模型包含了使用虚幻引擎模拟驾驶场景的块。
该模型还包含可视化相机和激光雷达传感器的模块。你可以使用鸟瞰镜来可视化雷达和视觉探测从鸟瞰的视角。要了解如何配置此作用域,请参见从虚幻引擎模拟环境可视化传感器数据.
模拟试验台模型
模拟模型。车辆遵循在驾驶场景中定义的轨迹。
sim卡(“RRHighwayTestBench”);
将场景融入车道应用
您可以重用前几节中描述的技术来模拟和评估一个闭环系统,例如高速公路车道跟随应用程序。中描述的模型、辅助函数和技术高速公路车道后的例子。
要探索测试工作台模型,打开项目示例文件的工作副本。MATLAB™将这些文件复制到一个示例文件夹中,以便您可以编辑它们。
目录(fullfile (matlabroot,“工具箱”,“开车”,“drivingdemos”));helperDrivingProjectSetup (“HighwayLaneFollowing.zip”,“workDir”pwd);
打开并配置系统级测试台架模型。
open_system (“HighwayLaneFollowingTestBench”);scenarioFcnName =“scenario_RRHighway_01_NoShadowToShadow”;helperSLHighwayLaneFollowingSetup (“scenarioFcnName”, scenarioFcnName);
将场景融入到驾驶场景中
的第一个参数helperSLHighwayLaneFollowingSetup
创建与?兼容的驾驶场景的函数的名称是否HighwayLaneFollowingTestBench
.的scenario_RRHighway_01_NoShadowToShadow
函数创建了这个驾驶场景。进口的RRHighway.xodr
OpenDRIVE文件并添加从无阴影过渡到阴影的道路段周围的车辆。您可以通过这个函数了解更多关于创建场景的编程技术的知识。它利用了几个辅助函数,您可以使用它们简化向导入的路网添加车辆及其轨迹。探索scenario_RRHighway_01_NoShadowToShadow
了解更多有关辅助函数及其用法的资料。
的helperSLHighwayLaneFollowingSetup
函数在基本工作区中创建一个可变场景。绘制这个场景并注意将被模拟的场景区域。
hFigScenario =图;p1 = uipanel (“位置”,[0 0 0.5 1]);h1 =轴(“父”, p1);情节(场景中,“锚点”,“上”,“父”、h1);p2 = uipanel (“位置”,[0.5 0 0.5 1]);h2 =轴(“父”, p2);chasePlot (scenario.Actors (1),“父”h2)
将图的可见性设置为关闭。
集(hFigScenario,“可见”,“关闭”);
将场景整合到虚幻引擎场景中
的HighwayLaneFollowingTestBench
模型包含视觉检测、前向车辆传感器融合和控制的算法组件。仿真3D场景子系统将模型与驾驶场景和相应的虚幻引擎游戏集成在一起。
打开仿真3D场景子系统。
open_system (“HighwayLaneFollowingTestBench /模拟3 d场景”)
注意,这个子系统重用本例中先前描述的建模技术和块。
主要的区别是:
自我交通工具处于闭环控制之下。
目标车辆被添加到场景中。
车道跟踪的例子没有使用激光雷达传感器。
模拟模型以查看场景中的自我载体行为。
sim卡(“HighwayLaneFollowingTestBench”);
该系统能够在有阴影的情况下检测和跟踪车道。有关如何分析模拟结果的详细信息,请参见高速公路车道后的例子。
关闭图。
关闭(hFigScenario);
探索更多的场景
这个示例提供了额外的场景,您可以使用它们来测试系统行为。
scenario_RRHighway_02_DashedToSolidMarkings
函数配置测试场景,使自我车辆从场景的第4部分导航到第5部分。这使得测试从虚线车道标记到实线车道标记的车道跟踪应用程序成为可能。scenario_RRHighway_03_DarkToLightRoadMaterial
函数配置测试场景,使自我车辆从场景的第5部分导航到第6部分。这使得测试车道跟随应用从深色纹理的道路材料过渡到浅色纹理的道路材料。
方法可以配置这些场景的模型和工作区helperSLHighwayLaneFollowingSetup
函数。例如,这段代码配置测试台架来模拟道路材料变化区域的场景。
helperSLHighwayLaneFollowingSetup (“scenarioFcnName”,...“scenario_RRHighway_03_DarkToLightRoadMaterial”);
启用来自OpenDRIVE导入器的警告。
警告(“上”,“开车:场景:OpenDRIVEWarnings”);
您可以应用这些技术将RoadRunner场景集成到驾驶场景中,以模拟和测试您的系统。