主要内容

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

本例展示了如何利用传感器融合技术实现一种基于传感器融合的汽车自适应巡航控制器。

在这个例子中,你:

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

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

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

简介

自适应巡航控制系统是一种控制系统,它可以根据道路情况调整自我车辆的速度。与常规的巡航控制一样,驾驶员设定汽车所需的速度;此外,自适应巡航控制系统可以使自我车辆减速,如果有另一辆车在其前面的车道上行驶较慢。

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

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

  1. 估计那些靠近自我交通工具的汽车的相对位置和速度以及那些相对于自我交通工具有明显横向运动的汽车。

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

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

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

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

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

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

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

打开Simulink主模型,使用以下命令:

open_system (“ACCTestBenchExample”

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

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

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

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

helperACCSetUp

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

要绘制模拟的结果并描述自我载具的周围环境,包括被跟踪的物体,请使用鸟瞰的范围.Bird’s- eye Scope是一个模型级可视化工具,您可以从Simulink工具条中打开它。在模拟选项卡,在审查结果,点击鸟瞰的范围.打开范围后,单击找到信号设置信号。以下命令运行模拟到15几秒钟来获得一个中间模拟图片,并再次运行,直到模拟结束,以收集结果。

sim卡(“ACCTestBenchExample”“StopTime”“15”%模拟15秒sim卡(“ACCTestBenchExample”模拟到场景结束
ans =仿真软件。模拟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秒中,领头车远远领先于自我车(中间情节)。自我车辆加速并达到驾驶者设定的速度(上图)。

  • 当另一辆车在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号输出通道没有干扰。——>”模式。“噪音”属性为空。假设每个测量输出都有白噪声。ans =仿真软件。模拟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 is empty. Assuming white noise on each measured output.

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

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

helperPlotACCResults (logsout default_spacing time_gap)

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

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

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

open_system ('ACCTestBenchExample/ACC with Sensor Fusion'

跟踪与传感器融合

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

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

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

检测连接Block将视觉和雷达探测连接起来。预测时间由车辆和环境子系统中的时钟驱动。

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

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创建了一个弯曲的道路和多个演员在道路上移动的场景。该场景中的道路和演员被导出到MATLAB函数中ACCTestBenchScenario.m.要了解如何定义场景,请参阅场景创建部分。

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

自我车辆的运动由控制系统控制,而不是从场景文件中读取。相反,自我车辆位置、速度、偏航角和偏航速率被作为车辆动力学块的输入接收,并使用packEgoMATLAB功能块。

场景的读者块从对象中读取参与者姿势数据场景在工作区中加载的变量。模型运行ACCTestBenchScenario.m在模拟开始时将场景加载到工作区中。您还可以通过单击模型中的Run scenario Script按钮来加载场景。该块将参与者的姿势从场景的世界坐标转换为自我载体坐标。演员的姿势在块生成的总线上进行流处理。在本例中,您使用的是视觉检测发电机块和雷达检测发电机块。两个传感器都是远程和前瞻的,并提供良好的自我车辆的前部覆盖,如ACC所需要的。传感器使用角色在自我车辆坐标中的姿势来生成自我车辆前面的车辆检测列表。最后,以时钟块为例,说明车辆如何拥有集中的时间源。时间由多对象跟踪器块使用。

场景创建

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

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

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

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

plotACCScenario

为控制算法生成代码

虽然整个模型不支持代码生成,但是ACCWithSensorFusionMdlRef模型被配置为支持使用Embedded Coder软件生成C代码。要检查您是否可以访问Embedded Coder,请运行:

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

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

如果hasEmbeddedCoderLicense rtwbuild (“ACCWithSensorFusionMdlRef”结束

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

如果hasEmbeddedCoderLicense set_param ('ACCTestBenchExample/ACC with Sensor Fusion'...“SimulationMode”“Software-in-the-loop (SIL)”结束

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

结论

这个例子展示了如何在弯曲的道路上使用传感器融合实现一个集成的自适应巡航控制器(ACC),使用自动驾驶工具箱生成的合成数据在Simulink中测试它,将其组份,并自动为其生成代码。

bdclose所有

另请参阅

功能

对象

相关的话题

Baidu
map