1. 智能车方向环PD控制的核心逻辑
第一次调智能车方向环时,我盯着赛道上的黑线发愣——为什么明明检测到弯道了,车还是冲出了赛道?后来才发现问题出在PD参数的固定模式上。传统PID控制就像用固定力度的方向盘开车,遇到急弯必然手忙脚乱。
P项(比例项)就像你打方向盘的力度。当车偏离赛道中心时(ER值增大),P项会让舵机产生与偏差成正比的转向角度。但实测发现,单纯增大P值会导致直道上车辆"画龙"(左右摆动),而弯道中又转向不足。
D项(微分项)更像是老司机的预判能力。它通过计算ER-ERL(当前偏差与上次偏差的差值)来感知车辆姿态变化趋势。去年调校某辆智能车时,当D值设为P值的15倍时,入弯响应速度提升了40%,但超过20倍后反而出现高频抖动。
二者的配合就像骑自行车:
- 直道入弯瞬间(ER变化小,ER-ERL变化大):D项主导,快速建立初始转向角
- 弯道维持阶段(ER大且稳定,ER-ERL≈0):P项接管,保持稳定转向
- 出弯回正时:D项再次发力抑制超调
2. 动态参数整定的实战方案
2.1 基于偏差平方的动态P项
在调试第十六届智能车竞赛时,我们发现固定P值在S弯表现糟糕。后来采用动态P公式:
P = P_basic + ER * ER * K // K建议0.001~0.005实测数据对比:
| 赛道类型 | 固定P值(20) | 动态P值(P_basic=15,K=0.003) |
|---|---|---|
| 直道 | 抖动幅度±3° | 抖动幅度±1° |
| 90°弯 | 最大偏差8cm | 最大偏差3cm |
| U型弯 | 丢线率40% | 丢线率5% |
注意:动态部分需要限幅(比如不超过P_basic的50%),否则出弯时容易因二次项突变导致震荡。
2.2 速度关联参数调整
去年给双车追逐组调试时,发现车速提升后原有参数完全失效。后来建立速度-参数映射表:
def update_params(speed): P = base_P * (1 + 0.2*speed/max_speed) D = base_D * (1 + 0.5*speed/max_speed) return P, D实测效果:
- 低速(1.5m/s):P=18, D=270
- 高速(3.0m/s):P=21.6, D=405 这样在保持弯道性能的同时,直道稳定性提升35%
3. 分段PID的赛道适配技巧
3.1 基于曲率的分区控制
参考全国赛冠军车的方案,将赛道分为三个区域:
直道区(|ER|<10):
- P=15, D=225
- 重点抑制高频抖动
过渡区(10≤|ER|<30):
- P=15+0.1*ER²
- D=300
- 增强入弯响应
急弯区(|ER|≥30):
- P=25(上限保护)
- D=400
- 加入转向补偿角5°
3.2 参数调试五步法
- 基础P值校准:从0开始增大,直到直道出现持续振荡,取该值的70%
- D值粗调:设为P值的10倍,观察入弯延迟
- 动态项引入:加入ER²项,K值每次增加0.001
- 速度耦合:按车速比例调整参数基准值
- 极限测试:在U型弯和连续S弯微调
调试时建议用纸胶带标记舵机最大转角,防止机械损伤
4. 典型问题解决方案
4.1 出弯振荡问题
现象:车辆出弯时左右摇摆3次以上 解决方法:
- 检查D值是否过小(应≥10倍P值)
- 增加出弯检测逻辑(ER连续减小且ER-ERL反向)
- 临时切换为保守参数:
if (ER*ER_prev < 0) { // 过零点检测 P *= 0.7; D *= 1.2; }
4.2 弯道切外圈
某次比赛前夜,我们的车总是在半径1m的弯道外抛。最后发现是摄像头曝光问题导致ER检测滞后。解决方案:
- 增加前瞻补偿:目标点前移10cm
- 动态调整公式改为:
P = P_basic + abs(ER) * K // 线性关系更平缓 - 加入弯道记忆功能,持续3帧检测到ER>25即触发强P模式
5. 进阶优化方向
5.1 模糊PID实践
参考华北赛区某队伍方案,建立双输入模糊控制器:
- 输入1:归一化的ER(范围-50~50)
- 输入2:ER变化率(范围-100~100)
- 输出:P/D调整系数
实测在波浪形赛道表现:
- 传统PID:完成时间8.6s
- 模糊PID:完成时间7.2s(提升19%)
5.2 机器学习调参
去年尝试用强化学习自动优化参数,在仿真环境中取得不错效果:
- 定义奖励函数:
reward = -abs(ER) - 0.1*steering_change - 使用DQN网络输出P/D调整建议
- 200次迭代后,U型弯通过速度提升28%
不过实际部署时需要简化网络结构,确保在STM32上能实时运行。