3. 经典控制方法
各位同学,今天我们来聊聊路径跟踪里最经典、也最实用的几个控制方法。说实话,我在自动驾驶这行摸爬滚打这么多年,见过各种花里胡哨的算法,但真正量产车上跑得最多的,还是今天要讲的这几个老朋友——PID、前馈-反馈、还有纯跟踪。
嗯,咱们一个一个来。先别急着上代码,先把思路理清楚。
3.1 PID控制在路径跟踪中的应用
PID控制,说白了就是三个字:比例、积分、微分。你想想看,开车的时候,你眼睛看到车偏离了车道中心线,你会怎么做?
- 比例(P):偏离了多少,就打多少方向。偏离越大,打方向越猛。
- 积分(I):如果一直有稳态误差,比如总是偏左一点点,积分项会慢慢累积,帮你把车拉回来。
- 微分(D):看到偏离的趋势,提前预判。比如车正在快速往右偏,微分项会提前给一个反向修正。
我在项目中遇到过一个问题:只用P控制,车在弯道里总是有稳态误差,怎么调都调不好。后来加了I项,问题就解决了。但I项也不能太大,否则过弯时会有明显的超调。
核心公式:
u(t) = Kp * e(t) + Ki * ∫e(τ)dτ + Kd * de(t)/dt
其中 e(t) 是横向偏差,u(t) 是方向盘转角指令。
我的经验:调PID参数时,先调P,让车能大致跟着走;再加D,抑制震荡;最后加I,消除稳态误差。别一上来三个参数一起调,容易乱。
3.2 前馈-反馈控制结构
纯PID有个问题——它是个被动纠偏的东西。你想想看,车在弯道里,明明知道前面有个弯,为什么非要等偏了再纠?这不合理。
所以就有了前馈-反馈结构。说白了就是:
- 前馈:根据道路曲率,提前算好一个基准方向盘转角。比如弯道曲率大,就多打一点方向。
- 反馈:用PID去修正前馈没算准的部分,比如风、路面不平、轮胎磨损等干扰。
我曾经在一个高速项目里,只用反馈控制,结果在曲率变化大的匝道上,车总是进弯慢半拍。后来加了前馈,效果立竿见影。
前馈控制量计算:
δ_ff = arctan(L * κ)
其中 L 是轴距,κ 是道路曲率。这个公式基于阿克曼转向几何,简单实用。
注意:前馈不能完全替代反馈。因为模型总有误差,比如轮胎侧偏刚度会随车速变化。前馈给个大概,反馈做精细调整,这才是王道。
3.3 纯跟踪(Pure Pursuit)算法详解
纯跟踪算法,我个人非常喜欢。它思路特别直观:想象你车前面有一个点,这个点在目标路径上,离车有一定距离(叫前视距离)。你控制方向盘,让车一直朝着那个点开。
嗯,就像你小时候玩的那种拉线小车,车头永远指向下一个目标点。
算法步骤:
- 在目标路径上,找到距离车辆前视距离 Ld 处的目标点。
- 计算车辆当前位置到目标点的横向偏差 e。
- 根据几何关系,计算期望的转弯半径 R。
- 输出方向盘转角 δ = arctan(2 * L * sin(α) / Ld)。
核心公式:
δ(t) = arctan( 2 * L * sin(α(t)) / Ld )
其中 α 是车辆航向与目标点方向之间的夹角,L 是轴距,Ld 是前视距离。
前视距离 Ld 怎么选?这是纯跟踪算法的灵魂。Ld 太小,车会震荡;Ld 太大,车会切弯。我一般建议 Ld 与车速成正比:
Ld = k * v + Ld_min
其中 k 是系数,v 是车速,Ld_min 是最小前视距离。高速时前视远一点,低速时近一点,这样比较合理。
避坑指南:我曾经在雨雪天气测试纯跟踪,发现车总是走不直。后来发现是前视距离没考虑路面附着系数。湿滑路面,前视距离要适当增大,让车更平缓地转向。
3.4 三种方法的对比与选择
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| PID | 简单、计算量小、调参直观 | 有稳态误差、对弯道预判不足 | 直线或小曲率弯道 |
| 前馈-反馈 | 响应快、能预判弯道 | 需要道路曲率信息、模型依赖 | 高速弯道、匝道 |
| 纯跟踪 | 几何直观、路径跟踪平滑 | 前视距离难调、高速时可能不稳定 | 低速到中速、结构化道路 |
我个人习惯是:低速场景用纯跟踪,中高速用前馈-反馈,调试阶段先用PID快速验证。你想想看,实际工程里没有银弹,组合使用才是正解。
3.5 本章知识体系
下面这张图,是我自己总结的三种控制方法的关系。你看一眼,就能明白它们各自的位置和联系。
你看这张图,从上到下,从目标到方法再到工程建议,逻辑很清晰。实际项目中,我建议你先从纯跟踪入手,因为它最直观,调起来也快。等你对路径跟踪有了感觉,再尝试前馈-反馈结构,最后用PID做精细微调。
总结一句话:没有最好的算法,只有最合适的组合。PID、前馈-反馈、纯跟踪,这三板斧用好了,高速场景的路径跟踪基本就稳了。
好了,这一章的内容就到这里。记住,理论是基础,但真正让你成长的,是调试时遇到的那些坑。多动手,多思考,你也能成为路径跟踪的高手。