This page gives short answers that you can copy for common robotics tasks. Each example assumes a constructed client:

Publish a telemetry stream

Open one track per topic and write raw CDR. Delivery is best-effort by default. This is good for high-rate pose / odometry, where the freshest sample wins.

Send a teleop command

Commands go cloud → robot on robot/<id>/ctl. Use the reliable lane so the network cannot drop a stop or a goal.

Subscribe to a robot’s telemetry from the cloud

The callback receives the raw CDR and the wire type name. Check the type name before you decode.

Have the robot receive commands

On the robot (or the on-robot bridge), subscribe to the command track. Apply each message to the local actuator stack.

Pick the right QoS lane

Use reliable for data that must arrive: commands, maps, goals. Use best-effort for high-rate sensors, where low latency is more important than completeness.

Latch a value for late subscribers

transient_local makes the relay retain the last group(s). A dashboard that connects later immediately gets the current value. This behavior is the same as a latched / retained message.

Override priority per message

The QoS reliability sets a default send priority. Override it on a single write to move an urgent frame ahead of the queue (0 highest, 255 lowest).

Demux across languages

The type-name prefix lets a Python publisher and a TypeScript subscriber agree with no schema registry. Publish from Python:
The TypeScript dashboard above receives ("nav_msgs/msg/Odometry", cdr) unchanged.

Fan multiple topics into one dashboard

One client can hold many subscriptions. They all use the single QUIC session.

Subscribe to many robots from one process

Construct one client per robot. Each client opens its own session and namespace.

Bridge a local ROS 2 topic onto the mesh

Subscribe to the local graph. Forward raw CDR to a telemetry track. The Python example below uses rclpy serialization:

Bridge a command back onto the local graph

This is the other direction: subscribe to the MoQT command track and re-publish onto local DDS. Check the type name so the bridge drops messages with schema drift and does not mis-decode them.

Tune the late-join window

depth limits how many recent groups the relay holds for a late subscriber. Set it to match your ROS 2 keep-last history.

Shut down cleanly

Close publications and subscriptions, then close the client. This closes the QUIC session.