Requirements
- Target platform
- OpenClaw
- Install method
- Manual import
- Extraction
- Extract archive
- Prerequisites
- OpenClaw
- Primary doc
- SKILL.md
Controls ROS/ROS2 robots via rosbridge WebSocket CLI. Use when the user asks about ROS topics, services, nodes, parameters, actions, robot movement, sensor d...
Controls ROS/ROS2 robots via rosbridge WebSocket CLI. Use when the user asks about ROS topics, services, nodes, parameters, actions, robot movement, sensor d...
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
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.
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.
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.
pip install websocket-client
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
Before any operation, test connectivity: python {baseDir}/scripts/ros_cli.py connect python {baseDir}/scripts/ros_cli.py --ip <ROBOT_IP> connect
FlagDefaultDescription--ip IP127.0.0.1Rosbridge IP address--port PORT9090Rosbridge port number--timeout SECONDS5.0Connection and request timeout
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)
python {baseDir}/scripts/ros_cli.py connect python {baseDir}/scripts/ros_cli.py --ip <ROBOT_IP> connect
python {baseDir}/scripts/ros_cli.py version
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
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
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)
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)
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
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}'
python {baseDir}/scripts/ros_cli.py nodes list python {baseDir}/scripts/ros_cli.py nodes details /turtlesim
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
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}'
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
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]'
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
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"}'
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}'
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
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.
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
Code helpers, APIs, CLIs, browser automation, testing, and developer operations.
Largest current source with strong distribution and engagement signals.