Skip to content

1.3.0

Latest

Choose a tag to compare

@github-actions github-actions released this 13 Jul 02:46
ed83b55

swift-ros2 1.3.0 — RCL everywhere

The native rcl/rmw backend now covers every platform it can reach: Apple (prebuilt CRos2Jazzy / CRos2JazzyZenoh xcframeworks — rmw baked per build variant) and Linux (new in this release: consume a system ROS 2 install via ROS2_RCL_PREFIX, with the rmw selected at runtime from the transport type — .zenoh(locator:)rmw_zenoh_cpp, .dds/.rclrmw_cyclonedds_cpp; one rmw per process). Windows RCL is deferred pending an official Jazzy-compatible rmw_zenoh_cpp Windows binary path (upstream supports Windows since Dec 2024; the distribution gap is recorded in docs/PARITY.md); Android stays on the wire path.

Verified, not just built: Linux latency (12/12 rcl-bench runs within the Apple W4 SLOs — publish p99 ≤ 171 µs, roundtrip p99 ≤ 379 µs @ 100 Hz on both rmws) and live field-level ros2 topic echo correctness on both rmws are recorded in the parity matrix, alongside the Apple 4-axis results (latency / 2×8h soak / correctness / on-device resource).

Deprecation notice: the pure-Swift wire path (SwiftROS2Zenoh.ZenohClient / SwiftROS2DDS.DDSClient and the wire codecs as a runtime transport) is deprecated as of this release and will be removed in 2.0.0. The umbrella .zenoh(locator:) / .dds(...) API is unchanged — it routes to the RCL backend where available and to the wire path elsewhere (Android; visionOS zenoh; Windows). @available(*, deprecated) annotations land in the next patch release; the wire codecs remain the golden-byte correctness oracle. Note that in builds where the zenoh-rmw variant is selected on Apple, the zenoh wire family is physically absent (symbol-collision carve-out), not merely deprecated.

Also in this release: a 68-finding health pass — multi-node publishing fixes (per-node /parameter_events, publisher recreate-after-close), refcounted process-global env slots for overlapping contexts, a TFMessage decode DoS guard, the rosidl empty-struct sentinel byte (std_msgs/Empty wire compatibility), four C-bridge memory fixes, SwiftROS2Messages test coverage 70.6% → 93.2%, and a documentation overhaul (docs/ARCHITECTURE.md, DocC).

What's Changed

  • chore(release): 1.2.0 — pin xcframework URLs + checksums by @youtalk in #118
  • feat(rcl): native RCL DDS backend — M0 build spike (xcframework + rcl_init smoke) by @youtalk in #119
  • feat(rcl): native RCL DDS backend — M1 P1 publish (sensor_msgs/Imu via rcl_publish_serialized_message) by @youtalk in #120
  • feat(rcl): native RCL DDS backend — M2 P2 serialization validation (Imu wire == rmw_serialize) by @youtalk in #121
  • feat(rcl): native RCL DDS backend — M3a typed rcl_publish (sensor_msgs/Imu) by @youtalk in #122
  • feat(rcl): native RCL DDS backend — M3b marshalling generator + sequence types by @youtalk in #123
  • fix(ci): make ci-rcl regen-drift guard self-contained by @youtalk in #124
  • feat(rcl): native RCL DDS backend — M3c full publish set + native macosx slice by @youtalk in #125
  • feat(rcl): native RCL DDS backend — M4 subscribe (wait-set thread + byte seam) by @youtalk in #126
  • feat(rcl): rcl-bench — typed rcl_publish vs wire-DDS benchmark harness (M5) by @youtalk in #127
  • feat(rcl): zenoh rmw variant — rcl + rmw_zenoh_cpp + zenoh-c on Apple (M9) by @youtalk in #128
  • feat(rcl): native RCL DDS backend — M7 services (srv registry + serialize-shim server/client) by @youtalk in #129
  • ci(rcl): promote ci-rcl to a per-PR check named CI (RCL) by @youtalk in #130
  • feat(rcl): M7 parameters — default node options + param round-trip verification by @youtalk in #131
  • feat(rcl): native RCL DDS backend — M8 actions (action registry + serialize-shim server/client) by @youtalk in #132
  • feat(parity): matrix infrastructure + W1 gap analysis by @youtalk in #133
  • feat(parity): parity-tool write-back (set/canonicalize) + canonical JSON + drift guard by @youtalk in #134
  • test(rcl): cross-backend byte-parity correctness oracle (Axis 3) by @youtalk in #135
  • feat(bench): SoakAnalysis — pure leak-verdict core for the soak harness by @youtalk in #137
  • feat(bench): rcl-soak endurance harness + rcl-bench LAN latency mode (Axes 1 & 2) by @youtalk in #138
  • feat(rcl): node.multi — bind each entity to its owning node by @youtalk in #139
  • feat(rcl): transport.dds — unicast/interface discovery on RCL backend by @youtalk in #140
  • feat(rcl): non-bundled serialized publish via route-b raw-CDR fallback (the blocker) by @youtalk in #141
  • feat(rcl): non-bundled serialized subscribe via route-b raw-CDR reader by @youtalk in #142
  • docs(parity): defer non-bundled srv/action (major -> minor, documented) by @youtalk in #143
  • feat(parity): AxisVerdict.na + W4 rubric + pre-mark n-a cells by @youtalk in #144
  • docs(parity): W4 latency results (Axis 1) by @youtalk in #145
  • docs(parity): W4 correctness results (Axis 3) by @youtalk in #146
  • docs(parity): W4 soak results (Axis 2) by @youtalk in #147
  • docs(parity): Axis 4 resource results — matrix pending-free by @youtalk in #148
  • fix(rcl): drop from shared discovery XML by @youtalk in #150
  • feat(rcl): runtime router plumbing — route .zenoh through rcl+rmw_zenoh (MZ1) by @youtalk in #151
  • feat(bench): zenoh backend + --locator for rcl-bench/rcl-soak, soak echo observability by @youtalk in #152
  • ci(rcl): zenoh-rmw variant leg + execute SwiftROS2RCLTests by @youtalk in #153
  • feat(rcl): expand marshal registry to all bundled-typesupport message types by @youtalk in #154
  • feat(rcl): bundle tf2_msgs, audio_common_msgs, point_cloud_interfaces typesupport by @youtalk in #158
  • docs(parity): MZ3 zenoh-rcl verification results + matrix honesty pass by @youtalk in #159
  • feat(rcl): fail-loud zenoh variant — route-b gate, AMENT prefix synthesis, .rcl rejection by @youtalk in #155
  • ci(release): build + attach CRos2Jazzy(.Zenoh) xcframeworks on release tags by @youtalk in #157
  • fix(rcl): enable timestamping in the injected zenoh session config by @youtalk in #160
  • docs(parity): record MZ4 zenoh-rmw resource axis (PASS, documented divergence) by @youtalk in #161
  • feat(rcl): Linux Zenoh+DDS RCL — consume system ROS 2 (MZ5) by @youtalk in #163
  • fix(rcl): Linux runtime-rmw follow-ups — accept .dds, gate route-b on zenoh-backed contexts by @youtalk in #164
  • docs(rcl): MZ6 escape hatch — defer Windows RCL with the recorded spike verdict by @youtalk in #165
  • docs(parity): record MZ5 Linux latency + correctness axes (scaled W4 run) by @youtalk in #166
  • fix: health pass for 1.3.0 — verified findings from the multi-agent review by @youtalk in #172

Full Changelog: 1.2.0...1.3.0