【MatLab学习笔记】实例Lateral Control Tutorial
作者:互联网
以下实例为MathWorks官方实例,本人翻译整理了相关知识点,记录一下学习笔记。
原文链接:https://ww2.mathworks.cn/help/driving/ug/lateral-control-tutorial.html
Lateral Control Tutorial
此实例展示了当车辆变换车道时,如何使用Lateral Contorller Stanley模块,通过控制车辆转向角来跟随一条已规划的路径。
概述
对车辆的控制是导航系统中的最后一步,一般是用两个独立的控制器完成的:
-
横向控制器:通过调整转向角使车辆跟随参考路径行驶。控制器使当前车辆位姿和参考路径之间的距离达到最小。
-
纵向控制器:当车辆跟随参考路径时,通过控制油门和制动系统使车辆保持目标速度行驶。控制器使当前车辆航向角和参考路径的方向误差达到最小。
此实例主要介绍在恒定纵向速度场景中路径跟随情况下车辆的横向控制。在此实例中,你将:
-
了解Lateral Controller Stanley模块背后的算法
-
使用Driving Scenario Designer应用创建一个行驶场景,并创建一个可供车辆跟随的参考路径。
-
使用闭环Simulink模型来测试场景中的横向控制器
-
使用Bird’s-Eye Scope来可视化场景并关联仿真结果
横向控制器
斯坦利横向控制器使用非线性控制律来最小化横向轨迹误差和前轮相对于参考路径的航向角。Lateral Controller Stanley模块通过预估转向角指令来调整车辆当前位姿来适配参考位姿。
根据控制律用到的车辆模型不同,Lateral Controller Stanley模块有两种配置:
-
运动学自行车模型:运动学模型假设车辆可以忽略惯性的影响。这种配置主要适用于惯性影响微乎其微的低速行驶环境。转向指令是根据参考位姿,当前位姿和车辆速度来计算的。
-
动力学自行车模型:动力学模型包含了惯性的影响:轮胎滑动和转向伺服驱动。这种更复杂但是更精确的模型可以使控制器处理现实的动态特性。在这种配置中,控制器还需要路径曲率,车辆的当前横摆角速度和当前转向角来计算转向指令。
你可以通过车辆模型的设置来选择使用哪种配置。
场景创建
场景使使用Driving Scenario Designer应用来创建的。此场景包含三条单向车道和自车,自车满足:
-
从中间车道开始行驶
-
进入弯道部分之后换到左侧车道
-
换回中间车道
在整个仿真过程中,车辆以10m/s的恒定速度行驶。此场景是通过Export>Export MATLAB function按钮作为MATLAB®函数从应用程序导出的。 导出的函数名为HelperCreatedRivingScenario。 此场景中的路和参与者被保存到场景文件lateralcontrol.mat中。
模型设置
打开Simulink教程模型
open_system('LateralControlTutorial')
此模型包含以下主要组成部分:
-
一个横向控制器变形子系统,变形模型(Simulink)包含两个Lateral Controller Stanley模块,一个是使用运动学自行车模型的,一个是使用动力学自行车模型的。他们都可以控制车辆的转向角。你可以从命令行中指定哪个是激活的。例如,要选择斯坦利横向控制运动学模块,用以下命令:
variant = 'LateralControlTutorial/Lateral Controller';
set_param(variant, 'LabelModeActivechoice', 'Kinematic');
-
HelperPathAnalyzer模块为横向控制器提供参考信号。给定的车辆当前位姿通过搜索在参考轨迹上距离车辆最近的点来确定参考位姿。
-
车辆和环境子系统用Vehicle Body 3DOF(Vehicle Dynamics Blockset)模块来模拟车辆的运动。该子系统还通过使用Scenario Reader模块从LateralControl.mat环境文件中读取道路和交通参与者来模拟环境。
打开模型的同时也运行了helperLateralControlTutorialSetup脚本,该脚本初始化模型使用的数据。该脚本加载Simulink模型所需的某些常量,例如车辆参数,控制器参数,道路环境和参考位姿。特别是,脚本调用先前导出的函数helperCreateDrivingScenario来构建场景。 脚本还通过调用HelperCreateLanesensorBus来设置模型所需的总线。
可以使用以下方法绘制道路和规划路径:
helperPlotRoadAndPath(scenario, refPoses)
仿真环境
在模拟模型时,可以打开Bird‘s-Eye Scope进行模拟分析。 打开scope后,点击Find Signals设置信号。 然后运行模拟以显示车辆、道路边界和车道标记。 下图显示了本例25秒时的鸟瞰图。 就在这一瞬间,车辆已经切换到左侧车道。
可以使用以下命令运行完全模拟并查看结果:
sim('LateralControlTutorial');
还可以使用车辆和环境子系统中的Simulink Scope(Simulink)检查控制器的性能,以便车辆按照规划路径行驶。 范围显示最大偏离路径小于0.3米,最大转向角度量级小于3度。
scope = 'LateralControlTutorial/Vehicle and Environment/Scope';
open_system(scope)
为减少转向指令中的横向偏差和振荡,使用Lateral Controller Stanley Dynamic模块,并再次模拟模型:
set_param(variant, 'LabelModeActivechoice', 'Dynamic');
sim('LateralControlTutorial');
结论
这个例子展示了如何使用Simulink模拟车辆在变道情况下的横向控制。 与Lateral Controller Stanley Kinematic模块相比,Lateral Controller Stanley Dynamic模块提供了更好的路径跟随性能,并且与参考路径的横向偏差更小。
标签:Control,控制器,模块,Lateral,路径,MatLab,车辆,模型 来源: https://blog.csdn.net/weixin_42325129/article/details/117945513