ROS2 - QoS

Posted by Rico's Nerd Cluster on January 13, 2025

Reliability

Reliability controls what happens while publisher and subscriber are already matched and communicating.

Reliability Meaning Behavior Typical use
reliable Try to guarantee delivery DDS tracks missing samples and retries delivery when possible. Can increase latency or block/backpressure under packet loss. Commands, maps, important state, /tf_static
best_effort Send without guaranteed delivery Messages may be dropped. Subscriber gets what arrives. Usually lower latency and better for lossy/high-rate streams. LiDAR, camera, IMU, high-rate sensor data
Publisher reliability Subscriber reliability Compatible? Result
reliable reliable Yes Guaranteed delivery attempted
reliable best_effort Yes Subscriber accepts best-effort-style delivery
best_effort best_effort Yes Drops are allowed
best_effort reliable No They do not communicate

Durability

Durability controls what happens for late joiners, meaning subscribers that appear after the publisher already sent data.

Durability Meaning Behavior Typical use
volatile Do not retain old samples A new subscriber only receives future messages. Anything already published is gone. Most live sensor streams, normal topics
transient_local Publisher retains recent samples locally A late subscriber can receive stored samples from the publisher, subject to history/depth settings. /tf_static, latched-style config/state topics
Publisher durability Subscriber durability Compatible? Late joiner gets old samples?
transient_local transient_local Yes Yes, if sample is still retained
transient_local volatile Yes Usually communicates, but subscriber is not asking for retained history
volatile volatile Yes No
volatile transient_local No They do not communicate