本示例说明了如何设计和测试决策逻辑,以协商交叉路口的交通信号灯。
介绍
协商交通信号灯的决策逻辑是自动驾驶应用程序的基本组成部分。决策逻辑必须对诸如交通信号灯和周围车辆的状态之类的输入做出反应。然后,决策逻辑为控制器提供所需的速度和路径。由于交通信号灯路口测试很危险,因此模拟这种驾驶场景可以深入了解决策逻辑和控制器之间的相互作用。
此示例说明如何设计和测试用于协商交通信号灯的决策逻辑。在此示例中,决策逻辑对交通信号灯的状态,与交通信号灯的距离以及与前方最近车辆的距离做出反应。在此示例中,您将:
-
探索测试平台模型:该模型包含交通信号灯传感器和环境,交通信号灯决策逻辑,控件和车辆动力学。
-
对交通信号灯决策逻辑建模:交通信号灯决策逻辑在领先车辆和即将到来的交通信号灯之间进行仲裁。它还为在没有车道的情况下自我车辆在十字路口处遵循提供了参考路径。
-
用交通信号灯和引导车辆模拟左转弯:模型配置为测试交通信号灯决策逻辑与自我车辆的控件之间的交互作用,同时在存在引导车辆的情况下接近交叉路口。
-
用交通信号灯和交叉路口模拟左转弯:该模型配置为在十字路口处有交叉路口时,测试交通信号灯决策逻辑与自我车辆控件之间的相互作用。
-
探索其他方案:这些方案在其他条件下测试系统。
您可以应用本示例中使用的建模模式来测试您自己的决策逻辑和控件以协商交通信号灯。
探索测试平台模型
要探索交通信号灯协商系统的行为,请打开系统的模拟测试台模型。
open_system(“ TrafficLightNegotiationTestBench”);
打开此模型将运行helperSLTrafficLightNegotiationSetup
脚本,该脚本使用drivingScenario
基础工作区中的对象初始化道路场景。它运行默认的测试场景,scenario_TLN_left_turn_with_cross_over_vehicle
其中包含一辆自我车辆和另外两辆车辆。该设置脚本还配置控制器设计参数,车辆模型参数和Simulink®总线信号,以定义TrafficLightNegotiationTestBench
模型的输入和输出。
测试平台模型包含以下子系统:
-
传感器和环境:对交通信号传感器,道路网络,车辆以及用于仿真的摄像头和雷达传感器进行建模。
-
交通信号灯决策逻辑:在交通信号灯和交叉路口的其他领先车辆或跨界车辆之间进行仲裁。
-
车道跟踪控制器:生成纵向和横向控制。
-
车辆动力学:使用“ 自行车模型”模块对自我车辆进行建模,并使用从“ **车道跟随控制器”**子系统接收的命令来更新其状态。
-
可视化:在仿真过程中绘制道路网络,车辆和交通信号灯状态的世界坐标视图。
该车道追踪控制器参考模型和车辆动力学子系统从重用公路车道追踪例子。此示例着重于传感器和环境以及交通信号灯决策逻辑子系统。
的传感器和环境子系统构成的道路网络,限定目标车辆的轨迹,并合成传感器。打开传感器和环境子系统。
open_system(“ TrafficLightNegotiationTestBench / Sensors and Environment”);
自我车辆上的场景和传感器由子系统的以下部分指定:
- 的情景阅读器块被配置成采取在自主车辆的信息来执行一个闭环仿真。它在自我车辆坐标中输出车道和参与者的地面真实信息。该块从基本工作空间中读取
drivingScenario
对象变量,该对象变量scenario
包含与TrafficLightNegotiationTestBench
模型兼容的道路网络。
绘制场景提供的道路网络。
hFigScenario = Figure('Position',[1 1 800 600]); 情节(场景,``父母'',轴(hFigScenario));
该默认方案具有一个与一个自我车辆,一个引导车辆和一个交叉交通车辆的交叉路口。
关闭图。
关闭(hFigScenario);
的跟踪和传感器融合从子系统熔丝车辆检测雷达探测发生器和视觉检测发生器块通过使用多目标跟踪器块,以提供围绕所述自主车辆对象轨迹。
视觉检测生成器块还提供了关于自我车辆的车道检测,有助于识别自我车道中存在的车辆。
该交通灯传感器子系统模拟红绿灯。它配置为在交叉路口支持四个交通信号灯传感器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。
您可以使用Traffic Light Sensor Mode
mask参数以这些模式之一配置此子系统。
打开交通灯传感器子系统。
open_system('TrafficLightNegotiationTestBench / Sensors and Environment / Traffic Light Sensor','force');
的交通灯开关逻辑 Stateflow®图表器具对于四个交通灯传感器的交通灯状态变化逻辑。所有交通信号灯的初始状态都设置为红色。过渡到其他模式是基于由自我车辆到TL传感器1交通灯的距离所定义的触发条件。该距离由变量定义distanceToTrafficLight
。如果此距离小于,则触发交通信号灯过渡trafficLightStateTriggerThreshold
。该阈值当前设置为60米,可以在helperSLTrafficLightNegotiationSetup
脚本中更改。
“计算到交通灯的距离”块distanceToTrafficLight
使用TL Sensor 1的交通灯位置(由变量定义)进行计算trafficLightPosition
。这是从交通灯传感器子系统的Traffic Light Position
mask参数获得的。mask参数的值设置为,是脚本在基础工作区中设置的变量。结构是函数的输出。此功能用于创建与模型兼容的测试方案。intersectionInfo.tlSensor1Position``helperSLTrafficLightNegotiationSetup``intersectionInfo``helperGetTrafficLightScenario``TrafficLightNegotiationTestBench
交通信号灯决策逻辑和控制器需要以下输入来实现其功能:
-
ReferencePathInfo提供了预定义的参考轨迹,当缺少车道信息时,自我车辆可以使用该参考轨迹进行导航。自主车辆可以根据参考路径在交叉路口直行,左转或右转。使用
referencePathInfo
的输出获得该参考路径helperGetTrafficLightScenario
。此函数使用输入参数来指定相交处的行进方向。可能的值是:Straight
,Left
,和Right
。 -
IntersectionCenter提供方案中道路网络的交叉点中心的位置。这是通过使用所获得的
intersectionInfo
,从输出helperGetTrafficLightScenario
。 -
设定速度定义了控制器的用户设定速度。
模型交通信号灯决策逻辑
的交通灯判定逻辑引线轿厢和交通灯之间的参考模型进行仲裁。它还使用检测到的车道或预定义的路径来计算控制器要求的车道中心信息。打开交通灯决策逻辑参考模型。
open_system(“ TrafficLightDecisionLogic”);
“ 查找主管车”子系统从输入对象轨道中查找当前车道中的主管车。它提供相对于领先车辆的相对距离relativeDistToLeadCar和相对速度relativeVelocityOfLeadCar。如果没有引导车辆,则此框认为引导车辆存在无限距离。
所述仲裁逻辑状态流图表使用铅汽车信息和器具的交通灯和在交叉口处的领先车辆之间进行仲裁所需的逻辑。打开仲裁逻辑状态流程图。
open_system(“ TrafficLightDecisionLogic / Arbitration Logic”);
所述仲裁逻辑状态流图由两种状态,OnEntry
和OnRedAndYellowLightDetection
。如果交通信号灯状态为绿色或没有交通信号灯检测,则该状态保持在该OnEntry
状态。如果交通信号灯状态为红色或黄色,则状态将转换为OnRedAndYellowLightDetection
状态。控制流根据trafficLightDetection
和distanceToTrafficLight
变量在这些状态之间切换。在每种状态下,都会计算相对于最重要对象(MIO)的相对距离和相对速度。引导车辆和红色交通信号灯被视为MIO。
OnEntry:
relativeDistance = relativeDistToLeadCar
;
relativeVelocity = relativeVelocityOfLeadCar
;
OnRedAndYellowLightDetection:
relativeDistance = min(relativeDistToLeadCar,distanceToTrafficLight)
;
relativeVelocity = min(relativeVelocityOfLeadCar,longitudinalVelocity)
;
所述longitudinalVelocity表示自身车辆的纵向速度。
“计算到交叉点的距离”块计算从当前自我位置到交叉点中心的距离。由于交叉路口没有车道,因此自我车辆会使用此距离回落到交叉路口的预定义参考路径。
在车道*决策逻辑子系统计算所要求的车道*信息路径跟踪控制系统。打开车道中心决策逻辑子系统。
open_system(“ TrafficLightDecisionLogic / Lane中心决策逻辑”);
的车道中心判定逻辑子系统主要依赖于从车道检测视觉检测发生器块到像曲率估计车道中心的信息,曲率衍生物,横向偏移,和航向角。但是,在交叉路口没有要检测的车道标记。在这种情况下,可以从预定义的参考路径估计车道中心信息。
该参考路径车道*基于当前的自我姿态和预定义的参考路径子系统单位计算车道中心的信息。当DistanceToIntersection小于时,将交换机配置为使用LaneCenterFromReferencePath。该阈值当前设置为20米,可以在脚本中更改。referencePathSwitchThreshold``helperSLTrafficLightNegotiationSetup
用交通信号灯和引导车辆模拟左转弯
在此测试方案中,领先车辆在自我车道中行驶并穿过十字路口。领先车辆的交通信号灯状态保持绿色,自我车辆的交通信号灯状态变为红色。期望自我车辆跟随领先车辆,通过交通信号灯并向左转。
配置TrafficLightNegotiationTestBench
模型以使用scenario_TLN_left_turn_with_lead_vehicle
方案。
helperSLTrafficLightNegotiationSetup(“ scenario_TLN_left_turn_with_lead_vehicle”); %要减少命令窗口输出,请先关闭MPC更新消息。 mpcverbosity('off'); %模拟模型。 sim(“ TrafficLightNegotiationTestBench”);
绘制仿真结果。
hFigResults = helperPlotTrafficLightNegotiationResults(logsout);
检查结果。
-
的交通灯状态- TL传感器1所图示出的交通灯的传感器状态TL传感器1。它从绿色变为黄色,然后从黄色变为红色,然后在循环模式下重复。
-
的相对纵向距离曲线显示自主车辆和MIO之间的相对距离。请注意,自我车辆要与领先车辆保持0到4.5秒的距离,因此必须保持安全距离。您还可以观察到从4.5到9秒,该距离缩短了,因为检测到红色交通灯为MIO。还请注意,当没有MIO时,间隙代表无限距离。
-
在自我加速曲线显示自车辆的加速度曲线。注意,将红色交通信号灯检测为MIO时,从4.5到6秒的负加速度。您还可以观察到9秒钟后,绿色交通信号灯的加速度增加。
-
该自我偏航角图显示自身车辆的偏航角轮廓。请注意12秒钟后此配置文件的变化,以响应自我车辆向左转。
关闭图。
关闭(hFigResults);
用交通信号灯和交叉路口模拟左转弯
此测试方案是先前方案的扩展。除了先前的条件外,在这种情况下,当自我车辆的交通信号灯为绿色时,慢速行驶的交叉路口车辆将在十字路口。期望自我车辆在经过左转弯之前,等待交叉路口的车辆通过交叉路口。
配置TrafficLightNegotiationTestBench
模型以使用scenario_TLN_left_turn_with_cross_over_vehicle
方案。
helperSLTrafficLightNegotiationSetup(“ scenario_TLN_left_turn_with_cross_over_vehicle”); %要减少命令窗口输出,请先关闭MPC更新消息。 mpcverbosity('off'); %模拟模型。 sim(“ TrafficLightNegotiationTestBench”);
绘制仿真结果。
hFigResults = helperPlotTrafficLightNegotiationResults(logsout);
检查结果。
-
的交通灯状态- TL传感器1个图是与从先前模拟的一个。
-
的相对纵向距离从以前的模拟曲线图发散从10.5秒向前运行。请注意,相对距离的突然下降是对交叉交通车辆检测的反应。
-
该自我加速度情节也紧随从11.3秒在向前的相对距离的倾角。您会注意到在交叉路口有交叉制动的车辆出现了紧急制动。
-
的自我偏航角曲线图表明自主车辆发起14秒后左转,响应于交交通车辆离开交叉点。
关闭图。
关闭(hFigResults);
探索其他场景
在前面的部分中,您探讨了scenario_TLN_left_turn_with_lead_vehicle
和scenario_TLN_left_turn_with_cross_over_vehicle
场景的系统行为。以下是与兼容的方案的列表TrafficLightNegotiationTestBench
。
scenario_TLN_straight scenario_TLN_straight_with_lead_vehicle scenario_TLN_left_turn scenario_TLN_left_turn_with_lead_vehicle scenario_TLN_left_turn_with_cross_over_vehicle [默认]
使用这些其他方案TrafficLightNegotiationTestBench
在不同条件下进行分析。例如,在了解交通信号灯决策逻辑和控件之间的交互时,从具有与交通信号灯的交叉点但没有车辆的场景开始可能会有所帮助。要为这种情况配置模型和工作区,请使用以下代码:
helperSLTrafficLightNegotiationSetup(“ scenario_TLN_straight”);
结论
在此示例中,您实现了交通信号灯协商的决策逻辑,并使用了闭环Simulink模型中的车道跟随控制器对其进行了测试。