这是一个将 FastMCP 集成到 ROS 2 中的服务器项目。借助该项目,你能够使用 Claude 来控制 ROS 2 机器人,为机器人控制提供了新的方式和可能。
本项目可让你使用 Claude 控制 ROS 2 机器人,以下是快速开始的步骤。
/cmd_vel 主题消息以控制机器人的运动。git clone https://github.com/kakimochi/ros2-mcp-server.git
pip install -r requirements.txt
ros2-mcp-server.py 中的 mcp_port 为你的 MCP 端口(默认为 1234)。python ros2-mcp-server.py
Please make the robot move forward at 0.2 m/s for 5 seconds.
ros2-mcp-server.pyimport 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()
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 仓库。