这个例子展示了如何设计和测试在十字路口通过交通灯的决策逻辑。
通过交通灯的决策逻辑是自动驾驶应用程序的基本组成部分。决策逻辑必须对诸如交通灯和周围车辆的状态等输入做出反应。然后,决策逻辑为控制器提供所需的速度和路径。由于交通灯交叉路口的测试是危险的,模拟这样的驾驶场景可以洞察决策逻辑和控制器之间的相互作用。
本例说明如何设计和测试协商红绿灯的决策逻辑。本例中的决策逻辑对红绿灯状态、与红绿灯的距离以及与前方最近车辆的距离作出反应。在本例中,您将:
探索试验台模型:该模型包含交通灯传感器和环境、交通灯决策逻辑、控制和车辆动力学。
交通灯决策逻辑模型:交通灯决策逻辑在引导车辆和即将到来的交通灯之间进行仲裁。它还为ego车辆在没有车道的十字路口提供参考路径。
模拟一个有红绿灯和前车的左转:该模型被配置为测试交通灯决策逻辑和自我车辆控制之间的相互作用,当接近一个十字路口的前车存在。
模拟有红绿灯和交叉路口的左转:该模型用于测试交叉口存在交叉交通时交通灯决策逻辑与自我车辆控制之间的交互作用。
探索其他场景:这些场景在附加条件下测试系统。
您可以应用本示例中使用的建模模式来测试您自己的决策逻辑和控制以通过交通灯。
要探索测试台模型,请打开项目示例文件的工作副本。MATLAB®将文件复制到示例文件夹中,以便您可以对其进行编辑。
目录(fullfile (matlabroot,“工具箱”,“开车”,“drivingdemos”)); helperDrivingProjectSetup(“TrafficLightNegotiation.zip”,“workDir”pwd);
探索红绿灯协商制度的行为,打开系统仿真试验台模型。
Open_System(“TrafficLightNegotiationTestBench”);
打开这个模型运行helperSLTrafficLightNegotiationSetup
脚本,该脚本使用drivingScenario
对象在底座的工作区。它运行默认的测试场景,scenario_02_TLN_left_turn_with_cross_over_vehicle
,包含一辆ego车辆和两辆其他车辆。此设置脚本还配置控制器设计参数、车辆模型参数和定义车辆输入和输出所需的Simulink®总线信号金宝appTrafficLightNegotiationTestBench
模型。
测试台模型包含以下子系统:
传感器和环境:建模交通灯传感器,道路网络,车辆,相机和雷达传感器用于模拟。
交通灯决策逻辑:交通灯和其他引线车辆或跨界车在交叉路口之间进行仲裁。
Lane-Following控制器:生成纵向和横向控制。
车辆动力学:模型使用自主车辆自行车模型块,并更新从所接收的命令使用它的状态车道跟踪控制器子系统。
可视化:绘制仿真过程中路网、车辆、交通灯状态的世界坐标视图。
的车道跟踪控制器参考模型和车辆动力学子系统从重用高速公路车道后的例子。本例的重点是传感器和环境和交通灯决策逻辑子系统。
的传感器和环境子系统配置道路网络,定义目标车辆轨迹,并合成传感器。打开传感器和环境子系统。
Open_System(“TrafficLightNegotiationTestBench /传感器和环境”);
ego车辆上的场景和传感器由子系统的以下部分指定:
的场景的读者模块配置为接收ego车辆信息以执行闭环模拟。它输出ego车辆坐标中车道和参与者的地面真实信息。该模块读取drivingScenario
对象变量,场景
,其中包含一个与之兼容的道路网络TrafficLightNegotiationTestBench
模型。
绘制场景提供的道路网络。
hFigScenario =图('位置',[1 1 800 600]);图(场景,“家长”轴(hfig场景);
这个默认场景有一个十字路口,有一辆自我车辆、一辆前导车辆和一辆交叉交通车辆。
关闭图。
关闭(hFigScenario);
的跟踪与传感器融合子系统从驾驶雷达数据发生器和视觉检测发电机通过使用多目标跟踪块提供围绕自我车辆的物体轨迹。
视觉检测发生器块还提供关于自助式车辆的通道检测,其有助于识别在自助泳道中存在的车辆。
的交通灯传感器子系统模拟交通灯。它被配置为在十字路口支持四个交通灯传感器金宝app,TL传感器1,TL传感器2,TL传感器3和TL传感器4.
使用交通灯传感器绘制场景。
hFigScenario = helperPlotScenarioWithTrafficLights();
注意,这是相同的情况和以前一样,只是添加了红绿灯的传感器。这些传感器通过在交叉点处红色圆圈,表示红色交通灯表示。对于交通信号灯的标签1,2,3.,4对应TL传感器1,TL传感器2,TL传感器3和TL传感器4,分别。
关闭图。
关闭(hFigScenario);
中的测试场景TrafficLightNegotiationTestBench
配置为使ego车辆与TL传感器1.有三种配置方式交通灯传感器子系统:
稳定的红色:TL传感器1和TL传感器3总是处于红色状态。另外两个交通灯总是处于绿色状态。
稳绿:TL传感器1和TL传感器3总是处于绿色状态。另外两个红绿灯总是处于红色状态。
循环[默认]:TL传感器1和TL传感器3遵循一个循环模式:带有预定义时间的绿-黄-红。其他的交通灯也遵循循环模式:红绿黄,带有预定义的时间来补充TL传感器1和TL传感器3.
可以使用这些模式之一来配置这个子系统交通灯传感器模式
面具参数。
打开交通灯传感器子系统。
Open_System(“交通灯谈判测试台/传感器和环境/交通灯传感器”,“力”);
的交通灯转换逻辑statflow®图表实现了四个交通灯传感器的交通灯状态变化逻辑。所有交通灯的初始状态都设置为红色。切换到不同的模式是基于触发条件定义的自我车辆的距离TL传感器1交通灯。此距离由变量定义与交通灯的距离
.如果此距离小于,将触发交通灯转换trafficLightStateTriggerThreshold
。此阈值当前设置为60米,可以在helperSLTrafficLightNegotiationSetup
剧本
计算到交通灯块的距离与交通灯的距离
使用交通灯的位置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
和红光和黄光检测
.如果交通灯状态为绿色或没有交通灯检测到,状态保持为OnEntry
状态。如果交通灯状态为红色或黄色,则状态转换为红光和黄光检测
状态。控制流在这些状态之间切换基于交通灯检测
和与交通灯的距离
变量。在每个状态中,相对距离和相对于所述最重要的对象(MIO)相对速度被计算。铅车辆和红灯被视为MIOS。
OnEntry:
relativeDistance=relativeDistToLeadCar
;
relativeVelocity=领头车的relativeVelocity
;
红光和黄光检测:
relativeDistance = min (relativeDistToLeadCar distanceToTrafficLight)
;
relativeVelocity =分钟(relativeVelocityOfLeadCar,longitudinalVelocity)
;
的longitudinalVelocity代表自我载体的纵向速度。
计算到交集的距离块计算从当前自我位置到交集中心的距离。因为十字路口没有车道,自我车辆使用这个距离返回到十字路口预定义的参考路径。
的车道中心决策逻辑子系统计算所要求的车道信息中心路径跟踪控制系统(模型预测控制工具箱).打开车道中心决策逻辑子系统。
Open_System(“TrafficLightDecisionLogic /车道中央决策逻辑”);
的车道中心决策逻辑子系统主要依赖于车道检测视觉检测发电机块估计车道中心信息,如曲率,曲率导数,横向偏移,和方向角。然而,在十字路口没有车道标记来检测。在这种情况下,可以从一个预定义的参考路径估计车道中心信息。
的参考路径车道中心子系统根据当前的自我位姿和预定义的参考路径计算车道中心信息。交换机已配置为使用LaneCenterFromReferencePath当DistanceToIntersection小于referencePathSwitchThreshold
.这个门槛目前设置为20米,并可以在helperSLTrafficLightNegotiationSetup
剧本
在本测试场景中,引导车辆在ego车道上行驶并穿过交叉口。引导车辆的交通灯状态保持绿色,ego车辆变为红色。ego车辆应跟随引导车辆,越过交通灯并左转。
配置TrafficLightNegotiationTestBench
模型来使用scenario_03_TLN_left_turn_with_lead_vehicle
场景。
helperSLTrafficLightNegotiationSetup(“scenario_03_TLN_left_turn_with_lead_vehicle”);要减少命令窗口输出,首先关闭MPC更新消息。MPC可靠性('离开');%模拟模型。模拟(“TrafficLightNegotiationTestBench”);
绘制仿真结果。
hFigResults = helperPlotTrafficLightNegotiationResults(logsout);
检查结果。
的交通灯状态- TL传感器1图示出的交通灯的传感器状态TL传感器1.它从绿色变成黄色,然后从黄色变成红色,然后重复循环模式。
的相对纵向距离图显示了自我载体和MIO之间的相对距离。注意,自我车辆在0秒到4.2秒之间跟随领先车辆,与它保持安全距离。你还可以观察到,从4.2秒到9秒,这个距离会减少,因为红色交通灯被检测为MIO。也请注意,当前车超过MIO允许的最大距离后,没有MIO时,表示无限距离的间隙。
的自我加速图显示从加速曲线车道跟踪控制器.注意从4.2秒到4.7秒的负加速,这是对红色交通灯作为一个MIO的检测的反应。你也可以在9秒后观察到加速的增加,这是对绿灯的反应。
的自我偏航角图中显示了ego车辆的横摆角曲线。注意12秒后,该曲线的变化,以响应ego车辆左转。
关闭图。
关闭(hFigResults);
这个测试场景是对前一个场景的扩展。除了前面的条件,在这个场景中,当交通灯是绿色的时候,一个缓慢移动的交叉交通车辆在十字路口。自我车辆应等待交叉交通车辆通过十字路口后再左转弯。
配置TrafficLightNegotiationTestBench
模型来使用scenario_02_TLN_left_turn_with_cross_over_vehicle
场景。
helperSLTrafficLightNegotiationSetup(“scenario_02_TLN_left_turn_with_cross_over_vehicle”);%模拟模型。模拟(“TrafficLightNegotiationTestBench”);
绘制仿真结果。
hFigResults = helperPlotTrafficLightNegotiationResults(logsout);
检查结果。
的交通灯状态- TL传感器1绘图与上一次模拟中的绘图相同。
的相对纵向距离从10.5秒开始,绘图与上一次模拟运行不同。请注意,在10秒左右10米处,交叉交通车辆检测为MIO。
的自我加速在10.6还积快速响应路口交通车辆。您可以在交叉口响应路口交通车辆注意硬制动曲线。
的自我偏航角图中显示,ego车辆在14秒后开始左转,以响应交叉交通车辆离开交叉口。
关闭图。
关闭(hFigResults);
在前面的章节中,您探索的系统行为scenario_03_TLN_left_turn_with_lead_vehicle
和scenario_02_TLN_left_turn_with_cross_over_vehicle
场景。下面是兼容的场景列表TrafficLightNegotiationTestBench
.
场景\u 01 \u TLN\u左转场景\u 02 \u TLN\u左转与车辆交叉[默认]场景\u 03 \u TLN\u左转与车辆引导场景\u 04 \u TLN\u直行场景\u 05 \u TLN\u直行与车辆引导
使用这些额外的场景进行分析TrafficLightNegotiationTestBench
在不同条件下。例如,在学习交通灯决策逻辑和控制之间的交互时,从一个交叉口有交通灯但没有车辆的场景开始可能会有所帮助。要为这种场景配置模型和工作区,请使用以下代码:
helperSLTrafficLightNegotiationSetup(“方案04直接”);
启用MPC更新消息。
MPC可靠性(“上”);
在本例中,您实现了交通灯协商的决策逻辑,并在闭环Simulink模型中使用车道跟踪控制器对其进行了测试。金宝app