1. 电磁循迹的基本原理与硬件搭建
第一次接触智能车电磁循迹时,我被电感传感器的工作原理惊艳到了。想象一下,赛道下方埋设的通电导线会产生交变磁场,就像看不见的轨道。我们的电感线圈就是"磁感应天线",通过测量磁场强度变化来判断车辆位置。
硬件搭建时我踩过几个坑:电感安装高度最好控制在8-12cm,这个距离范围内磁场信号强度最理想。记得用示波器观察原始信号,会发现50Hz的工频干扰特别明显。我的解决方案是在信号放大电路后加装二阶低通滤波,截止频率设在150Hz左右。传感器布局推荐"一"字型排列,左右电感间距建议7-10cm,这个距离既能保证检测范围,又不会丢失赛道信息。
2. 双环PID控制框架解析
双环控制就像人类开车时的两个本能反应:眼睛看到弯道(转向环)和脚踩油门(速度环)。但实际调试时,这两个环路的耦合关系让我头疼了很久。转向环的PID输出其实是速度环的设定值偏差,这种串联结构容易产生"指令打架"。
我的经验是先用开环测试确定基础参数:
- 固定转向环输出为0,单独调速度环
- 给固定偏差值,观察差速响应
- 记录电机从静止到稳定转速的响应曲线
转向环的P参数初始值可以这样估算:假设最大偏差时希望产生30%的差速,那么P=0.3/(电感量程)。比如电感量程是±2V,那么P初始值取0.15左右。
3. 参数整定的实战技巧
试凑法调参就像老中医把脉,需要观察三个典型症状:
- 画龙现象(左右摇摆):通常是D参数不足或P过大
- 过冲严重:需要加大D或减小P
- 响应迟钝:适当增加P或减小I
我的调参笔记里记录了一个黄金比例:当P=1.0时,D取0.2-0.3效果最好。但要注意这个比例会随车速变化,实测在2m/s车速时,D需要增加到0.5才能抑制振荡。
// 实测有效的参数组合(车速1.5m/s) typedef struct { float Kp; float Ki; float Kd; } PID_Param; PID_Param steer_pid = {0.8, 0.0, 0.25}; PID_Param speed_pid = {1.2, 0.01, 0.4};4. 典型问题排查指南
遇到突发状况时,我的诊断流程是这样的:
信号层检查
- 用OLED实时显示电感原始值
- 检查电源纹波(最好<50mV)
- 确认编码器接线无松动
控制层检查
- 打印PID各分量输出
- 检查输出限幅是否合理
- 验证PWM频率(推荐16-20kHz)
机械层检查
- 测量轮胎直径误差(控制在±0.5mm内)
- 检查差速器阻尼
- 确认传感器支架无共振
最近遇到个典型案例:小车在直道突然转向。后来发现是某根电感线虚焊,导致ADC采集值跳变。用万用表测量通断时一切正常,最后是用热风枪局部加热才找到故障点。
5. 进阶优化策略
当基础PID调好后,可以尝试这些提升技巧:
动态参数调整:根据车速自动切换PID参数组。我的方案是用二维查表法,预先存储不同速度档位的参数:
| 速度(m/s) | 转向P | 转向D | 速度P |
|---|---|---|---|
| 1.0 | 0.6 | 0.15 | 1.0 |
| 1.5 | 0.8 | 0.25 | 1.2 |
| 2.0 | 1.0 | 0.4 | 1.5 |
误差补偿算法:在入弯前提前加大D参数,出弯时逐渐减小。这需要建立赛道记忆功能,我的实现是用环形缓冲区存储最近10个点的曲率变化。
抗饱和处理:积分项累积会导致"windup"现象。我的解决方案是当误差持续超过阈值时,冻结积分项并加入反向修正:
if(fabs(error) > threshold){ integral *= 0.9; // 衰减积分累积 }调车到后期,我开始关注电机特性曲线匹配。用测功机绘制左右电机扭矩-转速曲线后,发现同PWM下转速差异可达5%。于是在速度环前加入了非线性补偿模块,用三次多项式拟合差异曲线。这个小改动让直道稳定性提升了30%。