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