这个例子展示了如何模拟和生成一个汽车车道保持辅助(LKA)控制器的代码。
在这个例子中,你:
回顾一种结合了车道检测数据处理和模型预测控制工具箱中的车道保持控制器的控制算法。
使用自动驾驶工具箱™生成的合成数据在闭环Simulink模型中测试控制系统。万博1manbetx
配置软件在环仿真的代码生成设置,并自动生成控制算法的代码。
车道保持辅助(LKA)系统是一种帮助驾驶员在高速公路有标志的车道内保持安全行驶的控制系统。当车辆偏离车道时,LKA系统会自动调整转向以恢复车道内的正常行驶,而无需驾驶员的额外输入。在本例中,LKA系统在驾驶员转向命令和车道保持控制器之间切换。这种方法足以为LKA系统引入一个建模架构,然而一个真正的系统也将向方向盘提供触觉反馈,并使驾驶员能够通过施加足够的反扭矩来覆盖LKA系统。
为了让LKA正常工作,自我车辆必须确定车道边界和前面的车道如何转弯。理想的LKA设计主要依赖于预估的曲率、横向偏差和车道中心线与自我车辆之间的相对偏航角。文中给出了这种系统的一个例子基于模型预测控制的车道保持辅助系统.从先进的驾驶辅助系统(ADAS)设计到更自主的系统,LKA必须对来自真实车道探测器的缺失、不完整或不准确的测量读数具有健壮性。
这个例子演示了在车道检测数据可能不准确的情况下,控制器设计的一种鲁棒方法。为此,它使用合成车道探测器的数据来模拟广角单目视觉相机带来的损伤。当来自传感器的数据无效或超出范围时,控制器做出决策。当由于环境条件(如道路上的急转弯)导致传感器测量错误时,这提供了一个安全防护。
要打开Simulink测万博1manbetx试台架模型,使用以下命令。
open_system (“LKATestBenchExample”)
该模型包含两个主要子系统:
车道保持辅助,控制车辆的前转向角度
车辆和环境子系统,它模拟自我车辆的运动和环境模型
打开此模型还会运行helperLKASetUp
脚本,它初始化模型使用的数据。该脚本加载Simulink模型所需的某些常量,如车辆模型参数、控制器设计参数、道路场景和驾驶员路径万博1manbetx。您可以绘制道路和路径,驾驶员模型将遵循。
driverPath plotLKAInputs(场景)
您可以通过启用车道保持辅助和设置安全横向距离来探索算法的行为。在Simuli万博1manbetxnk模型中用户控件Section,把切换开关切换到在,并设置安全横向距离到1米。或者,启用车道保持辅助和设置安全横向距离。
set_param (“LKATestBenchExample /启用”,“价值”,' 1 ') set_param ('LKATestBenchExample/安全横向偏移',“价值”,' 1 ')
要绘制模拟的结果,请使用鸟瞰的范围(自动驾驶工具箱).Bird’s- eye Scope是一个模型级可视化工具,您可以从Simulink工具条中打开它。万博1manbetx在模拟选项卡,在审查结果,点击鸟瞰的范围.打开范围后,单击找到信号设置信号。然后运行模拟15秒,探索鸟眼瞄准镜的内容。
sim卡(“LKATestBenchExample”,“StopTime”,“15”)%模拟15秒
假设对测量的1号输出通道没有干扰。假设输出干扰添加到测量输出通道2是集成白噪声。——>”模式。mpc对象的Noise属性为空。假设每个被测输出通道都有白噪声。ans = 万博1manbetxSimulink。模拟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]弧度内。
使用实例查询控制器的状态。
plotLKAStatus (logsout)
上面的图显示了左右车道的偏移。在5.5秒、19秒、31秒、33秒左右,横向偏移在车道保持辅助设定的距离内。当发生这种情况时,将检测到车道偏离。
中间图显示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秒,这是预测视界和样本时间的乘积。这种前瞻时间使控制器能够使用预估信息来计算自我车辆的转向角度,从而提高MPC控制器的性能。
车道保持控制器块的目标是保持车辆在其车道上,并通过控制前转向角度跟随弯曲的道路.这一目标是通过驱动横向偏移来实现的和相对偏航角要小(见下图)。
LKA控制器根据以下输入计算自我车辆的转向角度:
预估的曲率(源自车道检测)
自我车辆纵向速度
横向偏差(源自车道检测)
相对偏航角(由车道检测得出)
考虑到自我车辆的物理限制,转向角度被限制在[-0.5,0.5]rad以内。您可以更改预测地平线或移动控制器的行为滑块来调整控制器的性能。
应用辅助子系统决定是车道保持控制器还是驾驶员控制自我车辆。子系统在驾驶员指令转向和车道保持控制器的辅助转向之间切换。当检测到车道偏离时,将启动辅助转向开关。当驾驶员再次开始在车道内转向时,控制权就会交还给驾驶员。
车辆和环境子系统实现了车道保持辅助控制器的闭环仿真。
open_system (“LKATestBenchExample/车辆与环境”)
车辆动力学子系统使用车辆动力学Blockset™中的车辆车身3DOF单轨道块对车辆动力学进行建模。
的场景的读者(自动驾驶工具箱)块根据从场景文件中读取的场景中车辆的位置生成理想的左右车道边界LKATestBenchScenario.mat
.
视觉检测生成器块从场景读取器块获得理想的车道边界。检测生成器对单眼相机的视场进行建模,并确定航向角、曲率、曲率导数和每条道路边界的有效长度,考虑任何其他障碍。
驱动子系统根据创建的驱动路径生成驱动转向角度helperLKASetUp
.
的LKARefMdl
模型被配置为支持使用Embedded Code万博1manbetxr软件生成C代码。要检查您是否可以访问Embedded Coder,请运行:
hasEmbeddedCoderLicense = license(“签出”,“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中测试控制器,将其组件化万博1manbetx,并为其自动生成代码。
关闭所有bdclose所有