跳到主要内容

Astra 应用挑战赛 - 仿生机器人手

· 阅读需 9 分钟
Ignacy Kajdan
Ignacy Kajdan
Software Engineer @ Grinn
Astra Team
Astra Team
Synaptics

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 个关键点,分别为:

  1. 手腕
  2. 拇指(4 个点)
  3. 食指(4 个点)
  4. 中指(4 个点)
  5. 无名指(4 个点)
  6. 小指(4 个点)

YOLO-Pose 手部关键点检测适配​

YOLO‐Pose 是一种无需热图、单阶段的 YOLO 扩展,能在一次前向推理中输出目标边界框和关键点坐标,省去了两阶段方法的热图计算和后处理分组。详细内容见 YOLO-Pose paper。

YOLO 系列有多种模型尺寸,网络深度、宽度和参数量不同,以平衡准确率和速度。在嵌入式或资源受限环境下,nano 和 small 版本更适合实时推理。

模型深度宽度参数量应用场景
YOLO11n-pose (Nano)最浅网络 – 层数更少更窄网络 – 每层通道数更少参数最少 – 轻量且快速适合实时应用,适用于计算资源有限的设备
YOLO11s-pose (Small)比 YOLO11n-pose 更深 – 层数更多更宽网络 – 每层通道数更多参数更多 – 平衡速度和准确率适合需要性能与效率平衡的应用

YOLO-Pose 最初用于 2D 多人姿态估计,这里通过迁移学习和 HaGRID 数据集微调,适配为手部关键点检测。

训练与评估​

热图用于表示关键点位置的概率分布,训练时模型学习生成热图,通过最小化预测与真实热图的差异优化参数。

YOLO11-pose 的 cls_loss 用于目标分类,pose_loss 专注于关键点定位,kobj_loss(关键点目标损失)平衡关键点预测的置信度,帮助模型区分真实关键点和背景噪声。

本项目训练了 nano 和 small 两种模型,最终选择 small 版本部署,因为其准确率更高且推理速度合理。

模型在目标硬件上用 CPU 推理进行基准测试,涵盖不同输入尺寸。

张量尺寸加载 (ms)初始化 (ms)最小 (ms)中位数 (ms)最大 (ms)标准差 (ms)平均 (ms)
640×384162.10609.14558.52574.68590.529.61574.65
320×192174.65198.18145.84146.88166.535.60149.04

将输入尺寸降至 320×192 显著提升了速度——模型可在约 150 ms 内处理图片。640×384 输入尺寸平均推理时间约 574 ms。

使用 SyNAP 量化与部署​

模型以 ONNX 格式导出,然后用 synap 工具量化为混合精度格式。详细流程见 SyNAP documentation。该框架还负责输入图片的预处理,包括调整尺寸和归一化像素值。

我们测试了多种输入尺寸和量化格式,以寻找最佳速度与准确率平衡。输入图片的宽高比与摄像头分辨率一致。

以下为 synap_cli 工具测试的配置。

张量尺寸量化方式加载 (ms)初始化 (ms)最小 (ms)中位数 (ms)最大 (ms)标准差 (ms)平均 (ms)
640×384int16165.2146.1192.7392.81100.201.0492.95
640×384mixed uint886.9323.8651.9952.4259.050.9452.51
320×192int16144.4942.3820.8520.8627.180.8821.00
320×192mixed uint883.7321.4110.0810.2217.471.0110.41

将输入尺寸降至 320×192 显著提升推理速度。该配置下模型可在约 10 ms 内处理图片,而 640×384 输入尺寸平均推理时间约 52 ms。混合 uint8 量化格式也比 int16 格式快很多。

最终选择 320×192 输入尺寸和混合 uint8 量化进行部署,兼顾速度和准确率,适合实时应用。

总结

本项目将深度学习、嵌入式硬件和实时交互有机结合。从 3D 手部动作捕捉到机器人镜像和手势游戏,充分展示了边缘 AI 平台的强大能力。

如需了解技术细节,请查看 Grinn GitHub repository。 了解更多基于 Synaptics SL1680 处理器的 Grinn AstraSOM-1680。