自动驾驶PID控制器调优
PID控制器是一种控制回路反馈机制,它计算期望设定点与实际过程输出之间的差值,并利用结果对过程进行修正。PID控制器在工业和机器人过程控制应用中有广泛的应用。
在自动驾驶汽车的背景下,它们在控制转向、油门等驾驶参数方面发挥着重要作用。自动驾驶汽车中使用的复杂算法本质上是计算轨迹和速度。只有当汽车以给定速度沿着轨迹行驶时,自主性才能实现。这正是PID控制器发挥作用的地方——确保自动驾驶汽车遵循计算出的参数。任何与计算参数的偏差都意味着不可预见或灾难性的后果。
1. PID理论
PID由三个项组成:比例(Proportional)、积分(Integral)、微分(Derivative)。下图展示了所有三项与最终响应之间的关系。
比例(P): 简单取当前误差值的一定比例。比例由一个常数指定,用字母Kp表示。它用于计算对过程的校正响应。由于需要误差才能产生比例响应,如果没有误差,就没有校正响应的比例部分。
积分(I): 它获取所有过去的误差值并随时间累积。这导致积分项不断增长,直到误差变为零。当误差消除后,积分项将停止增长。如果在应用比例控制后仍然存在误差,积分项会通过添加其累积的误差值来尝试消除误差。这将导致比例效应随误差减小而减弱。积分常数用Ki表示。
微分(D): 微分项用于根据误差当前的变化率来估计未来的误差趋势。它用于为系统增加阻尼效应。变化越快,控制或阻尼效果越大。微分常数用Kd表示。
控制器的输入是误差项e(t),然后将其与相应的常数相乘并求和,得到过程输入。过程输出与设定点参考之间的差值再次成为新的误差,并送回控制器进行校正响应。
2. 项目目标
- 创建一个PID控制算法来引导车辆绕赛道行驶。
- 调优PID超参数(Kp、Ki、Kd),使车辆平稳地跟随道路,最小化横向误差。
虚拟自动驾驶汽车由Udacity提供的模拟器实现。模拟器以一定频率接收转向角和油门,相应地移动汽车,并返回PID控制器的横向误差(cte)。
3. 实现控制算法
控制器算法使用C++代码实现。源代码包含PID.cpp文件中的PID类。误差和PID超参数的初始值由Init()函数初始化。模拟器返回的横向误差用于更新P、I和D项的误差项,即当前误差、误差总和以及误差差值的*UpdateError()*函数。*CalculateResponseValue()*函数根据当前横向误差值计算并返回PID响应。
4. 调优PID超参数
PID控制器可以通过多种方式进行校准或调优。除了手动调优,还可以使用Twiddle算法自动调优。在这个项目中,我使用了一个PID控制器来控制转向,以及一个PID控制器来维持30英里/小时的期望速度。
4.1 转向控制超参数调优
调优Kp: 这个值从一个较小的值开始,逐渐增加,直到车辆开始来回摇摆,显示出P项的振荡。我从0.05开始,最终确定为0.15。下面的图显示了不同Kp值下的误差振荡。随着Kp值的增加,振荡的频率和幅度都会增加,需要被抑制。
下面的视频显示了仅设置Kp值为0.15时,启动后车辆的剧烈振荡。
调优Kd: 将Kp值设为0.15后,我增加Kd值直到振荡停止。我选择了3.0以确保行驶平稳。下面的图显示了不同Kd值下的曲线。红色曲线代表值3.0。有趣的是,振荡直到值达到2.0才被抑制。2.0和3.0的曲线看起来非常相似,但值3.0在误差梯度很高的弯道处表现良好。
下面的视频显示了Kp和Kd值分别设为0.15和3.0时的行驶情况。
调优Ki: 从理论上讲,Ki值可以消除稳态误差。然而,将值保持接近零(1E-5)产生了最佳结果。
4.2 速度控制超参数调优
作为第一步,Kp值从0.1逐渐增加到0.25。但如下图所示,0.25的曲线稳定在一个稳态误差上(参考线和蓝线之间的差距)。由于没有需要抑制的振荡,我将Kd值保持为零。为了消除稳态误差,我将Ki值设为1E-4,最终维持了30英里/小时的期望速度。
5. 结论
通过为转向和速度控制选择的Kp、Ki、Kd值,我能够引导汽车通过赛道,而不会使汽车偏离赛道或做出任何危险操作。我使用手动调优的原因是为了理解PID控制器的内部工作原理以及这些值如何影响车辆行为。
以下是我的结论:
- Kp值对车辆行为有显著影响,因为它直接与误差相关。非常高的Kp值会使汽车在弯道处剧烈摇摆。较低的Kp值带来更平滑的转向修正。然而,只有Kp而没有Kd和Ki值会导致振荡。
- Kd值用于抑制这些振荡。由于它的影响取决于误差梯度而不是误差本身,因此广泛的Kd值都是适用的。每当车辆通过急弯时,误差会增加。良好的Kp和Kd值组合可以减少误差并抑制振荡以重新获得控制。如果存在稳态误差,则需要Ki值。
- 手动调优这些值相当具有挑战性。某些值在赛道的某些区域表现良好,但在其他区域却失败。像Twiddle这样通过同时变化所有三个超参数进行调优的自动算法将是一个很好的替代方案。
原文链接:Tuning PID Controller for Self-Driving Cars
汇智网翻译整理,转载请标明出处