ros2 topic info -v prints incorrect QoS info for macOS + CycloneDDS
See original GitHub issueBug report
Required Info:
- Operating System:
- macOS 10.14 Mojave
- Installation type:
- Fat binary from https://ci.ros2.org/view/packaging/
- Version or commit hash:
- Foxy prerelease
- DDS implementation:
- CycloneDDS
- Client library (if applicable):
- N/A
Steps to reproduce issue
ros2 topic info -v
does not print correct QoS information for a topic.
➜ ~ ros2 topic pub /talker --qos-durability volatile std_msgs/String "data: Hello World volatile"
➜ ~ ros2 topic info -v /talker
Type: std_msgs/msg/String
Publisher count: 1
Node name: _CREATED_BY_BARE_DDS_APP_
Node namespace: _CREATED_BY_BARE_DDS_APP_
Topic type: std_msgs/msg/String
Endpoint type: PUBLISHER
GID: a3.6b.10.01.32.8a.d9.a4.bb.0c.3b.46.00.00.08.03.00.00.00.00.00.00.00.00
QoS profile:
Reliability: RMW_QOS_POLICY_RELIABILITY_RELIABLE
Durability: RMW_QOS_POLICY_DURABILITY_TRANSIENT_LOCAL
Lifespan: 2147483651294967295 nanoseconds
Deadline: 2147483651294967295 nanoseconds
Liveliness: RMW_QOS_POLICY_LIVELINESS_AUTOMATIC
Liveliness lease duration: 2147483651294967295 nanoseconds
Subscription count: 0
Expected behavior
Durability value printed should be: Durability: RMW_QOS_POLICY_DURABILITY_VOLATILE
Actual behavior
Durability value printed is: Durability: RMW_QOS_POLICY_DURABILITY_TRANSIENT_LOCAL
Additional information
These commands appear to work as expected on Linux and Windows for CycloneDDS.
Issue Analytics
- State:
- Created 3 years ago
- Comments:38 (7 by maintainers)
Top Results From Across the Web
ROS2 interoperability with native DDS - ROS Answers
I'm using cyclonedds and ROS2 Galactic, but I am open to anyone ... but no messages are printed. ros2 topic info --verbose gives:...
Read more >Understanding topics — ROS 2 Documentation
Goal: Use rqt_graph and command line tools to introspect ROS 2 topics. ... The previous tutorial provides some useful background information on nodes...
Read more >Galactic Geochelone (galactic) — ROS 2 Documentation
Externally configure QoS at start-up. Python point_cloud2 utilities available. RViz2 Time Panel. ros2 topic echo can print serialized data.
Read more >About Quality of Service settings — ROS 2 Documentation
QoS profiles can be specified for publishers, subscriptions, service servers and clients. A QoS profile can be applied independently to each instance of...
Read more >Humble Hawksbill - ROS Documentation
For information on the latest version, please have a look at Humble. ... macOS: amd64 ... ros2 topic pub now allows to set...
Read more >Top Related Medium Post
No results found
Top Related StackOverflow Question
No results found
Troubleshoot Live Code
Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start FreeTop Related Reddit Thread
No results found
Top Related Hackernoon Post
No results found
Top Related Tweet
No results found
Top Related Dev.to Post
No results found
Top Related Hashnode Post
No results found
Top GitHub Comments
@clalancette
Anyway, I think it’s time to pull
eProsima
in. I have created an issue on Fast-DDS.@iuhilnehc-ynos perhaps you need not do what I asked just now: after I published the comment, I realised that I could try this particular experiment of mixing a Cyclone DDS-based publisher with a Fast-RTPS-based ros2 cli. I get exactly the same result. That’s good news.
I’ve checked with Wireshark:
Cyclone only publishes QoS settings that are different from the default. In section 9.6.2.2.1 the DDSI-RTPS specification states that for parameters (e.g., durability QoS, a.k.a.
PID_DURABILITY
) missing from a discovery message, the default should be applied, and then references the DDS specification for the defaultwhich is
volatile
per section 2.1.3 of the DCPS spec, so Cyclone DDS is entirely correct:and Fast-RTPS or its RMW layer is misinterpreting the discovery data.
I suspect that when @fujitatomoya reproduced it, the ros2 daemon was running using Fast-RTPS. That one then stores the incorrect discovery data and regurgitates it to “ros2 topic info” even if that one is running Cyclone. Restarting the machine/container could easily have resulted in using Cyclone DDS for the daemon.
And if instead you use Cyclone DDS for the daemon, even Fast-RTPS gets it right: