matlab学习自动驾驶(2)横向控制例程-Lareral Control Tutorial

matlab学习自动驾驶(2)横向控制例程-Lareral Control Tutorial

前言

这个例子展示了如何使用横向控制器Stanley block来控制沿计划路线行驶的车辆的转向角度

一、概述

  • 横向控制器:调整转向角度,使车辆沿参考路径行驶。控制器最小化当前车辆位置和参考路径之间的距离。
  • 纵向控制器:当沿着参考路径行驶时,通过控制油门和刹车来保持所需的速度。控制器将车辆的航向角与参考路径的方向之间的差值最小化。

这个例子集中在横向控制的背景下的路径跟踪在一个恒定的纵向速度方案。在这个例子中,你会:

  1. 了解横向控制器stanley模块 使用driving scenario
  2. Designer应用程序创建一个驾驶场景,并为车辆生成要遵循的参考路径
  3. 使用闭环Simulink®模型测试场景中的横向控制器
  4. 使用Bird’s-Eye Scope可视化场景和相关的模拟结果

二、Lateral controller

stanley侧向控制器[1]采用了一种非线性控制律来最小化前轮相对于参考路径的交叉轨迹误差和航向角。横向控制器斯坦利block计算转向角度命令,调整车辆的当前姿态以匹配参考姿态
在这里插入图片描述
根据推导控制律时所采用的车辆模型,Stanley block有两种配置[1]

  • 运动自行车模型:运动模型假设车辆具有可忽略的惯性。这种配置主要适用于低速环境,在那里惯性效应最小。转向指令是基于参考位姿、当前位姿和车辆速度计算的
  • 动力学自行车模型:动力学模型包括惯性效应:轮胎打滑和转向伺服驱动。这个更复杂,但更准确的模型允许控制器处理真实的动力学。在这种配置中,控制器还需要路径曲率、车辆当前的偏航率和当前的转向角度来计算转向命令。
    您可以通过块对话框中的车辆模型参数设置配置

3.场景创建

这个场景是使用Driving scenario Designer应用程序创建的。这个场景包括一条三车道的马路和一辆ego汽车。有关添加道路、车道和车辆的详细步骤,请参见构建驾驶场景和生成合成检测。
在这个场景中,车辆
1.起步于中间车道
2.进入弯道后转左车道
3.改回中车道
在整个模拟过程中,车辆以10米/秒的恒定速度运行。使用Export > Export MATLAB function按钮,将该场景作为MATLAB®函数从app中导出。导出的函数名为helperCreateDrivingScenario。这个场景中的道路和角色被保存到场景文件LateralControl.mat中。
在这里插入图片描述

4.运行模型

打开Simulink 例程模型

open_system('LateralControlTutorial')

在这里插入图片描述
该模型包含以下主要组件

  • 横向控制器,是一个可变子系统,包含两个可以使用的横向控制器stanley块,一个配置了一个运动学自行车模型,另一个配置了一个动态自行车模型。它们都可以控制车辆的转向角度。在这里插入图片描述
    您可以从命令行指定活动的。例如,选择横向控制器斯坦利运动学模型,使用以下命令。
variant = 'LateralControlTutorial/Lateral Controller';
set_param(variant, 'LabelModeActivechoice', 'Kinematic');

当然,也可以通过simulink进行模型的选择。

  • HelperPathAnalyzer模块,为横向控制器提供参考信号。给定车辆的当前位姿,它通过在参考路径上搜索与车辆最近的点来确定参考位姿。
  • 车辆与环境子系统,利用车身三维建模模块对车辆运动进行建模。子系统还通过使用一个场景读取器块从侧面控制读取道路和角色来建模环境。垫场景文件。
  • 在这里插入图片描述

打开模型还会运行helperLateralControlTutorialSetup脚本,该脚本初始化模型使用的数据。该脚本加载Simulink模型所需的某些常数,如车辆参数、控制器参数、道路场景和参考姿态。特别是,脚本调用前面导出的函数helperCreateDrivingScenario来构建场景。该脚本还通过调用helpercreatelanesensorbus设置模型所需的总线

可以用以下命令绘制道路和规划的路径

helperPlotRoadAndPath(scenario, refPoses)

在这里插入图片描述
此函数并不存在于例程文件夹中,可新建一个函数文件,并将其定义如下

function helperPlotRoadAndPath(scenario,refPoses)
%helperPlotRoadAndPath Plot the road and the reference path
h = figure('Color','white');
ax1 = axes(h, 'Box','on');
plot(scenario,'Parent',ax1)
hold on
plot(ax1,refPoses(:,1),refPoses(:,2),'b')
xlim([150, 300])
ylim([0 150])
ax1.Title = text(0.5,0.5,'Road and Reference Path');
end

模拟的场景。
在模拟模型时,可以打开 Bird’s-Eye Scope 对模拟进行分析。打开Scope后,单击“查找信号”设置信号。然后运行仿真来显示车辆、道路边界和车道标记。下面的图片显示了这个例子的鸟瞰范围在25秒。这时,车辆已转到左车道。

在这里插入图片描述
您可以运行完整的模拟,并使用以下命令观察结果:

sim('LateralControlTutorial');

在这里插入图片描述
您还可以在车辆和环境子系统中使用Scope来检查控制器的性能,因为车辆按照规划的路径行驶。示波器显示,与路径的最大偏差小于0.3米,最大转角幅度小于3度。
在这里插入图片描述
利用以下命令也可以打开

scope = 'LateralControlTutorial/Vehicle and Environment/Scope';
open_system(scope)

为了减少转向指令中的横向偏移和振荡,使用横向控制器Stanley Dynamic block对模型进行再次仿真:

set_param(variant, 'LabelModeActivechoice', 'Dynamic');
sim('LateralControlTutorial');

参考

Lateral Control Tutorial

  • 4
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值