1. 系统设计概述
在智能车竞赛中,视觉循迹与识别系统的核心挑战在于如何高效协同总钻风摄像头的赛道感知与OpenART mini的智能识别任务。我们设计的系统采用"感知-决策-执行"闭环架构,通过硬件协同和软件调度实现从底层数据采集到上层任务决策的全流程自动化。
1.1 硬件架构设计
系统硬件采用模块化设计,主要包含三大功能单元:
- 感知单元:由MT9V034总钻风摄像头(全局快门、140°广角)和OpenART mini构成,分别负责赛道边界检测和图像分类
- 控制单元:基于MIMXRT1064DVL6A单片机(600MHz主频),实现实时数据处理与运动控制
- 执行单元:包含RS-380驱动电机(7.2V/20W)和S3010舵机(6.5kg·cm扭矩)
特别设计的二维云台采用分层舵机结构:
- X轴舵机:FT2331M(280°旋转范围,4.5kg·cm扭矩)
- Y轴舵机:LH-S0090(270°旋转范围,1.8kg·cm扭矩) 通过碳纤维摆臂实现OpenART mini的俯仰(±30°)和偏转(±60°)运动,云台总重仅35g。
1.2 软件通信机制
双处理器间通过串口协议实现高效数据交互:
# OpenART与主控通信协议示例 uart_array = [0xAA, 0x01, 0x00, 0x00] # 帧头|功能码|数据|校验和 # 功能码定义: # 0x01: 数字识别请求 # 0x02: AprilTag识别 # 0x03: 动植物识别关键参数通过共享内存区传递:
- 图像处理结果(赛道偏差、元素类型)
- 识别结果(数字值、标签ID、分类置信度)
- 系统状态(车速、舵机角度、任务标志位)
2. 视觉感知融合策略
2.1 多传感器数据对齐
为解决摄像头帧率差异(总钻风200fps vs OpenART 30fps),采用时间戳同步机制:
- 总钻风触发硬件中断时记录TIM2计数器值
- OpenART完成识别后附加时间戳返回
- 主控通过线性插值实现数据对齐
2.2 动态分辨率切换
针对不同识别任务优化图像分辨率:
// OpenART分辨率配置 switch(task_mode){ case NUMBER_RECOG: // 数字识别 sensor.set_windowing(400,220); // 子采样VGA break; case APRILTAG: // 二维码识别 sensor.set_pixformat(QQVGA); // 160x120 break; default: sensor.set_pixformat(QVGA); // 默认320x240 }2.3 抗干扰处理
针对反光、阴影等干扰场景:
- 自适应二值化:融合大津法阈值与局部均值
# 动态阈值计算 adaptive_thresh = (otsu_thresh * 0.7) + (local_mean * 0.3)- 颜色空间转换:在HSV空间处理光照变化
- 多帧验证:连续3帧一致才触发识别结果
3. 决策调度逻辑
3.1 任务优先级管理
采用抢占式调度策略:
- 紧急任务:障碍物避让(最高优先级)
- 竞赛任务:AprilTag识别 > 数字牌识别 > 动植物识别
- 基础任务:循迹控制(最低优先级)
3.2 状态机设计
主控运行包含5个核心状态:
stateDiagram-v2 [*] --> INIT INIT --> TRACKING: 检测到赛道 TRACKING --> IDENTIFY: 发现目标元素 IDENTIFY --> ACTION: 完成识别 ACTION --> TRACKING: 执行完毕 TRACKING --> FINISH: 完成赛道3.3 识别触发机制
通过三级条件判断启动OpenART:
- 初级过滤:总钻风检测特定图案(紫色边框、黑白跳变)
- 几何验证:长宽比(1.0-1.2)、面积(>50x50像素)
- 运动判断:目标在视野中持续5帧以上
4. 核心算法实现
4.1 改进型ADRC控制
在传统自抗扰控制基础上引入动态参数:
// 动态参数调整 void update_ADRC_params(float speed){ fhan_Input->r = BASE_R * (1 + 0.2*speed/MAX_SPEED); fhan_Input->h = BASE_H / (1 + 0.5*speed/MAX_SPEED); }实测性能对比:
| 控制算法 | 超调量 | 调节时间(ms) | 抗干扰性 |
|---|---|---|---|
| PID | 15% | 120 | 中 |
| 传统ADRC | 8% | 80 | 强 |
| 改进ADRC | 3% | 50 | 极强 |
4.2 神经网络优化
针对OpenART的NPU特性改进网络结构:
Input(48x48) -> Conv3x3(ReLU) -> MaxPool -> Conv3x3(ReLU) -> MaxPool -> FC(128) -> Dropout(0.5) -> Output(10)训练时采用数据增强策略:
- 随机旋转(±15°)
- 亮度调整(±30%)
- 添加高斯噪声(σ=0.01)
4.3 路径规划算法
融合三种补线策略:
- 斜率延伸法:适用于普通弯道
- 圆弧拟合法:处理环岛入库
- 透视变换法:解决十字交叉
关键代码片段:
void midline_remedy(){ if(curve_flag_right){ for(int i=CAMERA_H-1;i>0;i--){ float real_width = Track_width[i]/cos(wan_angle); middle_line[i] = left_black[i] + (int)(real_width/2); } } }5. 工程实现细节
5.1 电源管理设计
采用分级供电方案:
- 数字电路:3.3V LDO(RT9013-33GB)
- 摄像头:独立5V LDO(LD29150-50R)
- 舵机:5.89V DCDC(SY8205FCC)
- 电机:直接电池供电(7.4V)
实测功耗分布:
| 模块 | 静态电流 | 峰值电流 |
|---|---|---|
| 主控 | 120mA | 300mA |
| 总钻风摄像头 | 80mA | 150mA |
| OpenART | 200mA | 500mA |
| 转向舵机 | - | 800mA |
5.2 机械调校要点
通过四轮定位优化行驶稳定性:
- 主销后倾角:1.5°(增加回正力矩)
- 主销内倾角:8°(减小转向阻力)
- 前轮前束:0.5°(避免轮胎磨损)
重心配置采用"后驱黄金比例":
- 前后重量比:4:6
- 云台配重:20g铅块(调整Z轴惯性矩)
6. 实战测试表现
在省赛赛道中实现:
- 循迹速度:3.2m/s(直道)
- 识别准确率:数字98.7%、AprilTag 95.2%、动植物93.5%
- 任务完成时间:56.3秒(含3次识别停顿)
典型问题解决方案:
- 图像撕裂:改用DMA双缓冲采集
- 串口干扰:增加磁环和TVS二极管
- 舵机抖动:采用PWM硬件死区控制
这套系统最终实现了感知与决策的无缝衔接,在保证稳定性的同时提升了任务执行效率。通过模块化设计,各组件可以快速更换调试,为后续升级留出充足空间。