手把手教你制全部由大模型控制的机械手——— chapter 1

170 阅读6分钟

这个项目的灵感来自于我参加WAIC(世界人工智能大会)展会的经历。在展会上,我看到一个非常有趣的展品——一个能够实时模仿人类手势的机械臂。当时我就被这个技术深深吸引了,心想:这怎么可能?机械臂怎么能这么灵活地模仿人的手势?

Weixin Image_20250813200330_28.jpg

回来后,我立刻用GPT查询了一下这个技术的原理,发现原来这个原理其实很巧妙,但实现起来并不简单:

image.png 手势识别与机械控制原理

通过摄像头捕捉人手的关键点,然后通过算法分析手势姿态,最后控制机械臂的舵机进行相应的动作。具体来说:

  • 摄像头实时捕捉手部图像
  • 计算机视觉算法识别手部关键点(21个关键点)
  • 根据关键点位置计算手势姿态
  • 将手势信息转换为舵机角度指令
  • 通过Arduino控制机械臂的6个舵机(5个手指+1个手腕)

image.png 注:图片来源blog.csdn.net/qq_42589613…

发现这个原理后,我就想着自己动手做一个类似的机械臂。毕竟现在3D打印技术这么发达,Arduino也很便宜,应该能够实现类似的效果。

9a518665f989fbf7107f7c605cfc1861.jpg

技术实现:从原理到代码

这里我想只需要用摄像头捕捉手势,通过计算机视觉算法分析,然后控制机械臂模仿。我用的MediaPipe框架可以直接进行手部关键点检测,无需联网就能做很多事情。然后我们通过信号处理算法可以自动识别手势变化,我发现这太厉害了。

我用的这个是MediaPipe框架里面的手部检测能力,利用普通摄像头,给他那些关键的信号处理算法然后让他识别到这些数据以后,他们就自动匹配并分析。我测试了多次,当它识别到手势变化这些数据以后,算法的能力会让机械臂自动模仿这个手势。

而且MediaPipe和Python整合的很好,调用很方便,其实在开发之前我都是不知道的,结果去网上一查,能做的事情太多了,例如实时预览这个事情,把检测过程实时显示出来,方便用户了解检测状态。通过调用OpenCV,竟然可以把检测过程可视化,并且直接显示实时数据,既有视频预览又有控制指令,这样以后就可以通过其他算法进行更深入的手势分析。

在上面这张图,简单来说是一个实时监测功能,我希望用户打开应用就能看到实时的手势识别和机械臂控制数据,我最初的想法是简单的握拳张开,但是,我想既然能识别握拳张开,也能识别其他的咯,反正都是差不多的代码,我就增加了多种手势识别、智能模仿、数据记录等功能。

26eff0e9151fda5b638b94a7dc0706c2.jpg

最复杂的是手势识别算法,每秒处理多少帧、如何过滤噪声、如何计算手势姿态,还是有很多复杂的逻辑的,虽然整体看起都不错,也能正常运行,但是还是有些bug没解决、有些逻辑比如说异常检测等,对我来说都有点太复杂了,搞不定。我想了想还是先把整个项目跑起来重要。

然后还需要做一个用户指南界面,可以指导使用者如何正确使用应用,如手势放置位置、检测时长、注意事项等。这个部分我增加了一个接口可以自动调取摄像头权限,基本的检测流程、数据记录、历史查看都会自动处理。Python有专门的库调取摄像头接口,整合的非常好,调用方法也很简单。

这个项目是为了探索机器人控制技术,项目的主题是设计一个能够实时模仿人类手势的机械臂系统。我做的这个系统是关于一个手势识别和机械臂控制的一个完整项目,这个系统可以实时识别使用者的手势并控制机械臂进行模仿。

在这个过程中,我意识到,如果想做出一个成功的项目,首先必须有一个清晰的愿景和好的想法,但真正有效的想法,其实都是在一边做边想之中得到的。还有,要用简单的语言表达复杂的概念,不光人能听懂,机器也能听明白。这些技能不仅对编程有帮助,对日常生活和学习也很有用。

总的来说,这次开发手势控制机械臂,让我学到了很多技术知识,感觉这段时间学到的东西比之前半年学的还多。

为了解决一些硬件和软件方面的技术问题,我还专门查阅了大量文档和教程,在算法方面给了我很好的建议。

整个开发过程我主要用了Claude和Cursor这两个工具,辅助我构建、调试代码、还有一些样式调优,它们真的很强大、确切的说非常强大。

界面我是用Python的tkinter完成的,全原生的桌面应用开发体验。

另外,再去生成一个适合自己项目的图标,这真的很有帮助,感觉让项目看起来很专业。

以下是我的GitHub代码原地址 "github.com/pluto627/pr…" 请大家可以下载到本地直接使用,欢迎大家给我提出可以修改的问题。

硬件清单

  • Arduino Nano主控板
  • 6个舵机(5个手指+1个手腕)
  • 3D打印的机械臂外壳
  • 摄像头
  • USB连接线
  • 电源模块

技术栈

  • 硬件:Arduino Nano + 舵机控制
  • 计算机视觉:MediaPipe + OpenCV
  • 编程语言:Python + Arduino C++
  • 界面:tkinter GUI
  • 通信:串口通信

主要功能

  1. 实时手势识别:通过摄像头识别21个手部关键点
  2. 机械臂控制:6个舵机精确控制手指和手腕动作
  3. 多种控制模式:简化模式、高级模式、GUI控制
  4. 智能模仿:机械臂实时模仿人类手势
  5. 数据记录:记录手势历史和控制数据