主要内容

红绿灯协商与虚幻引擎可视化

本示例展示了如何在虚幻引擎驾驶模拟环境中设计和模拟车辆以通过红绿灯。

简介

协商红绿灯的决策逻辑是自动驾驶应用的基本组成部分。决策逻辑与控制器交互,根据交通灯和自我车道上其他车辆的状态来驾驶自我车辆。在现实条件下模拟真实的交通场景,可以更深入地了解决策逻辑和控制器之间的交互。自动驾驶工具箱™提供了一个由Epic Games的虚幻引擎®提供支持的3D模拟环境。您可以使用该引擎在预构建的3D场景中可视化车辆的运动。该引擎提供了一种直观的方法来分析在十字路口通过红绿灯时决策逻辑和控制算法的性能。

有关如何设计在长方体环境中协商红绿灯的决策逻辑和控件的信息,请参阅红绿灯协商的例子。这个例子展示了如何在虚幻场景中控制交通灯,然后如何模拟和可视化不同测试场景的车辆行为。在这个例子中,你将:

  1. 探索试验台模型的体系结构:该模型包含传感器和环境、红绿灯决策逻辑、控制和车辆动力学。

  2. 在虚幻场景中控制交通灯:模拟3 d交通控制器helper block通过使用Simulink®配置模型来控制虚幻场景中的红绿灯状态。万博1manbetx

  3. 模拟车辆在由绿转红过程中的行为:该模型分析了当交通灯状态由绿灯变为红灯,且自我车辆距离停车线10米时,决策逻辑与控制器之间的相互作用。

  4. 模拟车辆在红绿转换过程中的行为:该模型分析了当交通灯由红转绿,自我车辆距离停车线11米时,决策逻辑与控制器之间的相互作用。在这种情况下,当另一辆车穿过十字路口时,自我车辆也会通过红绿灯。

  5. 探索其他场景:这些场景在附加条件下测试系统。

您可以应用本例中使用的建模模式来测试您自己的决策逻辑和控制,以在虚幻场景中协商红绿灯。

在本例中,您将通过与虚幻引擎集成启用系统级模拟。此环境需要Windows®64位平台。

如果~ ispc错误([“3D模拟只支持微软”万博1manbetx...char (174),“窗口”char (174),“。”]);结束

探索试验台模型的体系结构

要探索测试台架模型,将项目示例文件复制到工作文件夹。使用workDir的参数helperDrivingProjectSetup函数指定文件路径。为避免Windows文件路径最大字符限制,文件路径长度必须小于70个字符。

目录(fullfile (matlabroot,“工具箱”“开车”“drivingdemos”));helperDrivingProjectSetup (“TLNUnreal.zip”“workDir”pwd);

为了探究红绿灯协商系统的行为,打开了该系统的仿真试验台模型。

open_system (“TLNWithUnrealTestBench”);

打开此模型将运行helperSLTrafficLightNegotiationWithUnrealSetup脚本初始化存储为drivingScenario基本工作区中的对象。默认的测试场景,scenario_03_TLN_straight_greenToRed_with_lead_vehicle,包含一个自我载具和两个非自我载具。该设置脚本还配置控制器设计参数、车辆模型参数和Simulink®总线信号,以定义控制器的输入和输出万博1manbetxTLNWithUnrealTestBench模型。

测试台模型包含以下子系统:

  1. 传感器与环境:建模用于模拟的路网、车辆、摄像头和雷达传感器。子系统使用模拟3 d交通控制器在虚幻场景中控制交通灯状态的助手块。

  2. 红绿灯决策逻辑:在十字路口的交通灯和其他引导车辆或交叉交通车辆之间进行仲裁。

  3. Lane-Following控制器:生成自我车辆的纵向和横向控制。

  4. 车辆动力学:使用a建模自我载具自行车模型控件接收的命令更新其状态车道跟踪控制器参考模型。

红绿灯决策逻辑车道跟踪控制器参考模型,以及车辆动力学子系统被重用红绿灯协商的例子。此示例修改传感器与环境子系统,使其与虚幻场景仿真兼容。

传感器与环境子系统配置道路网络,设置车辆位置,合成传感器,并融合来自雷达和视觉传感器的车辆检测。打开传感器与环境子系统。

open_system (TLNWithUnrealTestBench/传感器和环境);

选择场景

试验台模型所需的场景和路网由该子系统的以下部分指定:

  • 场景名称参数场景名称模拟三维场景配置Block被设置为美国城市街区.美国的城市街区道路网络由15个单向路口组成,每个路口有两个红绿灯。这个例子使用了美国城市街区场景的一部分来测试模型。

  • 场景的读者Block以自我车辆信息为输入,进行闭环仿真。该块读取drivingScenario对象场景从基本工作区。该场景包含所需的道路网络。该道路网络与美国城市街区场景的一部分紧密匹配,并包含一个十字路口。

控件可以显示美国城市街区场景的选定部分helperDisplayTrafficLightScene函数。

指定x和y限制,以选择所需的场景区域并绘制提取的场景。

Xlimit = [-110 70];Ylimit = [-105 105];hFigure = helperDisplayTrafficLightScene(xlimit, ylimit);snapnow;关闭(hFigure);

helperGetTrafficLightScenario函数指定当车道信息不可用时,自我车辆要遵循的参考路径。的参考路径信息块读取存储在基本工作区变量中的引用路径referencePathInfo.自我车辆可以根据参考轨迹在十字路口直走或左转。您可以通过设置的输入值来选择这些参考轨迹之一helperGetTrafficLightScenario函数。将值设置为

  • -让自我车辆直接通过十字路口。

  • -让我的车在十字路口左转。

设置速度块从基本工作区变量中读取速度值setVelocity并将其作为控制器的输入。

设置车辆位置

该场景包含一辆自我载具和两辆非自我载具。场景中每个车辆的位置由子系统的这些部分指定:

  • 自我输入端口控制自我车辆的位置,该位置由模拟3 d车辆地面1块。的ActorName掩码参数模拟3 d车辆地面1块被指定为EgoVehicle

  • 长方体到三维仿真块将自姿态坐标系(相对于车辆后轴中心下方)转换为三维仿真坐标系(相对于车辆中心下方)。

  • 场景的读者Block还输出目标车辆在自我车辆坐标中的车道和行动者姿态的地面真实信息。在这个例子中有两个目标车辆,它们是由另一个具有地面跟踪块的模拟3D车辆指定的。

  • 汽车走向世界Block将参与者的姿态坐标从自我车辆坐标转换为世界坐标。

跟踪与传感器融合子系统融合车辆检测驱动雷达数据发生器而且视觉检测发生器阻止和跟踪熔断探测使用多目标跟踪块提供对象轨道周围的自我车辆。视觉检测生成器块还提供了关于自我车辆的车道检测,有助于识别存在于自我车道中的车辆。

在虚幻场景中控制交通灯

此模型使用仿真三维交通灯控制器helper块来配置和控制虚幻场景中的交通灯状态。的仿真三维交通灯控制器辅助块通过使用控制交通灯的状态基于定时器基于状态的模式。方法选择所需的模式控制模式面具参数。默认情况下,该模型使用基于状态的模式。有关基于定时器模式,请参见块掩码说明。

基于状态的方法指定的交通灯的状态交通ID输入端口。的值。交通ID输入端口由intersectionInfo.trafficLightToNegotiate中的变量helperGetTrafficLightScenario函数。在此模型中,的值交通ID“输入端口”设置为16。这意味着在美国城市街区场景中,该街区控制ID值为16的红绿灯。函数返回美国城市街区场景中所有交通灯的状态地面真理输出端口模拟3 d交通控制器辅助块。该模型利用地面真实信息测试决策逻辑和控制,不需要基于感知的红绿灯检测。

交通选择块中提取ID值为16的交通灯状态地面真理输出。的红绿灯决策逻辑参考模型使用状态值在领头车和红绿灯之间进行仲裁。有关的更多信息红绿灯决策逻辑参考模型,参见红绿灯协商的例子。

交通灯停线位置Block提供了交叉口上与所选红绿灯对应的停车线位置trafficLightToNegotiate.停止线位置值由intersectionInfo.tlStopLinePosition

十字路口中心Block为场景中路网交叉口中心的位置。可以使用intersectionInfo的输出helperGetTrafficLightScenario

当车辆靠近交通灯,交通灯改变状态时,对决策逻辑和控制进行测试是非常重要的。本例中使用的模型使交通灯可以在车辆行驶时改变状态EgoVehicle离红绿灯很近。

距离交通停止block计算所选交通灯对应的停车线之间的欧氏距离trafficLightToNegotiate以及当前自我载体的位置。

红绿灯决策逻辑使用距离值来确定最重要的物体(MIO),即自我车辆前面最近的物体。它可以是主路车辆,也可以是小车道上的红绿灯。

交通灯切换逻辑块输出tlState,需要设置的交通灯的状态。这是使用Stateflow®实现的,并使用距离值来触发状态更改EgoVehicle比指定距离更接近红绿灯。

打开交通灯切换逻辑块。

open_system (“TLNWithUnrealTestBench/传感器和环境/”+...《交通灯切换逻辑》“力”);

交通灯切换逻辑使用配置参数掩码参数读取红绿灯配置,trafficLightConfig,从基本工作区。您可以使用trafficLightConfig结构来配置不同的测试场景。该结构在测试场景函数中定义,包含以下字段:stateChangeDistanceinitialState,changeState

  • initialState交通灯在状态改变前的状态。

  • stateChangeDistance属性的阈值距离EgoVehicle到应该发生状态变化的红绿灯处。

  • changeState交通灯状态改变后要设置的状态。

状态切换根据设置的配置和时间发生EgoVehicle到达stateChangeDistance.当initialState红色的而且changeState绿色状态流图从红色的绿色状态。相反,当initialState绿色而且changeState红色的状态流图的建模使得状态转换发生于绿色黄色的状态和一秒钟后,交通灯切换到红色的状态。

模拟车辆在绿转红过程中的行为

本节测试了当自我车辆距离交通灯较近,交通灯状态由绿灯变为红灯时的决策逻辑。在这个测试场景中,一辆领先的车辆在自我车道上行驶并穿过十字路口。交通灯状态为前导车辆保持绿色,当前导车辆距离停车线10米时变为红色。自我车辆将跟随领头车辆,协商状态转换,并在停止线前完全停止。

配置TLNWithUnrealTestBench模型来使用scenario_03_TLN_straight_greenToRed_with_lead_vehicle测试场景。

helperSLTrafficLightNegotiationWithUnrealSetup (...“scenario_03_TLN_straight_greenToRed_with_lead_vehicle”);

显示trafficLightConfig为测试场景设置的结构参数。

disp (trafficLightConfig ');
initialState: 2 stateChangeDistance: 10 changeState: 0

模拟模型。在仿真过程中,该模型将后期仿真分析所需的信号记录到logsout

要减少命令窗口输出,首先关闭MPC更新消息。

mpcverbosity (“关闭”);sim卡(“TLNWithUnrealTestBench”);

绘制模拟结果helperPlotTrafficLightControlAndNegotiationResults函数。

hFigResults = helpplottrafficlightcontrolandnegotiationresults (...logsout trafficLightConfig.stateChangeDistance);

检查结果。

  • 交通灯状态图示显示红绿灯的状态。的到红绿灯停车线的距离图中显示了自我车辆与交通灯对应的停车线之间的距离。你可以看到交通灯的初始状态是绿色的,当车辆接近停车线时,状态从绿色变成黄色。当自我车辆距离停止线10米时,状态由黄色变为红色。

  • 相对纵向距离图显示自我载体与最重要对象(MIO)之间的相对距离。MIO是自我载具前面最近的物体。它可以是领头车,也可以是小车道上的红绿灯。当交通灯状态为绿色时,自驾车辆跟随前车并保持安全距离。当交通灯由绿转红时,自我与领头车之间的距离会缩短。这是因为,当自我车辆接近停车线时,交通灯被检测为MIO。此时,交通灯状态为红色或黄色。

  • 自我加速图中显示了加速度剖面车道跟踪控制器.请注意,这与相对距离的下降密切相关,这是对探测红色交通灯作为MIO的反应。

  • 自我速度图中显示了自我飞行器的速度剖面。请注意,自我的速度在黄色和红色交通信号灯的反应中减慢,并在停车线前完全停止。这可以通过对比图来验证到红绿灯停车线的距离,当速度为0时。

您可以参考红绿灯协商示例了解更多关于此分析以及决策逻辑和控制器之间的交互。

关闭该图形。

关闭(hFigResults);

模拟车辆在红转绿过程中的行为

本节测试了当自我车辆距离红绿灯较近时,红绿灯状态由红变绿时的决策逻辑。此外,当交通信号灯为该车辆绿灯时,交叉交通车辆在十字路口。交通灯状态最初为红色,当自我车辆距离停车线11米时,交通灯状态变为绿色。当交通灯状态为红色时,自我车辆应该在接近交通灯时减速,当交通灯状态由红色变为绿色时必须开始加速。预计它还会等待交叉交通车辆通过十字路口,然后加速继续行驶。

测试场景函数scenario_04_TLN_straight_redToGreen_with_cross_vehicle实现此场景。配置TLNWithUnrealTestBench模型来使用此场景。

helperSLTrafficLightNegotiationWithUnrealSetup (...“scenario_04_TLN_straight_redToGreen_with_cross_vehicle”);

显示trafficLightConfig为这个测试场景设置的结构参数。

disp (trafficLightConfig ');
initialState: 0 stateChangeDistance: 11 changeState: 2

模拟模型。

sim卡(“TLNWithUnrealTestBench”);

绘制模拟结果图。

hFigResults = helpplottrafficlightcontrolandnegotiationresults (...logsout trafficLightConfig.stateChangeDistance);

检查结果。

  • 交通灯状态图中显示初始交通灯状态为红色。当自我车辆距离停车线11米时,交通灯状态由红色变为绿色。

  • 相对纵向距离图紧跟到红绿灯停车线的距离因为没有领头车。请注意,在检测到交叉车辆后,相对距离突然下降。

  • 自我加速图中显示,小我车在看到红灯时试图减速。但是,当状态变为绿色时,您可以观察到加速度的增加。然后你可以注意到在十字路口对交叉交通车辆做出的紧急制动反应。

  • 自我速度图紧跟自我加速绘制并显示当自我车辆接近十字路口时速度下降。你还可以注意到,当你看到绿灯时,速度会略有增加,而当你看到交叉交通的车辆时,速度会随之下降。

关闭该图形。

关闭(hFigResults);

探索其他场景

在前面的小节中,您探索了scenario_03_TLN_straight_greenToRed_with_lead_vehicle而且scenario_04_TLN_straight_redToGreen_with_cross_vehicle场景。下面是与。兼容的场景列表TLNWithUnrealTestBench

场景_01_tln_left_redtogreen_with_lead_vehicle场景_02_tln_straight _greentered场景_03_tln_straight _greentored_with_lead_vehicle(默认)scenario_04_TLN_straight_redToGreen_with_cross_vehicle

使用这些附加场景进行分析TLNWithUnrealTestBench在不同的条件下。

使能MPC更新消息。

mpcverbosity (“上”);

您可以使用本例中的建模模式构建自己的红绿灯协商应用程序。

另请参阅

||||||

相关的话题