Important
This project is undergoing a major re-architecture and migration to separate repos. Check back soon for updates, or reach out on X @irvinxyz to follow along.
Natural language control of ROS2 robots through messaging apps, powered by AI agents.
RosClaw connects OpenClaw to ROS2 (the Robot Operating System) through an intelligent plugin layer. Send a message on Telegram, WhatsApp, Discord, or Slack β the robot moves. Connect to your own robot or "lease" any robot registered into our portal globally. Each robot registers their own profile with capabilitie.
Whethere it's a cute desk robot or a humanoid robot, all you have to do is install our OpenClaw extension and run our ROS2 packakge.
User (WhatsApp/Telegram/Discord/Slack)
|
v
OpenClaw Gateway (AI Agent + Tools + Memory)
|
v RosClaw Plugin
rosbridge_server (WebSocket)
|
v ROS2 DDS
Robots: Nav2, MoveIt2, cameras, sensors
- A user sends a natural language message through any messaging app
- OpenClaw's AI agent receives the message and uses ROS2 tools registered by the RosClaw plugin
- The agent translates intent into ROS2 operations (topic publish, service call, action goal)
- The robot acts, and the agent streams feedback back to the chat
rosclaw/
βββ packages/
β βββ rosbridge-client/ # @rosclaw/rosbridge-client β TypeScript rosbridge WebSocket client
βββ extensions/
β βββ openclaw-plugin/ # @rosclaw/openclaw-plugin β Core OpenClaw extension
β βββ openclaw-canvas/ # @rosclaw/openclaw-canvas β Real-time dashboard (Phase 3)
βββ ros2_ws/src/
β βββ rosclaw_discovery/ # ROS2 capability auto-discovery node
β βββ rosclaw_msgs/ # Custom ROS2 message/service definitions
βββ docker/ # Docker Compose stack
βββ examples/ # Demo projects
- Node.js 20+
- pnpm 9+
- Docker (for simulation)
pnpm install
pnpm buildcd docker
docker compose upThis starts ROS2 + rosbridge + Gazebo. Then configure your OpenClaw instance to use the RosClaw plugin with ws://localhost:9090.
Send a message to your robot:
- "Move forward 1 meter" β publishes velocity to
/cmd_vel - "Navigate to the kitchen" β sends a Nav2 goal
- "What do you see?" β captures a camera frame
- "Check the battery" β reads
/battery_state /estopβ emergency stop (bypasses AI)
| Package | Description |
|---|---|
@rosclaw/rosbridge-client |
Standalone TypeScript client for the rosbridge WebSocket protocol |
@rosclaw/openclaw-plugin |
OpenClaw extension: tools, hooks, skills, commands for ROS2 control |
@rosclaw/openclaw-canvas |
Real-time robot dashboard (Phase 3) |
rosclaw_discovery |
ROS2 Python node for capability auto-discovery |
rosclaw_msgs |
Custom ROS2 message/service definitions |
The AI agent has access to these ROS2 tools:
| Tool | Description |
|---|---|
ros2_publish |
Publish messages to any ROS2 topic |
ros2_subscribe_once |
Read the latest message from a topic |
ros2_service_call |
Call a ROS2 service |
ros2_action_goal |
Send action goals with feedback (Phase 2) |
ros2_param_get/set |
Get/set ROS2 node parameters |
ros2_list_topics |
Discover available topics |
ros2_camera_snapshot |
Capture a camera frame |
pnpm install # Install dependencies
pnpm build # Build all packages
pnpm typecheck # Type-check without emitting
pnpm clean # Remove build artifactsApache-2.0