机器人模拟器接口服务

Webots MCP Server是一个通用的机器人模拟器接口服务,为Claude Code和Cursor提供实时访问机器人状态、传感器、摄像头和模拟控制的功能。

  • by luisfelipesena
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 luisfelipesena/webots-youbot-mcp

使用说明

Webots MCP服务器

通用MCP(模型上下文协议)桥 任何 Webots机器人模拟。为Claude Code和Cursor提供对机器人状态、传感器、摄像头和仿真控制的实时访问。

快速入门(3行)

from mcp_bridge import MCPBridge

bridge = MCPBridge(robot)  # Auto-detects Supervisor
bridge.publish({"pose": [x, y, theta], "mode": "navigate"})

就是这样!Claude Code现在可以完全了解您的模拟。

安装

选项1:克隆(推荐)

git clone https://github.com/luisfelipesena/webots-youbot-mcp.git
pip install mcp pydantic

选项2:复制文件

复制 mcp_bridge.py 到您的控制器目录。

Claude代码集成

添加到您的项目 .mcp.json:

{
  "mcpServers": {
    "webots": {
      "command": "python",
      "args": ["/path/to/webots-youbot-mcp/webots_youbot_mcp_server.py"],
      "cwd": "/path/to/webots-youbot-mcp"
    }
  }
}

光标集成

相同的配置-光标读取 .mcp.json 自动。

控制器集成

最小示例

import sys
sys.path.insert(0, "/path/to/webots-youbot-mcp")
from mcp_bridge import MCPBridge

class MyController:
    def __init__(self):
        self.robot = Robot()  # or Supervisor()
        self.mcp = MCPBridge(self.robot)

    def run(self):
        while self.robot.step(32) != -1:
            # Your logic here
            self.mcp.publish({
                "pose": [x, y, theta],
                "mode": self.mode,
                "sensors": {"front": 1.2, "left": 0.8},
            })
            self.mcp.get_command()  # Handle simulation control

高级:世界重载检测

def reset_state():
    """Called automatically when world reloads"""
    self.mode = "search"
    self.collected = 0

bridge = MCPBridge(robot)
bridge.on_reload(reset_state)

# In main loop:
bridge.detect_reload()  # Triggers callback if reload detected

高级:自定义命令

def handle_custom(cmd):
    if cmd.get("action") == "my_action":
        print(f"Custom command: {cmd}")

bridge.register_command("my_action", handle_custom)

可用的MCP工具

工具 说明
webots_get_robot_state 获取当前机器人状态(姿势、模式等)
webots_get_sensors 从状态获取传感器数据
webots_get_camera 获取最新的相机帧路径
webots_get_logs 获取控制器日志
webots_simulation_control 暂停/恢复/重置/重新加载/步进/快速
webots_world_reload 强制重新加载世界(macOS:osascript)
webots_world_reset 将模拟重置为初始状态
webots_reset_controller_state 重置控制器内部状态
webots_take_screenshot 捕获模拟视图
webots_monitor 监控机器人N秒
webots_get_full_state 完成状态转储

强制重新加载(macOS)

当控制器卡住时,使用osascript强制重新加载:

# From MCP:
webots_world_reload(force=True)  # Sends Ctrl+Shift+R to Webots
webots_world_reset(force=True)   # Sends Ctrl+Shift+T to Webots

需要“系统首选项”中终端/IDE的访问权限。

数据目录结构

data/
├── status.json      # Robot state (written by controller)
├── commands.json    # Commands from MCP
├── camera/          # Camera frames
├── screenshots/     # Simulation screenshots
└── logs/            # Controller logs

MCPBridge API参考

bridge = MCPBridge(robot, data_dir=None, throttle_interval=5)

# Core
bridge.publish(state_dict)          # Publish state (throttled)
bridge.publish(state, force=True)   # Publish immediately
bridge.get_command()                # Check for MCP commands

# Reload Detection
bridge.on_reload(callback)          # Register reload callback
bridge.detect_reload()              # Check if world reloaded

# Custom Commands
bridge.register_command(action, handler)

# Utilities
bridge.log(message)                 # Write to log file
bridge.save_camera_frame(camera)    # Save camera image

全球安装(所有项目)

增添 ~/.config/claude/mcp.json (克劳德代码)或全局光标设置:

{
  "mcpServers": {
    "webots": {
      "command": "python",
      "args": ["/absolute/path/to/webots_youbot_mcp_server.py"],
      "cwd": "/absolute/path/to/webots-youbot-mcp"
    }
  }
}

需求

  • Python 3.10+
  • mcp >= 1.0.0
  • pydantic >= 2.0.0
  • Pillow (可选,适用于相机框架)

许可证

麻省理工学院