主要内容

车道保持辅助车道检测

这个例子展示了如何模拟和生成一个汽车车道保持辅助(LKA)控制器的代码。

在这个例子中,你:

  1. 回顾一种控制算法,它结合了车道检测数据处理和模型预测控制工具箱中的车道保持控制器。

  2. 使用自动驾驶工具箱生成的合成数据在闭环Simulink®模型中测试控制系统。金宝app

  3. 配置软件在环仿真的代码生成设置,并自动生成控制算法的代码。

简介

车道保持辅助(LKA)系统是一种控制系统,帮助司机在高速公路上有标志的车道内保持安全行驶。LKA系统检测车辆何时偏离车道,并自动调整转向以恢复车道内的正常行驶,而无需驾驶员额外输入。在本例中,LKA系统在驾驶员转向命令和车道保持控制器之间切换。这种方法足以为LKA系统引入建模架构,然而,真正的系统还将向方向盘提供触觉反馈,并使驾驶员能够通过施加足够的反扭矩来覆盖LKA系统。

为了使LKA正常工作,自我车辆必须确定车道边界以及前面车道的弯曲方式。理想的LKA设计主要依赖于预览曲率、横向偏差和车道中心线与自我车辆之间的相对偏航角。文中给出了这种系统的一个例子基于模型预测控制的车道保持辅助系统(模型预测控制工具箱).从先进的驾驶辅助系统(ADAS)设计到更自主的系统,LKA必须对来自真实车道探测器的缺失、不完整或不准确的测量读数具有鲁棒性。

当车道检测数据可能不准确时,该示例演示了控制器设计的鲁棒方法。为了做到这一点,它使用了来自合成车道探测器的数据,该探测器模拟了广角单目视觉摄像机带来的损伤。当来自传感器的数据无效或超出范围时,控制器做出决策。当传感器测量由于环境条件(如道路上的急转弯)而错误时,这提供了一个安全保护。

开放式试验台模型

要打开Simulink测金宝app试台架模型,使用以下命令。

open_system (“LKATestBenchExample”

该模型包含两个主要子系统:

  1. 车道保持辅助,控制车辆的前转向角度

  2. 车辆与环境子系统,它对自我车辆的运动和环境进行建模

打开此模型还将运行helperLKASetUp脚本,它初始化模型使用的数据。该脚本加载Simulink模型所需的某些常量,如车辆模型参数、控制器设计参数、道路场景、驾驶员路径金宝app等。您可以绘制道路和驱动程序模型将遵循的路径。

driverPath plotLKAInputs(场景)

模拟协助一个分心的司机

您可以通过启用车道保持辅助和设置安全横向距离来探索算法的行为。在Simuli金宝appnk模型中用户控件节,切换到,并设置安全横向距离到1米。或者,启用车道保持辅助,并设置安全的横向距离。

set_param (“LKATestBenchExample /启用”“价值”' 1 ') set_param ('LKATestBenchExample/安全横向偏移'“价值”' 1 '

要绘制模拟的结果,请使用鸟瞰的范围.Bird's-Eye Scope是一个模型级可视化工具,可以从Simulink工具条中打开。金宝app在模拟选项卡,在审查结果,点击鸟瞰的范围.打开作用域后,单击找到信号设置信号。然后运行模拟15秒,探索鸟瞰瞄准镜的内容。

sim卡(“LKATestBenchExample”“StopTime”“15”%模拟15秒
假设测量的输出通道1没有任何扰动。假设添加到测量输出通道#2的输出扰动是集成白噪声。——>”模式。“噪音”属性为空。假设每个测量输出都有白噪声。ans = 金宝appSimulink。模拟Output: logsout: [1x1 Simulink.SimulationData.Dataset] tout: [4682x1 double] SimulationMetadata: [1x1 Simulink.SimulationMetadata] ErrorMessage: [0x0 char]

鸟瞰瞄准镜从自我车辆的角度展示了道路的象征性表征。在这个例子中,Bird's-Eye Scope将合成视觉检测器的覆盖区域渲染为阴影区域。另外还显示了理想的车道标记,以及综合检测到的左右车道边界(这里用红色表示)。

要运行完整的模拟并研究结果,请使用以下命令。

sim卡(“LKATestBenchExample”%模拟到场景结束plotLKAResults(场景、logsout driverPath)
假设测量的输出通道1没有任何扰动。假设添加到测量输出通道#2的输出扰动是集成白噪声。——>”模式。“噪音”属性为空。假设每个测量输出都有白噪声。

驾驶员路径的蓝色曲线表示,当道路曲率发生变化时,分心的驾驶员可能会将自己的车辆开到另一条车道。车道保持辅助驾驶员的红色曲线表明,当道路曲率发生变化时,自我车辆仍保持在其车道上。

使用实例绘制控制器性能图。

plotLKAPerformance (logsout)

  • 上图显示了相对于自我飞行器的横向偏差。LKA的横向偏差在[-0.5,0.5]m以内。

  • 中间图为相对偏航角。与LKA的相对偏航角在[-0.15,0.15]rad以内。

  • 下图显示了自我车辆的转向角度。LKA的转向角在[-0.5,0.5]rad以内。

使用实例查询控制器状态。

plotLKAStatus (logsout)

  • 上图显示了左右车道的偏移量。在5.5秒、19秒、31秒和33秒左右,侧向偏移在车道保持辅助设定的距离内。当这种情况发生时,将检测到车道偏离。

  • 中间图为LKA状态和车道偏离检测。检测到的离场状态与顶部图一致。当检测到车道偏离时,LKA会打开,但当驾驶员能够正确驾驶车辆时,控制权会交还给驾驶员。

  • 下图显示了驾驶员和LKA的转向角度。当驾驶员的转向角度与LKA的转向角度相差很小时,LKA将控制权释放给驾驶员(例如在9s ~ 17s之间)。

模拟车道跟踪

您可以修改LKA的Safe Lateral Offset值以忽略驱动器输入,使控制器进入纯车道跟随模式。通过增加这个阈值,横向偏移总是在车道保持辅助设置的距离内。因此,车道偏离状态是开启的,车道保持辅助一直处于控制状态。

set_param ('LKATestBenchExample/安全横向偏移'“价值”' 2 ') sim卡(“LKATestBenchExample”%模拟到场景结束
假设测量的输出通道1没有任何扰动。假设添加到测量输出通道#2的输出扰动是集成白噪声。——>”模式。“噪音”属性为空。假设每个测量输出都有白噪声。

您可以使用以下命令查看模拟的结果。

logsout plotLKAResults(场景)

红色曲线表示车道保持辅助系统本身可以让车辆沿着车道的中心线行驶。

使用实例描述控制器性能。

plotLKAPerformance (logsout)

  • 上图显示了相对于自我飞行器的横向偏差。LKA的横向偏差在[-0.1,0.1]m以内。

  • 中间图为相对偏航角。与LKA的相对偏航角在[-0.02,0.02]rad以内。

  • 下图显示了自我车辆的转向角度。LKA的转向角在[-0.04,0.04]rad以内。

使用实例查询控制器状态。

plotLKAStatus (logsout)

  • 上图显示了左右车道的偏移量。由于横向偏移从来不在车道保持辅助设置的距离内,因此不会检测到车道偏离。

  • 中间图显示LKA状态始终为1,即车道保持辅助一直处于控制状态。

  • 下图显示了驾驶员和LKA的转向角度。司机与弯道交涉时的转向角度太激进了。在这个例子中,LKA的小转向角度对于弯曲的道路是足够的。

探索车道保持辅助算法

车道保持辅助模型包括四个主要部分:1)估计车道中心2)车道保持控制器3)检测车道偏离和4)应用辅助。

open_system (“LKATestBenchExample/车道保持辅助”

检测车道偏离子系统输出一个信号,当车辆太接近检测车道时为真。当车道传感器的车辆与车道边界之间的偏移量小于车道辅助偏移量输入时,您可以检测到偏离。

车道估计中心子系统将车道传感器的数据输出到车道保持控制器。本例中的检测器被配置为报告摄像机当前视场中当前车道的左右车道边界。每个边界被建模为曲线的长度,其曲率随距离线性变化(回旋线曲线)。为了将这些数据输入控制器,将检测到的两条曲线向车道中心偏移,偏移幅度为汽车的宽度和一个小的余量(总共1.8米)。通过检测强度对每个结果居中曲线进行加权,并将平均结果传递给控制器。此外,估计车道中心子系统为车道保持控制器子系统的输入提供有限值。预览曲率提供了自我车辆前方车道曲率的中心线。在这个例子中,自我车辆可以向前看三秒,这是预测视界和样本时间的乘积。这种前瞻时间使控制器能够使用预览信息来计算车辆的转向角度,从而提高了MPC控制器的性能。

车道保持控制器块的目标是保持车辆在其车道上,并通过控制前转向角度跟随弯曲的道路\三角洲美元.这一目标是通过驱动横向偏移来实现的e_1美元和相对偏航角e_2美元要小(见下图)。

LKA控制器根据以下输入计算ego车辆的转向角度:

  • 预览曲率(来源于车道检测)

  • 自我车辆纵向速度

  • 横向偏差(来源于车道检测)

  • 相对偏航角(来源于车道检测)

考虑到自我车辆的物理限制,转向角度被限制在[-0.5,0.5]rad以内。您可以更改预测视界或移动控制器的行为滑块调节控制器的性能。

应用辅助子系统决定是车道保持控制器还是驾驶员控制车辆。子系统在驾驶员指令转向和车道保持控制器的辅助转向之间切换。切换到辅助转向是启动时,车道偏离检测。当驾驶员再次在车道内开始转向时,控制权交还给驾驶员。

探索车辆与环境

车辆与环境子系统实现了车道保持辅助控制器的闭环仿真。

open_system (“LKATestBenchExample/车辆与环境”

车辆动力学子系统使用来自车辆动力学块集™的车体3DOF单轨道块对车辆动力学进行建模。

场景的读者Block根据车辆相对于从场景文件中读取的场景的位置生成理想的左右车道边界LKATestBenchScenario.mat

视觉检测生成器块从场景读取器块中获取理想的车道边界。检测发生器对单目摄像机的视场进行建模,并确定航向角度、曲率、曲率导数和每条道路边界的有效长度,并考虑任何其他障碍物。

驱动子系统根据创建的驱动路径生成驱动转向角度helperLKASetUp

生成控制算法的代码

LKARefMdl模型配置为支持使用Embedded Coder金宝app®软件生成C代码。要检查是否可以访问Embedded Coder,请运行:

hasEmbeddedCoderLicense = license(“签出”“RTW_Embedded_Coder”

您可以为模型生成一个C函数,并通过运行以下命令查看代码生成报告:

如果hasEmbeddedCoderLicense slbuild (“LKARefMdl”结束

您可以使用软件在循环(SIL)模拟来验证已编译的C代码的行为是否符合预期。为了模拟LKARefMdlSIL模式下的参考模型,使用:

如果hasEmbeddedCoderLicense set_param (“LKATestBenchExample/车道保持辅助”...“SimulationMode”“Software-in-the-loop (SIL)”结束

当你运行LKATestBenchExample的模型、代码生成、编译和执行LKARefMdl模型。这允许您通过模拟测试已编译代码的行为。

结论

本例展示了如何在具有车道检测功能的弯曲道路上实现集成车道保持辅助(LKA)控制器。它还展示了如何在Simulink中使用自动驾驶工具箱生成的合成数据测试控制器,将其组件化金宝app,并自动为其生成代码。

关闭所有bdclose所有

另请参阅

应用程序

相关的话题