第1章:PID控制基础
各位同学好,我是老张。在无人车横向控制这个领域摸爬滚打了十来年,今天咱们来聊聊PID控制。说实话,PID这东西看着简单,但真正用好它,我踩过的坑可不少。
先说说我的理解。PID控制,说白了就是三个字:比、积、微。比例告诉你现在差多少,积分告诉你过去差了多少,微分则预测未来会差多少。三者配合,就能让车子稳稳地沿着车道走。
1.1 比例控制:最直观的反馈
比例控制,就是根据当前误差的大小,给出相应的控制量。误差越大,控制力度就越大。
核心公式: u(t) = Kp × e(t)
其中 e(t) 是当前误差,Kp 是比例增益
我在做车道保持项目时,一开始只用了比例控制。结果呢?车子在直道上还行,一到弯道就来回摆动,像个醉汉开车。为什么会这样?因为比例控制有个天生的毛病——稳态误差。
你想想看,如果车子刚好偏离了车道中心,比例控制会给出一个转向角。但这个转向角可能不足以完全纠正偏差,于是车子就停在了一个有偏差的位置上。这就是稳态误差。
我的经验: 比例增益Kp不能太大,否则系统会震荡。我一般从0.5开始试,慢慢往上调,直到系统开始出现轻微震荡,然后回调20%。
1.2 积分控制:消除稳态误差
积分控制,就是累积过去的误差。只要误差一直存在,积分项就会不断增大,直到把误差消除干净。
核心公式: u(t) = Ki × ∫e(t)dt
Ki 是积分增益
嗯,这里要注意一个坑——积分饱和。我曾经在一个项目中吃过这个亏。当时车子长时间停在原地,积分项不断累积,等车子重新启动时,控制量已经大到离谱,车子猛地一甩头,差点撞上护栏。
避坑指南: 积分饱和是PID控制中最常见的坑之一。解决办法是限制积分项的最大值,或者在误差过大时暂停积分。
1.3 微分控制:预测未来
微分控制,说白了就是看误差的变化趋势。如果误差在快速增大,微分项就会给出一个较大的控制量,提前抑制误差的扩大。
核心公式: u(t) = Kd × de(t)/dt
Kd 是微分增益
我记得有一次调试无人车,在高速弯道上,比例和积分控制都调好了,但车子过弯时总有点滞后。加了微分项之后,车子就像提前知道了弯道一样,转向动作变得非常平滑。
我的建议: 微分项对噪声非常敏感。如果传感器信号有抖动,微分项会把噪声放大。我一般会在微分项前面加一个低通滤波器。
1.4 PID参数整定方法
参数整定,说白了就是找到三个合适的Kp、Ki、Kd值。我常用的方法有两种:
试凑法
- 先调Kp,让系统稳定但允许有稳态误差
- 再加Ki,消除稳态误差
- 最后加Kd,改善动态响应
Ziegler-Nichols法
- 先把Ki和Kd设为0
- 增大Kp直到系统开始等幅震荡,记录此时的Kp(称为临界增益Ku)和震荡周期Tu
- 按表格计算参数
| 控制器类型 | Kp | Ki | Kd |
|---|---|---|---|
| P | 0.5Ku | - | - |
| PI | 0.45Ku | 1.2Kp/Tu | - |
| PID | 0.6Ku | 2Kp/Tu | Kp×Tu/8 |
1.5 数字PID实现
在实际的嵌入式系统中,我们用的是数字PID。说白了就是把连续的积分和微分用离散的方式近似。
// 位置式PID
float pid_update(float setpoint, float measurement) {
float error = setpoint - measurement;
// 比例项
float p_term = Kp * error;
// 积分项(带抗积分饱和)
integral += error * dt;
if (integral > integral_max) integral = integral_max;
if (integral < -integral_max) integral = -integral_max;
float i_term = Ki * integral;
// 微分项
float derivative = (error - last_error) / dt;
float d_term = Kd * derivative;
last_error = error;
return p_term + i_term + d_term;
}
1.6 抗积分饱和
前面提到了积分饱和的问题。这里详细说说怎么处理。
三种常用方法:
- 限幅法: 直接限制积分项的最大值
- 积分分离法: 误差过大时暂停积分
- 反计算法: 当输出饱和时,反向调整积分项
我个人最常用的是限幅法,简单有效。但要注意,限幅值不能设得太小,否则积分项起不到作用。我一般设为最大控制量的20%-30%。
我曾经踩过的坑: 有一次把积分限幅设得太小,结果车子在长上坡路段一直有稳态误差,怎么都消除不了。后来把限幅值放大了一倍,问题就解决了。
知识体系总览
下面这张图展示了PID控制的核心逻辑和各个部分之间的关系:
这张图把PID控制的核心流程都串起来了。从设定值和测量值得到误差,误差进入PID控制器,经过比例、积分、微分三个通道的处理,求和后得到控制量,再去控制被控对象。同时,积分项需要配合抗积分饱和机制,而参数整定方法则指导我们如何找到合适的Kp、Ki、Kd值。
好了,这一章的内容就到这里。PID控制虽然基础,但它是无人车横向控制的基石。把这一章吃透了,后面的内容就好办了。
公众号:蓝海资料掘金营,微信deep3321