shayanalibhatti/Finger-Movement-Classification-via-Machine-Learning-using-EMG-Armband-for-3D-Printed-Robotic-Hand
机器人
3/5
🧩 软硬件结合
已发布
项目简介
This repository shows how to classify EMG data coming from Myo Armband using neural networks and interface a 3d printed
这是一个将肌电信号(EMG)与机器学习相结合,用于控制3D打印机械手的开源项目。其核心功能是通过Myo手势控制臂环采集前臂的8通道表面肌电信号,利用神经网络对5种或12种手指动作进行分类,并将识别结果通过蓝牙发送给Arduino驱动的3D打印机械手,实现实时模仿。项目主要特点在于提供了一套“快速且计算成本低”的解决方案:采用单隐层神经网络(8个神经元,ReLU激活函数),对原始EMG信号取绝对值后进行窗口大小为50的滑动平均作为特征,训练过程仅需5秒静态数据采集,避免了传统方法中冗长的训练流程。技术栈方面,Python端依赖Niklas Rosenstein的Myo-Python库进行数据读取,使用Keras构建和训练神经网络;硬件端涉及Myo臂环、Arduino Uno、HC-05蓝牙模块、Futaba S3114舵机及舵机驱动板。该项目解决了两个关键问题:一是EMG信号随机性强、难以区分细微手指动作的难题;二是为低成本假肢或机器人控制提供了一种无需昂贵设备、可快速部署的轻量级分类方案。适用场景包括:智能假肢的原型开发、人机交互教学演示、以及需要手势控制的低成本机器人项目。需要注意的是,由于训练和验证时要求手臂保持静止,该方法更适合静态或准静态环境下的手势识别。项目附带了完整的硬件设计文件(3D打印手部模型)、Python训练代码和Arduino控制代码,并提供了论文链接供学术引用。
标签
项目特点
**快速训练**:只需5秒静态数据采集即可完成模型训练,无需长时间重复动作。
**低成本计算**:采用单隐层神经网络(8个神经元,ReLU激活函数),对原始EMG信号取绝对值后做窗口大小为50的滑动平均作为特征,计算量小。
**实时控制**:通过蓝牙将识别结果发送给Arduino驱动的3D打印机械手,实现实时手势模仿。
**多手势识别**:支持5种或12种手指动作分类,覆盖常见手势需求。
**开源可复现**:提供完整的Python端数据采集、训练、推理代码,以及Arduino端控制代码和3D打印模型文件。
**硬件兼容性好**:基于Myo臂环(8通道EMG传感器)和Arduino开发板,3D打印手部模型可自行打印组装。
技术规格
| EMG传感器 | Myo手势控制臂环,8通道表面肌电信号 |
|---|---|
| 采样率 | 200 Hz(Myo臂环默认) |
| 特征提取 | 原始信号取绝对值 + 窗口大小为50的滑动平均 |
| 神经网络结构 | 单隐层,8个神经元,ReLU激活函数 |
| 输出类别 | 5种或12种手指动作 |
| 训练数据采集时间 | 5秒静态数据 |
| 通信方式 | 蓝牙(Myo臂环→PC/Arduino) |
| 控制板 | Arduino(具体型号未指定,推荐Arduino Uno或兼容板) |
| 机械手 | 3D打印手指结构,由Arduino驱动舵机控制 |
| 软件依赖 | Python 3.x,Myo-Python库,TensorFlow/Keras(或轻量级ML库) |
项目资源
搜索资源
物料清单 (BOM)
| 物料名称 | 数量 | 参考价格 | 备注 |
|---|---|---|---|
| Myo手势控制臂环 | 1 | — | 8通道EMG,蓝牙通信 |
| Arduino开发板 | 1 | — | 推荐Arduino Uno或兼容型号 |
| 舵机(SG90或类似) | 5-12 | — | 每个手指一个,具体数量取决于手指设计 |
| 3D打印机械手组件 | 1套 | — | 包括手指、手掌、底座等STL文件 |
| 5V电源适配器或电池组 | 1 | — | 为Arduino和舵机供电 |
| 杜邦线/跳线 | 若干 | — | 连接Arduino与舵机 |
| 蓝牙模块(HC-05/HC-06) | 1 | — | 若Arduino无内置蓝牙,用于接收PC端指令 |
能力画像
**记忆与知识检索**:3/5 — 需要了解肌电信号基础、机器学习分类原理和Arduino编程,但项目文档和代码结构清晰,可快速查阅。
**动手与操作**:4/5 — 需要组装3D打印机械手、焊接电路、连接舵机和传感器,对动手能力有一定要求。
**编程与算法**:3/5 — Python端涉及数据采集、特征提取和神经网络训练,Arduino端需编写舵机控制逻辑,但代码量不大且注释完整。
**设计与建模**:2/5 — 机械手模型已提供STL文件,无需自行设计,但如需修改手指结构或增加自由度则需要3D建模能力。
**实验与调试**:4/5 — 需要调试EMG信号采集质量、模型分类准确率、蓝牙通信稳定性以及机械手动作同步,实验环节较多。
**协作与分享**:2/5 — 项目为个人开源作品,社区贡献较少,但可自行fork改进并分享。
**学习与研究**:4/5 — 适合学习EMG信号处理、轻量级机器学习部署、嵌入式控制等交叉领域知识。
**系统集成**:4/5 — 需要将传感器、PC端算法、无线通信、Arduino控制、机械执行器整合为一个完整闭环系统。
项目图库
所需技能
基础Python编程(数据处理、机器学习库使用)
基础Arduino编程(舵机控制、串口/蓝牙通信)
3D打印操作(切片、打印、后处理)
电路连接与焊接(杜邦线、电源、舵机接线)
肌电信号基础知识(EMG采集、噪声处理)
机器学习基础(分类模型、特征提取、训练流程)
蓝牙通信配置(Myo臂环配对、HC-05/HC-06设置)
适用场景
低成本假肢或辅助设备原型开发
肌电信号与人机交互的教学实验项目
机器人手势控制的快速原型验证
嵌入式机器学习(TinyML)入门实践
康复训练中的手势识别反馈系统
创客空间或高校实验室的交叉学科项目