主要内容

自适应巡航控制与传感器融合

本例展示了如何使用传感器融合在弯曲道路上行驶的车辆上实现基于传感器融合的汽车自适应巡航控制器。

在这个例子中,你:

  1. 回顾一个结合了传感器融合和自适应巡航控制器(ACC)的控制系统。ACC提供了两个变体:一个经典控制器和一个自适应巡航控制系统块从模型预测控制工具箱。

  2. 使用自动驾驶工具箱生成的合成数据在闭环Simulink模型中测试控制系统。万博1manbetx

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

简介

自适应巡航控制系统是一种控制系统,修改自我车辆的速度,以响应道路上的条件。与常规的巡航控制一样,驾驶员为汽车设定理想的速度;此外,自适应巡航控制系统可以使自我车辆减速,如果有另一辆车在其前面的车道上行驶较慢。

为了让ACC正常工作,自我车辆必须确定它前面的车道如何弯曲,以及哪辆车是“领先车”,也就是说,在车道上的自我车辆前面。从自我载体的角度来看,一个典型的场景如下图所示。自我车辆(蓝色)沿着弯曲的道路行驶。一开始,领头的车是粉色的车。然后紫色的车切进了自我车的车道,成为领头车。过了一会儿,紫色的车换到另一条车道上,粉色的车又成了领头车。之后粉色的车仍然是领头车。ACC设计必须对道路上领头车的变化做出反应。

目前的ACC设计主要依赖于从雷达获得的距离和距离率测量,并被设计为在直线道路上工作最好。文中给出了这种系统的一个例子基于模型预测的自适应巡航控制系统而在基于FMCW技术的汽车自适应巡航控制(雷达工具箱).从先进的驾驶辅助系统(ADAS)设计转向更自主的系统,ACC必须应对以下挑战:

  1. 估计离自我车辆较近的车辆的相对位置和速度,以及相对于自我车辆有明显横向运动的车辆。

  2. 估计自我车辆前面的车道,找出在同一车道上自我车辆前面最近的一辆车。

  3. 对环境中其他车辆的攻击性机动做出反应,特别是当另一辆车辆切入自己的车道时。

这个例子展示了现有ACC设计的两个主要补充,以应对这些挑战:增加传感器融合系统和更新基于模型预测控制(MPC)的控制器设计。同时使用视觉和雷达传感器的传感器融合和跟踪系统具有以下优点:

  1. 它将视觉传感器获得的位置和速度的更好的横向测量与雷达传感器的距离和距离率测量相结合。

  2. 视觉传感器可以检测车道,提供车道相对于自身车辆的横向位置估计,并定位场景中其他车辆相对于自身车辆车道的位置。本例假设理想的车道检测。

先进的MPC控制器增加了对环境中其他车辆更激进的机动做出反应的能力。与使用恒定增益的PID设计的经典控制器相比,MPC控制器在保持严格的安全距离约束的同时调节自我车辆的速度。因此,当环境快速变化时,控制器可以应用更积极的操作,就像人类驾驶员会做的那样。

试验台模型及仿真结果概述

要打开主要的Simulink模型,万博1manbetx使用以下命令:

open_system (“ACCTestBenchExample”

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

  1. 带有传感器融合的ACC,它对传感器融合进行建模并控制车辆的纵向加速度。该组件允许您选择设计的经典或模型预测控制版本。

  2. 车辆与环境子系统,用于对车辆的运动和环境进行建模。雷达和视觉传感器的模拟为控制分系统提供合成数据。

若要在运行模型之前运行相关的初始化脚本,请在Simulink模型中单击万博1manbetx运行安装脚本或者,在命令提示符处输入以下命令:

helperACCSetUp

该脚本加载Simulink模型所需的某些常量,例如车辆和ACC设计参数。万博1manbetx默认的ACC是经典控制器。该脚本还创建了定义控制系统引用模型的输入和输出所需的总线。这些总线必须在模型编译之前在工作区中定义。当模型编译时,附加的Simulink总线将由它们各自的块自动生成。万博1manbetx

要绘制模拟结果并描绘自我车辆的周围环境,包括被跟踪的物体,请使用鸟瞰的范围(自动驾驶工具箱).Bird's-Eye Scope是一个模型级可视化工具,可以从Simulink工具条中打开。万博1manbetx在模拟选项卡,在审查结果,点击鸟瞰的范围.打开作用域后,单击找到信号设置信号。下面的命令运行模拟15几秒钟的时间来获得一个中间模拟图像,并再次运行,一直到模拟结束以收集结果。

sim卡(“ACCTestBenchExample”“StopTime”“15”%模拟15秒sim卡(“ACCTestBenchExample”%模拟到场景结束
ans = 万博1manbetxSimulink。模拟Output: logsout: [1x1 Simulink.SimulationData.Dataset] tout: [151x1 double] SimulationMetadata: [1x1 Simulink.SimulationMetadata] ErrorMessage: [0x0 char]

鸟瞰镜显示了传感器融合的结果。它展示了雷达和视觉传感器如何在其传感器覆盖区域内探测车辆。它还显示了多对象跟踪器块维护的轨迹。黄色轨道显示了最重要的物体(MIO):自我车辆在其车道上前面最近的轨道。我们看到,在场景的开始,最重要的对象是在自我车辆前面快速移动的汽车。当过往车辆靠近慢速行驶的车辆时,它会进入左车道,传感器融合系统将其识别为MIO。这辆车更接近自我车,但比它慢得多。因此,前扣带回必须放慢自我载体的速度。

在经典ACC系统的以下结果中,

  • 上图显示了自我车辆的速度。

  • 中间的图是自我车和领头车之间的相对距离。

  • 下图显示了自我车辆的加速度。

在本例中,来自跟踪和传感器融合系统的原始数据用于ACC设计,不进行后处理。由于传感器模型的不确定性,特别是当另一辆车切入或离开本车道时,您可以预期会看到一些“峰值”(中间图)。

使用命令查看仿真结果。

helperPlotACCResults (logsout default_spacing time_gap)

  • 在前11秒,领头车远远领先于自我车(中间图)。自我车辆加速并达到驾驶员集速度V_set(顶部图)。

  • 从11秒到20秒,另一辆车进入自我车道(中间图),成为领先车。当前导车与自我车之间的距离较大(11-15秒)时,自我车仍以驾驶员设定的速度行驶。当距离变小(15-20秒),自驾减速以保持与前车的安全距离(上图)。

  • 从20秒到34秒,前面的车移动到另一个车道,一个新的领先车出现(中间图)。由于前车与自我车之间的距离较大,自我车会加速,直到达到驾驶员设定的27秒速度。然后,自我车辆继续以驾驶员设定的速度行驶(上图)。

  • 下图显示加速度在[-3,2]m/s^2范围内。平滑的瞬态行为表明驾驶员的舒适性是令人满意的。

在基于mpc的ACC设计中,基本的优化问题是通过跟踪驾驶员设定的速度来实现与前车的安全距离。自适应巡航控制器部分描述了MPC控制器的设计。要使用MPC设计运行模型,首先激活MPC变体,然后运行以下命令。这一步需要模型预测控制工具箱软件。您可以使用以下代码检查该许可证的存在。如果不存在代码,则描述类似结果的示例。

hasMPCLicense =许可证(“签出”“MPC_Toolbox”);如果hasMPCLicense controller_type = 2;sim卡(“ACCTestBenchExample”“StopTime”“15”%模拟15秒sim卡(“ACCTestBenchExample”%模拟到场景结束其他的负载data_mpc结束
——>转换模型到离散时间。假设添加到测量输出通道#2的输出扰动是集成白噪声。假设测量的输出通道1没有任何扰动。——>”模式。mpc对象的Noise属性为空。假设每个测量输出通道上都有白噪声。ans = 万博1manbetxSimulink。模拟Output: logsout: [1x1 Simulink.SimulationData.Dataset] tout: [151x1 double] SimulationMetadata: [1x1 Simulink.SimulationMetadata] ErrorMessage: [0x0 char] -->Converting model to discrete time. -->Assuming output disturbance added to measured output channel #2 is integrated white noise. Assuming no disturbance added to measured output channel #1. -->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel.

在基于mpc的ACC的仿真结果中,与经典的ACC设计相似,实现了速度和间距控制的目标。与经典的ACC设计相比,基于mpc的ACC更具侵略性,因为它使用全油门或制动来加速或减速。这种行为是由于相对距离的显式约束。当道路上突然发生变化时,例如领头车变成慢车时,攻击性行为可能更受欢迎。为使控制器不那么具有攻击性,请打开自适应巡航控制系统块的掩码,并减小控制器的行为参数。如前所述,中间图的峰值是由于传感器模型的不确定性。

要查看基于mpc的ACC的模拟结果,使用以下命令。

helperPlotACCResults (logsout default_spacing time_gap)

下面将对测试台模型中各子系统的功能进行更详细的描述。自适应巡航控制器与传感器融合子系统包含两个主要组件:

  1. 跟踪与传感器融合子系统

  2. 自适应巡航控制器子系统

open_system (“ACCTestBenchExample/ACC与传感器融合”

跟踪与传感器融合

跟踪和传感器融合子系统处理来自车辆和环境子系统的视觉和雷达探测,并生成车辆周围环境的综合态势图。此外,它还为ACC提供了在自我车辆前面车道上最近的汽车的估计。

open_system (“ACCWithSensorFusionMdlRef/跟踪和传感器融合”

跟踪与传感器融合子系统的主要模块是多目标跟踪(自动驾驶工具箱)块,其输入是所有传感器检测和预测时间的组合列表。多对象跟踪器块的输出是一个已确认的轨迹列表。

检测连接(自动驾驶工具箱)块连接视觉和雷达探测。预测时间由车辆和环境子系统中的时钟驱动。

检测聚类块聚集多个雷达检测,因为跟踪器期望每个传感器最多对每个对象进行一次检测。

findLeadCarMATLAB函数块使用已确认的轨道列表和道路曲率,找到在同一车道上最接近自我车辆并在其前面的车辆。这辆车被称为领头车,当其他车辆驶入或驶出前车的车道时,它可能会发生变化。该函数提供了领先车相对于自我车的位置和速度,以及最重要目标(MIO)轨道的索引。

自适应巡航控制器

自适应巡航控制器有两种变体:经典设计(默认)和基于mpc的设计。对于这两种设计,应用了以下设计原则。配备ACC的车辆(自我车辆)使用传感器融合来估计与前车的相对距离和相对速度。ACC使自我车辆以驾驶员设定的速度行驶,同时与领先车辆保持安全距离。前车与自我车之间的安全距离定义为

$D_{safe} = D_{default} + T_{gap} \cdot V_x$

其中默认间距美元D_{默认}$,和时间差T_}{差距识别美元为设计参数和V_x美元是自我飞行器的纵向速度。ACC根据以下输入为自我车辆产生纵向加速度:

  • 自我飞行器纵向速度

  • 前车与自我车之间的相对距离(来自跟踪与传感器融合系统)

  • 前车和自车之间的相对速度(来自跟踪和传感器融合系统)

考虑到自我车辆的物理限制,纵向加速度被限制在[-3,2]范围内。米/秒^ 2美元

在经典的ACC设计中,如果相对距离小于安全距离,则主要目标是减速并保持安全距离。如果相对距离大于安全距离,则主要目标是在保持安全距离的同时达到驾驶员设定的速度。这些设计原则是通过Min和Switch模块实现的。

open_system (“ACCWithSensorFusionMdlRef/自适应巡航控制器/ACC classic”

在基于mpc的ACC设计中,底层优化问题是通过跟踪受约束的驾驶员集速度来实现的。这个约束要求相对距离总是大于安全距离。

属性中定义的参数,可配置“自适应巡航控制系统”块helperACCSetUp文件。例如,ACC设计的线性模型G美元,G美元由车辆动力学得到。两个Switch块实现了简单的逻辑来处理来自传感器的大量数据(例如,传感器可能返回当它没有检测到MIO)。

open_system (ACCWithSensorFusionMdlRef/自适应巡航控制器/ACC模型预测控制

有关ACC的MPC设计的更多信息,请参见基于模型预测的自适应巡航控制系统

车辆与环境

车辆与环境子系统由两部分组成:

  1. 车辆动力学与全局坐标

  2. 角色与传感器仿真

open_system (“ACCTestBenchExample/车辆与环境”

车辆动力学子系统使用自动驾驶工具箱中的自行车模型-力输入块对车辆动力学进行建模。车辆动力学,有输入你美元(纵向加速度)和前转向角\三角洲美元,近似为:

在状态向量中,V_y美元表示横向速度,V_x美元表示纵向速度和\ psi美元表示偏航角。车辆参数在helperACCSetUp文件。

车辆动力学的输出(如纵向速度V_x美元和横向速度V_y美元)以身体固定坐标为基础。为得到车辆所经过的轨迹,通过以下关系将车身固定坐标转换为全局坐标:

$ $ {X} = V_x \ \点cos (\ psi) -V_y \罪(\ psi) \四\点{Y} = V_x \罪(\ psi) + V_y \ cos (\ psi) $ $

偏航角\ psi美元偏航角速度$ \点{\ psi} $也都转换成度数的单位。

驾驶员转向模型的目标是通过控制前转向角来保持车辆在其车道上并沿着弯曲的道路行驶\三角洲美元.这一目标是通过驱动偏航角误差来实现的e_2美元和横向位移误差e_1美元为零(见下图),其中

$ $ \点{e_1} = V_xe_2 + V_y \四e_2 = \ psi - \ psi_ {des} $ $

所期望的偏航角速度由Vx / R美元R美元表示道路曲率的半径)。

参与者和传感器仿真子系统生成跟踪和传感器融合所需的合成传感器数据。在运行此示例之前,使用驾驶场景设计(自动驾驶工具箱)使用App创建了一个弯曲的道路和多个演员在道路上移动的场景。然后将该场景中的道路和参与者保存到场景文件中ACCTestBenchScenario.mat.要了解如何定义场景,请参见场景创建部分。

open_system (“ACCTestBenchExample/车辆和环境/参与者和传感器模拟”

自我车辆的运动由控制系统控制,而不是从场景文件中读取。相反,自我车辆的位置,速度,偏航角,和偏航率被接收为输入从车辆动力学块,并包装成一个单一的演员姿态结构使用packEgoMATLAB函数块。

场景的读者(自动驾驶工具箱)Block从场景文件中读取参与者姿势数据ACCTestBenchScenario.mat.该块将演员的姿势从场景的世界坐标转换为自我车辆坐标。演员的姿势在由块生成的总线上传输。在本例中,使用a视觉检测发生器(自动驾驶工具箱)块和雷达探测发生器(自动驾驶工具箱)块。这两个传感器都是远程和前瞻性的,并提供良好的自我车辆前方覆盖,为ACC所需要的。传感器利用行动者在自我车辆坐标中的姿势来生成自我车辆前面的车辆检测列表。最后,以一个时钟块为例,说明车辆如何拥有一个集中的时间源。该时间由多对象跟踪器块使用。

场景创建

驾驶场景设计应用程序允许您定义道路和车辆在道路上移动。在本例中,定义了两条常曲率的平行道路。要定义道路,您需要定义道路中心、道路宽度和倾斜角度(如果需要)。道路中心是通过沿圆弧采样点选择的,圆弧横跨60度的恒定曲率半径。

您定义了场景中的所有车辆。要定义车辆的运动,您需要通过一组路径点和速度来定义它们的轨迹。定义路径点的一种快速方法是选择前面定义的道路中心的子集,并向道路中心的左侧或右侧偏移,以控制车辆行驶的车道。

这个例子展示了四辆车:一辆在左车道上快速行驶的汽车,一辆在右车道上缓慢行驶的汽车,一辆在道路对面接近的汽车,以及一辆从右车道开始,但随后行驶到左车道超过缓慢行驶的汽车。

可以使用驾驶场景设计并重新保存到相同的场景文件ACCTestBenchScenario.mat.场景读取器块在重新运行模拟时自动获取更改。要以编程方式构建场景,可以使用helperScenarioAuthoring函数。

plotACCScenario

为控制算法生成代码

虽然整个模型不支持代码生成,但是万博1manbetxACCWithSensorFusionMdlRef模型被配置为支持使用嵌入式编码器软件生成C代码万博1manbetx。要检查是否可以访问Embedded Coder,请运行:

hasEmbeddedCoderLicense = license(“签出”“RTW_Embedded_Coder”

您可以为模型生成一个C函数,并通过运行以下命令查看代码生成报告:

如果hasEmbeddedCoderLicense slbuild (“ACCWithSensorFusionMdlRef”结束

您可以使用软件在循环(SIL)模拟来验证已编译的C代码的行为是否符合预期。为了模拟ACCWithSensorFusionMdlRefSIL模式下的参考模型,使用:

如果hasEmbeddedCoderLicense set_param (“ACCTestBenchExample/ACC与传感器融合”...“SimulationMode”“Software-in-the-loop (SIL)”结束

当你运行ACCTestBenchExample的模型、代码生成、编译和执行ACCWithSensorFusionMdlRef模型。这使您能够通过模拟测试已编译代码的行为。

结论

本示例展示了如何在弯曲道路上实现集成自适应巡航控制器(ACC),并使用自动驾驶工具箱生成的合成数据在Simulink中进行测试,对其进行组件化,并自动为其生成代码。万博1manbetx

bdclose所有

另请参阅

相关的话题