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 servicesRender 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 dotWatch 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 10Monitor a topic's publish rate:
wendy device ros2 hz /chatterParameters
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 trueCall a service
wendy device ros2 call /reset std_srvs/srv/EmptyPass 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-bagsHealth checks
Run ros2 doctor against the device's ROS 2 environment:
wendy device ros2 doctorAnything 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 /talkerVisualize 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.
Related
- Multi-app deployments — deploy a ROS 2
stack with
docker-compose.yml. - Entitlements — the host-network access ROS 2 discovery requires.