# Send ROS to your agent
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
## Fast path
- Download the package from Yavira.
- Extract it into a folder your agent can access.
- Paste one of the prompts below and point your agent at the extracted folder.
## Suggested prompts
### New install

```text
I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete.
```
### Upgrade existing

```text
I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run.
```
## Machine-readable fields
```json
{
  "schemaVersion": "1.0",
  "item": {
    "slug": "ros-skill",
    "name": "ROS",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/lpigeon/ros-skill",
    "canonicalUrl": "https://clawhub.ai/lpigeon/ros-skill",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadUrl": "/downloads/ros-skill",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=ros-skill",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "packageFormat": "ZIP package",
    "primaryDoc": "SKILL.md",
    "includedAssets": [
      "references/COMMANDS.md",
      "tests/test_ros_cli.py",
      "README.md",
      "examples/sensor-monitor.md",
      "examples/turtlesim.md",
      "scripts/ros_cli.py"
    ],
    "downloadMode": "redirect",
    "sourceHealth": {
      "source": "tencent",
      "slug": "ros-skill",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-07T20:22:18.719Z",
      "expiresAt": "2026-05-14T20:22:18.719Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=ros-skill",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=ros-skill",
        "contentDisposition": "attachment; filename=\"ros-skill-1.0.1.zip\"",
        "redirectLocation": null,
        "bodySnippet": null,
        "slug": "ros-skill"
      },
      "scope": "item",
      "summary": "Item download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this item.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/ros-skill"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    }
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/ros-skill",
    "downloadUrl": "https://openagent3.xyz/downloads/ros-skill",
    "agentUrl": "https://openagent3.xyz/skills/ros-skill/agent",
    "manifestUrl": "https://openagent3.xyz/skills/ros-skill/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/ros-skill/agent.md"
  }
}
```
## Documentation

### ROS Skill

Controls and monitors ROS/ROS2 robots via rosbridge WebSocket.

Architecture: Agent → ros_cli.py → rosbridge (WebSocket :9090) → ROS/ROS2 Robot

All commands output JSON. Errors contain {"error": "..."}.

For full command reference with arguments, options, and output examples, see references/COMMANDS.md.

### 1. Install dependency

pip install websocket-client

### 2. Launch rosbridge on the robot

ROS 1:

sudo apt install ros-${ROS_DISTRO}-rosbridge-server
roslaunch rosbridge_server rosbridge_websocket.launch

ROS 2:

sudo apt install ros-${ROS_DISTRO}-rosbridge-server
ros2 launch rosbridge_server rosbridge_websocket_launch.xml

### Important: Always Connect First

Before any operation, test connectivity:

python {baseDir}/scripts/ros_cli.py connect
python {baseDir}/scripts/ros_cli.py --ip <ROBOT_IP> connect

### Global Options

FlagDefaultDescription--ip IP127.0.0.1Rosbridge IP address--port PORT9090Rosbridge port number--timeout SECONDS5.0Connection and request timeout

### Command Quick Reference

CategoryCommandDescriptionConnectionconnectTest rosbridge connectivity (ping, port, WebSocket)ConnectionversionDetect ROS version and distroTopicstopics listList all active topics with typesTopicstopics type <topic>Get message type of a topicTopicstopics details <topic>Get topic publishers/subscribersTopicstopics message <msg_type>Get message field structureTopicstopics subscribe <topic> <msg_type>Subscribe and receive messagesTopicstopics publish <topic> <msg_type> <json>Publish a message to a topicTopicstopics publish-sequence <topic> <msg_type> <msgs> <durs>Publish message sequenceServicesservices listList all available servicesServicesservices type <service>Get service typeServicesservices details <service>Get service request/response fieldsServicesservices call <service> <type> <json>Call a serviceNodesnodes listList all active nodesNodesnodes details <node>Get node topics/servicesParamsparams list <node>List node parameters (ROS 2)Paramsparams get <node:param>Get parameter value (ROS 2)Paramsparams set <node:param> <value>Set parameter value (ROS 2)Actionsactions listList action servers (ROS 2)Actionsactions details <action>Get action goal/result/feedback fields (ROS 2)Actionsactions send <action> <type> <json>Send action goal (ROS 2)

### connect

python {baseDir}/scripts/ros_cli.py connect
python {baseDir}/scripts/ros_cli.py --ip <ROBOT_IP> connect

### version

python {baseDir}/scripts/ros_cli.py version

### topics list / type / details / message

python {baseDir}/scripts/ros_cli.py topics list
python {baseDir}/scripts/ros_cli.py topics type /turtle1/cmd_vel
python {baseDir}/scripts/ros_cli.py topics details /turtle1/cmd_vel
python {baseDir}/scripts/ros_cli.py topics message geometry_msgs/Twist

### topics subscribe

Without --duration: returns first message. With --duration: collects multiple messages.

python {baseDir}/scripts/ros_cli.py topics subscribe /turtle1/pose turtlesim/Pose
python {baseDir}/scripts/ros_cli.py topics subscribe /odom nav_msgs/Odometry --duration 10 --max-messages 50
python {baseDir}/scripts/ros_cli.py topics subscribe /scan sensor_msgs/LaserScan --timeout 10

### topics publish

Without --duration: single-shot. With --duration: publishes repeatedly at --rate Hz. Use --duration for velocity commands — most robot controllers stop if they don't receive continuous cmd_vel messages.

# Single-shot
python {baseDir}/scripts/ros_cli.py topics publish /trigger std_msgs/Empty '{}'

# Move forward 3 seconds (velocity — use --duration)
python {baseDir}/scripts/ros_cli.py topics publish /cmd_vel geometry_msgs/Twist \\
  '{"linear":{"x":1.0,"y":0,"z":0},"angular":{"x":0,"y":0,"z":0}}' --duration 3

# Rotate left 2 seconds
python {baseDir}/scripts/ros_cli.py topics publish /cmd_vel geometry_msgs/Twist \\
  '{"linear":{"x":0,"y":0,"z":0},"angular":{"x":0,"y":0,"z":0.5}}' --duration 2

# Stop
python {baseDir}/scripts/ros_cli.py topics publish /cmd_vel geometry_msgs/Twist \\
  '{"linear":{"x":0,"y":0,"z":0},"angular":{"x":0,"y":0,"z":0}}'

Options: --duration SECONDS, --rate HZ (default 10)

### topics publish-sequence

Publish a sequence of messages, each repeated at --rate Hz for its corresponding duration. Arrays must have the same length.

# Forward 3s then stop
python {baseDir}/scripts/ros_cli.py topics publish-sequence /cmd_vel geometry_msgs/Twist \\
  '[{"linear":{"x":1.0,"y":0,"z":0},"angular":{"x":0,"y":0,"z":0}},{"linear":{"x":0,"y":0,"z":0},"angular":{"x":0,"y":0,"z":0}}]' \\
  '[3.0, 0.5]'

# Draw a square (turtlesim)
python {baseDir}/scripts/ros_cli.py topics publish-sequence /turtle1/cmd_vel geometry_msgs/Twist \\
  '[{"linear":{"x":2},"angular":{"z":0}},{"linear":{"x":0},"angular":{"z":1.5708}},{"linear":{"x":2},"angular":{"z":0}},{"linear":{"x":0},"angular":{"z":1.5708}},{"linear":{"x":2},"angular":{"z":0}},{"linear":{"x":0},"angular":{"z":1.5708}},{"linear":{"x":2},"angular":{"z":0}},{"linear":{"x":0},"angular":{"z":1.5708}},{"linear":{"x":0},"angular":{"z":0}}]' \\
  '[1,1,1,1,1,1,1,1,0.5]'

Options: --rate HZ (default 10)

### services list / type / details

python {baseDir}/scripts/ros_cli.py services list
python {baseDir}/scripts/ros_cli.py services type /spawn
python {baseDir}/scripts/ros_cli.py services details /spawn

### services call

python {baseDir}/scripts/ros_cli.py services call /reset std_srvs/Empty '{}'
python {baseDir}/scripts/ros_cli.py services call /spawn turtlesim/Spawn \\
  '{"x":3.0,"y":3.0,"theta":0.0,"name":"turtle2"}'
python {baseDir}/scripts/ros_cli.py services call /turtle1/set_pen turtlesim/srv/SetPen \\
  '{"r":255,"g":0,"b":0,"width":3,"off":0}'

### nodes list / details

python {baseDir}/scripts/ros_cli.py nodes list
python {baseDir}/scripts/ros_cli.py nodes details /turtlesim

### params list / get / set (ROS 2 only)

Uses node:param_name format from params list output.

python {baseDir}/scripts/ros_cli.py params list /turtlesim
python {baseDir}/scripts/ros_cli.py params get /turtlesim:background_r
python {baseDir}/scripts/ros_cli.py params set /turtlesim:background_r 255

### actions list / details / send (ROS 2 only)

python {baseDir}/scripts/ros_cli.py actions list
python {baseDir}/scripts/ros_cli.py actions details /turtle1/rotate_absolute
python {baseDir}/scripts/ros_cli.py actions send /turtle1/rotate_absolute \\
  turtlesim/action/RotateAbsolute '{"theta":3.14}'

### 1. Explore a Robot System

python {baseDir}/scripts/ros_cli.py --ip <ROBOT_IP> connect
python {baseDir}/scripts/ros_cli.py --ip <ROBOT_IP> version
python {baseDir}/scripts/ros_cli.py --ip <ROBOT_IP> topics list
python {baseDir}/scripts/ros_cli.py --ip <ROBOT_IP> nodes list
python {baseDir}/scripts/ros_cli.py --ip <ROBOT_IP> services list
python {baseDir}/scripts/ros_cli.py --ip <ROBOT_IP> topics type /cmd_vel
python {baseDir}/scripts/ros_cli.py --ip <ROBOT_IP> topics message geometry_msgs/Twist
python {baseDir}/scripts/ros_cli.py --ip <ROBOT_IP> actions list
python {baseDir}/scripts/ros_cli.py --ip <ROBOT_IP> params list /robot_node

### 2. Move a Robot

Always check the message structure first, then publish movement, and always stop after.

python {baseDir}/scripts/ros_cli.py topics message geometry_msgs/Twist
python {baseDir}/scripts/ros_cli.py topics publish-sequence /cmd_vel geometry_msgs/Twist \\
  '[{"linear":{"x":1.0,"y":0,"z":0},"angular":{"x":0,"y":0,"z":0}},{"linear":{"x":0,"y":0,"z":0},"angular":{"x":0,"y":0,"z":0}}]' \\
  '[2.0, 0.5]'

### 3. Read Sensor Data

python {baseDir}/scripts/ros_cli.py topics type /scan
python {baseDir}/scripts/ros_cli.py topics message sensor_msgs/LaserScan
python {baseDir}/scripts/ros_cli.py topics subscribe /scan sensor_msgs/LaserScan --timeout 3
python {baseDir}/scripts/ros_cli.py topics subscribe /odom nav_msgs/Odometry --duration 10 --max-messages 50

### 4. Use Services

python {baseDir}/scripts/ros_cli.py services list
python {baseDir}/scripts/ros_cli.py services details /spawn
python {baseDir}/scripts/ros_cli.py services call /spawn turtlesim/Spawn \\
  '{"x":3.0,"y":3.0,"theta":0.0,"name":"turtle2"}'

### 5. ROS 2 Actions

python {baseDir}/scripts/ros_cli.py actions list
python {baseDir}/scripts/ros_cli.py actions details /turtle1/rotate_absolute
python {baseDir}/scripts/ros_cli.py actions send /turtle1/rotate_absolute \\
  turtlesim/action/RotateAbsolute '{"theta":1.57}'

### 6. Change Parameters (ROS 2)

python {baseDir}/scripts/ros_cli.py params list /turtlesim
python {baseDir}/scripts/ros_cli.py params get /turtlesim:background_r
python {baseDir}/scripts/ros_cli.py params set /turtlesim:background_r 255
python {baseDir}/scripts/ros_cli.py params set /turtlesim:background_g 0
python {baseDir}/scripts/ros_cli.py params set /turtlesim:background_b 0

### Safety Notes

Destructive commands (can move the robot or change state):

topics publish / topics publish-sequence — sends movement or control commands
services call — can reset, spawn, kill, or change robot state
params set — modifies runtime parameters
actions send — triggers robot actions (rotation, navigation, etc.)

Always stop the robot after movement. The last message in any publish-sequence should be all zeros:

{"linear":{"x":0,"y":0,"z":0},"angular":{"x":0,"y":0,"z":0}}

Always check JSON output for errors before proceeding.

### Troubleshooting

ProblemCauseSolutionConnection refusedrosbridge not runningStart rosbridge: ros2 launch rosbridge_server rosbridge_websocket_launch.xmlTimeout errorsSlow network or large dataIncrease timeout: --timeout 10 or --timeout 30No topics foundROS nodes not runningEnsure nodes are launched and workspace is sourcedEmpty topic listrosapi not availableVerify rosbridge includes rosapi (default in standard install)Parameter commands failUsing ROS 1params commands only work with ROS 2Action commands failUsing ROS 1actions commands only work with ROS 2Invalid JSON errorMalformed messageValidate JSON before passing (watch for single vs double quotes)Subscribe timeoutNo publisher on topicCheck topics details to verify publishers existpublish-sequence length errorArray mismatchmessages and durations arrays must have the same length
## Trust
- Source: tencent
- Verification: Indexed source record
- Publisher: lpigeon
- Version: 1.0.1
## Source health
- Status: healthy
- Item download looks usable.
- Yavira can redirect you to the upstream package for this item.
- Health scope: item
- Reason: direct_download_ok
- Checked at: 2026-05-07T20:22:18.719Z
- Expires at: 2026-05-14T20:22:18.719Z
- Recommended action: Download for OpenClaw
## Links
- [Detail page](https://openagent3.xyz/skills/ros-skill)
- [Send to Agent page](https://openagent3.xyz/skills/ros-skill/agent)
- [JSON manifest](https://openagent3.xyz/skills/ros-skill/agent.json)
- [Markdown brief](https://openagent3.xyz/skills/ros-skill/agent.md)
- [Download page](https://openagent3.xyz/downloads/ros-skill)