在智能车竞赛中,红外循迹是最基础也是最考验细节的环节之一。很多参赛队伍都能实现直线和简单弯道的循迹,但一到圆环部分就容易出现冲出赛道、轨迹不稳等问题。这背后往往不是代码逻辑的问题,而是传感器布局和控制算法没有针对圆环特性进行优化。本文将分享如何通过科学的传感器布局和PID参数调试,让你的智能车在圆环上也能"丝滑"通过。
红外传感器的布局直接决定了智能车"看"赛道的能力。对于圆环这种特殊赛道元素,我们需要从三个维度来优化传感器布局:间距、高度和角度。
传感器间距的设置需要平衡灵敏度和稳定性:
对于圆环,更密集的传感器布局可以提供更精确的赛道边缘检测。一个实用的配置方案是:
| 传感器位置 | 间距(mm) | 检测范围(mm) |
|---|---|---|
| 最左 | - | 20-30 |
| 左中 | 10-15 | 20-30 |
| 中间 | 10-15 | 20-30 |
| 右中 | 10-15 | 20-30 |
| 最右 | - | 20-30 |
传感器的安装高度和角度会显著影响检测效果:
c复制// 示例代码:传感器安装参数定义
#define SENSOR_HEIGHT 15 // 单位:mm,建议10-20mm
#define SENSOR_ANGLE 30 // 单位:度,建议20-45度
提示:安装角度越大,检测距离越远但盲区也越大。对于圆环,建议采用30-45度的安装角度以获得更好的前瞻性。
简单的差速控制在直线赛道表现尚可,但在圆环这种连续变化的曲线上就显得力不从心。PID控制能提供更平滑的转向响应。
PID控制器由三个部分组成:
对于智能车循迹,我们主要使用PD控制:
python复制# 简化的PD控制算法
def pd_control(error, last_error):
Kp = 0.8 # 比例系数
Kd = 0.3 # 微分系数
P = Kp * error
D = Kd * (error - last_error)
return P + D
圆环对PID参数的要求与直线赛道不同:
初始参数设定:
调试步骤:
注意:圆环内外径不同,可能需要根据行驶方向(顺时针/逆时针)微调参数。
纸上得来终觉浅,真正的技巧在于如何将这些理论应用到实际赛道上。
建议按照以下顺序进行调试:
静态测试:
低速测试:
高速优化:
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 圆环入口冲出赛道 | 传感器前瞻不足 | 增加传感器角度或数量 |
| 圆环内振荡 | P值过大或D值过小 | 减小P值,增大D值 |
| 圆环出口偏离 | 出口检测延迟 | 优化传感器布局,提前检测出口 |
| 速度变化时表现不稳定 | 参数未考虑速度影响 | 实现速度自适应PID |
对于追求极致性能的队伍,可以考虑实现动态参数调整:
c复制// 示例:根据赛道段切换PID参数
void update_pid_params(float curvature) {
if (curvature > CURVE_THRESHOLD) {
// 弯道或圆环参数
Kp = 0.6;
Kd = 0.4;
} else {
// 直线参数
Kp = 0.3;
Kd = 0.2;
}
}
车速变化时,理想的PID参数也会变化。可以建立速度-参数映射表:
| 速度(cm/s) | P值 | D值 |
|---|---|---|
| 30-50 | 0.8 | 0.3 |
| 50-80 | 0.6 | 0.4 |
| 80+ | 0.5 | 0.5 |
在实际比赛中,我们通过反复测试发现,圆环最关键的其实是入口和出口的过渡处理。适当增加这两个位置的传感器密度,并针对性地调整PID参数,能让车的表现提升显著。