打印

基于MATLAB的车道保持辅助车道检测

[复制链接]
5933|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
此示例显示如何模拟和生成汽车车道保持辅助(LKA)控制器的代码。

在此示例中,您将:

检查控制算法,该算法结合了来自车道检测的数据处理和来自Model Predictive Control Toolbox™的车道保持控制器。

使用Automated Driving System Toolbox™生成的合成数据在闭环Simulink模型中测试控制系统。

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

介绍
车道保持辅助系统(LKA)是一种控制系统,可帮助驾驶员在高速公路的标记车道内保持安全行驶。LKA系统检测车辆何时偏离车道并自动调节转向以恢复车道内的正确行驶,而无需驾驶员的额外输入。在该示例中,LKA系统在驾驶员转向命令和车道保持控制器之间切换。该方法足以引入用于LKA系统的建模架构,然而真实系统还将向方向盘提供触觉反馈并且使得驾驶员能够通过施加足够的反扭矩来超越LKA系统。

为了使LKA正常工作,自我车必须确定车道边界以及车道前方的车道如何弯曲。理想化的LKA设计主要依赖于预测的曲率,横向偏差以及车道中心线和自我车之间的相对偏航角。在使用模型预测控制(模型预测控制工具箱)的车道保持辅助系统中给出了这种系统的示例。从ADAS设计转向更自主的系统,LKA必须能够对来自真实世界车道检测器的缺失,不完整或不准确的测量读数进行检测。

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

将示例文件文件夹添加到MATLAB®路径。
addpath(fullfile(matlabroot,'examples','mpc','main'));
开放式试验台模型
要打开Simulink测试台模型,请使用以下命令。

open_system('LKATestBenchExample')


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

车道保持辅助,控制车辆的前转向角。

车辆和环境子系统,它模拟自我汽车的运动并模拟环境。

打开此模型还会运行helperLKASetUp初始化模型使用的数据的脚本。该脚本加载Simulink模型所需的某些常量,例如车辆模型参数,控制器设计参数,道路场景和驾驶员路径。您可以绘制道路以及驾驶员模型将遵循的路径。
plotLKAInputs(场景,driverPath)

模拟协助分心的驱动程序
您可以通过启用车道保持辅助和设置安全横向距离来探索算法的行为。在Simulink模型的“ 用户控制”部分中,将切换开关切换为“ 开”,并将“ 安全横向距离”设置为1米。或者,启用车道保持辅助并设置安全横向距离。
set_param('LKATestBenchExample / Enable''Value''1')set_param('LKATestBenchExample / Safe Lateral Offset''Value''1'
要绘制模拟结果,请使用Bird-Eye Scope。Bird-Eye Scope是Simulink中的模型级可视化工具,您可以使用Simulink模型工具栏上提供的菜单打开它。有关更多信息,请参阅Simulink中的检查和分析模型(Simulink)。打开示波器后,单击“ 查找信号”以设置信号。然后运行模拟15秒并探索Bird-Eye Scope的内容。
sim('LKATestBenchExample''StopTime''15'%模拟15秒

假设没有干扰添加到测量的输出通道#1。- >假设添加到测量输出通道#2的输出干扰是积分白噪声。- >“mpc”对象的“Model.Noise”属性为空。假设每个测量输出通道上有白噪声。ans =   Simulink.SimulationOutput:                注销:[1x1 Simulink.SimulationData.Dataset]                    大战:[4678x1双]      SimulationMetadata:[1x1 Simulink.SimulationMetadata]            ErrorMessage:[0x0 char]


鸟瞰范围从自我汽车的角度显示了道路的象征性表示。在该示例中,鸟瞰范围将合成视觉检测器的覆盖区域呈现为阴影区域。另外显示了理想的车道标记,以及合成检测的左右车道边界(此处以红色显示)。
要运行完整模拟并浏览结果,请使用以下命令。
sim('LKATestBenchExample')                   %模拟到场景结束plotLKAResults(场景,logsout,driverPath)
   假设没有干扰添加到测量的输出通道#1。- >假设添加到测量输出通道#2的输出干扰是积分白噪声。- >“mpc”对象的“Model.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秒,19秒,31秒和33秒,横向偏移在车道保持辅助设定的距离内。当发生这种情况时,检测到车道偏离。
  • 中间的图显示了LKA状态和车道偏离的检测。离开检测状态与顶部图一致。当检测到车道偏离时,LKA开启,但是当驾驶员可以正确操纵自我车辆时,控制系统将在稍后返回给驾驶员。
  • 底部曲线显示了驾驶员和LKA的转向角。当驾驶员和LKA的转向角之间的差异很小时,LKA将控制权释放给驾驶员(例如,在9秒到17秒之间)。



相关帖子

沙发
gaoyang9992006|  楼主 | 2019-1-24 22:52 | 只看该作者
模拟车道以下
您可以修改LKA的Safe Lateral Offset的值以忽略驱动程序输入,将控制器置于纯通道跟随模式。通过增加该阈值,横向偏移总是在由车道保持辅助设定的距离内。因此,车道偏离的状态开启,车道保持辅助一直受到控制。
set_param('LKATestBenchExample / Safe Lateral Offset''Value''2')sim('LKATestBenchExample')                                      %模拟到场景结束
   假设没有干扰添加到测量的输出通道#1。- >假设添加到测量输出通道#2的输出干扰是积分白噪声。- >“mpc”对象的“Model.Noise”属性为空。假设每个测量输出通道上有白噪声。


您可以使用以下命令探索模拟结果。
plotLKAResults(场景,logsout)


红色曲线表明,车道保持辅助本身可以保持自我车沿着车道的中心线行驶。
使用以下命令描述控制器性能。
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 / Lane Keeping Assist'


检测通道离开子系统输出一个信号,当车辆太靠近检测到的车道时,该信号为真。当车道传感器的车辆与车道边界之间的偏差小于车道辅助偏移输入时,我们检测到偏离。
Estimate Lane Center子系统将车道传感器的数据输出到车道保持控制器。该示例中的检测器被配置为在相机的当前视场中报告当前车道的左右车道边界。每个边界被建模为曲线的长度,其曲率随距离(回旋曲线)线性变化。为了将这些数据提供给控制器,我们将检测到的两条曲线朝车道中心偏移了车宽和一小部分(总共1.8米)。我们通过检测强度对每个得到的中心曲线进行加权,并将平均结果传递给控制器​​。此外,它为Lane Keeping Controller子系统的输入提供有限值。预览曲率提供了在自我汽车前方的车道曲率的中心线。在这个例子中,自我车可以向前看3秒,这是预测范围和采样时间的乘积。这使得控制器能够使用预览信息来计算自我车的转向角,从而提高MPC控制器的性能。
车道保持控制器模块的目标是使车辆保持在车道上,并通过控制前转向角来跟随弯道。通过驱动横向偏差和相对偏航角很小来实现该目标(参见下图)。




LKA控制器根据以下输入计算自我汽车的转向角:
  • 预览曲率(从Lane Detections派生)
  • 自我纵向速度
  • 横向偏差(来自泳道检测)
  • 相对偏航角(来自车道检测)


考虑到自我车的物理限制,转向角被限制在[-0.5,0.5] rad范围内。您可以更改预测范围或移动“ 控制器行为”滑块以调整控制器的性能。
应用辅助子系统决定车道保持控制器或驾驶员是否控制自我车。子系统在车道保持控制器之间切换驾驶员指令转向和辅助转向。当检测到车道偏离时,启动到辅助转向的切换。当驾驶员再次开始在车道内转向时,控制权返回给驾驶员。
探索车辆和环境
车辆和环境子系统实现了车道保持辅助控制器的闭环仿真。
open_system('LKATestBenchExample / Vehicle and Environment'


车辆动力学子系统使用来自Vehicle Dynamics Blockset™的车身3DOF单轨块来模拟车辆动力学。
Scenario Reader块根据车辆相对于创建的场景的位置生成理想的左右车道边界helperLKASetUp。
视觉检测发生器模块从Scenario Reader块获取理想的通道边界。检测发生器模拟单目摄像机的视场并确定​​每个道路边界的航向角,曲率,曲率导数和有效长度,从而解决任何其他障碍物。
Driver子系统根据创建的驱动程序路径生成驱动器转向角helperLKASetUp。
生成控制算法的代码
该LKARefMdl模型配置为支持使用Embedded Coder软件生成C代码。要检查您是否有权访问Embedded Coder,请运行:
hasEmbeddedCoderLicense = license('checkout''RTW_Embedded_Coder'
您可以为模型生成C函数,并通过运行以下命令来探索代码生成报告:
如果 hasEmbeddedCoderLicense    rtwbuild('LKARefMdl'结束
您可以使用软件在环(SIL)模拟验证编译的C代码是否按预期运行。要LKARefMdl在SIL模式下模拟引用的模型,请使用:
如果 hasEmbeddedCoderLicense    set_param('LKATestBenchExample / Lane Keeping Assist'...         'SimulationMode''Software-in-the-loop(SIL)'结束
运行LKATestBenchExample模型时,将为模型生成,编译和执行代码LKARefMdl。这使您可以通过模拟测试已编译代码的行为。

使用特权

评论回复
评论
mayooo 2019-7-6 17:45 回复TA
大佬膜拜 
板凳
gaoyang9992006|  楼主 | 2019-1-24 22:53 | 只看该作者
结论
此示例显示如何在带有车道检测的弯道上实施集成车道保持辅助(LKA)控制器,使用自动驾驶系统工具箱生成的合成数据在Simulink中对其进行测试,对其进行组件化,并自动为其生成代码。
从MATLAB路径中删除示例文件文件夹。
rmpath(fullfile(matlabroot,'examples''mpc''main'));

使用特权

评论回复
地板
123huahua123| | 2019-3-21 17:09 | 只看该作者
楼主,你这个车道保持有源文件吗?想参考参考!!!

使用特权

评论回复
5
123huahua123| | 2019-3-21 18:23 | 只看该作者
大佬,求指导啊

使用特权

评论回复
6
大哥007| | 2019-4-22 10:20 | 只看该作者
123huahua123 发表于 2019-3-21 17:09
楼主,你这个车道保持有源文件吗?想参考参考!!!

这是matlab无人驾驶工具箱提供的实例,你在matlab帮助文档中能搜索到。我用matlab2018b搜到了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:西安公路研究院南京院
简介:主要工作从事监控网络与通信网络设计,以及从事基于嵌入式的通信与控制设备研发。擅长单片机嵌入式系统物联网设备开发,音频功放电路开发。

1896

主题

15631

帖子

198

粉丝