CuiFrost's Blog
电赛:激光打靶小车通信与控制系统设计Blur image

项目概述#

项目属性内容
竞赛名称全国大学生电子设计竞赛
赛题E题:简易自行瞄准装置
项目时间2025.07 – 2025.08
获奖情况省级二等奖
我的角色核心成员(通信与控制系统)
技术栈STM32、HAL库、通信协议设计、任务调度、SolidWorks

赛题要求#

设计一款可自主巡线精准打靶的智能小车,适配复杂场地(含弯道、障碍物)。

核心功能#

  • 自主巡线行驶
  • 识别靶心位置
  • 云台自动瞄准
  • 激光精准打靶
  • 多任务切换(寻迹/瞄准/画圆)

我的技术贡献#

负责视觉模块与云台模块之间的通信逻辑设计云台 HAL 库代码开发任务运行框架设计

1. 通信协议设计#

问题分析#

视觉模块(OpenMV)与云台模块(STM32)需要实时传输靶心坐标,传统方案存在:

  • 数据传输不稳定
  • 格式不统一导致解析错误
  • 缺乏状态反馈机制

解决方案#

设计标准化的视觉-云台通信协议

// 数据包格式定义
typedef struct {
    uint8_t  header;        // 帧头 0xAA
    uint8_t  cmd_type;      // 命令类型
    int16_t  target_x;      // 靶心X坐标
    int16_t  target_y;      // 靶心Y坐标
    uint8_t  status;        // 云台状态
    uint8_t  checksum;      // 校验和
} Vision_Packet_t;
c
字段说明取值范围
header帧头标识0xAA
cmd_type命令类型0x01=坐标数据, 0x02=任务指令
target_x/y靶心坐标-320 ~ 320 (像素)
status云台状态0x00=空闲, 0x01=运行中, 0x02=错误
checksum校验和XOR校验

通信流程#

sequenceDiagram
    participant V as 视觉模块(OpenMV)
    participant G as 云台模块(STM32)

    V->>V: 1. 识别靶心坐标
    V->>V: 2. 封装数据包
    V->>G: [0xAA][0x01][x][y][status][chk]
    G->>G: 3. 解析数据包
    G->>G: 4. 计算云台角度
    G->>G: 5. 执行瞄准动作
    G-->>V: [0xAA][0x02][ack][status][chk]
    V->>V: 6. 接收确认

成果#

  • 数据传输准确率 100%
  • 通信延迟 < 20ms
  • 支持错误重传机制

2. 云台 HAL 库开发#

基于 STM32 HAL 库开发云台底层驱动:

库架构设计#

flowchart TB
    API[应用层 API
Gimbal_Init
Gimbal_SetAngle
Gimbal_GetStatus
Gimbal_EmergencyStop] Driver[驱动层
PWM 输出控制 TIM
编码器读取 TIM+EXTI
串口通信 USART+DMA
ADC 采集] HAL[HAL 层
STM32 HAL Driver] API --> Driver --> HAL

核心 API#

函数功能参数
Gimbal_Init()云台初始化
Gimbal_SetAngle()设置目标角度pitch, yaw (度)
Gimbal_GetAngle()获取当前角度返回结构体
Gimbal_SetSpeed()设置转动速度speed (度/秒)
Gimbal_GetStatus()获取云台状态返回状态码
Gimbal_Calibrate()云台校准

控制算法#

采用 PID 闭环控制实现精准角度控制:

控制精度:±0.5°


3. 任务调度框架设计#

需求分析#

赛题要求通过按键切换不同任务:

  • 按键1:寻迹模式
  • 按键2:瞄准模式
  • 按键3:画圆模式

需要实现灵活的任务切换机制。

状态机设计#

状态转换图#

stateDiagram-v2
  [*] --> IDLE

  IDLE --> TRACE: 按键1
  IDLE --> AIM: 按键2
  IDLE --> CIRCLE: 按键3

  TRACE --> ERROR: 异常
  AIM --> ERROR: 异常
  CIRCLE --> ERROR: 异常

  ERROR --> IDLE: 错误恢复

框架特性#

  • 按键检测:消抖处理,响应时间 < 100ms
  • 状态管理:保存上一状态,支持任务恢复
  • 错误处理:异常状态自动切换至 ERROR 状态
  • 实时调度:基于定时器中断,确保响应及时

4. 二维云台结构设计#

负责二维云台结构的 3D 建模、打印与装配

设计要点#

  • 轻量化设计:采用镂空结构,减轻重量 30%
  • 刚度优化:加强筋设计,确保稳定性
  • 集成设计:预留激光笔安装位

硬件集成#

  • 集成 405nm 低功率激光笔
  • 双舵机驱动(pitch + yaw 轴)
  • 编码器反馈

项目成果#

完成情况#

模块完成状态性能指标
通信协议✅ 完成准确率 100%,延迟 < 20ms
云台 HAL 库✅ 完成控制精度 ±0.5°
任务调度框架✅ 完成切换响应 < 100ms
云台结构✅ 完成轻量化设计,稳定可靠

项目整体情况#

由于负责视觉的学长部分和负责巡线的学长部分未成功完成,导致整体装置未能完成赛题全部任务,但我负责的通信逻辑、云台 HAL 库、任务框架均成功实现并通过联调验证


X 因素:洞察与技能迁移#

核心洞察#

1. 模块化设计思想#

掌握”模块间通信设计、HAL 库开发、任务调度框架”的核心思路:

flowchart TB
    subgraph P[模块化设计原则]
        A[标准化接口
定义清晰 API
封装内部实现] B[松耦合通信
消息/事件驱动
避免直接依赖] C[独立测试
单元测试覆盖
mock 外部依赖] end

理解嵌入式系统中模块化设计标准化接口任务管理的重要性。

2. 通信协议设计方法论#

总结出通信协议设计的通用方法:

flowchart LR
    A[需求分析] --> B[帧格式设计] --> C[校验机制] --> D[错误处理] --> E[性能优化] --> F[文档编写]

技能沉淀#

技能类别具体能力
通信协议设计帧格式设计、校验算法、错误恢复机制
STM32 HAL 开发底层驱动、API 封装、中断处理
任务调度框架状态机设计、实时调度、错误处理
结构设计SolidWorks 建模、3D 打印、装配调试

可迁移方向#

  • 机器人模块化系统:多模块通信、标准化接口设计
  • 海洋装备控制系统:嵌入式控制、实时任务调度
  • 工业自动化:PLC 编程、运动控制、设备通信

技术亮点总结#

┌──────────────────────────────────────────────────────────────┐
│                  电赛项目核心亮点                              │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│  📡 通信协议设计    自定义协议,数据传输准确率100%            │
│                                                              │
│  🔧 HAL库开发      标准化API,控制精度±0.5°                  │
│                                                              │
│  ⚙️ 任务调度框架    状态机设计,切换响应<100ms               │
│                                                              │
│  🏗️ 结构设计        SolidWorks建模,轻量化设计               │
│                                                              │
└──────────────────────────────────────────────────────────────┘
plaintext

相关项目#

相关项目关系
智能桌面收纳管家同属 STM32 嵌入式开发
SUR-Nav自主探索研究同属机器人系统开发

本文最后更新于 2025 年 8 月