主要内容

车道保持辅助车道检测

这个例子展示了如何模拟和生成一个汽车车道保持辅助(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上的输出扰动为集成白噪声。——>”模式。mpc对象的Noise属性为空。假设每个测量输出通道上都有白噪声。ans =仿金宝app真软件。模拟Output: logsout: [1x1 Simulink.SimulationData.Dataset] tout: [4682x1 double] SimulationMetadata: [1x1 Simulink.SimulationMetadata] ErrorMessage: [0x0 char]

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

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

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

驾驶员路径的蓝色曲线表明,当道路曲率改变时,分心的驾驶员可能会将自我车辆驾驶到另一条车道。使用车道保持辅助的驾驶员的红色曲线表明,当道路曲率改变时,自我车辆仍然保持在车道上。

使用下面的命令绘制控制器性能图。

plotLKAPerformance (logsout)

  • 上面的图显示了相对于自我车辆的横向偏差。LKA的横向偏移在[-0.5,0.5]m范围内。

  • 中间的图显示了相对偏航角。LKA的相对偏航角在[-0.15,0.15]rad内。

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

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

plotLKAStatus (logsout)

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

  • 中间的图是LKA状态和车道偏离检测。探测到的偏离状态与上面的图一致。当检测到车道偏离时,LKA就会启动,但当驾驶员能够正确驾驶自我车辆时,控制权就会返回给驾驶员。

  • 底部图显示的方向盘角度从司机和LKA。当驾驶员与LKA的转向角度差很小时,LKA将控制权交给驾驶员(例如9 - 17秒)。

模拟后巷

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

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

您可以使用以下命令探索模拟的结果。

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米)。根据检测的强度对每条中心线进行加权,并将平均结果传递给控制器。此外,车道中心估计子系统为车道保持控制器子系统的输入提供了有限的值。预估的曲率提供了自我车辆前面的车道曲率的中心线。在这个例子中,自我飞行器可以向前看3秒,这是预测视界和样本时间的乘积。这种提前时间使控制器能够使用预先获得的信息来计算ego车辆的转向角度,从而提高MPC控制器的性能。

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

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

  • 预览的曲率(从车道检测中得到)

  • 自我车辆纵向速度

  • 横向偏差(由车道检测得到)

  • 相对偏航角(由车道检测得到)

考虑到ego车辆的物理限制,转向角度被限制在[-0.5,0.5]rad内,你可以改变预测地平线或移动控制器的行为滑块调节控制器的性能。

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

探索车辆与环境

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

open_system (“LKATestBenchExample /车辆和环境”

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

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

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

驾驶员子系统根据在中创建的驾驶员路径生成驾驶员转向角度helperLKASetUp

为控制算法生成代码

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

hasEmbeddedCoderLicense =许可证(“签出”“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所有

另请参阅

应用程序

相关的话题