交通灯谈判
这个例子展示了如何设计和测试在十字路口通过交通灯的决策逻辑。
介绍
交通灯协商的决策逻辑是自动驾驶应用程序的基本组成部分。决策逻辑必须对输入做出反应,比如交通灯和周围车辆的状态。然后,决策逻辑为控制器提供所需的速度和路径。由于交通信号灯交叉路口的测试是危险的,模拟这样的驾驶场景可以提供洞察决策逻辑和控制器的相互作用。
这个例子展示了如何设计和测试通过交通灯的决策逻辑。本例中的决策逻辑对交通灯的状态、到交通灯的距离以及到前面最近的车辆的距离做出反应。在这个例子中,你将:
探索试验台模型:该模型包含交通灯传感器与环境、交通灯决策逻辑、控制、车辆动力学等。
建立交通灯决策逻辑模型交通灯决策逻辑在领先车辆和即将到来的交通灯之间进行仲裁。它还为自我车辆在没有车道的十字路口提供参考路径。
模拟一个有红绿灯和领头车辆的左转:该模型配置用于测试在有领头车辆驶近十字路口时,自我车辆的红绿灯决策逻辑和控制之间的交互作用。
模拟左转与红绿灯和交叉交通:配置模型用于测试十字路口存在交叉交通时,自我车辆的红绿灯决策逻辑和控制之间的交互作用。
探索其他场景:这些场景在附加条件下测试系统。
您可以应用本示例中使用的建模模式来测试您自己的决策逻辑和控制,以协商交通灯。
探索试验台模型
要探索测试台架模型,请打开项目示例文件的工作副本。MATLAB®将文件复制到示例文件夹中,以便您可以编辑它们。
目录(fullfile (matlabroot,“工具箱”,“开车”,“drivingdemos”));helperDrivingProjectSetup (“TrafficLightNegotiation.zip”,“workDir”pwd);
为探索交通灯协商系统的行为,建立了系统的仿真试验台模型。
open_system (“TrafficLightNegotiationTestBench”);
打开该模型将运行helperSLTrafficLightNegotiationSetup
初始化道路场景的脚本drivingScenario
对象在基本工作区中。它运行默认的测试场景,scenario_02_TLN_left_turn_with_cross_over_vehicle
它包含一个自我载体和另外两个载体。此设置脚本还配置控制器设计参数,车辆模型参数和定义输入和输出所需的Simulink®总线信号万博1manbetxTrafficLightNegotiationTestBench
模型。
试验台模型包含以下子系统:
传感器与环境:模拟交通灯传感器,道路网络,车辆,以及用于模拟的摄像头和雷达传感器。
红绿灯决策逻辑:在红绿灯和其他先导车辆或交叉路口的过路车辆之间进行仲裁。
Lane-Following控制器:产生纵向和横向控制。
车辆动力学:使用a对自我车辆进行建模自行车模型方法接收的命令更新其状态车道跟随控制器子系统。
可视化:绘制仿真过程中路网、车辆、交通灯状态的世界坐标视图。
的车道跟随控制器参考模型和车辆动力学子系统被重用公路车道跟随的例子。这个例子关注的是传感器与环境和红绿灯决策逻辑子系统。
的传感器与环境子系统配置道路网络,定义目标车辆轨迹,并综合传感器。打开传感器与环境子系统。
open_system (“交通灯谈判测试平台/传感器和环境”);
自我车辆上的场景和传感器由子系统的以下部分指定:
的场景的读者Block配置为接收ego车辆信息以执行闭环仿真。它在自我车辆坐标中输出车道和参与者的地面真值信息。这个块读取
drivingScenario
对象变量,场景
,从基本工作空间,其中包含一个道路网络兼容TrafficLightNegotiationTestBench
模型。
绘制场景提供的道路网络。
hFigScenario = figure()“位置”, [1 1 800 600]);情节(场景中,“父”轴(hFigScenario));
这个默认场景有一个十字路口,其中有一个自我车辆、一个引导车辆和一个交叉交通车辆。
关闭图形。
关闭(hFigScenario);
的跟踪与传感器融合子系统融合了来自驾驶雷达数据发生器和视觉检测发生器通过使用多目标跟踪以提供自我车辆周围的物体轨迹。
视觉检测生成器块还提供与自我车辆相关的车道检测,以帮助识别存在于自我车道中的车辆。
的交通灯传感器子系统模拟红绿灯。它被配置为在十字路口支持四个交通灯传感器万博1manbetx,TL传感器1,TL传感器2,TL传感器3,TL传感器4.
用交通灯传感器绘制场景图。
hFigScenario = helperPlotScenarioWithTrafficLights();
请注意,这与之前的场景相同,只是添加了交通灯传感器。这些传感器在十字路口用红色圆圈表示,表示红灯。交通灯的标签1,2,3.,4对应于TL传感器1,TL传感器2,TL传感器3,TL传感器4,分别。
关闭图形。
关闭(hFigScenario);
中的测试场景TrafficLightNegotiationTestBench
是这样配置的,自我车辆协商TL传感器1.有三种配置模式交通灯传感器子系统:
稳定的红色:TL传感器1和TL传感器3总是处于红色状态。另外两个交通灯总是处于绿色状态。
稳定的绿色:TL传感器1和TL传感器3总是处于绿色的状态。另外两个交通灯总是处于红色状态。
周期(默认):TL传感器1和TL传感器3遵循循环模式:绿-黄-红与预定义的定时。其他交通灯也遵循循环模式:红-绿-黄与预定义的时间来补充TL传感器1和TL传感器3.
可以在其中一种模式下配置此子系统交通灯传感器模式
面具参数。
打开交通灯传感器子系统。
open_system ([“TrafficLightNegotiationTestBench /”…传感器与环境/交通灯传感器],“力”);
的交通灯切换逻辑Stateflow®图表实现了四个交通灯传感器的交通灯状态变化逻辑。所有交通灯的初始状态都设置为红色。切换到不同的模式是基于一个触发条件,这个触发条件是由自我车辆到目标车辆的距离定义的TL传感器1红绿灯。这个距离是由变量定义的distanceToTrafficLight
.如果此距离小于,则触发交通灯转换trafficLightStateTriggerThreshold
.该阈值当前设置为60米,可以在helperSLTrafficLightNegotiationSetup
脚本。
计算距离到交通灯块计算distanceToTrafficLight
使用红绿灯的位置TL传感器1,由变量定义trafficLightPosition
.这是从红绿灯位置
的掩码参数。交通灯传感器子系统。mask参数的值设置为intersectionInfo.tlSensor1Position
控件在基本工作空间中设置的变量helperSLTrafficLightNegotiationSetup
脚本。intersectionInfo
结构的输出helperGetTrafficLightScene
函数。该功能用于创建兼容的测试场景TrafficLightNegotiationTestBench
模型。
红绿灯决策逻辑和控制器需要以下输入来实现其功能:
ReferencePathInfo提供一个预定义的参考轨迹,在没有车道信息的情况下,自动驾驶汽车可以使用它进行导航。自我车辆可以在参考路径的基础上直行,左转或右转。该参考路径通过
referencePathInfo
,从helperGetTrafficLightScene
.这个函数接受一个输入参数来指定在十字路口的移动方向。可能的值是:直
,左
,正确的
.IntersectionCenter提供场景中路网交叉口中心的位置。这是使用
intersectionInfo
,从helperGetTrafficLightScene
.设置速度为控制器定义用户设置的速度。
建模交通灯决策逻辑
的红绿灯决策逻辑参考模型在领头车和红绿灯之间进行仲裁。它还根据控制器的要求,使用检测到的车道或预定义的路径来计算车道中心信息。打开红绿灯决策逻辑参考模型。
open_system (“TrafficLightDecisionLogic”);
的寻找铅车子系统从输入对象轨迹中找到当前车道上的领先车辆。它提供了相对距离,relativeDistToLeadCar,相对速度,relativeVelocityOfLeadCar,相对于领头车辆。如果没有领头的车辆,那么这个块认为领头的车辆在无限距离上存在。
的仲裁逻辑状态流图使用引路车辆信息,并实现在十字路口交通灯和引路车辆之间进行仲裁所需的逻辑。打开仲裁逻辑Stateflow图表。
open_system (“TrafficLightDecisionLogic /仲裁逻辑”);
的仲裁逻辑状态流程图由两个状态组成,OnEntry
和OnRedAndYellowLightDetection
.如果交通灯状态为绿色或没有交通灯检测,则状态保持在OnEntry
状态。如果交通灯状态为红色或黄色,则状态过渡到OnRedAndYellowLightDetection
状态。控制流在这些状态之间切换trafficLightDetection
和distanceToTrafficLight
变量。在每种状态下,计算相对于最重要目标(MIO)的相对距离和相对速度。前面的车辆和红色交通灯被认为是mio。
OnEntry:
relativeDistance = relativeDistToLeadCar
;
relativeevelityofleadcar
;
OnRedAndYellowLightDetection:
relativeDistance = min(relativeDistToLeadCar,distanceToTrafficLight)
;
relativeevelityofleadcar,longitudinalVelocity = min
;
的longitudinalVelocity表示自我飞行器的纵向速度。
计算到交叉点的距离块计算从当前自我位置到交叉点中心的距离。由于十字路口没有车道,ego车辆使用这个距离返回到十字路口的预定义参考路径。
的Lane中心决策逻辑子系统根据需要计算车道中心信息路径跟踪控制系统(模型预测控制工具箱).打开Lane中心决策逻辑子系统。
open_system (交通灯决策逻辑/车道中心决策逻辑);
的Lane中心决策逻辑子系统主要依赖于车道检测视觉检测发生器块估计车道中心信息,如曲率,曲率导数,横向偏移和航向角。然而,在十字路口没有车道标记来检测。在这种情况下,可以从预定义的参考路径估计车道中心信息。
的参考路径中心子系统根据当前自我姿态和预定义的参考路径计算车道中心信息。已配置交换机使用LaneCenterFromReferencePath当DistanceToIntersection小于referencePathSwitchThreshold
.该阈值当前设置为20米,可以在helperSLTrafficLightNegotiationSetup
脚本。
模拟左转与交通灯和领导车辆
在这个测试场景中,一辆领头车辆在自我车道行驶并穿过交叉路口。交通灯状态对领头车辆保持绿色,对后头车辆变为红色。自我车辆应该跟随领头车辆,通过红绿灯,然后左转。
配置TrafficLightNegotiationTestBench
模型来使用scenario_03_TLN_left_turn_with_lead_vehicle
场景。
helperSLTrafficLightNegotiationSetup (…“scenario_03_TLN_left_turn_with_lead_vehicle”);要减少命令窗口输出,请首先关闭MPC更新消息。mpcverbosity (“关闭”);%模拟模型。sim卡(“TrafficLightNegotiationTestBench”);
绘制仿真结果。
hFigResults = helperPlotTrafficLightNegotiationResults(logsout);
检查结果。
的交通灯状态- TL传感器1的红绿灯传感器状态TL传感器1.它从绿色变成黄色,然后从黄色变成红色,然后重复周期模式。
的相对纵向距离该图显示了自我飞行器与MIO之间的相对距离。请注意,自我车辆跟随前车从0到4.2秒,并与它保持安全距离。您还可以观察到,从4.2秒到9秒,这个距离减少了,因为红色交通信号灯被检测为MIO。还要注意,当领先车辆超过MIO允许的最大距离后,没有MIO时,间隙表示无限距离。
的自我加速图显示了加速度剖面从车道跟随控制器.注意从4.2秒到4.7秒的负加速度,这是对红色交通信号灯作为MIO检测的反应。你还可以观察到9秒后加速的增加,以响应绿色交通信号灯。
的自偏航角图显示了自我飞行器的偏航角轮廓。注意12秒后这个轮廓的变化,这是对自我车辆左转的反应。
关闭图形。
关闭(hFigResults);
模拟左转与交通灯和交叉交通
这个测试场景是前一个场景的扩展。除了上述情况外,在本场景中,一辆缓慢行驶的交叉交通车辆在十字路口时,交通灯对自我车辆是绿色的。自我车辆应等待交叉车辆通过十字路口后再左转。
配置TrafficLightNegotiationTestBench
模型来使用scenario_02_TLN_left_turn_with_cross_over_vehicle
场景。
helperSLTrafficLightNegotiationSetup (…“scenario_02_TLN_left_turn_with_cross_over_vehicle”);%模拟模型。sim卡(“TrafficLightNegotiationTestBench”);
绘制仿真结果。
hFigResults = helperPlotTrafficLightNegotiationResults(logsout);
检查结果。
的交通灯状态- TL传感器1图与之前的模拟图相同。
的相对纵向距离从10.5秒开始,情节与之前的模拟运行不同。注意到交叉交通车辆在10秒左右10米处的MIO检测。
的自我加速小区对交叉交通车辆的响应速度也很快,达到10.6。你可以注意到一个硬制动的侧面响应在交叉路口的交叉交通车辆。
的自偏航角该图显示,自我车辆在14秒后开始左转,以响应交叉交通车辆离开十字路口。
关闭图形。
关闭(hFigResults);
探索其他场景
的系统行为scenario_03_TLN_left_turn_with_lead_vehicle
和scenario_02_TLN_left_turn_with_cross_over_vehicle
场景。以下是兼容的场景列表TrafficLightNegotiationTestBench
.
[默认值]场景_03_tln_left_turn_with_cross_over_vehicle场景_04_tln_straight场景_05_tln_straight with_lead_vehicle
使用这些附加场景进行分析TrafficLightNegotiationTestBench
在不同的条件下。例如,在学习交通灯决策逻辑和控制之间的相互作用时,从一个有交通灯但没有车辆的十字路口的场景开始可能会有所帮助。要为这样的场景配置模型和工作空间,请使用以下代码:
helperSLTrafficLightNegotiationSetup (…“scenario_04_TLN_straight”);
启用MPC更新消息。
mpcverbosity (“上”);
结论
在本例中,您实现了交通灯协商的决策逻辑,并在闭环Simulink模型中使用车道跟随控制器对其进行了测试。万博1manbetx