第四章 控制算法入门:PID控制原理、前馈+反馈结构、LQR与MPC简介
各位同学,欢迎来到第四章。这一章我们聊聊控制算法。
说实话,很多刚入行的工程师觉得控制算法就是调调PID参数。嗯,这话对也不对。PID确实是基础,但真正要把车道保持做好,光靠PID远远不够。我这些年调过的车,从早期的L1级到现在的L2+,控制算法的演进其实很有意思。
4.1 PID控制原理——最朴素的反馈
PID控制,说白了就是三个字:比例、积分、微分。你想想看,开车时你看到车子偏离车道中心了,你会怎么做?
- 比例(P):偏离多少,就打多少方向。这是最直觉的反应。
- 积分(I):如果一直有侧向风或者路面倾斜,车子老往一边偏,那就持续补偿一个力。
- 微分(D):看到车子正在快速偏离,提前预判,别等偏太多了再救。
我在项目中遇到过一件事。有一次在高速上测试,车子总是出现轻微的蛇形摆动。查了半天,发现是微分项增益设得太高了。路面稍微有点不平,微分项就过度反应,导致方向盘来回修正。嗯,这里要注意:微分项对噪声特别敏感。
核心公式:
u(t) = Kp * e(t) + Ki * ∫e(τ)dτ + Kd * de(t)/dt
其中 e(t) 是当前时刻的横向偏差,u(t) 是输出的方向盘转角。
调参小技巧:我个人习惯先调P,让系统能响应但不振荡。然后加一点D抑制超调。最后再加I消除稳态误差。千万别一上来三个参数一起调,你会疯的。
4.2 前馈+反馈结构——让控制更聪明
纯PID反馈有个问题:它总是等偏差出现了才去纠正。说白了就是「事后诸葛亮」。在车道保持里,很多偏差是可以提前预知的。
举个例子:前方道路曲率变化了,车子需要提前打方向。如果只用反馈,车子会先偏离一点,然后PID再把它拉回来。这样乘客就会感觉「晃来晃去」。
前馈控制就是解决这个问题的。它根据道路曲率、车速等信息,提前计算出一个「应该打多少方向」的基准值。反馈部分只需要在这个基准值上做微调。
前馈+反馈结构:
方向盘转角 = 前馈转角(曲率, 车速) + 反馈转角(PID修正)
我曾经在一条多弯的山路上测试,纯反馈控制的系统在连续弯道里表现很差,每次入弯都偏外,出弯又偏内。加上前馈之后,整个过弯轨迹平滑了很多。你想想看,前馈相当于给系统一个「预判能力」,反馈负责「纠偏」,两者配合才是王道。
注意:前馈模型依赖高精地图或视觉感知的曲率信息。如果感知不准,前馈反而会引入错误。我曾经遇到过地图曲率符号反了的情况,车子直接往反方向打了一把,吓出一身冷汗。
4.3 LQR——状态空间里的最优控制
PID虽然好用,但它只处理一个误差信号。车道保持其实是个多变量问题:横向偏差、航向角偏差、横摆角速度、侧向速度……这些状态相互耦合。
LQR(线性二次型调节器)的思路很优雅:把所有状态都考虑进来,然后找一个控制律,让「状态偏差」和「控制量」的加权和最小。
LQR目标函数:
J = ∫(x^T * Q * x + u^T * R * u) dt
其中 x 是状态向量(横向偏差、航向角偏差等),u 是控制量(方向盘转角)。
Q 矩阵惩罚状态偏差,R 矩阵惩罚控制量大小。
我个人觉得LQR最大的优势在于:你可以直观地调整Q和R矩阵。比如你觉得横向偏差更重要,就把Q中对应的权重调大。如果你觉得方向盘动作不能太猛,就把R调大。
但LQR也有局限。它假设系统是线性的,而车辆动力学本质上是非线性的。所以在极限工况下,LQR的表现会打折扣。
| 算法 | 优点 | 缺点 |
|---|---|---|
| PID | 简单、直观、调参容易 | 只能处理单变量、无预见性 |
| 前馈+反馈 | 有预见性、响应快 | 依赖模型精度 |
| LQR | 多变量最优、权重可调 | 线性假设、无约束处理 |
| MPC | 处理约束、预见性好 | 计算量大、调参复杂 |
4.4 MPC——带约束的预测控制
MPC(模型预测控制)是目前高端车道保持系统的标配。它为什么厉害?因为它会「想未来」。
具体来说,MPC会做这几件事:
- 根据当前状态,用车辆模型预测未来N步的状态
- 在满足各种约束(方向盘转角限制、加速度限制、横向偏差限制)的前提下
- 求解一个优化问题,找到未来N步的最优控制序列
- 只执行第一步,然后滚动优化
说白了,MPC就像一个下棋高手,走一步看三步。而PID就像新手,只看眼前这一步。
MPC的约束示例:
|方向盘转角| ≤ 最大转角
|横向偏差| ≤ 车道边界
|横向加速度| ≤ 舒适性阈值
我在调校MPC时遇到过一个问题:预测时域设得太长,计算时间超标,导致控制周期不稳定。后来我把预测时域从20步缩短到10步,同时优化了求解器,才把计算时间压到50ms以内。
避坑指南:我曾经在MPC的权重矩阵里把横向偏差的权重设得特别大,结果系统为了消除偏差,方向盘动作非常剧烈,乘客投诉说「像在开碰碰车」。后来我加了一个对方向盘角速度的惩罚项,才让控制变得平顺。
4.5 如何选择?
说了这么多,到底用哪个?我的建议是:
- 简单场景(直线、低速):PID+前馈就够用了,别杀鸡用牛刀
- 中等场景(高速、中等曲率):LQR是个不错的选择,调参相对直观
- 复杂场景(城市道路、极限工况):MPC是首选,虽然调校麻烦,但效果最好
最后说一句:算法只是工具,真正决定性能的是你对车辆动力学的理解和对场景的把握。我见过有人用PID调出了比MPC还好的效果,也见过有人把MPC调得还不如PID。关键还是看人。
下一章我们聊聊具体的调校流程和实车标定方法。到时候我会带一些我踩过的坑,保证你们少走弯路。