@danren-aa120
2019-09-20T08:44:53.000000Z
字数 1424
阅读 356
无人驾驶第一课:从Apollo起步
GitHub:控制相关资源
使用控制来运行轨迹。控制是驱使车辆前行的策略,最基本的控制输入为:转向、加速和制动。
控制器使用一系列路径点来接收轨迹,控制器的任务是使用控制输入,让车辆通过这些路径点。应考虑与轨迹的贴合准确性、物理可行性、舒适平稳度,可用于实现这些目标的三种策略是比例积分微分控制(PID)、线性二次调节器(LQR)或模型预测控制(MPC),Apollo无人驾驶平台都支持这些。
控制的输入:目标轨迹(三维)、位置、速度、转向、加速度,每个时间步的轨迹都会更新。
控制的输出:转向(方向盘)、加速度(油门)、制动(刹车)。
1 PID比例积分微分控制
1)P(比例)控制
算出与目标轨迹多大的偏离,比例意味着偏离越远,控制器越难将其拉回目标轨迹。
2)D(微分)控制,与P结合形成PD控制
汽车越趋近轨迹,D项致力于使当前运动保持稳定,相当于P控制器增加了一个阻尼项(减少控制器输出变化速度),形成PD控制。
3)I(积分)控制,与PD结合形成PID
负责纠正系统的任何系统性偏差,对系统的累积误差进行惩罚。
优缺点:PID是一种线性算法,对非常复杂的系统而言,是不够的。在无人驾驶中,需要应用不同的PID控制器来控制转向和加速,这意味着很难将横向和纵向控制结合起来;另外,PID依赖于实时误差测量,当收到测量延迟限制时可能会失效。
Apollo提供了两种控制方式, 一种是纵向/横向的分立控制, 一种是MPC控制, 它们分别对应Apollo控制模块中的Longitudinal Controller, Lateral Controller以及MPC Controller,在Longitudinal Controller模块中使用了PID控制算法。
2 LQR线性二次调节器
LQR是基于模型的控制器,它使用车辆的状态来使误差最小化,Apollo中的Lateral Controller控制模块使用其进行横向控制。
- L
LQR包含四个组件:横向误差、横向误差的变化率,朝向误差,和朝向的变化率。变化率与导数相同,我们用变量名上的一个点来表示这个。四个组件形成的集合x表示车辆的状态。此外,无人车有三个控制输入:转向、加速和制动,形成集合u。
上方带点表示导数。即x-dot是如何受当前状态x和控制输入u的影响的。上图中的公式是线性的。
- Q、R
为了实现误差最小化,希望尽可能少的使用控制输入,使用这些也会有电气成本。我们可以保持误差的运动总和控制输入的运动总和。
最小化成本函数可以依靠数值计算器,即u=-Kx,K代表一个复杂的skeme,代表如何从x计算出u,所以找到一个最优的u,实际上是找到一个最优的K。尤其当提供A、B以及权重Q、R后,容易得到K。
Apollo 的LQR实现
LQR用python一行代码的实现
3 MPC模型预测控制
其非常依赖于数学优化,可以归结为三步:
1)依靠车辆模型
该模型近似于汽车的物理特性。
2)使用优化引擎计算有限实际范围内的控制输入
通过搜索密集数学空间。其依赖于车辆模型的约束条件。使用成本函数优化。
3)执行第一组控制输入
MPC是一个重复过程,它着眼未来,计算一系列控制输入,并优化该序列。
MPC由于考虑了车辆模型,比PID精确,可以在不同情况下优化不同的成本。另一方面,与PID相比,其相对更复杂、更缓慢、更难以实现。
“Safety is the most important thing of self-driving cars.”