主要内容

Lane Keeping Assist with Lane Detection

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

在这个例子中,你:

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

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

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

介绍

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

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

这个例子演示了在车道检测数据可能不准确的情况下控制器设计的一种鲁棒方法。为此,它使用来自合成车道探测器的数据,模拟广角单目视觉相机引入的损伤。当来自传感器的数据无效或超出一个范围时,控制器就会做出决策。当由于环境条件(如道路上的急转弯)导致传感器测量错误时,这提供了一种安全防护。

开放式试验台模型

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

open_system (“LKATestBenchExample”)

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

  1. 车道保持辅助(Lane Keeping Assist),控制车辆的前转向角度

  2. 交通工具与环境子系统,它模拟自我交通工具的运动,模拟环境

打开这个模型也运行了helperLKASetUp脚本,它初始化模型使用的数据。脚本加载Simulink模型所需的某些常量,如车辆模型参数、控制器设计参数、道路场景、驾驶员路径等。你可以绘制道路和驾驶员模型将遵循的路径。

driverPath plotLKAInputs(场景)

模拟帮助一个分心的司机

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

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

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

sim卡(“LKATestBenchExample”,“StopTime”,“15”)%模拟15秒
假设没有干扰添加到测量的输出通道#1。——>假设在测量的输出通道2中添加的输出干扰是集成白噪声。——>”模式。“Noise”属性为空。假设每个测量输出上都有白噪声。ans =仿真软件。模拟Output: logsout: [1x1 Simulink.SimulationData.Dataset] tout: [4681x1 double] SimulationMetadata: [1x1 Simulink.SimulationMetadata] ErrorMessage: [0x0 char]

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

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

sim卡(“LKATestBenchExample”)%模拟到结束的场景plotLKAResults(场景、logsout driverPath)
假设没有干扰添加到测量的输出通道#1。——>假设在测量的输出通道2中添加的输出干扰是集成白噪声。——>”模式。“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值,忽略驾驶员输入,使控制器进入纯车道跟随模式。通过增加这个阈值,横向偏移总是在车道保持辅助设置的距离内。因此,车道偏离的状态是打开的,车道保持辅助一直处于控制状态。

set_param (“LKATestBenchExample /安全的横向偏移量”,“价值”,' 2 ') sim卡(“LKATestBenchExample”)%模拟到结束的场景
假设没有干扰添加到测量的输出通道#1。——>假设在测量的输出通道2中添加的输出干扰是集成白噪声。——>”模式。“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,也就是一直由Lane keep Assist控制。

  • 底部图显示了驾驶员和LKA的转向角度。驾驶员与弯道交涉的转向角度过于咄咄逼人。在本例中,来自LKA的小转向角度对于弯道已经足够了。

探索车道保持辅助算法

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

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

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

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

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

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

  • 预览曲率(源自Lane Detections)

  • 自我车辆纵向速度

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

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

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

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

探索车辆与环境

车辆和环境子系统实现了车道保持辅助控制器的闭环模拟。

open_system (“LKATestBenchExample /车辆和环境”)

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

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

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

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

为控制算法生成代码

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

hasEmbeddedCoderLicense =许可证(“签出”,“RTW_Embedded_Coder”)

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

如果hasEmbeddedCoderLicense slbuild (“LKARefMdl”)结束

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

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

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

结论

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

关闭所有bdclose所有

另请参阅

应用程序

相关的话题

Baidu
map