红绿灯协商
这个例子展示了如何设计和测试在十字路口通过红绿灯的决策逻辑。
简介
协调红绿灯的决策逻辑是自动驾驶应用程序的基本组成部分。决策逻辑必须对输入做出反应,如红绿灯和周围车辆的状态。然后,决策逻辑为控制器提供所需的速度和路径。由于红绿灯交叉路口对测试来说是危险的,因此模拟这样的驾驶场景可以深入了解决策逻辑和控制器之间的相互作用。
这个例子展示了如何设计和测试通过红绿灯的决策逻辑。本例中的决策逻辑对红绿灯的状态、到红绿灯的距离以及到前面最近车辆的距离做出反应。在这个例子中,你将:
探索试验台模型:该模型包含交通灯传感器和环境、交通灯决策逻辑、控制和车辆动力学。
建立红绿灯决策逻辑模型:红绿灯决策逻辑在前车和即将到来的红绿灯之间进行仲裁。它也为自我车辆在无车道的十字路口的行驶提供了参考路径。
模拟一个有红绿灯和领头车辆的左转弯:该模型被配置为在前导车辆接近十字路口时,测试红绿灯决策逻辑与自我车辆控制之间的相互作用。
模拟一个有红绿灯和交叉交通的左转:配置模型,测试十字路口有交叉交通时,红绿灯决策逻辑与自我车控制之间的交互作用。
探索其他场景:这些场景在附加条件下测试系统。
您可以应用本例中使用的建模模式来测试您自己的决策逻辑和控制,以协商红绿灯。
探索试验台模型
要探索测试工作台模型,打开项目示例文件的工作副本。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控制器:生成纵向和横向控制。
车辆动力学:对自我载具进行建模自行车模型控件接收的命令更新其状态车道跟随控制器子系统。
可视化:绘制仿真时路网、车辆、交通灯状态的世界坐标视图。
的车道跟随控制器参考模型和车辆动力学子系统被重用高速公路车道跟踪的例子。这个例子着重于传感器与环境而且红绿灯决策逻辑子系统。
的传感器与环境子系统配置路网,定义目标车辆轨迹,合成传感器。打开传感器与环境子系统。
open_system (TrafficLightNegotiationTestBench/传感器和环境);
自我车的场景和传感器由子系统的以下部分指定:
的场景的读者块被配置为接受自我车辆信息来执行闭环模拟。它在自我车辆坐标中输出车道和参与者的地面真相信息。该块读取
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
.这是从红绿灯位置
接口的掩码参数红绿灯传感器子系统。设置掩码参数为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 = relativedisttoledcar
;
relativeVelocity = relativeVelocityOfLeadCar
;
OnRedAndYellowLightDetection:
relativeDistance = min(relativeDistToLeadCar, distanceto红绿灯)
;
relativevocityofleadcar, longitude)
;
的longitudinalVelocity表示自我飞行器的纵向速度。
计算到交叉口的距离块计算从当前自我位置到交叉口中心的距离。因为十字路口没有车道,自我车辆利用这个距离返回到十字路口预定义的参考路径。
的车道中心决策逻辑子系统根据需求计算车道中心信息路径跟随控制系统(模型预测控制工具箱).打开车道中心决策逻辑子系统。
open_system (交通灯决策逻辑/车道中心决策逻辑);
的车道中心决策逻辑子系统主要依赖于从视觉检测发生器块来估计车道中心信息,如曲率、曲率导数、横向偏移和航向角。然而,在十字路口没有车道标记可以检测。在这种情况下,车道中心信息可以从一个预定义的参考路径估计。
的参考路径车道中心子系统根据当前的自我姿态和预先确定的参考路径计算车道中心信息。交换机已配置为使用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(注销);
检查结果。
的红绿灯状态—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(注销);
检查结果。
的红绿灯状态—TL传感器1情节与前面的模拟相同。
的相对纵向距离剧情从10.5秒开始偏离了之前的模拟运行。注意在10米左右的10秒处探测到交叉交通车辆。
的自我加速Plot还能快速响应10.6的交叉交通车辆。你可以注意到,在十字路口遇到交叉交通车辆时,会有一个硬刹车装置。
的自偏航角图中显示,自我车辆在14秒后开始左转,以回应驶离交叉口的交叉交通车辆。
关闭图。
关闭(hFigResults);
探索其他场景
的系统行为scenario_03_TLN_left_turn_with_lead_vehicle
而且scenario_02_TLN_left_turn_with_cross_over_vehicle
场景。下面是与之兼容的场景列表TrafficLightNegotiationTestBench
.
场景01_tln_left_turn场景02_tln_left_turn_with_crossover_vehicle[默认值]场景03_tln_left_turn_with_lead_vehicle场景04_tln_straight场景05_tln_straight with_lead_vehicle
使用这些附加的场景进行分析TrafficLightNegotiationTestBench
在不同的条件下。例如,在学习红绿灯决策逻辑和控件之间的交互时,从一个有红绿灯但没有车辆的十字路口的场景开始会很有帮助。要为这样的场景配置模型和工作区,使用以下代码:
helperSLTrafficLightNegotiationSetup (...“scenario_04_TLN_straight”);
启用MPC更新消息。
mpcverbosity (“上”);
结论
在本例中,您实现了红绿灯协商的决策逻辑,并在闭环Simulink模型中使用车道跟随控制器对其进行了测试。万博1manbetx