项目简介
本项目是一个基于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的事件循环,实现高效的操作。
安装步骤
- 克隆仓库: 打开终端,执行以下命令克隆项目代码:
git clone https://github.com/kakimochi/ros2-mcp-server.git cd ros2-mcp-server - 配置Python版本: 确保使用与ROS 2 Humble兼容的Python 3.10版本。项目已通过'.python-version'文件指定。可以使用'uv venv --python /usr/bin/python3.10'创建对应版本的虚拟环境。
- 激活虚拟环境: 进入虚拟环境,通常在项目目录下执行:
成功后,终端提示符前会显示 '(.venv)'。source .venv/bin/activate - 安装依赖: 在虚拟环境激活的状态下,使用 '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客户端向机器人发送控制命令了:
- 发送自然语言指令: 在LLM客户端中,可以直接用自然语言描述你希望机器人执行的动作,例如:
LLM应能理解此意图并通过MCP调用服务器提供的相应工具。Please make the robot move forward at 0.2 m/s for 5 seconds. - 直接调用工具: 如果客户端支持,你也可以直接指定调用 'move_robot' 工具,并提供其参数(线速度、角速度和持续时间)。参数格式通常是JSON,例如:
{ "linear": [0.2, 0.0, 0.0], "angular": [0.0, 0.0, 0.0], "duration": 5.0 } - 验证: 启动一个ROS 2模拟器(如TurtleBot3 with Gazebo)或连接到真实机器人,并使用 'ros2 topic echo /cmd_vel' 命令来监听机器人控制话题,确认服务器是否成功发布了Twist消息。服务器的日志也会显示命令的执行情况。
信息
分类
桌面与硬件