返回 MCP 目录
public公开dns本地运行

ROS 2 Robot Control

ros2-mcp-server是一个基于Python的服务器,通过Model Context Protocol (MCP)与ROS 2集成,使AI助手能够通过ROS 2话题控制机器人运动。它支持时间控制的移动命令,并作为ROS 2节点运行,发布geometry_msgs/Twist消息到/cmd_vel话题。

article

README

🚀 ROS 2 MCP 服务器

这是一个将 FastMCP 集成到 ROS 2 中的服务器项目。借助该项目,你能够使用 Claude 来控制 ROS 2 机器人,为机器人控制提供了新的方式和可能。

🚀 快速开始

本项目可让你使用 Claude 控制 ROS 2 机器人,以下是快速开始的步骤。

✨ 主要特性

  • 集成 FastMCP:利用 FastMCP 协议与 Claude 进行通信。
  • ROS 2 支持:发布 /cmd_vel 主题消息以控制机器人的运动。
  • 简单命令处理:支持基础的移动指令,如前进、后退和停止。

📦 安装指南

  1. 克隆仓库:
    git clone https://github.com/kakimochi/ros2-mcp-server.git
    
  2. 安装依赖项:
    • 确保 ROS 2 已安装。
    • 在项目目录运行:
      pip install -r requirements.txt
      

💻 使用示例

基础用法

配置 MCP 服务器

  1. 修改 ros2-mcp-server.py 中的 mcp_port 为你的 MCP 端口(默认为 1234)。
  2. 启动服务器:
    python ros2-mcp-server.py
    

使用 Claude 发送指令

  • 示例命令:
    Please make the robot move forward at 0.2 m/s for 5 seconds.
    

🔧 技术细节

ros2-mcp-server.py

import rclpy
from rclpy.node import Node
from geometry_msgs.msg import Twist
import serial
import time

class ROS2MCPNode(Node):
    def __init__(self):
        super().__init__('ros2_mcp_server')
        self.publisher_ = self.create_publisher(Twist, '/cmd_vel', 10)
        self.serial_port = None
        self.configure_serial()

    def configure_serial(self):
        port = 'COM3'  # 根据实际修改
        baud_rate = 115200
        try:
            self.serial_port = serial.Serial(port, baud_rate)
        except Exception as e:
            print(f"无法连接到串口: {e}")

    def send_command(self, linear_speed=0.0, angular_speed=0.0, duration=0.0):
        twist_msg = Twist()
        twist_msg.linear.x = linear_speed
        twist_msg.angular.z = angular_speed
        self.publisher_.publish(twist_msg)
        print(f"发送命令: 线速度={linear_speed}, 角度速度={angular_speed}")
        
        if duration > 0:
            start_time = time.time()
            while rclpy.ok() and (time.time() - start_time) < duration:
                self.publisher_.publish(twist_msg)
                time.sleep(0.1)
            twist_msg.linear.x = 0.0
            twist_msg.angular.z = 0.0
            self.publisher_.publish(twist_msg)
            print("停止")

def main(args=None):
    rclpy.init(args=args)
    node = ROS2MCPNode()
    try:
        while rclpy.ok():
            # 这里可以添加从串口或其他方式接收命令的逻辑
            time.sleep(1)
    except KeyboardInterrupt:
        pass
    finally:
        rclpy.shutdown()

if __name__ == '__main__':
    main()

📚 详细文档

依赖项

  • ROS 2:安装 ROS 2 环境。
  • Python 3.10:确保使用 Python 3.10 版本。
  • FastMCP:集成 FastMCP 库以实现与 Claude 的通信。

目录结构

ros2-mcp-server/
├── ros2-mcp-server.py  # 主服务器脚本,集成 FastMCP 和 ROS 2
├── pyproject.toml      # 项目依赖和元数据
├── .python-version     # Python 版本指定
└── README.md           # 项目说明文件

📄 许可证

MIT License

版权 (c) 2025 kakimochi

允许以任何形式使用、拷贝、修改、合并、发布、分发、 sublicense 和/或出售该软件及其关联的文档文件(“软件”),无限制。包括但不限于以下权利:
- 使用、拷贝、修改、合并、发布、分发、 sublicense 和/或 sell 软件的权利。
- 允许他人获得软件副本并进行上述操作。

软件按“现状”提供,不附带任何形式的担保,无论是明示的还是默示的。包括但不限于对适销性、适用性和 NONINFRINGEMENT 的担保。在任何情况下,作者或版权持有人不对因使用本软件而产生的任何直接或间接损害负责。

贡献

欢迎贡献!请提交问题和拉取请求到 GitHub 仓库。

help

运行方式说明

cloud

托管运行

托管运行通常表示这个 MCP Server 由服务方环境承载,用户一般按页面提供的连接方式或授权流程接入,不需要在本地长期启动一个 MCP 进程

  1. 打开服务方连接页
  2. 完成授权或复制端点
  3. 在 MCP 客户端中连接
terminal

本地运行 / 其它方式

本地运行通常需要用户在自己的电脑或服务器上安装依赖,把 server_config 复制到 MCP 客户端,并按 env_schema 补齐环境变量、密钥或其它配置

  1. 复制 server_config
  2. 安装所需依赖
  3. 补齐环境变量后重启客户端