基于MATLAB&SIMULINK开发自动驾驶系统第四十三讲基于多传感器融合的自适应巡航控制
图片
本例介绍了如何利用传感器融合实现基于传感器融合的汽车自适应巡航控制器,并且可用于在弯道上行驶的车辆。在这个例子中:1:结合了传感器融合和自适应巡航控制器(ACC)的控制系统。提供了两个ACC的变体:一个经典控制器和一个来自模型预测控制工具箱的自适应巡航控制系统块。2:使用自动驾驶工具箱生成的合成数据,在闭环Simulink模型中测试控制系统。3:配置软件在环仿真的代码生成设置,并自动生成控制算法的代码。43.1 绪论自适应巡航控制系统是一种根据前方路面交通状况修改被控车辆速度的控制系统。与普通巡航控制一样,驾驶员为汽车设定一个理想的速度;此外,如果前方车道上有其他车辆行驶速度较慢,自适应巡航控制系统可以使被控车辆减速,控制车辆实现稳定跟随前车车辆行驶。要想让ACC正常工作,被控车辆必须确定前方车道是弯道还是直道,以及哪辆车是 "领头车",也就是在车道上排在被控车辆前面的车辆。从被控车辆的角度看,一个典型的场景如下图所示。被控车辆(蓝色)沿着一条弯曲的道路行驶。一开始,领头车是粉色车。然后,紫色车切入被控车辆的车道,成为领头车。过了一会儿,紫色车换到另一条车道,粉色车又成为领头车。之后,粉色车依然是领头车。ACC设计必须对路面上领头车的变化做出反应。图片
目前的ACC设计主要依靠从毫米波雷达上获得的测距和测速,其设计在直线道路上工作效果最好。在 "使用模型预测控制的自适应巡航控制系统"(模型预测控制工具箱)中给出了这样一个系统的例子。从先进的驾驶辅助系统(ADAS)设计转向更加自动级别更高的系统,ACC必须解决以下挑战:1 估算靠近被控车辆且相对被控车辆有较着横向运动的车辆的相对位置和速度。2 估算被控车辆前面的车道,找出被控车辆前面的哪辆车是同一车道中最近的一辆车。3 反应环境中其他车辆的侵略性举动,特别是当其他车辆切入被控车辆车道时。这个例子展示了在现有ACC设计中主要增加两个功能来应对这些挑战:增加一个传感器融合系统和更新基于模型预测控制(MPC)的控制器设计。同时使用视觉和毫米波雷达传感器的传感器融合和跟踪系统具有以下优点:1 它将视觉传感器获得的较好的位置和速度横向测量与毫米波雷达传感器的测距和测距率测量相结合。2 视觉传感器可以探测车道,提供车道相对于被控车辆的横向位置估计,并定位场景中其他车辆相对于被控车辆车道的位置。这个例子假设了理想的车道探测。先进的MPC控制器增加了对环境中其他车辆更激进的操纵做出反应的能力。与使用具有恒定增益的PID设计的经典控制器相比,MPC控制器在保持严格的安全距离约束的同时调节被控车辆的速度,控制体验上更平顺,(小编注MPC目前还没有听说哪家用在了量产车上)。因此,当环境快速变化时,控制器可以采用类似于人类驾驶员的方式来实施更积极的机动。43.2 测试台模型和仿真结果概述要打开Simulink主模型,请使用以下命令。open_system('ACCTestBenchExample')
图片
该模型主要包含两个子系统。1 ACC with Sensor Fusion,它对传感器融合进行建模,控制车辆的纵向加速度。该组件允许选择经典或模型预测控制版本的设计。2 车辆与环境子系统,它对被控车辆的运动进行建模,并对环境进行建模。毫米波雷达和视觉传感器的仿真为控制子系统提供融合数据。要在运行模型之前运行相关的初始化脚本,在Simulink模型中,单击 "运行设置脚本",或者在命令提示符下,键入以下内容:helperACCSetUp脚本加载Simulink模型所需的某些常量,如车辆和ACC设计参数。默认的ACC是经典控制器。脚本还创建了定义控制系统参考模型的输入和输出所需的总线。这些总线必须在模型编译前在工作区中定义。当模型编译时,额外的Simulink总线会由各自的块自动生成。要绘制仿真结果并描绘被控车辆的周围环境,包括被跟踪的对象,可以利用Bird's-Eye Scope观测。Bird's-Eye Scope是一个模型级的可视化工具,它可以用来从Simulink工具条中打开。在 "仿真 "选项卡上,在"回顾结果 "下,单击鸟眼范围。打开范围后,点击查找信号,设置信号。下面的命令运行仿真到15秒,得到中间的仿真画面,再一直运行下去。到仿真结束收集结果。
sim('ACCTestBenchExample','StopTime','15') %Simulate 15seconds sim('ACCTestBenchExample') %Simulate to end of scenarioans= Simulink.SimulationOutput:logsout: [1x1Simulink.SimulationData.Dataset] tout: [151x1 double]SimulationMetadata: [1x1Simulink.SimulationMetadata] ErrorMessage: [0x0 char]
图片
图片
鸟眼范围显示了传感器融合的结果。它显示了毫米波雷达和视觉传感器如何探测其传感器覆盖区域内的车辆。它还显示了由多对象跟踪器块保持的目标跟踪信息。黄色的跟踪显示的是最重要的物体(MIO):被控车辆前方最近的跟踪,在其车道上。我们看到,在场景开始时,最重要的对象是被控车辆前方的快速行驶的汽车。当过往的汽车离慢速行驶的汽车越来越近时,它越过了左侧车道,传感器融合体系识别出它是MIO。这辆车离被控车辆更近,速度比它慢很多。ACC必须控制被控车辆减速。在下面的经典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变体,然后运行以下命令。这一步需要使用Model Predictive Control Toolbox软件。可以使用以下代码检查该许可证的存在。如果不存在代码,则描绘了类似结果的样本。hasMPCLicense =license('checkout','MPC_Toolbox');if hasMPCLicensecontroller_type= 2;sim('ACCTestBenchExample','StopTime','15') %Simulate 15seconds sim('ACCTestBenchExample') %Simulate to end of scenarioelseload data_mpcend-->Convertingmodel to discrete time.-->Assumingoutput disturbance added to measured output channel #2 is integrated white noise.Assumingno disturbance added to measured output channel #1.-->The"Model.Noise" property of the "mpc" object is empty. Assumingwhite noise on each measure ans =Simulink.SimulationOutput:logsout: [1x1 Simulink.SimulationData.Dataset] tout: [151x1double]SimulationMetadata: [1x1Simulink.SimulationMetadata]ErrorMessage: [0x0 char]-->Convertingmodel to discrete time.-->Assumingoutput disturbance added to measured output channel #2 is integrated white noise.Assumingno disturbance added to measured output channel #1.-->The"Model.Noise" property of the "mpc" object is empty.Assuming white noise on each measure
图片
图片
在基于MPC的ACC的仿真结果中,与经典ACC设计类似,实现了速度和间距控制的目标。与经典ACC设计相比,基于MPC的ACC采用全油门或制动进行加速或减速,因此更加激进。这种行为是由于对相对距离的明确约束。当道路上发生突然变化时,例如当领先车变为慢车时,这种激进行为可能是首选。为了使控制器的控制效果更加平顺,打开自适应巡航控制系统块的掩码,并降低控制器行为参数的值。如前所述,中间图中的尖峰是由于传感器模型的不确定性造成的。要查看基于MPC的ACC的仿真结果,请使用以下命令。helperPlotACCResults(logsout,default_spacing,time_gap)
图片
下面将详细介绍试验台模型中各子系统的功能。带传感器融合的自适应巡航控制器子系统包含两个主要组成部分:1 跟踪和传感器融合子系统2 自适应巡航控制器子系统open_system('ACCTestBenchExample/ACC with Sensor Fusion')
图片
43.3 跟踪和传感器融合跟踪和传感器融合子系统处理来自车辆和环境子系统的视觉和雷达探测,并生成被控车辆周围环境的综合情况图。同时,它还能向ACC提供被控车辆前方车道上最近的车的估计。
open_system('ACCWithSensorFusionMdlRef/Tracking and Sensor Fusion')
图片
跟踪和传感器融合子系统的主要块是多对象跟踪器块,其输入是所有传感器探测的组合列表和预测时间。多对象跟踪器块的输出是确认的跟踪列表。
探测融合模块将视觉和毫米波雷达探测信息融合起来。预测时间由车辆与环境子系统中的时钟来驱动。
探测聚类块对多个毫米波雷达探测进行聚类,因为跟踪器希望每个物体每个传感器最多探测一个目标。
findLeadCar MATLAB函数块利用确认的跟踪列表和道路的曲率,在同一车道上找到离被控车辆最近并在其前方的哪辆车。这辆车称为领先车,当车辆驶入和驶出被控车辆前方的车道时,可能会发生变化。该功能提供了领先车相对于被控车辆的位置和速度,以及最重要物体(MIO)跟踪的索引。
43.4 自适应巡航控制器自适应巡航控制器有两种变体:一种是经典设计(默认),一种是基于MPC的设计。对于这两种设计,均采用以下设计原则:配备ACC的车辆(被控车辆)使用传感器融合来估计与前车的相对距离和相对速度。ACC使被控车辆以驾驶员设定的速度行驶,或与领先车保持安全距离。领先车与被控车辆之间的安全距离定义为:
图片
其中默认间距,和时隙为设计参数,为被控车辆的纵向速度。ACC根据以下输入生成被控车辆的纵向加速度:
- 被控车车的纵向速度。
- 领头车与被控车辆之间的相对距离(来自跟踪与传感器融合系统)。
- 领头车和被控车之间的相对速度(来自跟踪和传感器融合系统)。
考虑到被控车辆的物理限制,纵向加速度被约束在[-3,2]范围内。
在经典的ACC设计中,如果相对距离小于安全距离,那么首要目标是减速并保持安全距离。如果相对距离大于安全距离,那么主要目标是在保持安全距离的同时达到驾驶员设定的速度。
这些设计原则是通过Min和Switch块来实现的。
open_system('ACCWithSensorFusionMdlRef/Adaptive Cruise Controller/ACC Classical')
图片
在基于MPC的ACC设计中,基本的优化问题是在约束条件下,通过跟踪驾驶员设定的速度来制定的。该约束条件强制要求相对距离总是大于安全距离。
图片
要配置自适应巡航控制系统块,请使用帮助者ACCSetUp文件中定义的参数。例如,ACC设计的线性模型 ,并从车辆动力学中获得。两个Switch块实现了简单的逻辑,以处理来自传感器的大数(例如,当传感器没有探测到MIO时,它可能会返回Inf)。
open_system('ACCWithSensorFusionMdlRef/Adaptive Cruise Controller/ACC Model PredictiveControl')
图片
43.5 车辆与环境车辆与环境子系统由两部分组成:
1 车辆动力学和全球坐标
2 执行器和传感器仿真
open_system('ACCTestBenchExample/Vehicle and Environment')
图片
车辆动力学子系统使用自动驾驶工具箱中的自行车模型-力输入块对车辆动力学进行建模。车辆动力学,输入(纵向加速度)和前转向角,用以下方法。
图片
在状态向量中,表示横向速度,表示纵向速度,表示偏航角。车辆的参数在帮助程序ACCSetUp文件中提供。
车辆动力学的输出(如纵向速度和横向速度)是基于车身固定坐标的。为了得到车辆在运动过程中的跟踪,车身固定坐标通过以下关系转换成全局坐标。
图片
偏航角和偏航角率也换算成度的单位。
驾驶员转向模型的目标是通过控制前部转向角,使车辆保持在自己的车道上,并沿着弯曲的道路行驶。这个目标是通过驾驶偏航角误差和侧向位移误差为零来实现的(见下图),其中
图片
所需的偏航角率由Vx/R给出。
图片
执行器和传感器仿真子系统生成跟踪和传感器融合所需的合成传感器数据。在运行此示例之前,使用驾驶场景设计器应用程序创建一个具有弯曲道路和多个执行器在道路上移动的场景。然后将该场景中的道路和执行器保存到场景文件ACCTestBenchScenario.mat中。要了解如何定义场景,请点赞、转发此文,小编后续不断更新。
open_system('ACCTestBenchExample/Vehicle and Environment/Actors and Sensor Simulation')
图片
被控车辆的运动是由控制系统控制的,并不是从场景文件中读取的。取而代之的是,被控车辆的姿态、速度、偏航角和偏航率被接收为来自车辆动力学块的输入,并使用packEgo MATLAB函数块打包成一个单一的执行器姿态结构。
Scenario Reader 块从场景文件 ACCTestBenchScenario.mat 读取交通参与者姿势数据。该块将场景的世界坐标中的执行器姿势转换为被控车辆坐标。被上传到由块生成的总线上。 在这个例子中,使用了视觉探测生成块和毫米波雷达探测生成块。
这两个传感器都是远距离和前向的,并提供了对被控车辆前部的良好覆盖范围,这是ACC的需要。传感器使用被控车辆坐标中的交通参与者姿势来生成被控车辆前方的车辆探测列表。最后,以一个时钟块为例,说明车辆将有一个集中的时间源。时间由多对象跟踪器块使用。
43.6 场景创建驾驶场景设计器应用允许定义道路和在道路上移动的车辆。在本例中, 定义了两条曲率不变的平行道路。要定义道路, 需要定义:道路中心、道路宽度和倾斜角度(如果需要)。道路中心是通过沿圆弧取样点选择的,跨度为60度的恒定曲率半径的转弯。
定义了场景中的所有车辆。为了定义车辆的运动,通过一组航点和速度来定义它们的跟踪。定义航点的快速方法是选择前面定义的道路中心的一个子集,并在道路中心的左边或右边偏移,以控制车辆行驶的车道。
这个例子显示了四辆汽车:一辆快速行驶的汽车在左侧车道上,一辆缓慢行驶的汽车在右侧车道上,一辆汽车在马路对面驶来,一辆汽车从右侧车道上开始行驶,但随后移动到左侧车道上以超越缓慢行驶的汽车。
场景可以使用驾驶场景设计器应用程序进行修改,并重新保存到同一个场景文件ACCTestBenchScenario.mat中。当仿真重新运行时,场景阅读器块会自动拾取更改。如果要以编程方式构建场景,可以使用助记场景授权功能(helperScenarioAuthoring)。plotACCScenario
图片
43.7 控制逻辑代码生成虽然整个模型不支持代码生成,但 ACCWithSensorFusionMdlRef 模型被配置为支持使用 Embedded Coder 软件生成 C 代码。要检查是否有访问Embedded Coder的权限,请运行。
hasEmbeddedCoderLicense = license('checkout','RTW_Embedded_Coder')
可以为模型生成一个C函数,并通过运行探索代码生成报告。
if hasEmbeddedCoderLicense rtwbuild('ACCWithSensorFusionMdlRef')end
可以使用软件在环(SIL)仿真来验证编译后的C代码的行为是否符合预期。要在SIL模式下仿真ACCWithSensorFusionMdlRef引用的模型,请使用。
if hasEmbeddedCoderLicenseset_param('ACCTestBenchExample/ACC with Sensor Fusion',... 'SimulationMode','Software-in-the-loop (SIL)')end
当 运行ACCTestBenchExample模型时,将为ACCWithSensorFusionMdlRef模型生成、编译和执行代码。这使能够通过仿真来测试编译代码的行为。
43.8 结论本例展示了如何在弯道上用传感器融合实现一个集成的自适应巡航控制器(ACC),在Simulink中使用自动驾驶工具箱生成的合成数据进行测试,对其进行组件化,并自动生成代码。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报。