车道跟踪控制与传感器融合和车道检测
这个例子展示了如何模拟和生成一个汽车车道跟踪控制器的代码。
在这个例子中,你:
回顾模型预测控制工具箱软件中结合了传感器融合、车道检测和车道跟踪控制器的控制算法。
使用自动驾驶工具箱软件生成的合成数据在闭环Simulink模型中测试控制系统。金宝app
配置软件在环仿真的代码生成设置,并自动生成控制算法的代码。
简介
车道跟踪系统是一种控制系统,它使车辆在高速公路上有标记的车道内行驶,同时保持用户设定的速度或与前面车辆的安全距离。车道跟随系统包括自我车辆的纵向和横向控制:
纵向控制-保持驾驶员设定的速度,并通过调整自我车辆的加速度与车道上的前车保持安全距离。
横向控制-通过调整自我车辆的转向,保持自我车辆沿其车道的中心线行驶
组合车道跟随控制系统实现了车辆纵向和横向的单独控制目标。此外,车道跟随控制系统可以在两个目标不能同时满足时调整其优先级。
有关使用自适应巡航控制(ACC)与传感器融合的纵向控制的示例,请参见自适应巡航控制与传感器融合。有关使用带有车道检测的车道保持辅助(LKA)系统的横向控制示例,请参见车道保持辅助车道检测。ACC的例子假设理想的车道检测,而LKA的例子没有考虑周围的车辆。
在这个例子中,车道检测和周围的车辆都被考虑了。车道跟踪系统综合视觉和雷达探测数据,估计车道中心和前车距离,并计算车辆的纵向加速度和转向角度。
定义场景
在打开模型之前,您可以有选择地更改模型模拟的场景。这个场景选择是由一个回调函数控制的,helperLFSetUp
,在模型打开时运行。
默认情况下,该模型模拟了弯曲道路上的切入场景。要更改所使用的默认场景,请单击编辑设置脚本按钮在模型中或通过调用helperLFSetup
使用新的输入场景。例如,下面的语法相当于指定默认场景。
helperLFSetup (“LFACC_04_Curve_CutInOut”);
您可以从以下场景中进行选择。
“ACC_01_ISO_TargetDiscriminationTest”“ACC_02_ISO_AutoRetargetTest”“ACC_03_ISO_CurveTest”“ACC_04_StopnGo”“lfacc_01_doublecurve_减速目标”“LFACC_02_DoubleCurve_AutoRetarget”“LFACC_03_DoubleCurve_StopnGo”“LFACC_04_Curve_CutInOut”“LFACC_05_Curve_CutInOut_TooClose”
开放式试验台模型
打开Simulin金宝appk测试台模型。
open_system (“LaneFollowingTestBenchExample”)
该模型包含四个主要组成部分:
车道跟随控制器-控制纵向加速度和前转向角度的自我车辆
车辆和环境-模拟自我车辆的运动和环境模型
碰撞检测-当检测到主车和主车发生碰撞时停止模拟
MIO轨迹——在鸟瞰瞄准镜中显示MIO轨迹。
打开此模型还将运行helperLFSetUp
脚本,通过运行Simulink模型所需的场景函数和加载常数,如车辆模型参数、控制器设计参数、道路场景、周围车辆等,初始化模型使用的数据。金宝app
画出自我载具将遵循的道路和路径。
情节(场景)
绘制仿真结果并描绘车辆周围环境和被跟踪对象,请使用鸟瞰的范围(自动驾驶工具箱)。Bird's-Eye Scope是一个模型级可视化工具,可以从Simulink工具条中打开。金宝app在模拟选项卡,在审查结果,点击鸟瞰的范围。打开作用域后,通过单击设置信号找到信号。
要获得中间模拟视图,请模拟的模型10
秒。
sim卡(“LaneFollowingTestBenchExample”,“StopTime”,“十”)
在模拟模型10秒后,打开鸟眼瞄准镜。在范围工具条中,要显示场景的世界坐标视图,请单击世界坐标。在这个观点中,自我载体被圈起来了。要显示车辆坐标视图的图例,请单击传说。
鸟瞰镜显示了传感器融合的结果。它展示了雷达和视觉传感器如何在其覆盖区域内探测车辆。它还显示了由多目标跟踪(自动驾驶工具箱)块。黄色轨道表示最重要的物体(MIO),它是自我车辆在其车道上前面最近的轨道。理想的车道标记也显示与综合检测的左右车道边界(显示为红色)。
将模型模拟到场景的末尾。
sim卡(“LaneFollowingTestBenchExample”)
假设测量的输出通道3没有任何扰动。假设添加到测量输出通道#2的输出扰动是集成白噪声。假设测量的输出通道1没有任何扰动。假设添加到测量输出通道#4的输出扰动是集成白噪声。——>”模式。“噪音”属性为空。假设每个测量输出都有白噪声。
绘制控制器性能图。
plotLFResults (logsout time_gap default_spacing)
第一个图显示了以下间距控制性能结果。
的速度图显示自我车辆保持速度控制从0到11秒,切换到间隔控制从11到16秒,然后切换回速度控制。
的两辆车之间的距离由图可知,前导车辆与自我车辆的实际距离总是大于安全距离。
的加速度从图中可以看出,自我车辆的加速度是平稳的。
的碰撞状态图中显示,没有检测到前导车辆与自我车辆发生碰撞,因此自我车辆运行在安全模式。
第二张图显示了以下横向控制性能结果。
的横向偏差由图可知,到车道中心线的距离在0.2 m以内。
的相对偏航角由图可知,横摆角相对车道中心线的误差在0.03 rad以内(小于2度)。
的转向角从图中可以看出,ego车辆的转向角度是平稳的。
探索车道跟随控制器
车道跟踪控制器子系统主要包括三个部分:1)车道中心估计2)跟踪与传感器融合3)MPC控制器
open_system ('Lane followingtestbenchexample /Lane Following Controller')
车道估计中心子系统输出车道传感器数据到MPC控制器。预览曲率提供了自我车辆前方车道曲率的中心线。在这个例子中,自我车辆可以向前看3秒,这是预测视界和控制器采样时间的乘积。该控制器利用预估信息计算车辆转向角,提高了MPC控制器的性能。横向偏差测量自我车辆和车道中心线之间的距离。相对偏航角测量车辆与道路之间的偏航角差。子系统内部的ISO 8855到SAE J670E模块将使用ISO 8855的车道检测坐标转换为使用SAE J670E的MPC控制器。
跟踪和传感器融合子系统处理来自车辆和环境子系统的视觉和雷达探测,并生成车辆周围环境的综合态势图。此外,它还为车道跟踪控制器提供了车道上与该车辆前面最近的车辆的估计。
我们的目标MPC控制器块是:
保持驾驶员设定的速度,并与前车保持安全距离。这是通过控制纵向加速度来实现的。
保持自我车在车道中间;这就是减少横向偏差和相对偏航角,通过控制转向角度。
当道路弯曲时,要减速。为了实现这一目标,MPC控制器对横向偏差的惩罚权重大于对纵向速度的惩罚权重。
MPC控制器基于输入的掩码参数在路径跟踪控制(PFC)系统块内设计,设计的MPC控制器是一个自适应MPC,在运行时更新车辆模型。车道跟踪控制器根据以下输入计算车辆的纵向加速度和转向角度:
司机让速度
自我车辆纵向速度
预览曲率(来源于车道检测)
横向偏差(来源于车道检测)
相对偏航角(来源于车道检测)
前车与自我车之间的相对距离(来自跟踪与传感器融合系统)
前车与自我车之间的相对速度(来自跟踪与传感器融合系统)
考虑到自我车辆的物理限制,转向角被限制在[-0.26,0.26]rad以内,纵向加速度被限制在[-3,2]m/s^2以内。
探索车辆与环境
车辆与环境子系统实现了车道跟随控制器的闭环仿真。
open_system (“LaneFollowingTestBenchExample/车辆和环境”)
系统延迟块对模型输入和输出之间的系统延迟进行建模。时延包括传感器时延和通信时延。在本例中,延迟近似为一个采样时间秒。
车辆动力学子系统使用来自车辆动力学模块集™的自行车模型-力输入模块对车辆动力学建模。较低层次的动力学模型是一个时间常数为的一阶线性系统秒。
SAE J670E到ISO 8855子系统将坐标从使用SAE J670E的Vehicle Dynamics转换为使用ISO 8855的Scenario Reader。
的场景的读者(自动驾驶工具箱)块从基本工作区场景变量中读取参与者姿势数据。该块将演员的姿势从场景的世界坐标转换为自我车辆坐标。演员的姿势在由块生成的总线上传输。场景读取器块还根据车辆相对于所使用的场景的位置生成理想的左右车道边界helperLFSetUp
。
的视觉检测发生器(自动驾驶工具箱)块从Scenario Reader块中获取理想的车道边界。检测发生器对单目摄像机的视场进行建模,并确定航向角度、曲率、曲率导数和每条道路边界的有效长度,并考虑任何其他障碍物。的驱动雷达数据发生器(自动驾驶工具箱)Block根据场景中定义的雷达横截面,从雷达视场中显示的地面真实数据生成聚类检测。
为多个测试场景运行控制器
这个例子使用了基于ISO标准和真实场景的多个测试场景。为了验证控制器的性能,可以对控制器进行多种场景测试,如果性能不理想,可以对控制器参数进行调优。这样做:
通过将输入的场景名称更改为来选择场景
helperLFSetUp
。通过运行配置仿真参数
helperLFSetUp
。用所选场景模拟模型。
评估控制器性能使用
plotLFResults
如果性能不理想,请调优控制器参数。
您可以使用Simulink Test™自动化控制器的验证和验证。金宝app
生成控制算法的代码
的LFRefMdl
模型支持生成金宝appC代码使用嵌入式Coder®软件。要检查是否可以访问Embedded Coder,请运行:
hasEmbeddedCoderLicense = license(“签出”,“RTW_Embedded_Coder”)
您可以为模型生成一个C函数,并通过运行以下命令查看代码生成报告:
如果hasEmbeddedCoderLicense rtwbuild (“LFRefMdl”)结束
您可以使用软件在循环(SIL)模拟来验证已编译的C代码的行为是否符合预期。为了模拟LFRefMdl
SIL模式下的参考模型,使用:
如果hasEmbeddedCoderLicense set_param ('Lane followingtestbenchexample /Lane Following Controller',...“SimulationMode”,“Software-in-the-loop (SIL)”)结束
当你运行LaneFollowingTestBenchExample
的模型、代码生成、编译和执行LFRefMdl
模型,它使您能够通过模拟测试已编译代码的行为。
结论
这个例子展示了如何在弯曲道路上实现一个集成的车道跟踪控制器,传感器融合和车道检测,在Simulink中使用自动驾驶工具箱软件生成的合成数据进行测试,将其组件化,并自动为其生成代码。金宝app
关闭所有bdclose所有