项目简介

本项目是一个基于Python的服务器,它将Model Context Protocol (MCP) 与ROS 2集成。其主要目的是使AI助手(如支持MCP的LLM客户端)能够通过ROS 2话题控制机器人。服务器通过FastMCP框架处理来自MCP客户端的命令,并作为ROS 2节点运行,向'/cmd_vel'话题发布'geometry_msgs/Twist'消息来控制机器人的移动。

主要功能点

  • MCP框架集成: 利用FastMCP框架接收和处理来自MCP客户端(如Claude)的命令。
  • ROS 2原生支持: 作为ROS 2节点运行,能够直接发布机器人运动控制命令到'/cmd_vel'话题。
  • 基于时间的运动控制: 支持指定持续时间的机器人移动命令(例如:向前移动特定时间后停止)。
  • 异步处理: 结合FastMCP的异步能力和ROS 2的事件循环,实现高效的操作。

安装步骤

  1. 克隆仓库: 打开终端,执行以下命令克隆项目代码:
    git clone https://github.com/kakimochi/ros2-mcp-server.git
    cd ros2-mcp-server
  2. 配置Python版本: 确保使用与ROS 2 Humble兼容的Python 3.10版本。项目已通过'.python-version'文件指定。可以使用'uv venv --python /usr/bin/python3.10'创建对应版本的虚拟环境。
  3. 激活虚拟环境: 进入虚拟环境,通常在项目目录下执行:
    source .venv/bin/activate
    成功后,终端提示符前会显示 '(.venv)'。
  4. 安装依赖: 在虚拟环境激活的状态下,使用 'uv pip' 安装项目依赖:
    uv pip install -e .

服务器配置

要将此服务器与支持MCP的客户端(如Claude Desktop或Cline VSCode扩展)连接,需要进行如下配置。通常,这涉及在客户端的设置中添加一个新的MCP服务器。以下是需要配置的关键信息(具体界面和格式可能因客户端而异):

  • 服务器名称: 为此MCP服务器指定一个唯一的名称,例如 'ros2-mcp-server'。
  • 命令 (Command): 启动此服务器需要执行的程序。根据项目配置,这通常是 'uv'。
  • 参数 (Args): 传递给命令的参数列表。这需要指定项目的目录、运行环境设置和主程序路径。根据仓库的'README.md'示例,参数大致结构如下:
    • 指定工作目录参数,后跟项目的实际路径(例如:'/home/user/projects/ros2-mcp-server')。
    • 运行一个Bash脚本。
    • Bash脚本内容会先设置ROS 2的日志目录(例如到'/tmp'),然后 sourcing ROS 2的安装路径下的 'setup.bash' 文件(例如'/opt/ros/humble/setup.bash'),最后用Python 3执行服务器主脚本(例如'/path/to/ros2-mcp-server/ros2-mcp-server.py')。
    • 重要提示: 配置时,请务必将 '/path/to/ros2-mcp-server' 替换为你实际克隆仓库的完整路径。
  • 传输类型 (TransportType): 指定客户端与服务器通信的方式。本项目示例配置使用的是 'stdio'。
  • 其他可选配置如 'timeout', 'disabled', 'autoApprove' 等可根据客户端的说明进行设置。

配置完成后,保存并根据客户端提示重启或重新加载以使配置生效。

基本使用方法

MCP服务器配置并启动成功后,你就可以通过连接的LLM客户端向机器人发送控制命令了:

  1. 发送自然语言指令: 在LLM客户端中,可以直接用自然语言描述你希望机器人执行的动作,例如:
    Please make the robot move forward at 0.2 m/s for 5 seconds.
    LLM应能理解此意图并通过MCP调用服务器提供的相应工具。
  2. 直接调用工具: 如果客户端支持,你也可以直接指定调用 'move_robot' 工具,并提供其参数(线速度、角速度和持续时间)。参数格式通常是JSON,例如:
    {
      "linear": [0.2, 0.0, 0.0],
      "angular": [0.0, 0.0, 0.0],
      "duration": 5.0
    }
  3. 验证: 启动一个ROS 2模拟器(如TurtleBot3 with Gazebo)或连接到真实机器人,并使用 'ros2 topic echo /cmd_vel' 命令来监听机器人控制话题,确认服务器是否成功发布了Twist消息。服务器的日志也会显示命令的执行情况。

信息

分类

桌面与硬件