此示例示出了如何控制,同时改变车道,其以下的规划路径的车辆的转向角,使用该横向控制器斯坦利块。
车辆控制是导航系统的最后一步,通常由两个独立的控制器完成:
横向控制器:调整转向角度,使得车辆跟随参考路径。控制器最小化当前车辆位置和所述参考路径之间的距离。
纵向控制器:虽然下面参考路径,通过控制油门和制动器保持所需的速度。控制器最小化车辆的航向角和参考路径的取向之间的差值。
这个示例集中于在路径的一个恒定纵向速度场景以下上下文横向控制。在这个例子中,你会:
斯坦利横向控制器[1]使用非线性控制律来最小化交叉轨道误差和相对于所述参考路径中的前轮的方向角。该横向控制器斯坦利块计算,调整车辆的当前姿态相匹配的参考姿态转向角命令。
根据推导控制律所使用的车辆模型,横向控制器Stanley block有两种配置:
运动自行车模型:运动学模型假定车辆具有可忽略不计的惯性。这种配置主要适用于低速环境中,惯性影响是最小的。转向指令是基于所述参考姿态,当前姿势,并且车辆的速度来计算。
动态的自行车模型:动态模型包括惯性效应:轮胎打滑和转向伺服驱动。这个更复杂,但更准确的模型,允许控制器处理现实的动态。在这种配置中,控制器还需要路径曲率、车辆当前的偏航率和当前的转向角来计算转向指令。
您可以设置通过配置汽车模型“块”对话框中的参数。
该方案是使用创建驾驶场景设计师应用程序。此方案包括一个单一的,三车道的道路和自主车辆。有关添加道路,车道和车辆的详细步骤,见建立一个驾驶情形并产生综合检测项。在这种情况下,车辆:
开始在中间车道。
进入弯道后转左车道。
换回中间车道。
在整个模拟过程中,车辆以10米/秒的恒定速度运行。该场景从app中导出为MATLAB®函数,使用导出>导出功能的MATLAB按钮。导出的功能被命名为helperCreateDrivingScenario
。此场景中的道路和参与者被保存到场景文件中LateralControl.mat
。
打开Simulin金宝appk的模型教程。
open_system (“LateralControlTutorial”)
该模型包含以下主要组件:
变种=“LateralControlTutorial /横向控制器”;set_param(变种,“LabelModeActivechoice”,“运动”);
一种HelperPathAnalyzer
块,为横向控制器提供参考信号。给定车辆的当前位姿,它通过搜索参考路径上与车辆最近的点来确定参考位姿。
一种汽车与环境子系统,它使用a来模拟车辆的运动车辆身体3自由度块。子系统还通过使用方案读卡器块来读取LateralControl.mat场景文件中的道路和演员。
打开模型也运行helperLateralControlTutorialSetup
脚本,初始化由该模型所使用的数据。通过仿真模型所需的负荷脚本某些常量,如车辆参数,控制器参数,道路的情况下,和参照的姿势。金宝app特别是,该脚本调用先前导出函数helperCreateDrivingScenario
来构建场景。该脚本还通过调用来设置模型所需的总线helperCreateLaneSensorBuses
。
您可以使用以下工具来绘制道路和规划的路径:
helperPlotRoadAndPath(场景,refPoses)
在模拟模型时,可以打开鸟瞰的范围分析仿真结果。打开范围后,单击找到信号来设置信号。然后运行模拟来显示车辆、道路边界和车道标记。下面的图像显示了这个例子中25秒的鸟瞰范围。就在这时,车子转到了左边车道。
您可以运行完整的模拟和探索结果使用以下命令:
SIM(“LateralControlTutorial”);
您还可以使用的Simulink金宝app范围在汽车与环境当车辆沿着计划的路径行驶时,子系统检查控制器的性能。范围内最大偏离路径偏差小于0.3米,最大转向角量值小于3度。
范围=“LateralControlTutorial /车辆和环境/范围”;open_system(范围)
为了减少在转向命令的横向偏差和振荡,使用横向控制器斯坦利动态块并再次模拟模型:
set_param(变种,“LabelModeActivechoice”,“动态”);SIM(“LateralControlTutorial”);
此实施例表明如何在仿真利用Simulink车道改变场景的车辆的横向控制。金宝app与侧向控制器斯坦利运动学块相比,横向控制器斯坦利动态块提供在路径与来自参考路径较小的横向偏差以下改进的性能。
[1] Hoffmann, Gabriel M., Claire J. Tomlin, Michael Montemerlo,和Sebastian Thrun。越野自动汽车轨迹跟踪:控制器设计、实验验证和赛车。美国控制会议。2007年,页2296 - 2301。
helperPlotRoadAndPath画出路和参考路径
函数refPoses helperPlotRoadAndPath(场景)%helperPlotRoadAndPath画出路和参考路径H =系数(“颜色”,'白色');ax₁=轴(h,'框','上');
情节(场景中,“父”ax₁)举行在情节(ax₁, refPoses (: 1), refPoses (:, 2),'B')XLIM([150,300])ylim([0 150])= ax1.Title文本(0.5,0.5,“路和参考路径”);结束