本人小白一枚,正学习MATLAB中的Automated Driving Toolbox的工具箱,学习资料很少,只能先对官网上一些实例的学习,就先照着官方资料学习。
本实例展示了LKA控制器的如何仿真和生成代码。
本实例用到的工具有:
LKA控制系统是为了在完全标记的高速公路上辅助驾驶人员安全驾驶。当LKA系统检测到车辆偏离本车道,LKA会自动的调整转向以拉回正常行驶的车道内,本过程不需要驾驶员的输入。在本实例中,LKA系统在驾驶员控制和车道保持控制器之间进行切换。实例的方法很充分的介绍了LKA系统的模型架构,但是在真实系统中给方向盘振动反馈,并且驾驶人员发出足够的反向力矩时,LKA功能将被抑制。
为了让LKA正常工作,自车要能够判断道路边缘和前方道路的曲率。理想的LKA设计主要基于预估的曲率、横向偏差距离和车道中心线与自车之间的相对偏航角。在Lane Keeping Assist System Using Model Predictive Control(Model Predictive Control Toolbox工具箱)已经提供了相关系统的实例。从先进驾驶辅助系统(ADAS)到更加自动化的系统,LKA必须对现实车道探测器提供的缺失、不完整或不准确的探测数据有鲁棒性。
当车道检测数据可能不正确时,本实例演示一种鲁棒性方法去设计控制器。为此,它使用了合成的 车道检测数据,模拟带有缺陷的广角单目摄像头。当来自传感器的数据无效或超出范围时,控制器要做出决策。当传感器探测出现错误,这提供了一个安全的防护,比如由于环境条件,在车道上行驶轨迹是大曲率曲线。
添加本文件夹到MATLAB路径下:
addpath(fullfile(matlabroot,'examples','mpc','main'));
打开Simulink试验台模型,用一下命令。
open_system('LKATestBenchExample')
打开这个模型需要允许这个helperLKASetUp脚本,这提供了模型的初始数据。脚本加载Simulink模型所需的某些常量,如车辆模型参数、控制器设计参数、道路场景和驾驶员路径。你可以描绘驾驶模型要行驶的道路和路径。
plotLKAInputs(scenario,driverPath)
你可以通过开启车道保持辅助和设置安全的横向距离来研究算法。在Simulink模型中,在用户控制部分,将辅助开关打开,并将安全横向距离设置为1米。或者,启用车道保持辅助和设置安全的横向距离。
set_param('LKATestBenchExample/Enable','Value','1')
set_param('LKATestBenchExample/Safe Lateral Offset','Value','1')
为了绘制仿真结果,使用Bird’s-Eye Scope。Bird’s-Eye Scope是一个模型级的可视化工具,您可以从Simulink工具条中打开它。在“Simulation”选项卡上,点击“Review Results”,点击“Bird’s-Eye Scope”。然后运行模拟15秒,查看Bird’s-Eye Scope的内容。
sim('LKATestBenchExample','StopTime','15') % Simulate 15 seconds
Bird’s-Eye Scope 图展现了从自车的视角对道路的象征表现。在这个实例中,Bird’s-Eye Scope把合成探测器的探测范围以阴影部分表示,理想的道路标记线也显示出来,同时也显示合成被探测的左右路沿(图中标记红色)。
进行仿真,查看结果,使用以下命令。
sim('LKATestBenchExample') % Simulate to end of scenario
plotLKAResults(scenario,logsout,driverPath)
下图的蓝色曲线表明,当道路曲率发生变化时,分心的驾驶人员可能把车开到临车道。红色曲线表明,当车道曲率发生变化时,LKA将自车保持在本车道内。
为表现控制器性能,使用以下命令。
plotLKAPerformance(logsout)
要查看控制器状态,请使用以下命令。
plotLKAStatus(logsout)
LKA模型包含四个主要部分:
open_system('LKATestBenchExample/Lane Keeping Assist')
当车辆胎靠近被测车道,车道偏离探测子系统发出信号(true),当车道传感器的车辆与车道边界之间的偏移量小于车道辅助偏移量输入时,你将检测到偏离。
预测车道中心的子系统把来自车道传感器的数据传给车道保持控制器。本例的探测器设定为在当前摄像头视野内输出当前车道左右边界 。每个边界被视为一段距离的曲线,曲线的曲率随距离线性变化(clothoid曲线)。要将此数据提供给控制器,将检测到的曲线向车道中心偏移汽车的宽度和一个小的余量(总共1.8米)。根据检测的强度对每个得到的中心曲线进行加权,并将平均结果传递给控制器。此外,预测车道中心子系统为车道保持控制器子系统的输入提供有限值。预测的曲率提供了自车前方中心线的车道曲率。在这个例子中,自辆可以提前三秒钟,这是预测范围和样本时间的乘积。这种预测时间使控制器能够使用预估的信息来计算车辆的转向角,从而提高了MPC控制器的性能。
车道保持控制器块的目标是使车辆保持在自车道上,并通过控制前转向角来沿弯道行驶。这一目标是通过驱动横向偏差e1和相对偏航角e2很小来实现的(见下图)。
考虑到自车辆的物理限制,转向角度被限制在[-0.5,0.5]rad之内,你可以改变预测视野或移动控制器行为滑块来调整控制器的性能。
应用辅助子系统决定车道保持控制器或驾驶员是否控制车辆。子系统在驾驶员转向和辅助转向之间进行切换。当检测到车道偏离时,转向辅助转向就开始了。当驾驶员再次开始在车道内转向时,控制权返回给驾驶员。
车辆与环境子系统实现了车道保持辅助控制器的闭环仿真。
open_system('LKATestBenchExample/Vehicle and Environment')
车辆动态子系统用Vehicle Dynamics Blockset工具箱中Vehicle Body 3DOF Single Track模型来建立了车辆动力学模型。
Scenario Reader模块根据车辆相对于从场景文件(LKATestBenchScenario.mat)读取的场景的位置生成理想的左右车道边界。
视觉检测生成器模块(Vision Detection Generator block )从场景读取块获取理想的车道边界。该检测生成器对单目摄像机的视野进行建模,并确定每个道路边界的航向角、曲率、曲率导数和有效长度,同时考虑任何其他障碍。
驾驶员子系统根据helperLKASetUp中创建的驾驶员路径生成驾驶员转向角。
LKARefMdl模型支持使用嵌入式编码器软件生成C代码。检查你的软件是否可用嵌入式编码器,运行:
hasEmbeddedCoderLicense = license('checkout','RTW_Embedded_Coder')
你可以生成一个C函数的模型和代码生成报告,运行:
if hasEmbeddedCoderLicense
rtwbuild('LKARefMdl')
end
你可以使用软件闭环(SIL)模拟来验证编译后的C代码的行为是否符合预期。要在SIL模式下模拟LKARefMdl模型,请使用:
if hasEmbeddedCoderLicense
set_param('LKATestBenchExample/Lane Keeping Assist',...
'SimulationMode','Software-in-the-loop (SIL)')
end
当你运行LKATestBenchExample模型时,LKARefMdl模型生成、编译并执行代码。这使你能够通过模拟来测试已编译代码。
这个例子展示了如何实现一个集成车道保持辅助(LKA)控制器在弯曲的道路与车道检测。它还展示了如何使用自动驾驶工具箱生成的合成数据在Simulink中测试控制器,将其组件化,并为其自动生成代码。
从MATLAB路径中删除示例文件夹。
rmpath(fullfile(matlabroot,'examples','mpc','main'));
close all
bdclose all
博主也是小白,本文的目的是记录学习也是交流学习,在无人驾驶方向能更近一步。对于MATLAB的无人驾驶工具箱资料教程也不多,主要也是官网发出的文档,以后也会常常发博记录学习。 还有第一次发博,代码块中无法选择MATLAB代码,用了C格式代替了。