主要内容

具有传感器融合的自适应巡航控制

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

在本例中,您可以:

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

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

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

介绍

自适应巡航控制系统是一种能够根据道路状况调整自我车辆速度的控制系统。与常规的巡航控制一样,驾驶员为汽车设定一个期望的速度;此外,自适应巡航控制系统可以使自我车辆减速,如果有另一辆车在车道上较慢地移动。

为了使ACC正常工作,ego车辆必须确定其前面的车道如何转弯,以及哪辆车是“领头车”,即车道中ego车辆的前面。下图显示了从ego车辆的角度来看的一个典型场景。ego车辆(蓝色)沿着弯曲的道路行驶。一开始,领头的车是粉红色的车。然后,紫色的车切入小我车的车道,成为领头车。过了一会儿,紫色的车换到了另一条车道,粉红色的车又成了领头车。那辆粉红色的车后来仍然是领头羊。ACC设计必须对道路上主要车辆的变化作出反应。

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

  1. 估计靠近自我车辆和相对自我车辆有显著横向运动的车辆的相对位置和速度。

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

  3. 对环境中其他车辆的激进机动做出反应,特别是当另一辆车进入自我车辆的车道时。

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

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

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

先进的MPC控制器增加了对环境中其他车辆更激进机动的反应能力。与传统的采用恒定增益PID设计的控制器不同,MPC控制器在保持严格安全距离约束的情况下调节自我车辆的速度。因此,当环境发生类似于人类驾驶员的快速变化时,控制器可以采用更积极的策略。

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

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

open_system (“AccTestBenchHexample”

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

  1. ACC与传感器融合,建模传感器融合和控制车辆的纵向加速度。此组件允许您选择设计的经典或模型预测控制版本。

  2. 一种车辆和环境子系统,模拟自我车辆的运动和模型环境。雷达和视觉传感器的模拟为控制子系统提供了合成数据。

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

helperACCSetUp

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

为了绘制仿真结果和描述自我车辆的周围环境,包括被跟踪的对象,使用鸟瞰镜.Bird's-Eye Scope是一个模型级的可视化工具,您可以从Simulink工具条中打开它。万博1manbetx在模拟选项卡,在审查结果点击鸟瞰镜.打开范围后,单击找到信号设置信号。以下命令运行模拟15秒得到一个中期模拟图片,并再次运行所有的方式结束模拟,以收集结果。

sim卡(“AccTestBenchHexample”“StopTime”'15'%模拟15秒sim卡(“AccTestBenchHexample”%模拟到场景结束
ans = 万博1manbetxsimulink.simulationOutput:logsout:[1x1 simulink.simulationData.dataset] tout:[151x1 double] simulation metaData:[1x1 simulink.simulation metaData] errormessage:[0x0 char]

鸟瞰图显示了传感器融合的结果。它显示了雷达和视觉传感器如何如何检测其传感器内的车辆覆盖区域。它还显示了由多目标跟踪器块维护的曲目。黄色轨道显示最重要的物体(MIO):在其车道中最接近的自我车辆前面。我们看到在场景的开始时,最重要的物体是自我车辆前方的快速移动车。当通过汽车靠近慢动移动的汽车时,它交叉到左车道,传感器融合系统将其识别为MIO。这辆车更接近自我车辆,比它慢得多。因此,ACC必须减慢自我车辆。

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

  • 上面的情节显示了自我车辆的速度。

  • 中间的图显示了自我车辆和引导车辆之间的相对距离。

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

在本例中,跟踪和传感器融合系统的原始数据用于ACC设计,无需后处理。由于传感器模型中的不确定性,尤其是当另一辆车进入或离开ego车道时,您可能会看到一些“尖峰”(中间图)。

要查看模拟结果,请使用以下命令。

helperPlotACCResults (logsout default_spacing time_gap)

  • 在前11秒钟,领头的汽车远远领先于自我汽车(中间情节)。ego车辆加速并达到驾驶员设定的速度(上图)。

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

  • 从20到34秒开始,前面的汽车移动到另一个车道,出现了一辆新的铅轿车(中间图)。由于铅轿厢和自我车辆之间的距离大,因此自我车辆加速,直到它在27秒时达到驾驶员速度。然后,EGO车辆继续在驾驶员设定速度(顶部图)上行进。

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

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

hasMPCLicense=许可证(“签出”'mpc_toolbox');如果hasMPCLicense controller_type = 2;sim卡(“AccTestBenchHexample”“StopTime”'15'%模拟15秒sim卡(“AccTestBenchHexample”%模拟到场景结束其他的加载data_mpc结尾
——>模型转换为离散时间。——>假设添加到测量输出通道2上的输出扰动为集成白噪声。假设对测量的输出通道#1没有增加任何干扰。——>”模式。mpc对象的Noise属性为空。假设每个测量输出通道上都有白噪声。ans = 万博1manbetxsimulink.simulationOutput:logsout:[1x1 simulink.simulationData.dataset] tout:[151x1 double] simulation metaData:[1x1 simulink.simulation metaData] errormessage:[0x0 char]——>模型转换为离散时间。——>假设添加到测量输出通道2上的输出扰动为集成白噪声。假设对测量的输出通道#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/Tracking and SensorFusion '

跟踪和传感器融合子系统的主块是多目标跟踪块,其输入是所有传感器检测和预测时间的组合列表。多对象跟踪器块的输出是一个确认轨迹的列表。

检测连接块连接了视觉和雷达检测。预测时间由车辆与环境子系统中的时钟驱动。

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

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

自适应巡航控制器

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

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

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

  • 汽车纵向速度

  • 领头车和ego车辆之间的相对距离(来自跟踪和传感器融合系统)

  • 前导车与自我车的相对速度(来自跟踪与传感器融合系统)

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

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

open_system ('ACCWithSensorFusionMdlRef/Adaptive Cruise Controller/ACC classic '

在基于MPC的ACC设计中,通过在约束条件下跟踪驾驶员设定速度来解决潜在的优化问题。该约束强制相对距离始终大于安全距离。

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

open_system ('AccWithsensorFusionMdlref / Adaptive Cruise Controller / ACC模型预测控制'

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

汽车与环境

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

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

  2. 演员和传感器模拟

open_system (“ACCTestBenchExample /车辆和环境”

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

在状态向量中,$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美元横摆角速度$ \ dot {\ psi} $也可以转换为度的单位。

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

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

所要求的偏航角速率为$ vx / r $$R$为道路曲率半径)。

参与者和传感器仿真子系统生成跟踪和传感器融合所需的合成传感器数据。在运行此示例之前驾驶场景设计师该应用程序用于创建一个场景,其中有一条弯曲的道路,多个演员在道路上移动。然后将此场景中的道路和参与者保存到场景文件中acctestbenchscenario.mat..要了解如何定义方案,请参阅方案创建部分。

open_system ('acctestbenchexample /车辆和环境/演员和传感器仿真'

ego车辆的运动由控制系统控制,而不是从场景文件中读取。相反,自我车辆的位置,速度,偏航角和偏航率作为输入从车辆动力学块,并打包成一个单一的行动者姿态结构使用PackegoMATLAB功能块。

场景的读者块从场景文件中读取actor姿态数据acctestbenchscenario.mat..该块将演员的姿势从场景的世界坐标转换为自我载体坐标。演员的姿势在由街区生成的公共汽车上流动。在这个例子中,使用了a视觉检测发电机块和雷达检测发电机块这两个传感器都是远程和前瞻性的,并根据ACC的需要提供对ego车辆前部的良好覆盖。传感器使用ego车辆坐标中的参与者姿势生成ego车辆前部的车辆检测列表。最后,使用时钟块作为示例,说明车辆如何具有集中的时间源。时间由多对象跟踪器块使用。

场景创建

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

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

这个例子显示了四辆车:一辆在左车道快速行驶的车,一辆在右车道缓慢行驶的车,一辆在马路对面接近的车,还有一辆在右车道启动,但随后移到左车道超过缓慢行驶的车的车。

可以使用驾驶场景设计师应用程序并重新保存到同一场景文件acctestbenchscenario.mat..在重新运行模拟时,Scenario Reader块自动获取更改。要以编程方式构建该场景,可以使用helperScenarioAuthoring功能。

plotACCScenario

为控制算法生成代码

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

hasembeddedcoderlicense =许可证(“签出”“RTW_Embedded_Coder”

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

如果hasEmbeddedCoderLicense rtwbuild ('accitsensorfusionmdlref'结尾

您可以使用在循环中的软件(SIL)模拟来验证编译后的C代码是否如预期的那样运行。模拟ACCWithSensorFusionMdlRefSIL模式下的参考模型,使用:

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

当你运行时ACCTestBenchExample模型,代码生成,编译和执行ACCWithSensorFusionMdlRef模型。这使您可以通过仿真来测试编译代码的行为。

结论

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

bdclose所有

另请参阅

功能

阻碍

对象

相关的话题