1. 项目概述
作为一名参加过三届智能车竞赛的老队员,看到今年单车定向组的赛题时,我既兴奋又忐忑。兴奋的是这个组别终于从传统的平衡车赛道走向了更接近真实场景的户外环境,忐忑的是这对我们的硬件设计和控制算法都提出了全新的挑战。
单车定向组最大的特点在于它完美融合了平衡控制与路径导航两大核心技术。与往届相比,今年的比赛场地从平整的室内赛道转移到了包含坡道、草地等复杂地形的户外环境,这对车模的机械结构、传感器融合和算法鲁棒性都提出了更高要求。
1.1 核心需求解析
从比赛规则来看,单车定向组的四大科目实际上考察了四个维度的能力:
-
高速稳定性(科目一):15-30米直线往返,考验车模在高速状态下的平衡控制能力。这里的关键在于电机驱动性能和动态PID参数的调节。
-
低速精准性(科目二):半径2米的八字绕桩,需要车模在低速状态下保持稳定。这个科目特别考验角度环和角速度环的配合。
-
环境适应性(科目三):包含坡道、草地、锥桶等复杂地形,是对整车系统综合性能的终极考验。需要多种传感器(GPS、IMU、编码器)的协同工作。
-
创新拓展性(科目四):电磁门无线定向作为国赛项目,预留了技术创新的空间。这要求我们的系统架构具备良好的可扩展性。
特别提示:在实际调试中发现,户外环境的光照变化会显著影响GPS定位精度。建议在车模顶部加装遮光罩,避免阳光直射导致GNSS模块温度过高产生漂移。
2. 硬件系统设计
2.1 核心器件选型
经过多轮对比测试,我们最终确定的硬件配置方案如下表所示:
| 模块 | 型号 | 关键参数 | 选型理由 |
|---|---|---|---|
| 主控 | TC297 | 三核300MHz, 2.7MB SRAM | 多核架构可分离控制任务,大内存满足算法需求 |
| 驱动 | DRV8701E | 5.9-28V输入, 峰值10A | 集成过流保护,无需额外升压电路 |
| IMU | LSM6DSR | ±2000dps, ±16g | 零漂小,自带数字滤波器 |
| GNSS | BD1202 | 双频定位,支持BDS-3 | 亚米级精度,抗多路径干扰强 |
2.1.1 主控板设计要点
TC297核心板的布局需要特别注意三点:
- 电源滤波:每个电源引脚就近放置0.1μF+10μF MLCC组合
- 信号隔离:电机驱动信号线与敏感模拟信号分居PCB两侧
- 散热设计:在芯片底部布置散热过孔阵列
我们实际测试发现,不当的PCB布局会导致PWM信号干扰陀螺仪读数,表现为车模在特定速度区间会出现规律性晃动。解决方法是在PWM走线两侧布置接地屏蔽线。
2.2 传感器配置方案
2.2.1 九轴IMU安装技巧
陀螺仪的安装位置直接影响数据质量。经过多次实验,我们总结出最佳安装位置:
- 高度:位于车体重心上方5-8cm处(太高会增加转动惯量,太低易受振动干扰)
- 方位:尽量远离电机和舵机(电磁干扰会导致磁力计数据异常)
- 减震:使用3M VHB双面胶+硅胶垫双重减震
实测数据显示,合理的安装位置可以使角度估计误差降低40%以上。特别提醒:每次更换电池后都需要重新校准陀螺仪零偏!
2.2.2 GNSS天线布局
BD1202模块的定位精度高度依赖天线性能。我们的优化方案:
- 使用外接有源天线,置于车体最高点
- 天线地面净空直径≥50mm
- 避免金属部件在天线周围形成法拉第笼效应
在开阔场地测试时,这种布局可以实现0.8m的CEP(圆概率误差),完全满足比赛需求。
3. 控制算法实现
3.1 三环控制架构
单车平衡控制采用经典的三环串级PID结构:
code复制[位置环] → [角度环] → [角速度环]
3.1.1 各环功能详解
-
外环(位置环):
- 输入:目标位置与实际位置偏差
- 输出:目标倾倒角度
- 特点:响应最慢,决定整体运动趋势
-
中环(角度环):
- 输入:目标角度与IMU估计角度
- 输出:目标角速度
- 特点:抑制车身摆动,响应速度中等
-
内环(角速度环):
- 输入:目标角速度与陀螺仪实测值
- 输出:舵机PWM占空比
- 特点:响应最快(5ms中断),直接控制执行机构
调试心得:三个环的带宽应该保持5-10倍的递减关系。我们最终采用的参数为:位置环100Hz,角度环20Hz,角速度环1kHz。
3.2 动态PID调节算法
针对不同速度下的控制需求,我们开发了动态PID调节方案:
c复制// 速度-参数映射表
typedef struct {
float speed_threshold;
PID_params params;
} SpeedPIDMap;
SpeedPIDMap pid_map[] = {
{0.5, {15.0, 3.0, 0.2}}, // 低速模式
{1.5, {12.0, 2.5, 0.5}}, // 中速模式
{3.0, {8.0, 1.8, 1.0}} // 高速模式
};
void update_pid_params(float current_speed) {
for(int i=0; i<3; i++) {
if(current_speed < pid_map[i].speed_threshold) {
set_pid_params(pid_map[i].params);
break;
}
}
}
实测表明,动态PID使车模在2m/s速度突变时的恢复时间缩短了60%,且基本消除了超调现象。
4. 科目专项优化
4.1 科目二(八字绕桩)实现方案
低速平衡的关键在于离心力与重力的精确平衡。我们采用以下策略:
-
路径规划:
- 预存8个关键航点形成标准八字轨迹
- 使用B样条曲线进行路径平滑
-
速度控制:
- 入弯前减速至0.3m/s
- 弯道保持恒定速度
- 出弯后加速
-
转向补偿:
c复制float steering_compensation = current_speed * current_speed / turn_radius * compensation_factor;
4.2 科目三(复杂地形)应对策略
4.2.1 坡道通过技巧
-
感知阶段:
- 摄像头识别坡道白色区域
- IMU检测俯仰角变化(>10°判定为坡道)
-
控制策略:
- 上坡:增加5%的电机功率补偿重力分量
- 下坡:启用再生制动,动能回收
4.2.2 草地行驶优化
草地的高阻尼特性会导致:
- 电机负载增大(电流上升30%)
- 转向响应延迟(滞后约200ms)
解决方案:
- 切换至"越野模式":PID参数调软
- 降低目标速度至正常值的70%
- 增加舵机前馈补偿
5. 调试与优化
5.1 传感器数据融合
我们采用改进的Mahony滤波器融合多传感器数据:
code复制[加速度计] → [低通滤波] → [姿态估计]
↑
[陀螺仪] → [漂移补偿] → [互补滤波] → [输出]
↑
[磁力计] → [干扰检测]
关键参数:
- 加速度计权重:0.02
- 陀螺仪权重:0.98
- 磁力计仅在静止时参与校准
5.2 实时调试技巧
-
数据可视化:
- 使用无线串口传输关键数据
- PC端用Python matplotlib实时绘图
-
参数整定顺序:
- 先调角速度环(响应最快)
- 再调角度环(抑制振荡)
- 最后调位置环(整体跟踪)
-
典型问题排查:
- 车模持续偏向一侧:检查IMU安装是否水平
- 高速时剧烈晃动:降低角速度环P值
- 转向响应迟钝:增加舵机前馈
6. 机械结构调整
6.1 重心优化
通过配重块调整,使车体重心:
- 高度:位于轮轴上方1/3车高处
- 前后:略微偏前(前:后=55:45)
- 左右:严格居中(偏差<2mm)
6.2 轮胎处理
不同地形的轮胎选择:
- 平整路面:高硬度橡胶��(减小滚动阻力)
- 草地/坡道:软质海绵胎(增加附着力)
特别技巧:用砂纸打磨轮胎表面可增加20%的侧向摩擦力,显著改善弯道性能。
7. 比赛经验分享
7.1 现场调试流程
-
环境适应(30分钟):
- 重新校准IMU(场地磁场可能不同)
- 测试GPS信号质量
- 采集场地特征点
-
参数微调(20分钟):
- 根据地面摩擦系数调整PID
- 设置速度曲线
- 测试紧急停止功能
-
全流程演练(10分钟):
- 按比赛顺序完整跑一次
- 记录各环节用时
7.2 应急方案
我们准备了三种应急模式:
- 保守模式:所有参数下调20%,确保完赛
- 性能模式:极限参数,冲击最好成绩
- 手动模式:通过遥控器直接控制
实际比赛中,在预赛采用性能模式,决赛切换为保守模式是最稳妥的策略。
8. 进阶优化方向
对于想要进一步提升的队伍,建议尝试:
-
多传感器融合定位:
- 紧耦合GNSS/INS组合导航
- 视觉辅助定位(AprilTag)
-
智能路径规划:
- 基于强化学习的动态调参
- 在线轨迹优化算法
-
能量管理:
- 再生制动能量回收
- 动态功率分配
这些高级功能需要较强的算法功底,但往往能在决赛中带来决定性优势。
在三次比赛迭代中,我们最深切的体会是:单车平衡没有"完美参数",只有"最适合当前环境的参数"。建议准备多个参数配置文件,根据现场情况灵活切换。最后提醒,比赛前夜一定要备份所有代码和参数,我们曾因SD卡损坏差点失去比赛资格。
