这个例子展示了如何实现基于传感器融合的汽车自适应巡航控制器在弯曲道路上行驶。
在这个例子中,你:
回顾一种结合传感器融合和自适应巡航控制器(ACC)的控制系统。提供了两种ACC变体:经典控制器和模型预测控制工具箱中的自适应巡航控制系统块。
使用自动化驾驶工具箱生成的合成数据在闭环模拟模型中测试控制系统。金宝app
配置软件在环仿真的代码生成设置,并自动生成控制算法的代码。
自适应巡航控制系统是一种能够根据道路状况调整自我车辆速度的控制系统。与常规的巡航控制一样,驾驶员为汽车设定一个期望的速度;此外,自适应巡航控制系统可以使自我车辆减速,如果有另一辆车在车道上较慢地移动。
为了让ACC正确工作,自我车辆必须确定它前面的车道如何弯曲,以及哪辆车是“领先车”,也就是说,在车道上自我车辆的前面。从ego vehicle的角度来看,一个典型场景如下图所示。自我汽车(蓝色)沿着弯曲的道路行驶。一开始,领头的是粉红色的车。然后紫色的车进入自我车的车道,成为领头的车。过了一会儿,紫色的车转到另一条车道,粉红色的车又成为了领头的车。那辆粉红色的车后来仍然领先。ACC设计必须对道路上的领先车辆的变化做出反应。
目前的ACC设计主要依靠从雷达获得的距离和距离速率测量,并且在直线道路上工作得最好。文中给出了这样一个系统的例子基于模型预测控制的自适应巡航控制系统(模型预测控制工具箱)而在基于FMCW技术的汽车自适应巡航控制(雷达工具箱).从先进的驾驶辅助系统(ADAS)设计到更自动化的系统,ACC必须解决以下挑战:
估计靠近自我车辆和相对自我车辆有显著横向运动的车辆的相对位置和速度。
估计自我车辆前面的车道,找出自我车辆前面的哪辆车在同一车道上最接近。
对环境中其他车辆的激进机动做出反应,特别是当另一辆车进入自我车辆的车道时。
这个例子展示了现有ACC设计的两个主要补充,以应对这些挑战:增加传感器融合系统和更新基于模型预测控制(MPC)的控制器设计。同时使用视觉和雷达传感器的传感器融合和跟踪系统具有以下优点:
它将视觉传感器获得的位置和速度的更好的横向测量与雷达传感器的距离和距离率测量相结合。
视觉传感器可以检测车道,估计车道相对于自我车辆的横向位置,并定位场景中的其他车辆相对于自我车辆车道。这个例子假设了理想的车道检测。
先进的MPC控制器增加了对环境中其他车辆更激进机动的反应能力。与传统的采用恒定增益PID设计的控制器不同,MPC控制器在保持严格安全距离约束的情况下调节自我车辆的速度。因此,当环境发生类似于人类驾驶员的快速变化时,控制器可以采用更积极的策略。
要打开主Simulink模型,请使金宝app用以下命令:
open_system ('acctestbenchexample')
该模型包含两个主要子系统:
ACC与传感器融合,建模传感器融合和控制车辆的纵向加速度。此组件允许您选择设计的经典或模型预测控制版本。
车辆和环境子系统,它模拟自我车辆的运动和模拟环境。雷达和视觉传感器的仿真为控制子系统提供了综合数据。
要在运行模型之前运行关联的初始化脚本,请在Simulink模型中单击金宝app运行安装脚本或者,在命令提示符处,输入以下命令:
helperACCSetUp
脚本加载Simulink模型所需的某些常量,如场景对象、车辆参数和ACC设计参数。金宝app默认ACC为经典控制器。该脚本还创建了为引用的控制系统模型定义输入和输出所需的总线。这些总线必须在模型编译之前在工作区中定义。当模型编译时,附加的Simulink总线将由它们各自的块自动生成。金宝app
为了绘制仿真结果和描述自我车辆的周围环境,包括被跟踪的对象,使用鸟瞰.Bird's-Eye Scope是一个模型级的可视化工具,您可以从Simulink工具条中打开它。金宝app在模拟选项卡,在审查结果, 点击鸟瞰.打开作用域后,单击找到信号来设置信号。下面的命令运行模拟15
秒得到一个中期模拟图片,并再次运行所有的方式结束模拟,以收集结果。
sim卡('acctestbenchexample',“StopTime”,“15”)%模拟15秒sim卡('acctestbenchexample')%模拟到场景结束
ans =仿金宝app真软件。模拟Output: logsout: [1x1 Simulink.SimulationData.Dataset] tout: [151x1 double] SimulationMetadata: [1x1 Simulink.SimulationMetadata] ErrorMessage: [0x0 char]
鸟瞰镜显示了传感器融合的结果。它展示了雷达和视觉传感器如何在它们的传感器覆盖区域内检测车辆。它还显示了由多对象跟踪器块维护的轨迹。黄色的轨道表示最重要的目标(MIO):在自我车辆的车道上距离最近的轨道。我们看到,在这个场景的开始,最重要的对象是在自我车辆前面快速移动的汽车。当经过的车辆靠近慢速行驶的车辆时,它会穿过左侧车道,传感器融合系统识别出它就是MIO。这辆车更接近自我车,但比它慢得多。因此,ACC必须减慢自我飞行器的速度。
在以下结果的古典ACC系统中,:
上面的情节显示了自我车辆的速度。
中间的图显示了自我车辆和引导车辆之间的相对距离。
下图显示了自我车辆加速。
在此示例中,来自跟踪和传感器融合系统的原始数据用于ACC设计而无需后处理。您可以期望看到一些“尖峰”(中间图)由于传感器模型中的不确定性,特别是当另一辆车切入或离开自我车道时。
要查看仿真结果,请使用以下命令。
helperPlotACCResults (logsout default_spacing time_gap)
在前11秒钟中,铅轿车远远领先于自我车辆(中间图)。EGO车辆加速并达到驱动器(顶部图)设定的速度。
当汽车切入自我车道(中间图)时,另一辆车从11到20秒开始。当铅轿厢和自助式车辆之间的距离大(11-15秒)时,EGO车辆仍然在驾驶员设定的速度下行进。当距离变小(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 =仿金宝app真软件。模拟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)
下面将详细介绍测试台架模型中各子系统的功能。具有传感器融合子系统的自适应巡航控制器包含两个主要部分:
跟踪和传感器融合子系统
自适应巡航控制器子系统
open_system (“ACCTestBenchExample/ACC传感器融合”)
跟踪和传感器融合子系统处理来自车辆和环境子系统的视觉和雷达检测,生成自我车辆周围环境的综合情况图。此外,它还提供ACC在车道上最接近的汽车前面的自我车辆的估计。
open_system ('ACCWithSensorFusionMdlRef/Tracking and SensorFusion ')
跟踪与传感器融合子系统的主要模块是多目标跟踪块,其输入是所有传感器检测和预测时间的组合列表。多对象跟踪器块的输出是一个确认轨迹的列表。
的检测连接块连接了视觉和雷达检测。预测时间由车辆与环境子系统中的时钟驱动。
检测聚类块簇多雷达检测,因为跟踪器期望每个传感器的每个对象的大部分检测。
的findLeadCar
MATLAB函数块利用已确认的轨迹列表和道路曲率来查找同一车道上最接近自我车辆和在其前面的车辆。这辆车被称为“引导车”,当前面的车驶入或驶出车道时,它可能会发生变化。该函数提供了领先车相对于自我车的位置和速度,以及最重要目标(MIO)轨道的指标。
自适应巡航控制器有两种变体:经典设计(默认)和基于mpc的设计。对于这两种设计,都应用了以下设计原则。装有ACC的车辆(ego vehicle)使用传感器融合来估计与前车的相对距离和相对速度。ACC使自我车辆以驾驶员设定的速度行驶,同时保持与领先车辆的安全距离。引车与自我车之间的安全距离定义为
其中默认间隔,时间间隔为设计参数,是自我载体的纵向速度。ACC根据以下输入为ego车辆生成纵向加速度:
自我车辆的纵向速度
铅轿厢和自我车辆之间的相对距离(来自跟踪和传感器融合系统)
前导车与自我车的相对速度(来自跟踪与传感器融合系统)
考虑到ego车辆的物理限制,纵向加速度受限于距离[-3,2].
在经典的ACC设计中,如果相对距离小于安全距离,则首要目标是减速并保持安全距离。如果相对距离大于安全距离,则首要目标是在保持安全距离的同时达到驾驶者设定的速度。这些设计原则是通过Min和Switch模块实现的。
open_system ('ACCWithSensorFusionMdlRef/Adaptive Cruise Controller/ACC classic ')
在基于MPC的ACC设计中,通过跟踪受约束的驱动器集速度来配制底层优化问题。约束强制执行相对距离总是大于安全距离。
要配置Adaptive Cruise Control系统块,请使用中定义的参数helperACCSetUp
文件。例如,ACC设计的线性模型,是由车辆动力学得到的。两个Switch模块实现了简单的逻辑来处理来自传感器的大量数字(例如,传感器可能返回)正
当它没有检测到mio时)。
open_system (ACCWithSensorFusionMdlRef/自适应巡航控制器/ACC模型预测控制)
有关ACC MPC设计的更多信息,请参见基于模型预测控制的自适应巡航控制系统(模型预测控制工具箱).
车辆与环境子系统由两部分组成:
车辆动力学和全局坐标
演员和传感器模拟
open_system (“ACCTestBenchExample /车辆和环境”)
车辆动力学子系统利用自动驾驶工具箱中的自行车模型-力输入块对车辆动力学进行建模。车辆动力学,有输入(纵向加速度)和前转向角的近似值为:
在状态向量中,为横向速度,为纵向速度和为偏航角。车辆参数在helperACCSetUp
文件。
车辆动力学的输出(如纵向速度)和横向速度)是基于身体固定的坐标。为获得车辆所经过的轨迹,将车身固定坐标转换为全局坐标,通过以下关系:
偏航角和偏航角度率也转换为度数。
驾驶员转向模型的目标是通过控制前转向角度使车辆保持在其车道上并沿着弯曲的道路行驶.这个目标是通过驱动偏航角误差来实现的和横向位移误差为零(参见下图),在哪里
所要求的偏航角速率为(为道路曲率半径)。
演员和传感器仿真子系统产生跟踪和传感器融合所需的合成传感器数据。在运行此示例之前,驾驶场景设计师应用程序用于创建一个带有弯曲道路和多个演员在路上移动的场景。然后将此方案的道路和演员保存到场景文件中ACCTestBenchScenario.mat
.要了解如何定义场景,请参见场景创建一节。
open_system (“ACCTestBenchExample/车辆和环境/参与者和传感器模拟”)
ego车辆的运动由控制系统控制,而不是从场景文件中读取。相反,自我车辆的位置,速度,偏航角和偏航率作为输入从车辆动力学块,并打包成一个单一的行动者姿态结构使用packEgo
MATLAB功能块。
的场景的读者块从场景文件中读取actor姿态数据ACCTestBenchScenario.mat
.该块将演员的姿势从场景的世界坐标转换为自我载体坐标。演员的姿势在由街区生成的公共汽车上流动。在这个例子中,使用了a视觉检测发电机块和雷达检测发电机堵塞。根据ACC的需要,两个传感器都是远程和前瞻性的,并提供自助式车辆前部的良好覆盖范围。传感器使用actor姿势在自我车辆的坐标中,以在自我车辆前面产生车辆检测列表。最后,使用时钟块作为车辆如何具有集中时间源的示例。多目标跟踪器块使用时间。
的驾驶场景设计师应用程序允许您定义在道路上移动的道路和车辆。对于此示例,您可以定义两个并行道路的恒定曲率。要定义道路,您可以定义道路中心,道路宽度和银行角度(如果需要)。通过沿圆弧的采样点选择道路中心,跨越60度恒定的曲率半径。
您定义场景中的所有车辆。为了定义车辆的运动,你可以通过一组路径点和速度来定义它们的轨迹。定义路径点的一个快速方法是选择前面定义的道路中心的子集,用道路中心的左或右偏移来控制车辆行驶的车道。
这个例子显示了四辆车:一辆在左车道快速行驶的车,一辆在右车道缓慢行驶的车,一辆在马路对面接近的车,还有一辆在右车道启动,但随后移到左车道超过缓慢行驶的车的车。
可以使用驾驶场景设计师应用程序并重新定位到同一方案文件ACCTestBenchScenario.mat
.在重新运行模拟时,Scenario Reader块自动获取更改。要以编程方式构建该场景,可以使用helperScenarioAuthoring
函数。
plotACCScenario
虽然整个模型不支持代码生成,但是金宝appACCWithSensorFusionMdlRef
模型配置为支持使用嵌入式编码器软件生成C代码。金宝app要检查您是否可以访问嵌入式编码器,请运行:
hasEmbeddedCoderLicense =许可证(“签出”,“RTW_Embedded_Coder”)
您可以为模型生成一个C函数,并通过运行以下命令来探索代码生成报告:
如果hasEmbeddedCoderLicense rtwbuild (“ACCWithSensorFusionMdlRef”)结束
您可以使用在循环中的软件(SIL)模拟来验证编译后的C代码是否如预期的那样运行。模拟ACCWithSensorFusionMdlRef
SIL模式下的参考模型,使用:
如果hasEmbeddedCoderLicense set_param (“ACCTestBenchExample/ACC传感器融合”,...“SimulationMode”,“Software-in-the-loop (SIL)”)结束
当你运行acctestbenchexample.
模型,则生成、编译和执行代码ACCWithSensorFusionMdlRef
模型。这使您能够通过模拟测试已编译代码的行为。
本示例演示了如何在弯曲道路上实现传感器融合的集成自适应巡航控制器(ACC),并使用自动驾驶工具箱生成的合成数据在Simulink中进行测试,将其组件化,并自动生成代码。金宝app
bdclose所有