[关闭]
@danren-aa120 2019-09-20T08:44:53.000000Z 字数 1424 阅读 356

第7课 控制

无人驾驶第一课:从Apollo起步


GitHub:控制相关资源
  使用控制来运行轨迹。控制是驱使车辆前行的策略,最基本的控制输入为:转向、加速和制动。
控制器使用一系列路径点来接收轨迹,控制器的任务是使用控制输入,让车辆通过这些路径点。应考虑与轨迹的贴合准确性、物理可行性、舒适平稳度,可用于实现这些目标的三种策略是比例积分微分控制(PID)、线性二次调节器(LQR)或模型预测控制(MPC),Apollo无人驾驶平台都支持这些。

  控制的输入:目标轨迹(三维)、位置、速度、转向、加速度,每个时间步的轨迹都会更新。
  控制的输出:转向(方向盘)、加速度(油门)、制动(刹车)。

  1 PID比例积分微分控制
  1)P(比例)控制
        image_1dl69h6r55971k1v1en3166j1lk2m.png-4.8kB
  算出与目标轨迹多大的偏离,比例意味着偏离越远,控制器越难将其拉回目标轨迹。
  2)D(微分)控制,与P结合形成PD控制
  汽车越趋近轨迹,D项致力于使当前运动保持稳定,相当于P控制器增加了一个阻尼项(减少控制器输出变化速度),形成PD控制。
        image_1dl69f4hf1po712nf14lf1rb16ik9.png-10.8kB
  3)I(积分)控制,与PD结合形成PID
  负责纠正系统的任何系统性偏差,对系统的累积误差进行惩罚。
        image_1dl6bh6e51qq31pnci4e11nqrr213.png-17.4kB

  优缺点: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。
    image_1dl6ct1na1vtrlff138cg9q2dq1g.png-99.8kB
image_1dl6d0rnt1ta21insou01mm5g451t.png-104.3kB
上方带点表示导数。即x-dot是如何受当前状态x和控制输入u的影响的。上图中的公式是线性的。
   - Q、R
  为了实现误差最小化,希望尽可能少的使用控制输入,使用这些也会有电气成本。我们可以保持误差的运动总和控制输入的运动总和。
image_1dl6njc0qakpds919833nvm7op.png-72.3kB
  最小化成本函数可以依靠数值计算器,即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.”

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注