课程简介
课程讲解控制理论以及控制技术在Apollo无人驾驶中的应用、控制技术在目前无人车方案中的限制以及未来的发展,控制技术与无人车其他技术模块的联动。
本次课程的知识点有:控制理论、反馈信息、Planning、时域、频域、控制量。
控制模块根据预测的轨迹和估计的车辆状态向油门、刹车或转向扭矩发送适当的命令。控制模块使汽车尽可能接近计划的轨迹。控制器参数可以通过最小化理想状态和观测状态之间的误差函数(偏差)来估计。
一、Control in Apollo-1
-
1.简要介绍
本次主要对以下三个方面作介绍:
- 通用控制理论及其在Apollo自动驾驶平台上的应用
- 功能的限制和未来的趋势
- 类似的原理怎样应用于不同的模块
首先我们看看Apollo自动驾驶的基本框架如下:
可以看到控制模块的信息是规划模块(planning)和自反馈阶段信息(如localization和HD Map),它们会经过一个交互的过程,将相互之间的信息进行交流和决策。
- 2.控制模块
可以从图看到,控制模块包括三个部分:预处理、控制器和后处理。
预处理部分的主要功能有几个方面:
第一对输入信号检查过滤不正常信息
第二做紧急处理
第三作一些滤波操作,例如信号的平滑
控制器主要功能有以下几个方面:
模型建立、系统识别和分析
控制器/观察器设计
参数调优
后处理部分将信号发送给执行器,包括限制的处理以及信号的滤波。
- 3.什么是控制?为什么要控制?
控制主要是为了弥补数学模型和物理世界执行之间的不一致性。
为了能够安全、舒适的驾驶,自动驾驶对性能的要求需要控制模块,主要体现在以下几个方面,如图所示:
首先是稳定性,如在所有场景下的车辆行为稳定和安全
其次是稳定状态的行为,减少或者消除规划和实际车辆行为的差别
最后是瞬时状态的行为
当然,我们可以把性能评测具体化,那么我们就可以通过对: 时域、频域以及离散域(discrete domain)
时域是指输出在时间上应该满足的要求,其衡量标准是steady state gain、rising time、setting time、overshoot和undershoot。其具体意义如下所示:
在频域空间,X轴是输入频率,Y轴是输出跟输入的比例,联系状态下输出和输入的比例应该为1.
除了时域和频域的要求,还需要满足discrete domain的要求
对系统来说,在time domain跟frequency domain中的系统需求是可以等价转换的。系统在时域的要求、响应、数学表达跟频域是可以相互对应的。
前面介绍了一些性能要求需要满足,如果没有控制器的话,这些事很难做到的,这就是控制器的作用。
现如今最简单的控制器就是PID控制器,即比例、积分、微分控制,它是一个model free的控制方法,就是说其控制具有通用性。其原理如下:
这其中:
U是参考量,它和反馈信号之间的差距用error 表示,即图中的e。比例控制P的意思是该控制量与误差成比例,用kp*e(t) 表示。当kp比较小的时候,接近终值的速度会非常慢,如右图的红线所示,但是它有超调与undershoot现象。当kp设置比较大时,则达到稳态速度变快,但会超调,如右图紫色曲线所示。如果系统中存在损耗,比如汽车上坡的动力或者摩擦损耗,使得比例控制每次增加的控制量就等于或者小于损耗时,出现稳态误差,这就是引入积分控制的目的,它可以将之前的误差进行积分,消除稳态误差。而微分控制的目的是使系统更快的从瞬态转化为稳态。系统的控制量就是P+I+D三项的和。
二、control in Apollo-2
本节课程知识点:
非线性、运动学模型、动力学模型、约束、力矩、扭矩
上节我们讲到了简单的PID控制,但是仅仅靠它一个是很难做到精准控制的,于是Apollo才一年基于模型控制的方法,主要包括以下几个部分:建模、系统辨识、控制器设计和参数调优。
- 1.Modeling(建模)
一般可分为分析建模和拟合建模。通常一个模型主要由各种属性表示,主要包括描述输入输出的数量、线性或者非线性、离散还是连续等等。
控制模块中的模型,通常包括动力学模型和运动学模型。运动学模型是一种几何模型,感知、预测讨论的模型模型则以运动学模型为主。而在控制模块中,更多考虑动力学模型,实际上,运动学模型是动力学模型的子集。
在自动驾驶中,Dynamic model以Kinematics model为初始模型,将环境等参数设置到Kinematics model中,把车看作质点进行分析。Dynamic model将车按车轮等部分分开进行约束或者系统补偿。
下图是两个比较简单的几何模型,左图是一个综合移动机器人控制模型,右图是著名的自行车模型。
当然只考虑几何约束是显然不够的。下图是一个动力学模型,它不仅考虑了几何约束,还考虑了力矩和扭矩平衡。
下图是考虑一些刚体的力矩和扭矩分析公式,总体满足牛顿第二定律。
在假设纵向速度为0的情况下,我们可以对横向方程进行线性化。
其过程需要基于一些假设。所以在做完控制之后,我们还需要检查这些假设是否合理或者是否会造成很大的误差。
在控制器实现过程中,通常会将ODE或者PDE方程进行处理,转化为矩阵计算的形式。虽然在数学表达形式上不一致,但是其物理含义保持不变,如图9所示。在状态空间表示中还会给出一些状态量的标识,包括输入量。
-2.系统辨识度
在模型中,有些参数是未知的,系统辨识度的目的就是确定这些参数的值。确定这些值的方法有三种:白盒、灰盒以及黑盒方法。
方法 | 原理 |
---|---|
白盒方法 | 基于第一原理(如牛顿定律)的模型结构,可以由测量数据估计模型参数 |
灰盒方法 | 用于只有部分模型结构可知,通过数据重建的方法来获取模型的其他部分的方法 |
黑盒方法 | 指模型结构和参数都在未知的情况下,只能通过输入输出数据来估计的方法 |
- 3.控制器设计
基于模型的控制模块设计有三步,分别是滤波器设计、控制器设计以及观察器设计。
滤波器分为线性和非线性,数字滤波或者模拟信号滤波,离散滤波或者连续滤波等。
系统在频域里面需要满足某些性能要求,滤波器通常会对频域信号进行处理。当然我们会根据实现的方式不同,将器分为高斯滤波、卡尔曼滤波、贝叶斯滤波等。它们的作用通常是预测和跟踪。
三、Control in Apollo-3
知识点:开环控制、滤波器、控制量、代价函数、数字信号、时域
控制器的类型大致可以分为三类,分别是开环控制、前馈环控制和后馈环控制,如下所示:
- 1.前馈环控制
前馈环控制器可以分为两类,如图2所示。上图是增加一个H,可以看出是一个前置滤波器,把输入转化为理想的输入。下图是把扰动量加入到前馈环中,将模型的先验知识添加到环路,减少扰动的影响。
前馈环控制器的主要控制策略有很多种,这里主要介绍三种,分别是Optimal Control(优化控制)、Adaptive Control(自适应控制)、Robust Control(鲁棒性控制)。
1.优化控制
其目的就是在特定情况下,找出一个使系统满足特定条件的优化标准。
下图给出了一个优化控制的分类和演化过程。
最早可追溯到上世纪五六十年代的卡尔曼滤波和后来的LQR。这两个控制在一起可以得到一个LQG,需要注意的是LQG是一个线性并且没有限制的控制器,在这个基础上增加限制,就得到了LMPC。在LMPC的基础上,增加非线性因素就得到了MPC。从上图左边到右边的控制器演化,响应速度更快,但是计算代价更高。
2.LQR(线性二次型调节器)
它的状态空间可以用方程X=Ax+Bα表示,α是输入,其中最重要设计代价函数,如图中的第四行所示。首先,代价函数必须是corrected的,是x的二次方的形式。另外,还有两个调节因子,一个是Q,另一个是R。
在这个基础上,增加前馈项,然后做一个拉普拉斯转换,从时域转换到频域。我们的目标是使系统的error X=0,经过一系列变换之后可以算出αff,进而得到前馈项。
3.MPC
MPC控制器基本逻辑如下图所示:
MPC的代价函数如下图所示。从图中可以看出,代价函数增加了约束边界,有上边界和下边界。
- 接着下面我们简单介绍一下自适应性和鲁棒性控制,首先是自适应控制是一种针对控制系统中参数多变或者初始值不确定的控制方法。最简单的方法就是根据输入使用swith的方式,根据输入或者gain选择不同的控制算法,如下所示:
- 接着介绍鲁棒性控制。鲁棒性事用来解决如何确定模型的正确性问题。它主要用来处理模型的非确定性,是一种在已知模型错误边界的情况下,设计一个性能不错而且稳定的控制器方法。最简单的鲁棒性控制器是LQR/LTR控制器,也是一个二次线性调节器。
- 离散化
为什么要做离散化?这是我们需要思考的问题,我认为离散化实际上是在尽可能的保存连续空间信息的情况下,把连续空间的问题转换为离散空间的描述,使得计算机能够更好地处理。需要注意的是离散化跟Digital Stability是相关的,如果采样不够好,会丢失很多信息使得系统不稳定。
其此,如何进行离散化呢?离散化有很多的方法,各种方法都有各自的优缺点。但是总的来说都是把数字信号转换为模拟输入/输出信号,如图15所示。同样,也会把Analog输出进行离散化,然后输入到数字信号控制器中。
下面我们举一个简单的例子,图的左边是时域performance的表达方式,右边是进行离散化的一些常用表达形式。最后一列是收敛的速率,表示在一定情况下,数字控制在给定时间下是可以保证收敛的。
下面再给出一些简单的转换公式对应关系。
- 控制器设计的其它方面
在这里我们会考虑包括Deadzone、饱和和抗饱和等因素。
Deadzone主要是执行器的一些特性引起的,例如汽车的油门,可能给油在0%到15%之间都是不会使汽车前行的,这个时候反应在图上的就是一条平行的线段,我们称之为Deadzone。在控制器设计的时候需要对这部分进行补偿设计,如下所示:
饱和和抗饱和处理也是出于对执行器的特性的考虑,通常一个执行器是有上限和下限的。如图20所示,把输出值做一个限制,使得输出在执行器的上下限范围内。如果不进行饱和处理,在输出100%的情况下突然转换状态,收敛到最终值可能需要很长的时间。
- 3.控制器的发展趋势
未来控制器可能从以下几个方面发展,包括数据驱动、结合轨迹生成、、结合预测的控制、基于模型的增强的学习控制方法。
- 4.工程应用案例
目前,在Apollo中,控制的工程应用主要有两个方面,一个是系统识别,使用的是自动标定方法。另一个是安全策略,如下所示:
安全策略的考虑主要是基于控制是否与底层交流的最后一个模块,所以有很多的安全策略需在控制层面完成。安全信息可分为两个部分:上游信息(Planner发出)+下层反馈信息。如果上游Planning信息丢失、延时、未更新,控制系统需要做出诸如Emergency Stop、缓行之类的决策。类似的,由于接触不稳或者其它因素,导致控制指令没有执行,控制器也需要做一些安全策略的考虑。
本次课程总结到此结束,如有不懂的地方,可以相互研究讨论。