旺材自动驾驶|自动驾驶中的PID控制理论

来源:知乎
在阅读本文之前 , 我们需要知道 , 汽车控制如同人类驾驶员驾驶自己车辆一样 , 那么当你熟悉前方道路的时候你如何控制你的车辆?显然 , 如果你不是专业的赛车手的话 , 你无法做到精准的控制 , 你需要一边观察车辆相对于你想要开的路线的相对偏差 , 一边调整你的方向盘的角度和油门踏板的力度 , 这种基于环境反馈的控制我们称为反馈控制 。 反馈控制是现代控制理论的基础 , 反馈控制的一般思路如下:
旺材自动驾驶|自动驾驶中的PID控制理论
文章图片
那么我们希望无人车能够按照我们希望的路径行驶 , 我们会将环境当前给我们的反馈和参考线进行比较 , 得到我们当前偏离参考线的距离误差) , 基于这个误差 , 设计一定的算法来产生输出信号 , 使得这个误差不断的变小 , 这样的过程就是反馈控制的一般过程 。 那么我们如何基于这个误差来产生控制指令呢?其中最直观的感觉就是要让误差在我们的控制下逐渐变小直到为0:
旺材自动驾驶|自动驾驶中的PID控制理论
文章图片
为了了解反馈控制 , 接下来先向大家介绍PID控制 , PID控制是目前利用最为广泛的控制理论 , 我们以它为出发点讨论控制理论 。
PID控制
简单来说 , PID就是指比例(proportion)、积分(integral)、导数(derivative) , 这三项表示如何使用误差来产生控制指令 , 整个流程如下:
旺材自动驾驶|自动驾驶中的PID控制理论
文章图片
首先是根据反馈和参考值求出误差 , 这里的误差根据具体的情况可以是各种度量 , 比如说控制车辆按照指定的路径形式 , 那么就是车辆当前位置和参考线的距离 , 控制车辆的速度在设定的值 , 那么就是当前速度和设定速度的差值 , 求出误差以后 , 再根据误差求比例 , 积分和微分三项 , 其中KpKp,KiKi,和KdKd是三项的系数 , 它们决定着这三项对最后输出的影响的比重 。 将P,I,DP,I,D三项求和作为最后的输出信号 。 我们分别讨论这三项的意义 。
P控制
考虑一个简单的情况 , 假设我们希望无人车按照图中绿线行驶 , 但是我们的车在如图所示的位置:
旺材自动驾驶|自动驾驶中的PID控制理论
文章图片
那么我们要转多少度角呢?如果都按照固定的角度转(如下图) , 那么车的轨迹将如图中所示:
旺材自动驾驶|自动驾驶中的PID控制理论
文章图片
那么显然坐这样的车是不舒服的 。 一个直观的解决方法就是使用比例控制 。 如图所示 , 当偏差大的时候 , 我们偏转更多的角度 , 当偏差小的时候 , 则偏转小一点 。
旺材自动驾驶|自动驾驶中的PID控制理论
文章图片
【旺材自动驾驶|自动驾驶中的PID控制理论】那么这就是Pcontrol(比例控制)这里我们使用CTE(CrossTrackError)作为偏差度量 , CTE就是我们到参考线的距离 。 那么这个时候转角就变成了:
steeringangle=Kp?e(t)
其中的e(t)e(t)就是在t时刻的CTE , 在P控制中系数KpKp会直接影响到实际的控制效果 , 在合理的数值范围内KpKp越大控制的效果越好(越快速的回到参考线附近) , 但是 , 当本身位置和参考线相距很远且KpKp系数较大的时候 , 就会出现车辆失去控制的情况:
旺材自动驾驶|自动驾驶中的PID控制理论
文章图片
所以说 , 如果KpKp参数设计合理的话 , P控制要比固定控制要更好 , 但是还是不能控制的很好 , 因为P控制的车辆容易0值的影响 。
此时车辆虽然在参考线上 , 但是并不是我们希望的状态(它在下一刻就会偏离) , 但是对于P控制而言 , 这是理想状态 , 此时控制转角为0,因此 , P控制会一次又一次的超过参考线(overshot) , 为了矫正这种overshot , 我们需要考虑一个额外的误差项——CTE变化率 。