这个例子展示了如何模拟和生成一个汽车车道保持辅助(LKA)控制器的代码。
在这个例子中,你:
回顾一种控制算法,该算法结合了来自车道检测的数据处理和来自模型预测控制工具箱的车道保持控制器。
使用自动化驱动工具箱™生成的合成数据在闭环模拟模型中测试控制系统。金宝app
配置软件在环模拟的代码生成设置,并自动生成控制算法的代码。
车道保持辅助(LKA)系统是一种控制系统,有助于驾驶员在高速公路的标记车道内保持安全行驶。LKA系统检测到车辆何时偏离车道并自动调节转向以恢复车道内部的适当行程,而无需从驾驶员额外输入。在该示例中,LKA系统在驱动器转向命令和车道保持控制器之间切换。这种方法足以引入LKA系统的建模架构,但是真实系统还将向方向盘提供触觉反馈,并使驱动器能够通过施加足够的反扭矩来覆盖LKA系统。
为了让LKA正确地工作,自我车辆必须确定车道边界,以及它前面的车道如何转弯。理想的LKA设计主要依赖于预估的曲率、横向偏差和车道中心线与自我车辆之间的相对偏航角。文中给出了这样一个系统的例子使用模型预测控制的车道保持辅助系统(模型预测控制工具箱).从先进的驾驶辅助系统(ADAS)设计到更自动化的系统,LKA必须能够承受真实道路探测器的缺失、不完整或不准确的测量读数。
这个例子演示了当车道检测数据可能不准确时,控制器设计的鲁棒方法。为此,它使用了一个合成车道探测器的数据,该探测器模拟了广角单目视觉摄像机带来的损伤。当来自传感器的数据无效或超出范围时,控制器做出决定。当由于环境条件(如道路上的急转弯)而导致传感器测量错误时,这提供了一个安全保护。
要打开Simulink测金宝app试台模型,使用以下命令。
Open_System('lkatestbenchexample')
该模型包含两个主要子系统:
车道保持辅助,控制车辆的前转向角度
车辆和环境子系统,模拟自我车辆的运动和模型环境
打开此模型还可以运行helperLKASetUp
脚本,该脚本初始化模型使用的数据。脚本加载Simulink模型所需的某些常量,如车辆模型参数、控制器设计参数、道路场景、驾驶员路径等金宝app。您可以绘制驾驶员模型将遵循的道路和路径。
driverPath plotLKAInputs(场景)
您可以通过启用车道保持辅助和设置安全横向距离来探索算法的行为。在Simuli金宝appnk模型中用户控件节,切换到在,并设置安全的横向距离到1米。或者,使车道保持辅助和设置安全横向距离。
set_param('lkatestbenchexample / enable',“价值”,' 1 ') set_param ('lkatestbench表达/安全横向偏移',“价值”,' 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的安全横向偏移量,以忽略驱动器输入,将控制器放入纯通道后模式。通过增加该阈值,横向偏移始终在车道保持辅助装置设定的距离内。因此,车道偏离的地位开启,车道保持辅助一直控制控制。
set_param('lkatestbench表达/安全横向偏移',“价值”,' 2 ') sim卡('lkatestbenchexample')%模拟到场景结束
假设对测量的输出通道#1没有增加任何干扰。——>假设添加到测量输出通道2上的输出扰动为集成白噪声。——>”模式。mpc对象的Noise属性为空。假设每个测量输出通道上都有白噪声。
您可以使用以下命令探索模拟结果。
plotlkaresults(方案,logsout)
红色曲线表明,车道保持自己的辅助可以让自我车辆沿着泳道的中心线行进。
使用如下命令描述控制器性能。
plotLKAPerformance (logsout)
上面的图显示了相对于自我车辆的横向偏差。LKA的横向偏移在[-0.1,0.1]m范围内。
中间的图显示了相对偏航角。LKA的相对偏航角在[-0.02,0.02]rad范围内。
下面的图显示了自我车辆的转向角度。带LKA的转向角在[-04,0.04] Rad内。
使用实例查询控制器状态。
plotLKAStatus (logsout)
上面的图显示了左和右车道偏移。由于横向偏移永远不会在车道保持辅助装置设定的距离内,因此未检测到车道偏离。
中间图显示LKA状态始终为1,即车道保持辅助一直处于控制状态。
底部图显示的方向盘角度从司机和LKA。驾驶员在转弯时的转向角度太大了。在这个例子中,LKA的小转向角度对于弯曲的道路来说是足够的。
车道保持辅助模型包含四个主要部分:1)估计泳道中心2)车道保持控制器3)检测车道偏离,4)施加辅助。
Open_System('lkatestbenchexample / lane保持助攻')
当车辆太靠近检测到的车道时,检测车道偏离子系统输出的信号为真。当车辆与车道边界之间的偏移量小于车道辅助偏移量输入时,检测到偏离。
车道中心估计子系统将车道传感器的数据输出到车道保持控制器。本例中的检测器被配置为报告摄像机当前视场中当前车道的左右车道边界。每个边界被建模为曲线的长度,其曲率随距离线性变化(梭形曲线)。为了将这些数据输入控制器,将两条检测到的曲线向车道中心偏移,偏移距离为汽车的宽度和一个小的余量(总计1.8米)。根据检测的强度对每条中心线进行加权,并将平均结果传递给控制器。此外,车道中心估计子系统为车道保持控制器子系统的输入提供了有限的值。预估的曲率提供了自我车辆前面的车道曲率的中心线。在这个例子中,自我飞行器可以向前看3秒,这是预测视界和样本时间的乘积。这种提前时间使控制器能够使用预先获得的信息来计算ego车辆的转向角度,从而提高MPC控制器的性能。
车道保持控制器模块的目标是通过控制前转向角度使车辆保持在车道上并跟随弯曲的道路.这一目标是通过驱动侧向偏移来实现的相对偏航角变小(见下图)。
基于以下输入,LKA控制器根据以下输入计算自我车辆的转向角:
预览的曲率(从车道检测中得到)
自我车辆纵向速度
横向偏差(由车道检测得到)
相对横摆角(来自车道检测)
考虑到自我车辆的物理限制,转向角受到约束为在[-0.5,0.5] rad内。您可以更改预测地平线或移动控制器的行为滑块调节控制器的性能。
Apply Assist子系统决定是车道保持控制器还是驾驶员控制自我车辆。子系统在驾驶员指令转向和车道保持控制器的辅助转向之间进行切换。当检测到车道偏离时,辅助转向开关启动。当驾驶员再次开始在车道内驾驶时,控制权将交还给驾驶员。
车辆和环境子系统能够实现车道保持辅助控制器的闭环仿真。
Open_System(“LKATestBenchExample /车辆和环境”)
车辆动力学子系统使用来自车辆动力学模块集™的车身3DOF单轨块对车辆动力学进行建模。
的场景的读者Block根据车辆相对于从场景文件中读取的场景的位置生成理想的左车道和右车道边界LKATestBenchScenario.mat
.
视觉检测生成器块从场景读取器块中获取理想的车道边界。检测发生器对单目摄像机的视场进行建模,确定每个道路边界的航向角、曲率、曲率导数和有效长度,并考虑任何其他障碍。
驾驶员子系统根据在中创建的驾驶员路径生成驾驶员转向角度helperLKASetUp
.
的LKARefMdl
模型配置为支持使用嵌入式编码器软件生成C代码。金宝app要检查您是否可以访问嵌入式编码器,请运行:
hasEmbeddedCoderLicense =许可证('查看',“RTW_Embedded_Coder”)
您可以为模型生成一个C函数,并通过运行以下命令来探索代码生成报告:
如果hasEmbeddedCoderLicense slbuild (“LKARefMdl”)结束
您可以使用在循环中的软件(SIL)模拟来验证编译后的C代码是否如预期的那样运行。模拟LKARefMdl
SIL模式下的参考模型,使用:
如果hasEmbeddedCoderLicense set_param ('lkatestbenchexample / lane保持助攻',...“SimulationMode”,“Software-in-the-loop (SIL)”)结束
当你运行LKATestBenchExample
模型,则生成、编译和执行代码LKARefMdl
模型。这使您能够通过模拟测试已编译代码的行为。
这个例子展示了如何在带有车道检测的弯曲道路上实现综合车道保持辅助(LKA)控制器。它还展示了如何在Simulink中使用由自动驾驶工具箱生成的合成数据测试控制器,将其组组金宝app化,并自动生成代码。
关闭全部bdclose全部