Skip to content

Repository files navigation

Magic Wand (魔法棒 · 嵌入式 CNN 空间手势识别系统)

基于 STM32F103 微控制器、MPU6050 六轴惯性传感器与 NNoM (Neural Network on Microcontrollers) 轻量级嵌入式神经网络推理框架的低功耗边缘端空间手势 / 魔法动作识别系统

硬件与模型结构 内存占用与性能


🌟 项目亮点

  • Edge AI 边缘推理:在主频仅 72MHz、SRAM 仅 20KB 的经典 STM32F103 (ARM Cortex-M3) 上部署 1D/2D CNN 卷积神经网络,实现端侧毫秒级低延迟手势分类
  • 全链路端到端开发体系:从串口传感器数据采集、Matlab 频域滤波分析、Python/Keras 模型训练量化,到 MCU 端 C 代码自动生成与 PC 端动作联动,形成完整软硬件 AIoT 闭环;
  • 工业级传感器融合:支持 InvenSense DMP 硬件解算Mahony AHRS 四元数姿态解算 算法,有效滤除高频机械振动与运动噪声;
  • 上位机联动:适配 VOFA+ 实时波形调试工具Python 动画可视化客户端(PC_Action / SpellsCard)

🎯 支持的手势与动作类别 (Gestures / Spells)

模型针对三轴加速度与三轴角速度时序数据进行特征提取,支持多种空间连续挥舞动作:

动作类型 英文代号 动作轨迹描述 对应魔法手势
羽动 Wing 空间弧形轻挥展开 飞来咒 / 羽加迪姆
画圆 Ring 空间正向/逆向顺滑绕圆 守护神咒 / 原地防御
斜切 Slope 空间左上至右下对角线快速划击 障碍重重 / 切割
纵劈 UpAndDown 垂直方向自上而下大幅度挥动 击退咒 / 下劈
波浪 Wave 水平方向连续 S 型波浪摆动 呼神护卫 / 震荡波

🏗 系统架构与模块划分

Magic_Wand/
├── Core/                      # STM32CubeMX HAL 驱动层、系统时钟与基础外设
├── BSP/                       # 板级支持包 (IMU、按键检测、LED/WS2812 驱动)
├── Middlewares/               # 中间件
│   ├── AHRS/                  # Mahony 姿态解算算法 (四元数融合)
│   ├── IMU_DMP/               # MPU6050 官方 DMP 运动处理引擎
│   ├── LOG/                   # 嵌入式带时间戳的分级日志组件
│   └── VOFA/                  # VOFA+ 串口数字示波器通信协议
├── CNN/                       # 机器学习与边缘计算核心
│   ├── nnom-master/           # NNoM 神经网络底层纯 C 推理引擎
│   ├── CNNTrainRaw.py         # Keras/TensorFlow 模型构建、训练与自动量化导出脚本
│   ├── Serial_Read.py         # 串口数据采集与手势样本自动标注脚本
│   ├── weights.h              # 量化生成的静态模型权重数组 (部署至单片机)
│   └── PC_Action/             # 上位机手势实时识别与魔法卡片动画交互
├── Matlab_File/               # Matlab 信号分析脚本 (低通滤波器 FIR/IIR 设计)
├── APP_TASK/                  # 业务逻辑与应用任务 (IMU采样任务、CNN推理任务等)
├── CMakeLists.txt             # CLion / GCC-ARM 交叉编译工程配置
└── MZ_CNN_Proj.ioc            # STM32CubeMX 原始工程配置文件

⚙️ 完整开发与训练流程

1. 数据采集 (Data Acquisition)

运行数据采集脚本,手持魔法棒按提示完成指定手势挥舞:

python CNN/Serial_Read.py

采集到的 6 轴 IMU 原始数据将自动分标签保存在 CNN/TraningData_*/ 目录中。

2. 信号预处理与滤波 (Signal Processing)

在 Matlab 中打开 Matlab_File/Lowpass_Show.m,分析动作时域/频域特性,设计数字低通滤波器以消除抖动。

3. 模型训练与量化 (Training & Quantization)

运行训练脚本:

python CNN/CNNTrainRaw.py
  • 模型架构:Input(N, 6) -> Conv1D / Conv2D -> ReLU -> MaxPool -> Dropout -> Dense -> Softmax
  • 脚本自动执行 8-bit 对称整型量化(Integer Quantization)
  • 自动生成适配 NNoM 的 C 语言头文件 CNN/weights.h

4. 固件编译与烧录 (Firmware Build & Flash)

  • 工程构建:支持 CLion (CMake + arm-none-eabi-gcc) 或 Keil MDK / STM32CubeIDE;
  • 资源占用
    arm-none-eabi-size MZ_CNN_Proj.elf
    text: ~78 KB (Flash)
    data/bss: ~15 KB (SRAM)
    

💻 上位机实时动画交互

连接开发板 USB 或串口,启动上位机动画识别展示:

cd CNN/PC_Action
python Action.py

当挥动魔法棒完成特定手势时,屏幕将同步触发对应魔法咒语的高清特效动画!


📄 License & Credits

About

magic wand by CNN

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages