这个例子展示了如何在虚幻引擎®驾驶模拟环境中设计和模拟车辆通过交通信号灯。
交通信号灯的决策逻辑是自动驾驶应用程序的基本组成部分。决策逻辑与控制器交互,根据交通灯和自我车道上其他车辆的状态来控制自我车辆。在现实的条件下模拟真实的交通场景,可以更深入地了解决策逻辑和控制器之间的交互。自动驾驶工具箱™提供了一个3D模拟环境,由Unreal Engine®Epic Games®提供。你可以使用这个引擎在预构建的3D场景中可视化车辆的运动。该引擎提供了一种直观的方法来分析决策逻辑和控制算法的性能时,通过一个十字路口的交通灯。
有关如何在长方体环境中设计通过交通灯的决策逻辑和控制的信息,请参阅红绿灯谈判的例子。这个例子展示了如何在一个虚幻的场景中控制交通灯,然后如何模拟和可视化不同测试场景的车辆行为。在这个例子中,你会:
探索测试平台模型的体系结构:该模型包含传感器和环境、交通灯决策逻辑、控制和车辆动力学。
控制交通灯在一个虚幻的场景:模拟
3 d
交通
光
控制器
辅助块配置模型,通过使用Simulink®控制虚拟场景中的交通灯的状态。金宝app
模拟车辆在绿色到红色过渡期间的行为:该模型分析了当交通灯状态由绿变红,自我车辆距离停车线10米时,决策逻辑与控制器之间的交互作用。
模拟车辆在红绿过渡时的行为:该模型分析了当交通灯由红转绿,自我车辆距离停车线11米时,决策逻辑与控制器之间的交互作用。在这种情况下,当另一辆车通过十字路口时,自我车辆也会通过交通灯。
探索其他场景:这些场景在附加条件下测试系统。
您可以应用本示例中使用的建模模式来测试您自己的决策逻辑和控制,以在虚幻场景中协商交通灯。
在本例中,通过与虚幻引擎集成,您可以启用系统级模拟。此环境需要Windows®64位平台。
如果~ ispc错误([“只有微软支持3D模拟”金宝appchar (174),“窗口”char (174),“。”]);结束
要探索测试平台模型,请将项目示例文件复制到工作文件夹中。使用workDir
论点的helperDrivingProjectSetup
函数指定文件路径。文件路径的长度必须小于25个字符,以避免Windows文件路径的最大字符限制。
目录(fullfile (matlabroot,“工具箱”,“开车”,“drivingdemos”));helperDrivingProjectSetup (“TLNUnreal.zip”,“workDir”pwd);
为探究红绿灯协商系统的行为,建立了该系统的仿真试验台模型。
open_system (“TrafficLightNegotiationWithUnrealTestBench”);
打开这个模型运行helperSLTrafficLightNegotiationWithUnrealSetup
脚本初始化存储为drivingScenario
对象在基本工作区中。默认的测试场景,scenario_03_TLN_straight_greenToRed_with_lead_vehicle
,包含一个自我载体和两个非自我载体。这个设置脚本还配置控制器设计参数,车辆模型参数,和Simulink®总线信号,以定义输入和输出金宝appTrafficLightNegotiationWithUnrealTestBench
模型。
测试台模型包含以下子系统:
传感器和环境:模拟用于模拟的道路网络、车辆、摄像机和雷达传感器。子系统使用模拟
3 d
交通
光
控制器
辅助块来控制虚幻场景中的交通灯状态。
交通灯决策逻辑:仲裁交通灯和其他前导车辆或交叉交通车辆在十字路口。
Lane-Following控制器:产生自我车辆的纵向和横向控制。
车辆动力学:使用一个自行车模型块并使用接收到的命令更新其状态后巷控制器参考模型。
的交通灯决策逻辑,后巷控制器参考模型和车辆动力学子系统从红绿灯谈判的例子。这个例子修改了传感器和环境子系统,使其兼容模拟与虚幻场景。
的传感器和环境子系统配置道路网络,设置车辆位置,合成传感器,并融合来自雷达和视觉传感器的车辆检测。打开传感器和环境子系统。
open_system (“TrafficLightNegotiationWithUnrealTestBench /传感器和环境”);
选择场景
试验台模型所需的场景和道路网络由本子系统的以下部分规定:
的场景的读者Block以自我车辆信息为输入,进行闭环仿真。这个块读取drivingScenario
对象场景
从基本工作空间。该场景包含所需的道路网络。道路网络与美国城市街区的场景紧密匹配,并包含一个十字路口。
控件可以显示美国城市街区场景的选定部分helperDisplayTrafficLightScene
函数。
指定x和y限制以选择所需的场景区域并绘制提取的场景。
Xlimit = [-110 70];Ylimit = [-105 105];hFigure = helperDisplayTrafficLightScene(xlimit, ylimit);snapnow;关闭(hFigure);
的helperGetTrafficLightScenario
函数指定了当车道信息不可用时ego车辆要跟随的参考路径。的参考路径信息块读取存储在基本工作区变量中的引用路径referencePathInfo
.根据参考轨迹,自我车辆在交叉口既可以直行也可以左转。的输入值可以选择这些参考轨迹之一helperGetTrafficLightScenario
函数。将值设置为
直
-让自我的车辆直接穿过十字路口。
左
-让自我车辆在十字路口左转。
的设置速度块从基本工作区变量中读取速度值setVelocity
并作为输入给控制器。
将车辆的位置
这个场景包含一个自我载体和两个非自我载体。场景中每辆车的位置由子系统的以下部分指定:
的模拟3D车辆与地面跟踪块提供了一个界面,可以改变车辆在3D场景中的位置和方向。
的自我输入端口控制ego车辆的位置,这是由模拟
3 d
车辆
与
地面
后
1块。的ActorName
面具的参数模拟
3 d
车辆
与
地面
后
1块指定为EgoVehicle
.
的长方体到三维仿真块将自我姿态坐标系统(相对于车辆后桥中心以下)转换为三维仿真坐标系统(相对于车辆中心以下)。
的场景的读者Block还输出目标车辆在自我车辆坐标中的车道和行动者姿态的地面真实信息。在这个例子中有两个目标车辆,它们是由另一个地面跟踪模块的模拟3D车辆指定的。
的汽车世界块将行动者的姿态坐标从自我载体坐标转换为世界坐标。
的跟踪与传感器融合子系统从驾驶雷达数据发生器和视觉检测发电机块和跟踪的保险丝探测器使用多目标跟踪块提供围绕自我车辆的物体轨迹。视觉检测发生器模块还提供了针对自我车辆的车道检测,以帮助识别存在于自我车道中的车辆。
该模型使用模拟3D交通灯控制器辅助块来配置和控制一个虚幻场景中的交通信号灯的状态。的模拟3D交通灯控制器辅助块通过使用来控制红绿灯的状态基于定时器
或基于状态的
模式。可以通过使用控制
模式
面具参数。默认情况下,该模型使用基于状态的
模式。的信息基于定时器
模式,请参见块掩码说明。
在基于状态的
模式时,块将覆盖指定的红绿灯状态交通
光
ID
输入端口。的值交通
光
ID
输入端口由intersectionInfo.trafficLightToNegotiate
变量helperGetTrafficLightScenario
函数。在这个模型中,for的值交通
光
ID
输入端口设置为16。这意味着在美国的城市街区场景中,街区以ID值16控制红绿灯。在美国城市街区场景中出现的所有交通信号灯的状态由地面
真理
输出端口模拟
3 d
交通
光
控制器
辅助块。该模型利用地面真实信息测试决策逻辑和控制,不需要基于感知的交通灯检测。
的交通
光
选择
块提取ID值为16的红绿灯的状态地面
真理
输出。的交通灯决策逻辑参考模型使用状态值来仲裁引车和交通灯之间的关系。有关的更多信息交通灯决策逻辑参考模型,见红绿灯谈判的例子。
的交通灯停止线位置Block提供了与所选交通灯相对应的十字路口的停止线位置trafficLightToNegotiate
.停止线位置值由intersectionInfo.tlStopLinePosition
.
的十字路口中心Block提供了场景中路网交叉口中心的位置。这是通过intersectionInfo
,则为helperGetTrafficLightScenario
.
当自我车辆靠近交通灯,交通灯状态发生变化时,对决策逻辑和控制的测试往往是很重要的。本例中使用的模型允许交通灯在EgoVehicle
离红绿灯很近。
的距离
来
交通
光
停止
行
块计算所选交通灯对应的停止线之间的欧氏距离trafficLightToNegotiate
以及现在自我载体的位置。
的交通灯决策逻辑使用距离值来决定最重要的对象(MIO),在自我车辆前面最近的对象。它可以是自我车道上的领头车辆或交通灯。
的交通灯转换逻辑块输出tlState
,表示需要设置的红绿灯状态。这是使用statflow®实现的,并使用距离值触发状态更改时EgoVehicle
比指定的距离更接近交通灯。
打开交通灯转换逻辑块。
open_system (使用unrealtestbench /传感器和环境/交通灯切换逻辑的交通灯协商,“力”);
交通灯转换逻辑使用配置参数
掩码参数读取红绿灯配置,trafficLightConfig
,从基本工作空间。你可以使用trafficLightConfig
结构以配置不同的测试场景。这个结构在测试场景函数中定义,有以下字段:stateChangeDistance
,initialState
,changeState
.
initialState
指定状态改变前的红绿灯状态。
stateChangeDistance
指定阈值距离EgoVehicle
到应该发生状态变化的交通灯。
changeState
指定状态改变后要设置的红绿灯状态。
状态切换根据设置的配置和何时发生EgoVehicle
到达stateChangeDistance
.当initialState
是红色的
和changeState
是绿色
状态流图从红色的
州绿色
状态。相反,当initialState
是绿色
和changeState
是红色的
状态流图的建模使状态转换发生于绿色
州黄色的
状态,一秒钟后,交通灯变为红色的
状态。
本节测试自我车辆距离交通灯较近,交通灯由绿色变为红色时的决策逻辑。在这个测试场景中,一辆前车在自我车道行驶并穿过十字路口。交通灯状态对前车保持绿色,当自我车距离停车线10米时变为红色。自我车辆被期望跟随领头车辆,协商状态转换,并在停止线之前完全停止。
配置TrafficLightNegotiationWithUnrealTestBench
模型来使用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卡(“TrafficLightNegotiationWithUnrealTestBench”);
使用helperPlotTrafficLightControlAndNegotiationResults
函数。
hFigResults = helperPlotTrafficLightControlAndNegotiationResults(logsout, trafficLightConfig.stateChangeDistance);
检查结果。
的交通灯的状态该图显示了交通灯的状态。的距离交通灯停车线图中显示了自我车辆与交通灯对应的停车线之间的距离。你可以看到交通灯的初始状态是绿色,当自我车辆接近停车线时,状态从绿色变为黄色。当自我车辆距离停车线10米时,状态由黄色变为红色。
的相对纵向距离图显示了自我载体和最重要对象(MIO)之间的相对距离。MIO是离自我车最近的物体。它可以是前车,也可以是自我车道上的红绿灯。当交通灯状态为绿色时,自我车辆跟随前车并保持安全距离。当交通灯由绿变红时,自我与前车的距离减小。这是因为,当自我车辆接近停车线时,交通灯被检测为MIO。此时,交通灯状态为红色或黄色。
的自我加速图显示了加速度剖面后巷控制器.注意,这与相对距离的下降密切相关,这是对红色交通灯作为一个MIO的检测的反应。
的自我速度图显示了自我飞行器的速度剖面。注意到自我速度的减慢是对黄色和红色交通灯的反应,并在停车线前完全停止。这可以通过与距离交通灯停车线,当速度为零时。
你可以参考红绿灯谈判示例来了解更多关于这个分析以及决策逻辑和控制器之间的交互。
关闭图。
关闭(hFigResults);
本节测试自我车辆距离交通灯较近,交通灯由红变绿时的决策逻辑。另外,当交通灯为绿色时,交叉交通车辆在十字路口。交通灯状态最初为自我车辆的红色,当自我车辆距离停车线11米时变为绿色。当状态为红色时,自我车辆将在接近交通灯时减速,当交通灯状态由红色变为绿色时必须开始加速。预计它还将等待交叉交通车辆通过十字路口,然后加速继续行驶。
测试场景功能scenario_04_TLN_straight_redToGreen_with_cross_vehicle
实现了这一场景。配置TrafficLightNegotiationWithUnrealTestBench
模型以使用此场景。
helperSLTrafficLightNegotiationWithUnrealSetup (...“scenario_04_TLN_straight_redToGreen_with_cross_vehicle”);
显示trafficLightConfig
为这个测试场景设置的结构参数。
disp (trafficLightConfig ');
initialState: 0 stateChangeDistance: 11 changeState: 2
模拟模型。
sim卡(“TrafficLightNegotiationWithUnrealTestBench”);
绘制仿真结果。
hFigResults = helperPlotTrafficLightControlAndNegotiationResults(logsout, trafficLightConfig.stateChangeDistance);
检查结果。
的交通灯的状态图中显示初始交通灯状态为红色。当自我车辆距离停车线11米时,交通灯状态由红色变为绿色。
的相对纵向距离情节紧跟着距离交通灯停车线因为没有领头的车辆。注意相对距离的突然下降响应的检测交叉车辆。
的自我加速情节显示,“自我”车辆在看到红灯时试图减速。然而,当状态变为绿色时,您可以观察到加速的增加。然后,你可以注意到在十字路口的交叉交通车辆响应的硬刹车剖面。
的自我速度情节紧跟着自我加速绘制并显示了当自我车辆接近十字路口时速度的下降。你还可以注意到在绿灯时速度会轻微增加,随后在交叉交通车辆时速度会降低。
关闭图。
关闭(hFigResults);
在前面的部分中,您研究了scenario_03_TLN_straight_greenToRed_with_lead_vehicle
和scenario_04_TLN_straight_redToGreen_with_cross_vehicle
场景。下面是兼容的场景列表TrafficLightNegotiationWithUnrealTestBench
.
scenario_01_TLN_left_redToGreen_with_lead_vehicle scenario_02_TLN_straight_greenToRed scenario_03_TLN_straight_greenToRed_with_lead_vehicle(默认)scenario_04_TLN_straight_redToGreen_with_cross_vehicle
使用这些额外的场景进行分析TrafficLightNegotiationWithUnrealTestBench
在不同条件下。
启用MPC更新消息。
mpcverbosity (“上”);
您可以使用本示例中的建模模式来构建自己的红绿灯协商应用程序。
模拟3D场景配置|模拟3D车辆与地面跟踪|汽车世界|长方体到三维仿真|驾驶雷达数据发生器|视觉检测发电机|多目标跟踪