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


PD控制
CTE的变化率描述了我们的无人车向着参考线方向移动的有多快 , 如果我们的无人车一直都完美的在参考线上运动的话 , 那么我们的CTE变化率就为0 。 那么这一项(描述误差的变化率)就可以用导数来表示 , 那么 , 现在我们的控制输出就变成了比例项和导数项求和的形式:
steeringangle=Kp?e+Kdde(t)dt
其中的KdKd就是导数项的系数 , 它的大小决定了CTE变化率对于反馈控制的影响 。
此时我们的控制叫做PD控制 , 在PD控制中 , 我们有两个系数需要调整 , 直观上来看 , 增大PP系数将会增大无人车向着参考线方向运动的倾向;增大DD系数将会增大无人车快速向参考线方向的运动的“抵抗力”从而使得向参考线方向的运动变得更加平滑 。 使用过大的PP系数 , 过小的DD系数的系统我们称之为欠阻尼的(underdamped) , 这种情况的无人车将沿着参考线震荡前进 , 反之 , 如果P系数过小 , D系数过大 , 那么我们称之为过阻尼的(overdamped) , 这将使得无人车要较长的时间才能纠正其误差 。 合适地选择PP , DD参数可以使无人车能快速回到参考线上的同时很好的维持在参考线上运动 。
PD控制似乎已经能够胜任良好的反馈控制了 , 但其实还不够 , PD控制器可以保证正常的控制的需求 , 但是当环境存在扰动的时候 , 比如说下面这种情况:
旺材自动驾驶|自动驾驶中的PID控制理论
文章图片
车在受力发生轻微偏移以后 , 由于PD控制中下PP项倾向于向参考线方向运动 , 而DD项则尝试抵消这种倾向 , 造成无人车始终都无法沿着参考线运动 , 这个问题叫做steadystateerror为了解决这个问题 , 我们再引入一项——积分项 。
PID控制
我们将积分项也就如到我们的控制输出函数中 , 这个时候 , 无人车的转角就可以表示为:
steeringangle=Kp?e+Kdde(t)dt+Ki∫0te(t)dt
其中KiKi就是积分项系数 , 积分项在我们这个例子中其实很好理解 , 本质就是车的实际路线到参考线的图形的面积 , 加入积分项以后 , 控制函数会尽可能使车辆路线的积分尽可能小(也就是使车辆路线和实际运动参考线之间形成的形状的面积尽可能小) , 那么也就避免了steadystate这种情况了 。
同样的 , 这里的积分项系数的大小也会影响我们整个控制系统的稳定性 , 过大的KiKi会使控制系统“震荡”地运行 , 过小的KiKi又会使控制的车辆在遇到扰动以后(处于steadystate)要很久才能回到参考线上 , 这在某些情况下势必会使车辆处于一个危险的境况 。
PID控制就是由这三项共同决定的 , 还有其他应用于无人驾驶汽车的高级控制算法 , 但是他们都和我们介绍的PID控制的原理相似 。
我们发现其实PID实现确实不难 , 但是三个系数的选择却很难 , 我们可以在我们的控制循环中通过一定的算法不断尝试 。