Advertisement

自动驾驶系统-控制模块PID初探

阅读量:

在从事自动驾驶相关领域工作大约两年后(...),我对其中涉及的控制模块还存在诸多疑虑(不知道其具体实现细节)。这段时间恰好有机会深入学习这一领域(探索其具体功能与运行机制)。

1.简介

汽车控制系统如同个人驾驶 own vehicles, 当驾驶者对前方道路较为熟悉时如何调节自己的车速与方向?显然, 对于非专业驾驶员而言, 无法做到一步到位地完成精准掌控. 因此, 需要通过持续观察 vehicle relative deviations from target trajectory 并相应地调整 steering wheel angle 和 accelerator pedal pressure. 这种基于 environmental feedback 的控制系统即为 反馈控制系统. 作为现代 control theory 的基石, 反馈控制系统所遵循的一般思路:

我们的目标是使被控对象(无人车)沿预先规划好的路径行驶。为此我们需要实时获取系统状态信息(即当前位置数据),并与预设的理想状态进行对比计算得到当前位置与理想位置之间的偏差值(称为误差)。通过算法处理这一偏差值信息后生成相应的调节指令使得这一偏差值会不断修正直至其趋于零的状态从而完成反馈调节的过程这就是典型的反馈控制系统的基本工作原理。为了实现这一目标的具体方法是什么?

控制是驱使车辆前行的策略。对于汽车而言,最基本的控制输入为转向、加速和制动。通常,控制器使用一系列路径点来接收轨迹。控制器的任务是使用控制输入让车辆通过这些路径点。
首先,控制器必须准确,这意味着它应避免偏离目标轨迹。这对于安全来说,尤为重要。即使路面潮湿或者道路比较陡峭,控制器任需要准确地执行轨迹。其次,控制策略对汽车应该具备可行性。例如,如果你的汽车向北行驶,而你希望它立即向东转。你可以在游戏中做到这一点,但在现实中无法实现。最后,需要考虑的是平稳度。舒适的驾驶非常重要。如果车辆行驶得不规律,那乘客永远不会想再次乘坐它了。要使控制顺利进行,驱动必须是连续的。这意味着你应避免突然转向、加速或制动。
总之,我们的目标是使用可行的控制输入,最大限度地降低与目标轨迹的偏差、最大限度地提供乘客的舒适度。有三种可用于实现这些目标的控制策略:比例积分微分控制(或PID)、线性二次调节器(或LQR)、模型预测控制(或MPC)。

2.控制流程

控制器预计有两种输入:目标轨迹(规划模块的输出)与车辆状态(定位模块、方向盘转角传感器、CAN车速)。目标轨迹来自规划模块,在每个轨迹点,规划模块指定一个位置和参考速度。在每个时间戳都对轨迹进行更新。我们还需要了解车辆状态,车辆状态包括:通过本地化模块来计算的车辆位置、从车辆内部传感器获取的数据(如速度、转向和加速度)。我们使用这两个输入来计算目标轨迹与实际行进轨迹之间的偏差。
控制器的输出是控制输入(转向、加速和制动)的值。当偏离目标轨迹时,我们希望采取行动来纠正这种偏差。对于普通汽车,我们使用方向盘控制行驶方向(即转向)、使用油门加速、使用刹车减速(即制动)。这也是无人驾驶汽车所做的。一旦将这三个值传递给车辆,汽车实际上已经开始无人驾驶了。之后将介绍不同的控制算法,如何计算这三个输出-转向、加速和制动。

3.PID控制

PID控制器是基于偏差计算值(如方向盘角度)的算法。偏差指的是计划行驶路线与实际行驶路线之间的差异。PID控制器是非常简单且常见的控制方法之一。PID即为 比例(P)、积分(I)、微分(D),这三者表示我们如何利用误差来生成控制指令的过程清晰如下:

首先根据反馈信息及参考标准计算偏差。这种偏差可依据具体情况采用多种衡量方式。例如,在控制车辆沿设定路径行驶时,其位置与参考基准线之间的距离即为偏差。此外,在控制过程中还需要考虑当前速度与目标速度之间存在的差异。计算出偏差后基于偏差计算比例、积分与微分三部分。其中KP、KI、KD分别为这三个环节的权重系数。它们决定了这三个环节在最终输出中的作用占比。将P、I、D三个部分相加得到最终控制信号。我们分别讨论这三种调节器的意义及其对系统的影响机制

P控制

为了简化起见,我们假设无人车应当遵循图中标注的绿线路径。然而,在当前场景中(如上图所示),我们的车辆则位于该图中标明的位置。

我们需要转动多少度角?若所有车辆均以恒定角度转弯(如上文所示),则汽车的行驶路径将在图中标明。

很明显这种车乘坐起来不太舒服。一种简单有效的办法就是采用比例调节机制。在图示的情况下,在误差较大的时候我们会过度调整方向,在误差较小的时候则适当减缓调整幅度。

在工程学中,P控制(Proportional Control)是一种基础的自动控制系统,在此方案中我们采用交叉偏移量(Cross Track Error, CTE)作为误差指标来评估系统的偏差程度。具体而言,CTE量化了系统当前位置与目标轨迹之间的距离。据此计算得到的转向角为:steering angle = Kp ⋅ e(t),其中e(t)代表的是在时间t点上的CTE值。在P控制策略中增益值Kp对系统的性能有着重要影响,在合理设定范围内Kp值越大能够使系统响应更加迅速地回归至目标轨迹附近;然而需要注意的是,在初始位置与目标轨迹距离较大且增益值Kp取值偏大的情况下可能会导致系统失控现象发生:

据分析所知,在Kp参数设计得当的情况下(即Kp参数设置恰当),采用P型控制器相较于固定型控制器而言具有更好的效果。然而仍存在不足之处。具体而言,在某些情况下(如图所示),由于车辆运行时易受零速影响较为容易出现失控现象。

当前车辆虽停泊于参考线位置,然而并非我们所期望的状态(随后即会偏离).但对于P型控制系统而言,此状态被视作理想状况:在此情况下,系统的偏转角被设定为零,因而,P型控制器将连续多次地超出参考线幅度(overshoot).为了避免出现这种超调现象,我们需要引入一个修正项——CTE的变化率作为调节依据

PD控制

CTE的变化率衡量了无人车向参考线接近的速度。若无人车完美地沿着参考线行驶,则CTE变化率为零。为此我们可以用导数来衡量这一变化率进而设计出适应动态环境的控制策略具体而言控制指令的形式简化为比例项与导数项之和:steering angle = Kp·e + Kd·∫e(t)dt其中Kd代表导数项的比例系数其值决定了CTE变化对反馈调节的作用程度当P过高而D过低时系统被称为欠阻尼(underdamped)这种情况下无人车会沿着参考线来回震荡缓慢收敛相反地如果P过低而D过高则系统被称为过阻尼(overdamped)这会导致车辆在修正误差时出现延迟响应最终需要通过合理设定P和D参数值来实现无人车迅速回归至参考线并保持稳定运行

当车辆受到微小的外力作用时,在受到微小的外力作用后

PID控制

我们将在积分项纳入到我们的控制输出函数中,在这种情况下,无人车的转向角就可以表示为:

steering\ angle = K_p \cdot e + K_{dd} \cdot e(t)dt + K_i \int_0^t e(t)dt

其中 K_i代表积分项的系数,在我们这个例子中其实相对容易理解——它本质上就是实际路线与参考线之间图形所包围的面积,在引入积分项后会尽量减小车辆路线与实际运动参考线之间的面积(即尽可能缩小轨迹与参考线形成的形状区域),从而避免出现稳态误差的情况。
类似地,在这里 K_i 的大小也会对整个控制系统产生重大影响:如果 K_i 太大,则控制系统会过于敏感甚至出现振荡;而如果 K_i 太小,则系统在受到扰动后(处于稳态)需要较长时间才能恢复到参考线上,在某些情况下可能会导致车辆处于危险状态。
PID控制系统由这三个参数共同决定,在无人驾驶汽车中还有其他更为复杂的高级控制算法与此原理相似。
经过观察发现实际上实现PID控制并不复杂困难在于如何合理选择这三个参数值:我们可以设计一个优化算法来帮助找到最佳参数组合:

全部评论 (0)

还没有任何评论哟~