Coursera自动驾驶课程第6讲:Vehicle Longitudinal Control

在上一讲《Coursera自动驾驶课程第5讲:Vehicle Dynamic Modeling》中我们了解了汽车运动学和动力学模块

本讲我们继续学习新的模块:汽车纵向控制。具体地,我们将学习PID控制算法,看看该算法是如何在自动驾驶汽车中应用的。

B站视频链接:https://www.bilibili.com/video/BV1WE411D74g?p=1


文章目录

      • 1. Proportional Integral Derivative Control
        • 1.1 Overview
        • 1.2 PID Controller (重点)
        • 1.3 Second Order System
      • 2. Longitudinal Speed Control with PID
        • 2.1 Vehicle Longitudinal cruise control
        • 2.2 High & Low-level controller
      • 3. Feedforward Speed Control
        • 3.1 Feedback vs. Feedforward Control
        • 3.2 Vehicle Speed Control

1. Proportional Integral Derivative Control

1.1 Overview

在上一节,我们学习了如何基于自行车模型开发汽车运动学和动力学模型。

在下图中,汽车运动学和动力学模型通过捕获驾驶员输入的命令(例如转向和刹车),以及外界扰动进行响应。 然后,控制器通过传感器感知汽车当前的状态向量并随后生成执行器信号来调节车辆状态。
在这里插入图片描述
对于纵向控制,控制器通过调节油门和制动命令以匹配汽车行驶所需的速度。下面 让我们看一个典型的反馈控制回路

Plant或Process模型将执行器信号作为输入输出为系统状态变量。 然后传感器对系统状态变量进行测量,然后Estimators进行估计。 系统将估计值与所需参考输入进行比较,并将误差传递给控制器,以上就是一个完整的反馈控制回路。

下面我们介绍状态转移函数

传递函数G是在拉普拉斯域中定义的系统输入U和输出Y之间的关系,它是复数域变量S的函数。

Y(s)=G(s)U(s)s=σ+jωY(s)= G(s)U(s)\\ s = \sigma + j\omega Y(s)=G(s)U(s)s=σ+jω

在这里插入图片描述在这里插入图片描述

1.2 PID Controller (重点)

PID控制包含三项:

  • 与误差eee成比例的比例项KPK_{P}KP,
  • 与误差积分成比例的积分项KIK_IKI,
  • 与误差导数成比例的导数项KDK_DKD

下面直接给出其时间域公式:
u(t)=KPe(t)+KI∫01e(t)dt+KDe˙(t)u(t) = K_{P}e(t)+K_I\int_0^1 e(t)dt + K_D\dot{e}(t)u(t)=KPe(t)+KI01e(t)dt+KDe˙(t)
对其进行拉普拉斯转换,转换后的形式为:
U(s)=Gc(s)E(s)=(KP+KIs+KDs)E(s)=(KDs2+KPs+KIs)E(s)U(s) = G_c(s)E(s) = (K_P + \frac{K_I}{s}+K_Ds)E(s) = (\frac{K_Ds^2 + K_Ps + K_I}{s})E(s)U(s)=Gc(s)E(s)=(KP+sKI+KDs)E(s)=(sKDs2+KPs+KI)E(s)


下面我们来讨论状态转移函数Gc(s)G_c(s)Gc(s)的一些特性:

  • PID传递函数在原点处包含一个单极
  • 还包含含零二阶分子,可以通过选择适当的增益值将其放置在复平面上的任何位置。

有多种算法可以调节PID增益,其中,齐格勒·尼科尔斯(Ziegler Nichols)是最受欢迎的算法之一。

对于系统响应,我们定义几个评价指标:

  • Rise Time (上升时间)定义为达到所需参考值90%所需要的时间。
  • Overshoot为系统输出超出此参考的最大百分比。
  • Settling Time(稳定时间)是指系统输出稳定在参考值范围的5%之内所需时间,
  • Steady State Error(稳态误差)是稳态下输出与参考值之间的误差。

比例项KpK_pKp的增加会导致Overshoot的增加,相应地上升时间会减少。 类似地,由于微分项KdK_dKd对误差的变化率做出反应,因此增大KdK_dKd会导致Overshoot减小和稳定时间减少。最后,KIK_IKI的增加可以消除稳态误差。 下面的表格总结了以上特性。

在这里插入图片描述在这里插入图片描述

1.3 Second Order System

现在,让我们看一下图中所示的著名的二阶弹簧质量阻尼模型。

系统受到输入力FFF的作用,模型的输出为物体位移xxx。 质量块MMM通过具有常数KKK的弹簧和具有阻尼系数bbb的阻尼器连接墙面。 现在将方程转换为Laplace域,最终我们得到图中的状态转移函数G(s)G(s)G(s)
在这里插入图片描述
为了评估系统特性,我们使用单位阶跃输入来激励系统。 此时系统响应为开环响应,因为此时没有控制器应用于系统。 我们得到的系统响应如下图:
在这里插入图片描述
如果将控制器添加到模型中,并且模型的输出与所需的参考信号进行比较,则系统的响应称为闭环响应

下图给出了几种不同PID控制器的阶跃响应。

水平虚线表示所需输出,控制器的目标是使实际输出接近该参考值。在第一个示例中,阶跃响应为纯比例控制。在PPP控制器响应中,我们看到上升时间快,明显的过冲和延长的振荡。增加微分控制可改善过冲和建立时间方面的阶跃响应,但会降低上升时间。相反,添加积分项可保持较短的上升时间,并且能够减少振荡和过冲,从而也缩短了建立时间

下面我们给出PIDPIDPID控制器:
GPID(s)=(KP+KDs+KIs)G_{PID}(s) = (K_P + K_Ds + \frac{K_I}{s})GPID(s)=(KP+KDs+sKI)
系统响应如图右所示,系统通过PID控制可以以更快的速度接近参考点而没有任何过冲。

在这里插入图片描述在这里插入图片描述在这里插入图片描述

2. Longitudinal Speed Control with PID

2.1 Vehicle Longitudinal cruise control

在上一节,我们介绍了PID控制原理。 在本节,我们将PID控制应用于车辆纵向控制。

现在让我们仔细研究一下车辆控制架构。 我们可以将整个架构分为四部分,如下左图所示:

  • 第一部分是环境感知。车辆通过传感器对周围环境进行感知,并为系统生成输入参考。
  • 第二部分,路径生成和速度生成。路径和速度是我们控制器所需的参考输入。
  • 第三部分,车辆横向和纵向控制,目的是最大程度地减小实际和参考路径与速度之间的误差。-
  • 最后,控制器发出信号,执行器执行相应命令。正如我们在上一节中所看到的,包括用于横向控制的转向以及用于纵向控制的油门和制动命令。

下面让我们看一个车辆纵向控制的例子。

目前汽车控制中最常用的控制应用就是巡航控制。通常巡航控制系统主要功能就是:通过节气门或制动命令维持车辆速度

通常控制器可以分为两个级别:高级控制器和低级控制器。尽管低级控制器对于控制任务有时候不是必需的。高级控制器根据车辆参考速度和实际速度之差,生成所需的加速度以减小速度差。低级控制器获取车辆加速度,并产生节气门命令或制动命令来最终控制车速。

在这里插入图片描述在这里插入图片描述

2.2 High & Low-level controller

High-level controller
高级控制器根据速度差确定需要的加速度大小。 高级别控制器的输入是速度差,输出是车辆的期望加速度
根据PID原理我们所需的加速度可以写成:
x¨des=KP(x˙ref−x˙)+KI∫01(x˙ref−x˙)dt+KDd(x˙ref−x˙)dt\ddot{x}_{des} = K_{P}(\dot{x}_{ref}-\dot{x})+K_I\int_0^1 (\dot{x}_{ref}-\dot{x})dt + K_D\frac{d\left(\dot{x}_{r e f}-\dot{x}\right)}{d t}x¨des=KP(x˙refx˙)+KI01(x˙refx˙)dt+KDdtd(x˙refx˙)

Low-level controller
在设计低级控制器时,我们会进行一些假设以简化问题:

  • 仅考虑节气门命令(无制动命令, 在巡航控制中,仅需要油门即可控制车辆速度)。
  • 变矩器锁定(齿轮3+),假设我们以三档或更高档位操作,从而变矩器被锁定,这意味着来自发动机的扭矩直接通过变速器而不会造成损失。
  • 轮胎滑移率较小,纵向控制柔和。

低级控制器通过增加或减小发动机产生的扭矩来产生期望的加速度。将期望的加速度转换为扭矩需求,然后将扭矩需求转换为节气门角度指令。

在下面的仿真结果图中,我们看到根据PID控制实际车速如何随时间变化,实际车速最终达到所需的参考速度。

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

3. Feedforward Speed Control

3.1 Feedback vs. Feedforward Control

在上一小节,我们了解了如何构建用于纵向速度跟踪的反馈控制器,我们使用PID来生成加速命令,并使用一个低级控制器来定义油门和制动器命令。

现在,让我们看一下Feedvack图Feedforward图
Feedback图是一个典型的闭环结构,将输出与参考信号做比较。 并将两者之差输入到反馈控制器中。Feedforward图是一个开环结构,其中参考信号直接馈入前馈控制器。

在许多应用中,通常前馈回路和反馈回路会结合使用以提高控制器性能。 右图为一个典型的反馈、前馈控制工作原理图。

反馈和前馈控制器均用于控制系统的主要原因是前馈控制器在产生参考输出以实现特定跟踪响应时会提供预测响应,尤其是在所需输入为非零时。反馈控制器会修正响应,从而消除由于干扰而引起的控制误差。由于这种互补关系,反馈和前馈控制的组合被广泛使用。

在这里插入图片描述在这里插入图片描述

3.2 Vehicle Speed Control

现在,让我们看一下反馈和前馈控制器如何用于汽车纵向速度控制。

在左图中,参考速度是前馈控制器的输入速度差是反馈控制器的输入。 两个控制器均产生两个车辆控制信号,即节气门和制动命令。

让我们看一下从前馈查询表中开发执行器命令所需的步骤。

  • 在示例中,根据车辆速度车轮角速度之间的运动关系,我们可以计算所需的车轮角速度。同时我们也可以通过建模模块中定义的运动关系来计算与所需车轮角速度相对应的发动机RPM
  • 然后,假设汽车处于稳态运行状态,发动机扭矩必须等于作用在车辆上的总负载扭矩。负载扭矩的来源是空气阻力,滚动阻力和车辆重力阻力。我们可以使用车辆的当前状态来计算载扭矩。
  • 现在,我们有了所需的发动机扭矩,并且可以将其与RPM中的当前发动机运行速度结合起来,求出所需扭矩对应的节气门位置。

让我们比较一下组合的前馈反馈法与PID控制法之间的效果。

我们使用了与上一小节相同的模拟参数。 随着参考速度的变化,可以看见由于PID控制器是对其误差进行修正,因此其响应会滞后于前馈方法

在这里插入图片描述在这里插入图片描述在这里插入图片描述

总结,本讲我们学习了 :

  • 经典控制概念并定义了PID控制器。
  • 建立了一个PID控制器来对汽车纵向速度控制。
  • 结合使用前馈控制来改善速度控制性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/439658.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java并发:线程共享变量可见性原理

0、线程安全性:线程安全性包括两个方面,①可见性。②原子性。 0.1、线程之间的通信:线程的通信是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种共享内存和消息传递。 (1)在共…

Coursera自动驾驶课程第7讲:Vehicle Lateral Control

在上一讲《Coursera自动驾驶课程第6讲:Vehicle Longitudinal Control》中我们了解了如何使用PID算法进行汽车纵向控制。 本讲我们继续学习新的模块:汽车横向控制。具体地,我们将学习三种控制算法:Pure pursuit,Stanle…

Coursera自动驾驶课程第8讲:Basics of 3D Computer Vision

在上一讲《Coursera自动驾驶课程第7讲:Vehicle Lateral Control》中我们了解了如何对汽车进行横向控制。 本课程第一个篇章就暂时告一段落了,接下来我们开始学习新的篇章。 课程第二个篇章是状态估计和定位模块。不过在这里我做了一下调整,我…

Coursera自动驾驶课程第9讲:Visual Features Detection Description and Matching

在上一讲《Coursera自动驾驶课程第8讲:Basics of 3D Computer Vision》中我们学习了计算机视觉基本知识。 本讲我们将学习计算机视觉中的视觉特征模块。 B站视频链接:https://www.bilibili.com/video/BV1PE411D72p 文章目录1. Introduction to Image f…

Coursera自动驾驶课程第10讲:Feedforward Neural Networks

在上一讲《Coursera自动驾驶课程第9讲:Visual Features Detection Description and Matching》中我们学习了如何进行图像特征检测,特征匹配以及如何构建视觉里程计来估计相机的运动。 本讲我们将学习神经网络模块,关于神经网络或深度学习网上…

守护进程和守护线程

对于JAVA而言,一般一个应用程序只有一个进程——JVM。除非在代码里面另外派生或者开启了新进程。 而线程,当然是由进程开启的。当开启该线程的进程离开时,线程也就不复存在了。 所以,对于JAVA而言,线程是完全可以由自…

Coursera自动驾驶课程第11讲:2D Object Detection

在上一讲《Coursera自动驾驶课程第10讲:Feedforward Neural Networks》中我们学习了神经网络的基础知识,包括损失函数,梯度下降,正则化,卷积网络等。 本讲我们将学习深度学习的一个重要应用:图像目标检测。…

Coursera自动驾驶课程第12讲:Semantic Segmentation

在上一讲《Coursera自动驾驶课程第11讲:2D Object Detection》我们学习了深度学习的一个重要应用:目标检测。 本讲我们将学习深度学习的另一个重要应用:语义分割。这是图片像素级的一个重要应用。 B站视频链接:https://www.bili…

多线程知识梳理(2) - 并发编程的艺术笔记

layout: post title: 《Java并发编程的艺术》笔记 categories: Java excerpt: The Art of Java Concurrency Programming. <img src"http://upload-images.jianshu.io/upload_images/658453-a94405da52987372.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240…

Coursera自动驾驶课程第13讲:Least Squares

在上一讲《Coursera自动驾驶课程第12讲&#xff1a;Semantic Segmentation》我们学习了深度学习的另一个重要应用&#xff1a;语义分割。至此&#xff0c;本课程的视觉感知模块就介绍完了。 从本讲开始&#xff0c;我们将学习一个新的模块&#xff0c;也是本课程的第三个模块&…

Coursera自动驾驶课程第14讲:Linear and Nonlinear Kalman Filters

在上一讲《Coursera自动驾驶课程第13讲&#xff1a;Least Squares》我们学习了最小二乘法相关知识。 本讲我们将学习20世纪最著名的一个算法&#xff1a;卡尔曼滤波。具体包括线性卡尔曼滤波&#xff08;KF&#xff09;&#xff0c;扩展卡尔曼滤波(EKF)&#xff0c;误差状态卡…

详解两阶段3D目标检测网络 Voxel R-CNN:Towards High Performance Voxel-based 3D Object Detection

本文介绍一篇两阶段的3D目标检测网络&#xff1a;Voxel R-CNN&#xff0c;论文已收录于AAAI 2021。 这里重点是理解本文提出的 Voxel RoI pooling。 论文链接为&#xff1a;https://arxiv.org/pdf/2012.15712.pdf 项目链接为&#xff1a;https://github.com/djiajunustc/Voxe…

java容器类1:Collection,List,ArrayList,LinkedList深入解读

1、 Iterable 与 Iterator Iterable 是个接口&#xff0c;实现此接口使集合对象可以通过迭代器遍历自身元素. public interface Iterable<T> 修饰符和返回值方法名描述Iterator<T>iterator()返回一个内部元素为T类型的迭代器default voidforEach(Consumer<?…

无限场景开放式仿真器 PGDrive:Improving the Generalization of End-to-End Driving through Procedural Generation

本文介绍一个拥有无限场景开放式驾驶仿真器&#xff1a;PGDrive&#xff0c;通过 Procedural Generation 技术可以生成无限多的驾驶场景&#xff0c;由香港中文大学周博磊团队开发。 论文地址&#xff1a;https://arxiv.org/pdf/2012.13681.pdf 项目地址&#xff1a;https://…

java容器类2:Map及HashMap深入解读

Java的编程过程中经常会和Map打交道&#xff0c;现在我们来一起了解一下Map的底层实现&#xff0c;其中的思想结构对我们平时接口设计和编程也有一定借鉴作用。(以下接口分析都是以jdk1.8源码为参考依据) 1. Map An object that maps keys to values. A map cannot contain du…

两阶段3D目标检测网络 SIENet: Spatial Information Enhancement Network for 3D Object Detection from Point Cloud

本文介绍一篇两阶段的3D目标检测网络&#xff1a;SIENet。 这里重点是理解本文提出的 Hybrid-Paradigm Region Proposal Network 和 Spatial Information Enhancement module。 论文链接为&#xff1a;https://arxiv.org/abs/2103.15396 项目链接为&#xff1a;https://githu…

java容器类3:set/HastSet/MapSet深入解读

介绍 Set&#xff1a;集合&#xff0c;是一个不包含重复数据的集合。&#xff08;A collection that contains no duplicate elements. &#xff09; set中最多包含一个null元素&#xff0c;否者包含了两个相同的元素&#xff0c;不符合定义。 上一篇学习了Java中的容器类的一…

Bandit算法原理及Python实战

目录 1&#xff09;什么是Bandit算法 为选择而生。 Bandit算法与推荐系统 怎么选择Bandit算法&#xff1f; 2)常用Bandit算法 Thompson sampling算法 UCB算法 Epsilon-Greedy算法 Greedy算法 3&#xff09;Bandit算法Python实战 参考资料&#xff1a; 推荐系统里面有…

ava容器类4:Queue深入解读

Collection的其它两大分支&#xff1a;List和Set在前面已近分析过&#xff0c;这篇来分析一下Queue的底层实现。 前三篇关于Java容器类的文章&#xff1a; java容器类1&#xff1a;Collection,List,ArrayList,LinkedList深入解读 java容器类2&#xff1a;Map及HashMap深入解…

Waymo离线点云序列3D物体检测网络 (3D Auto Labeling): Offboard 3D Object Detection from Point Cloud Sequences

本文介绍一篇Waymo基于点云序列的3D物体检测网络&#xff1a;3D Auto Labeling&#xff0c;论文已收录于CVPR 2021。 这里重点是理解本文提出的 Object-centric Auto Labeling。 论文链接为&#xff1a;https://arxiv.org/abs/2103.05073 2021-09-02补充&#xff1a;本文作者…