如何让机械臂实时模仿人类手势
机械臂只有在人们能够自然操控时才真正有用。远程操作至关重要,因为它使人们能够在危险、偏远或难以到达的地方安全作业,无论是拆弹、灾害救援还是手术,同时仍依靠人类判断完成精细任务。我们希望验证一个机械臂是否能完全在边缘设备上实时模仿人类手部动作,而无需依赖云端服务器或桌面 GPU。除了技术挑战之外,这种远程操作也是机器人领域的一项实用基础技术,它提供了一种简便的方式直接控制机械臂,便于在自主执行前测试其运动或收集数据。
硬件选择
我们采用搭载专用 NPU 的高通 Dragonwing IQ-9075 EVK 边缘计算设备(最高可达 100 TOPS 的 AI 性能),用于本地 AI 计算。
对于机械臂部分,我们将使用“Amazing Hand”——一款 3D 打印的开源人形机械手,具备 8 个自由度和 4 个手指。
Amazing Hand 使用 Seeed Studio 工业级总线伺服驱动板来驱动其八个串行伺服电机。
在计算机视觉任务方面,我们采用了一台通用的 2MP USB 相机。
我们设计了一个 3D 打印的支架,以确保相机运行稳定。
设置 Dragonwing IQ-9075 EVK
我们使用 Qualcomm Launcher 将 Ubuntu 24.04 安装到 IQ-9075 EVK 上。
Qualcomm Launcher 可用于配置网络设置和 SSH 访问。
要安装 QNN 库及其依赖项,请执行以下命令:
为了进行图像处理和推理,我们需要安装 OpenCV 和 LiteRT 运行时库。
搭建 Amazing Hand
Amazing Hand 由一个 3D 打印的结构套件组成,内部包含 8 个 Feetech SCS0009 伺服电机,位于手掌中,通过球形连杆驱动手指运动,每个手指配备两个伺服电机,分别控制屈曲和外展动作。各伺服电机被分配了不同的 ID,以便在共享的串行总线上独立寻址。装配指南和校准脚本可在 Amazing Hand 的 GitHub 仓库中获取。整个组装和校准过程耗时略超一小时。
为与 Amazing Hand 上的串行伺服电机通信,必须安装 rustypot 库。
我们可能需要将用户添加到允许对串口设备进行完全直接访问的拨出用户组中。
高通AI Hub优化模型
我们的目标是使用TFLite外部委托程序运行推理。高通QNN(高通AI引擎直连)的TFLite外部委托程序充当封装器,动态加载QNN后端,以在Hexagon Tensor处理器(HTP)上加速LiteRT(原TensorFlow Lite)模型。我们下载了精度为w8a8的TFLite模型。在高通AI Hub上的w8a8模型是一种经过优化和验证的模型,其中权重(w8)和激活值(a8)均量化为8位整数(INT8)精度。
应用开发
我构建了一个实时远程操作系统,使机械臂能够精确模仿我的手部动作,该系统完全在高通Dragonwing IQ-9075设备上运行。一个摄像头实时监控我的手部动作,通过两阶段神经网络管道(手掌检测 + 21点关键点跟踪),所有内容均量化为int8并经由QNN卸载至板载的Hexagon NPU,从而实时计算手指的位置。这些地标被转换为每个手指的屈曲和外展角度,经过平滑处理以避免抖动,并直接发送到驱动手部的伺服电机,使它与我的动作同步地弯曲、张开和打开。
系统不再对每一帧都进行完整的手掌检测,而是采用手部追踪优化技术。它会记住我手的位置,并仅在该区域附近的小片段上重新运行轻量级的地标模型。只有当连续几帧跟踪置信度下降,或系统启动时,才会回退到完整重检测。这大幅降低了每帧的推理成本,使系统响应更灵敏,避免了卡顿。
启动时还包含一个简短的自动校准步骤。我会保持手部静止约40帧,以便系统学习我手的自然静止角度,因为每个人的外展基准线略有不同。之后系统锁定并开始实时驱动伺服电机。
在后台,有四个线程同时运行:一个负责从摄像头获取帧;一个执行所有推理和伺服控制;一个将标注后的帧进行JPEG编码;另一个则通过HTTP提供MJPEG流,让我可以在笔记本电脑浏览器中实时查看追踪叠加画面。如果我按下 Ctrl+C,它不会直接关闭——而是会明确地先打开所有手指并切断舵机扭矩,以防止手部保持紧握或处于负载状态。
该应用程序将神经网络模型(手掌检测器和地标模型)从 CPU 转移到 Qualcomm 的 QNN(Qualcomm Neural Network)TFLite 代理,而非使用标准的 TFLite CPU 推理:
backend_type: "htp" 配置专门针对 Hexagon 张量处理器,htp_performance_mode 控制 NPU 的时钟/功耗配置(数值越高,功耗越低,速度越快),两个库路径指向 Qualcomm 原生的 QNN 运行时环境以及实际在 Hexagon 核心上运行的 DSP 端框架库。随后,这个代理对象会被传递给两个 Interpreter 实例(experimental_delegates=[qnn_delegate]),从而使两个模型都在 NPU 上运行。
要实现这一功能,设备上必须满足若干条件:QNN SDK 的共享库(libQnnHtp.so、libQnnTFLiteDelegate.so)需正确安装并可用。必须在这些确切路径下存在,/usr/lib/rfsa/adsp 目录下的 DSP 框架库必须已安装,并与板子的 Hexagon 固件版本匹配,.tflite 模型必须预先量化为 int8(w8a8),因为 HTP 后端期望量化图,用户通常需要具备访问 DSP 设备节点的正确权限。
以下函数实现负责推理线程。
结论
该项目表明,Dragonwing IQ-9075 可以在不依赖云端或桌面 GPU 的情况下,通过其 NPU 完整运行整个流程,实现真正的实时机器人手部远程操作。我们仍希望借此进一步拓展功能。加入手势识别后,特定的手部姿态可触发预设的抓取动作,而不仅仅反映手指的原始位置,这将使该机械臂更适用于工厂生产线上的实际拾取与放置作业。
本文编译自hackster.io





