WendyOS Docs
Robotics

Wendy for ROS 2

Inspect and debug live ROS 2 systems on a WendyOS device from the CLI — nodes, topics, services, parameters, rosbags, and more, with no SSH.

wendy device ros2 brings the full ros2 command-line experience to a remote device. List nodes and topics, echo messages, watch publish rates, render the connectivity graph, read and set parameters, and record rosbags — all from your machine, over the same secure connection the CLI already uses.

Standard, upstream ROS 2. WendyOS runs real ROS 2 from stock containers — Humble by default, configurable per app. Choose your middleware with frameworks.ros2.rmw: CycloneDDS (default), Fast DDS, RTI Connext, or Gurum.

How it works

The agent discovers ROS 2 app containers (those deployed with a frameworks.ros2 config in wendy.json) and starts a CLI sidecar in the same DDS domain. Your ros2 commands run inside that sidecar over gRPC.

No SSH, no source /opt/ros/<distro>/setup.bash, and no extra ports. If a device runs apps across multiple RMW implementations (for example CycloneDDS and Fast DDS), results are tagged with the RMW they came from, such as [cyclonedds].

Prerequisites

  • A ROS 2 app running on the device. See Multi-app deployments for a complete talker/listener stack and the host-networking entitlement DDS discovery needs.
  • A device selected as your default (or pass --device). See Discovering devices.

Every subcommand accepts --domain to override the ROS_DOMAIN_ID. By default it is read from the app's ROS 2 config, so you rarely need to set it.

Explore the graph

List what's running and how it's connected:

# Running nodes
wendy device ros2 nodes

# Topics (add --all for publisher/subscriber counts)
wendy device ros2 topics
wendy device ros2 topics --all

# Type, endpoints, and QoS for a single topic
wendy device ros2 topic info /chatter

# Services
wendy device ros2 services

Render the node/topic connectivity graph as ASCII, or as Graphviz dot to pipe into your own tooling:

wendy device ros2 graph
wendy device ros2 graph --format dot

Watch live data

Stream deserialized messages from a topic, optionally stopping after a fixed count:

# Stream until ctrl-c
wendy device ros2 echo /chatter

# Stop after 10 messages
wendy device ros2 echo /chatter --count 10

Monitor a topic's publish rate:

wendy device ros2 hz /chatter

Parameters

Read parameters across the whole system or a single node, and change them live — no restart required:

# List all parameters (or just one node's)
wendy device ros2 params
wendy device ros2 params --node /talker

# Get and set a single parameter
wendy device ros2 param get /talker use_sim_time
wendy device ros2 param set /talker use_sim_time true

Call a service

wendy device ros2 call /reset std_srvs/srv/Empty

Pass a request payload as the optional third argument when the service type needs one.

Record rosbags

Record topics to a bag on the device, list what's been recorded, and pull a bag back to your machine:

# Record specific topics (ctrl-c to stop and finalize)
wendy device ros2 bag record /camera/image_raw /imu

# Optionally name the bag (defaults to an auto-named, timestamped bag)
wendy device ros2 bag record /scan --output drive-test

# List bags on the device
wendy device ros2 bag list

# Download a bag to a local directory
wendy device ros2 bag download drive-test ./local-bags

Health checks

Run ros2 doctor against the device's ROS 2 environment:

wendy device ros2 doctor

Anything else

For any ros2 subcommand not wrapped above, use the raw passthrough. Flags meant for Wendy (like --domain) go before the ros2 command word; everything after is handed straight to ros2:

wendy device ros2 exec topic echo /chatter --once
wendy device ros2 --domain 42 exec node info /talker

Visualize in Foxglove

To see this data in real time on plots and panels, bridge the device's topics into Foxglove Studio with Wendy for Foxglove.

On this page