Skip to content

feat: add ROS 2 Lyrical Luth (LTS) distro support#190

Open
YuanYuYuan wants to merge 12 commits into
mainfrom
dev/lyrical
Open

feat: add ROS 2 Lyrical Luth (LTS) distro support#190
YuanYuYuan wants to merge 12 commits into
mainfrom
dev/lyrical

Conversation

@YuanYuYuan
Copy link
Copy Markdown
Collaborator

@YuanYuYuan YuanYuYuan commented May 25, 2026

Summary

Adds ROS 2 Lyrical Luth (LTS, May 2026–May 2031) as a supported distro alongside Humble, Jazzy, and Kilted.

Key Changes

Distro support

  • Feature flag lyrical, DistroDefaults::lyrical(), and codegen assets for Lyrical
  • Nix overlay bump for Lyrical packages; lyrical added to the scripts DISTROS list

RMW compatibility

  • rmw_zenoh-rs: add ..Default::default() to rmw_subscription_t initialisers to fill the new is_cft_supported field introduced in Lyrical's RMW headers
  • #[allow(clippy::needless_update)] on rmw_create_subscription / rmw_destroy_subscription to silence the lint on Jazzy/Kilted where all fields are already explicit

Lyrical demo_nodes interface migration

  • Lyrical's demo_nodes_cpp talker uses example_interfaces/msg/String (not std_msgs/msg/String) and action_tutorials_cpp uses example_interfaces/action/Fibonacci (not action_tutorials_interfaces)
  • listener.rs, talker.rs: #[cfg(feature = "lyrical")] gate selects the right message type
  • fibonacci_action_client.rs, fibonacci_action_server.rs: extend existing #[cfg(feature = "kilted")] guards to #[cfg(any(feature = "kilted", feature = "lyrical"))]
  • Same extension in hiroz-tests/tests/action_interop.rs
  • type_description_interop.rs: distro-aware TALKER_TYPE_NAME / TALKER_TYPE_HASH constants so tests query the correct type from the Lyrical talker

Test infrastructure

  • hiroz-console/tests/common/mod.rs: replace PID-derived NEXT_PORT with bind(:0) OS-assigned ports, matching hiroz-tests, to prevent port collisions when test binaries run back-to-back on the same CI runner
  • CI: bump pureRust-checks and <distro>-ros cache keys to -v2 to evict a corrupted pyo3-build-config cache entry that caused persistent build failures

Lyrical distro properties

  • LTS until May 2031
  • rmw_zenoh_cpp 0.10.4 / zenoh-c 1.8.0 (wire-compatible with hiroz's Zenoh 1.9.0)
  • Type hash format: RIHS01 (same as Jazzy/Kilted)
  • example_interfaces replaces std_msgs / action_tutorials_interfaces in demo nodes
  • New is_cft_supported field in the rmw_subscription_s C struct

@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 25, 2026

PR Preview Action v1.8.1

QR code for preview link

🚀 View preview at
https://ZettaScaleLabs.github.io/hiroz/pr-preview/pr-190/

Built to branch gh-pages at 2026-05-26 05:10 UTC.
Preview will be ready when the GitHub Pages deployment is complete.

YuanYuYuan added 11 commits May 25, 2026 23:49
… API

Lyrical's rmw_subscription_s adds is_cft_supported (Content Filtered Topic)
alongside the existing is_cft_enabled. Use ..Default::default() in struct
initializers to stay forward-compatible with any future field additions.

Also replace the fragile sed-based Lyrical config workaround with a minimal
known-good ZENOH_SESSION_CONFIG_URI approach that bypasses all config parse
issues in ros-lyrical-rmw-zenoh-cpp 0.10.x.
Lyrical updated demo_nodes_cpp and action_tutorials_cpp to use
example_interfaces instead of std_msgs/action_tutorials_interfaces.
Update the cfg guards in talker/listener/fibonacci examples to also
include the lyrical feature flag (same pattern as kilted).

Also:
- Add #[allow(clippy::needless_update)] on the two rmw_subscription_t
  initializers in rmw-zenoh-rs to suppress needless_update lint on
  Jazzy/Kilted (where all fields are explicit; Lyrical needs the
  ..Default::default() to cover the new is_cft_supported field).
- Bump rust-cache shared-key suffix to -v2 to evict a corrupted
  pyo3-build-config cache entry that has been failing every CI run.
Lyrical's demo_nodes_cpp uses example_interfaces/msg/String (not
std_msgs/msg/String) and example_interfaces/action/Fibonacci (not
action_tutorials_interfaces). Update type_description_interop.rs to use
distro-aware TALKER_TYPE_NAME/TALKER_TYPE_HASH constants, and extend
action_interop.rs kilted cfg guards to also cover lyrical.
Replaces the PID-derived NEXT_PORT counter with bind(:0) port allocation,
matching the hiroz-tests TestRouter. Prevents port conflicts when
hiroz-tests and hiroz-console test binaries run sequentially on the same
runner and happen to derive the same base port from their PIDs.
The Lyrical rmw_zenoh_cpp (v0.10.4) explicitly uses
transport/shared_memory/transport_optimization/pool_size and
message_size_threshold in its C++ source and ships a config that includes
transport_optimization — the bundled zenoh-c 1.8.0 fully supports these
fields. The ZENOH_SESSION_CONFIG_URI minimal-config workaround was based on
a wrong diagnosis and strips away all ROS-tuned transport settings.
Update all documentation that lists supported ROS 2 distributions to
include Lyrical (May 2026–May 2031 LTS) alongside Jazzy, Kilted, and
Rolling. Covers distro-compatibility, feature-flags, nix, building,
quick-start, bridge, interop, rmw-zenoh-rs, bindings, and
actions-advanced cfg guard examples.
Add /opt/ros/lyrical to hiroz-msgs build.rs fallback path list so
message discovery works with a local Lyrical ROS install. Add lyrical
feature check to test-pure-rust.nu check-distro-features step.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant