Astra 应用挑战赛 - 仿生机器人手
Astra 应用挑战赛旨在激发创造力和创新精神,鼓励参与者充分挖掘 Astra 的潜力。本次挑战赛面向开发者和创新者开放,邀请来自 Embedded World 2025: Integrate Cutting-Edge AI Features into Your Embedded Device 的参与者,在两个激动人心的类别中构建有影响力的实际应用,利用 Astra 的 NPU 运行 YOLO 模型,或创建与 IoT 解决方案集成的先进 AI 助手。
🏆Astra 应用挑战赛获奖项目 : 仿生机器人手
在 Community section 了解更多 Astra 应用挑战赛内容。 经过激烈的评选,我们很高兴地展示 GRINN 的杰出项目:仿生机器人手项目,这是计算机视觉、嵌入式 AI 和机器人控制的精彩结合。查看 Grinn GitHub repository 获取代码。
边缘 AI 手势识别
仿生机器人手项目展示了一个手势识别系统,将计算机视觉、嵌入式 AI 和实时机器人控制结合在一起。该项目运行于 Synaptics Astra Machina Board 和 Astra SL1680 SoC 上,演示了一个紧凑、高效的 AI 平台如何通过深度学习实现丰富的交互体验。
实时手部追踪之旅
我们启动这个项目时,目标既有趣又具技术挑战性:实时识别手势,并用仿生手进行镜像。添加石头剪刀布游戏模式的想法自然而然地出现了——它让演示更有趣,也为手势识别的准确性提供了基准。
这个演示的目标远不止娱乐。我们希望激励工程师、开发者和创新者探索边缘 AI 手势识别在各行业的更广泛潜力。想象一下,医疗界可以让外科医生在无菌环境下免接触控制设备;工业机器人可以响应人类手势,实现更安全的协作;智能家居系统可以通过手势理解你的意图;车载手势控制让驾驶员无需分心即可操作信息娱乐系统;AR/VR 平台用手部动作替代物理控制器,实现无缝沉浸式交互。
为了实现姿态检测,我们改编了 YOLO‐Pose,这是一种单阶段、无需热图的姿态估计算法,最初用于全身姿态检测。我们用 HaGRID dataset 进行了微调,这是一套包含大量真实手势图像的数据集。
前端与后端管道设计
该项目由两大部分组成:后端应用负责推理和控制机器人手,前端应用在 kiosk 窗口中展示结果。前后端通过 WebSocket 和已建立的 JSON API 通信。
前端
前端设计非常简洁——它通过 WebSocket 接收后端的 JSON 更新,然后可视化手部关键点、边界框、倒计时和石头剪刀布结果。这很好地展示了即使是基础的 Web 技术也能实现引人注目的界 面。
后端
后端应用用 Python 编写,使用 SynapRT framework 运行 YOLO‐Pose 模型推理。主循环持续从摄像头采集图像,进行推理,并根据检测到的手势控制仿生手的舵机。
主函数首先启动 HTTP 服务器和 WebSocket 服务器。它在独立线程上运行 SynapRT 推理管道,然后进入一个紧凑的无限循环:每次循环轮询推理结果,计算推理时间、帧率和功耗的平均值,将检测到的手部弯曲输入到石头剪刀布状态机,将所有内容打包成 JSON 并通过 WebSocket 广播。
当检测到手部超过 10 秒时,系统切换到石头剪刀布游戏模式。机器人手停止镜像用户手势,随机做出一个手势。通过比较用户和机器人的手势决定游戏结果。结果显示后,系统恢复到正常模式,机器人手继续镜像用户手势。

系统硬件组成
硬件包括 Machina SL1680、USB 摄像头、舵机控制器和仿生机器人手。
最初我们尝试用 GPIO 和软件 PWM 控制舵机。这种方式在多舵机同时高负载运动时会出现抖动和不稳定,导致手指动作不准确。切换到 PCA9685 硬件 PWM 控制器后问题得到解决。

硬件 控制被抽象为多个模块。最低层是 servo.py,通过 sysfs 接口与 PCA9685 驱动交互。上层 hand.py 包含舵机的高级控制器。它接收 3D 手部关键点,过滤低置信度点,通过向量运算计算关节角度,对角度进行滑动窗口平滑,归一化为 0-100% 弯曲值,然后驱动舵机实时镜像用户手势,或在石头剪刀布模式下匹配预定义手势模板。
每根手指的控制流程如下图所示。

基于 HaGRID 构建:手部关键点检测数据集
HAnd Gesture Recognition Image Dataset 为我们提供了坚实的基础。该数据集包含 552,000 多张带有 21 个手部关键点和 18 类手势标签的图片,覆盖 18-65 岁用户和多种光照条件。

所有图片都带有每只手的边界框 [x, y, width, height]、21 个关键点 [x, y]、手势标签和用户 ID。每只手有 21 个关键点,分别为:
- 手腕
- 拇指(4 个点)
- 食指(4 个点)
- 中指(4 个点)
- 无名指(4 个点)
- 小指(4 个点)