S.P.E.A.K——机电臂运动学的语音处理
受钢铁侠JARVIS机器人手臂启发的个人电子项目。目标是使用自然语音命令控制机器人手臂,通过一系列人工智能和嵌入式系统将其转化为硬件动作。
______________________________________________________________________
项目愿景
说出命令。手臂在动。没有按钮,没有代码,不需要精确的指令。
这是逐步构建的,从单个伺服电机和web API开始,到定制PCB、3D打印机箱和能够拾取物体的抓取器结束。
______________________________________________________________________
路线图
| 阶段 | 描述 | 状态 |
|---|---|---|
| MVP | 单伺服,Arduino API,MCP服务器,Claude集成,语音输入 | 正在进行 |
| v2 | 第二伺服(关节),纸板/3D打印手臂模型,更好的功能描述 | 计划中 |
| v3 | 手臂末端的握把 | 计划中 |
| 最终 | 定制PCB、清洁机箱、延迟优化 | 已计划 |
______________________________________________________________________
架构概述
全系统(MVP)
graph LR
User["User (voice)"]
STT["Speech-to-Text\n(local or API)"]
Claude["Claude AI\n(claude.ai / API)"]
MCP["MCP Server\n(Python)"]
Arduino["Arduino\n(REST API)"]
Servo["Servo Motor"]
User -->|speaks command| STT
STT -->|text prompt| Claude
Claude -->|tool call| MCP
MCP -->|HTTP request| Arduino
Arduino -->|PWM signal| Servo组件分解
graph TB
subgraph Voice Layer
mic["Microphone"]
stt["STT Engine\n(Whisper / browser API)"]
mic --> stt
end
subgraph AI Layer
claude["Claude\n(LLM)"]
mcp["MCP Server\n(Python + FastMCP)"]
stt -->|prompt| claude
claude |tool calls| mcp
end
subgraph Hardware Layer
arduino["Arduino\n(C++ sketch + REST API)"]
servo1["Servo 1\n(base rotation)"]
mcp -->|HTTP POST/GET| arduino
arduino --> servo1
end______________________________________________________________________
逐步分解
步骤1|Arduino+伺服电机
Arduino运行伺服控制草图。伺服电机连接到PWM引脚。伺服的位置(角度)可以通过发送0到180度之间的值来设置。
在伺服逻辑之上,一个轻量级的HTTP服务器在Arduino上运行(通过以太网或WiFi屏蔽,或通过主机上的串行到HTTP桥)。这公开了一个简单的REST API,因此可以从外部系统控制伺服。
关键端点:
GET /status--返回当前伺服角度POST /servo/move--将手臂的一部分设置为目标角度POST /servo/reset--返回原位
______________________________________________________________________
步骤2-Arduino REST API
Arduino草图集成了一个web服务器,通过HTTP公开伺服控制。
这将硬件与AI层解耦:任何可以发出HTTP请求的东西现在都可以控制手臂。
______________________________________________________________________
步骤3-MCP服务器(Python)
用Python编写的模型上下文协议(MCP)服务器将可用的API操作描述为Claude可以调用的工具。这是LLM和硬件之间的桥梁。
MCP服务器定义了以下工具:
move_servo(angle: int)--将伺服系统旋转到给定角度get_servo_position()--读取当前位置reset_arm()--返回原位
Claude将这些工具视为可调用函数。当用户说“将手臂向左旋转一点”时,Claude会选择正确的工具并使用正确的参数调用它。
______________________________________________________________________
步骤4|语音提示(当前步骤)
MVP的最后一部分是捕获用户的语音并将其转换为Claude的文本提示。
______________________________________________________________________
存储库结构
S.P.E.A.K/
├── fake_arm
│ └── fake_arm.c
├── README.md
├── speak_arduino
│ ├── Makefile
│ └── speak_arduino.ino
└── speak_mcp_server
├── pyproject.toml
├── speak_mcp_server.py
└── uv.lock______________________________________________________________________
硬件(MVP)
| 组件 | 描述 |
|---|---|
| AD002 | 微型伺服电机 |
| AdeeptPixie | arduino |
______________________________________________________________________
入门指南
做
