Choturobo 智能机器人控制平台
一种集成了基于Arduino的机器人技术(ESP32或Arduino Nano)与人工智能的MCP服务器,允许通过人工智能助手控制LED、电机、伺服和传感器等硬件组件。
服务介绍
Chotu Robo 服务器 - Arduino 的 MCP 服务器
演示
概述
该项目展示了如何使用 Anthropic 的 Claude AI 提供的 MCP(Model Context Protocol) 框架将基于 Arduino 的机器人(使用 NodeMCU ESP32 或 Arduino Nano 368 板)与 AI 集成。它通过一个简单的接口在硬件组件和 AI 之间提供了无缝连接,用户可以通过手机或计算机控制该接口。
该系统充当一个 机器人服务器(命名为 Chotu Robo),可以与各种物理组件如 LED、电机、舵机、风扇、传感器等进行交互。这些组件可以通过向服务器发送命令来远程控制,服务器再通过 ESP32 或 Arduino Nano 368 微控制器控制硬件。
这种设置为未来的基于 AI 的应用打开了可能性,例如通过移动或 Web 应用程序中的 AI 助手(如 Claude)控制机器人。
Chotu 机器人有两种操作模式:有线模式和无线模式,每种模式针对不同的使用场景和硬件配置设计。
有线模式 - Arduino Nano 368
在有线模式下,机器人使用 Arduino Nano 368 板,代码通过 USB 直接上传。此模式不支持通过网络发送实时命令,因为它需要物理 USB 连接才能运行。机器人运行其预先上传的代码,适用于不需要 Wi-Fi 或网络连接的项目。
无线模式 - 带 Wi-Fi 的 ESP32 网络服务器
在无线模式下,机器人由 ESP32 板供电。ESP32 连接到本地 Wi-Fi 网络并启动一个带 Wi-Fi 的网络服务器,通过 REST API 或 WebSocket 监听实时命令。这种模式允许机器人与外部设备交互,并控制各种硬件组件,如 LED、电机、舵机和风扇。
一旦 ESP32 连接到 Wi-Fi,它就会接受来自 TypeScript MCP 服务器或基于 Java Spring 的 MCP 服务器的实时命令,从而控制硬件功能。这使得微控制器硬件与基于 AI 的系统之间能够无缝集成,适用于自动化、机器人或物联网应用。
特性
- LED 控制: 使 LED 在指定时间内闪烁。
- 蜂鸣器控制: 使蜂鸣器在指定时间内发出声音。
- 电机控制: 使电机以特定速度运行一段时间。
- 舵机控制: 将舵机移动到特定角度。
- 风扇控制: 打开/关闭风扇。
- 继电器控制: 切换继电器的开/关状态。
- 传感器读数:
- 从传感器读取温度。
- 使用超声波传感器测量距离。
- 基于 AI 的命令: 使用基于 AI 的提示来控制机器人执行动作,如移动、启动、停止、转向和调整速度。
使用的组件
- NodeMCU ESP32 或 Arduino Nano 368: 微控制器负责控制硬件并与服务器通信。
- Johnny-Five: 用于与硬件组件交互的 JavaScript 机器人和物联网库。
- MCP 框架: Model Context Protocol 框架,用于处理与外部系统的请求和交互,实现基于 AI 的通信。
- 传感器和执行器:
- LED(用于指示状态)
- 蜂鸣器
- 舵机
- 电机
- 继电器模块
- 超声波距离传感器
- 温度传感器
工作原理
Chotu Robo 服务器作为处理来自 AI 系统命令的主要枢纽。以下流程概述了系统的工作方式:
-
设置:
- NodeMCU ESP32 或 Arduino Nano 368 板连接到各种传感器和执行器(如 LED、电机等)。
- Johnny-Five 库允许服务器通过微控制器控制硬件组件。
-
MCP 集成:
- McpServer 管理硬件与 AI 之间的通信。
- 服务器提供了几个工具(命令),如
blinkLED、buzz、runMotor、moveServo等。 - 每个工具都关联一个特定的功能,服务器等待来自 AI 系统的命令来执行这些操作。
-
AI 控制:
- 使用AI 提示触发诸如移动机器人 (
move-chotu)、控制速度 (set-chotu-speed) 和转动机器人 (turn-chotu) 等操作。 - AI 使用Claude 或其他 AI 助手向服务器发送命令。服务器处理这些命令并相应地与硬件交互。
- 使用AI 提示触发诸如移动机器人 (
-
实时通信:
- StdioServerTransport 确保服务器可以连接到外部 AI 系统并实时执行命令。
-
用户命令:
- AI 可以发送用户友好的命令,如**“向左转 Chotu”** 或 “将速度设为 5” 来控制机器人的行为。
命令和工具
以下是一些可用命令及其功能:
blinkLED: 使 LED 按指定时间闪烁。buzz: 使蜂鸣器激活一段时间。runMotor: 以给定速度启动电机并运行设定的时间。moveServo: 将伺服电机移动到指定角度。controlFan: 打开或关闭风扇。toggleRelay: 切换继电器模块的开关状态。readTemperature: 获取当前温度读数。readDistance: 使用超声波传感器测量距离。move-chotu: 通过 AI 提示移动 Chotu 特定步数。start-chotu: 启动 Chotu 并准备好操作。stop-chotu: 停止 Chotu 并关闭操作。turn-chotu: 将 Chotu 转向指定方向(左或右)。set-chotu-speed: 设置 Chotu 的速度。
如何使用
需求
-
硬件:
- NodeMCU ESP32 或 Arduino Nano 368(或其他支持的 Arduino/ESP32 板)。
- 各种传感器和执行器(LED、伺服电机、电机、超声波传感器、温度传感器、继电器)。
-
软件:
- 安装 Node.js。
- 安装 Johnny-Five 用于硬件控制。
- 使用 MCP SDK 与 AI 集成。
- 使用 Arduino IDE 编程微控制器。
设置步骤
-
安装 Node.js 和 Johnny-Five:
npm install johnny-five npm install @modelcontextprotocol/sdk在 Arduino IDE 上设置 ESP32 或 Arduino Nano 368:
如果使用 ESP32 或 Arduino Nano 368 板,请在 Arduino IDE 中安装 ESP32 板支持。
通过 USB 将 NodeMCU ESP32 或 Arduino Nano 368 连接到您的计算机。
将代码上传到板上:使用 Arduino IDE 将提供的代码上传到 ESP32 或 Arduino Nano 368。
运行服务器: 通过运行脚本来启动 MCP 服务器。这将设置服务器并与硬件建立通信。 连接到 AI: 从 AI 系统(如 Claude)发送命令来控制机器人。
示例 AI 命令
移动 Chotu:
命令: "Move Chotu forward by 5 steps."
动作: 机器人将根据指定的步数移动。
设置速度:
命令: "Set speed to 10."
动作: 机器人的速度将相应调整。
左转:
命令: "Turn Chotu left."
动作: 机器人将向左旋转。
使用 MCP Inspector 调试:
npx @modelcontextprotocol/inspector node build/choturobo.js
未来改进
此项目可以作为开发更高级基于 AI 的机器人系统的基石框架。你可以通过以下方式扩展功能:
- 添加更多传感器,如摄像头或麦克风。
- 集成高级AI模型以实现更好的决策。
- 开发移动应用或网页界面,通过图形界面控制机器人。
- 使用树莓派:
- 设置:使用树莓派运行MCP服务器并控制硬件组件。
- 安装:
sudo apt-get update sudo apt-get install nodejs npm npm install johnny-five npm install @modelcontextprotocol/sdk - 连接到基于Java的服务器:
- Java服务器设置:创建一个基于Java的MCP服务器来处理请求并与树莓派通信。
- Java代码示例:
import org.modelcontextprotocol.server.McpServer; import org.modelcontextprotocol.server.transport.WebSocketTransport; public class ChotuRoboServer { public static void main(String[] args) { McpServer server = new McpServer(); WebSocketTransport transport = new WebSocketTransport("ws://raspberrypi.local:8080"); server.connect(transport); // 在这里定义工具和提示 server.tool("blinkLED", params -> { // 实现LED闪烁逻辑 }); server.start(); } } - 运行服务器:
javac -cp modelcontextprotocol-sdk.jar ChotuRoboServer.java java -cp .:modelcontextprotocol-sdk.jar ChotuRoboServer
- 将树莓派连接到Java服务器:
- 确保树莓派和Java服务器在同一个网络中。
- 使用WebSocket或REST API从Java服务器向树莓派发送命令。
- 从Java服务器向树莓派发送命令的示例:
WebSocketClient client = new WebSocketClient(new URI("ws://raspberrypi.local:8080")); client.connect(); client.send("{\"command\": \"blinkLED\", \"params\": {\"time\": 5}}");
按照这些步骤,你可以为Chotu Robo项目添加更多高级功能,并更好地与AI和基于Java的系统集成。