Repository navigation
Zenoh connector and ROS 2 topics through rmw_zenoh (design 053, native backend) - #316
Merged
Merged
Conversation
- Introduced `Cargo.toml` and `README.md` for the new crate. - Implemented a deserializer for XCDR1 format in `src/de.rs`. - Created a custom error type in `src/error.rs` for handling encoding/decoding errors. - Developed a serializer for XCDR1 format in `src/ser.rs`. - Added main library functionality in `src/lib.rs` for encoding and decoding values. - Implemented tests for various encoding and decoding scenarios in `tests/`. - Ensured compatibility with hiroz-cdr for little-endian output. - Added robustness tests to handle random and malformed input gracefully.
Bring in 054 (zero-allocation connector boundary) and 055 (wildcard inbound links). RouteMeta and the _with_meta accessors are dropped: the route lists they wrapped no longer exist. The reserved link keys stay; the topic key follows with_topic_writer as aimdb.topic_writer, and with_match_deserializer clears the recorded wire format. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Refresh AimDB citations to eefe2c2, correct the ExactGrammar refusal row, require whole-chunk captures in ZenohGrammar, mark the inbound allocation claim as measured, and add S6 (put beside session.run()). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sixteen stages, each a branch with a PR into feat/aimdb-zenoh-connector, derived from 053 rev 9's sequencing and acceptance criteria. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
No fork. The embedded backend (s13–s15) waits for zenoh-nostd on crates.io; until then the connector ships native-only. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ispatch::routes() (#306)
It ran the full matrix on the stage PRs; the branch is merging into main. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Open the session on a task of its own, so zenoh's blocking open no longer
stalls the runtime; refuse Tokio's current-thread scheduler at build.
- Catch a panicking deserializer; the sample is dropped and logged.
- Refuse keys and filters over 65,535 bytes, which abort zenoh-transport.
- Check one ROS type per topic across both directions, by DDS name and hash.
- Parse ROS_DOMAIN_ID as rcl does; a domain above 232 warns.
- Add the auth-usrpwd feature.
- Docs: multicast scouting with new(""), one builder for both views,
runtime requirement, limits.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2 of 5 tasks
2 of 5 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Design 053, the Zenoh connector with an rmw_zenoh-compatible ROS 2 profile (
docs/design/053-zenoh-connector.md, rev 10), native backend. It lands stages s01–s12 and s16, each reviewed as its own PR intofeat/aimdb-zenoh-connector(#303–#315). The plan isdocs/design/053-implementation-plan.md.What it adds
AimDB records become ROS 2 topics, with no ROS installation on the AimDB side, and Zenoh becomes a transport for AimDB in its own right.
aimdb-zenoh-connector(0.1.0,std):ZenohConnectorforzenoh://links. Inbound links match Zenoh key expressions throughZenohGrammar, with 055's captures and keys. Matching is linear and allocation-free, and it is checked againstzenoh-keyexpras an oracle. A sample that several subscriptions receive is ingested once per route. Publications and subscriptions are remote-only.Ros2Connectorforros2://links. It speaks rmw_zenoh's data keys, liveliness tokens, attachments (sequence number, timestamp, GID) and CDR, in both directions, with a node, a namespace and a domain.Ros2LinkExtsets the advertised QoS.zenoh.ros2(node): both schemes on one session. A gateway keeps one router connection, and the connector never hears its own publications.aimdb-cdr(0.1.0):no_stdserde for OMG CDR (XCDR1).aimdb-data-contracts:WireFormatand the recordedaimdb.wire_formatlink key;ros2feature:RosMessageand its name and hash checks;linkable-cdrfeature:link_codecs::Cdr<N>.aimdb-derive:#[derive(RosMessage)]with compile-time checks of thetypeandhashattributes;#[derive(Linkable)]now setsWIRE_FORMAT = Json.Changes to existing crates
aimdb-core, breaking for the connector interface, in the same unreleased window as 054 and 055:RouteInfogainstype_id;InboundDispatch::routes()returnsInboundRouteInfo(topic,type_id, config);connector::WIRE_FORMAT_KEYis a reserved link config key, which the four (de)serializer setters clear;The user-facing link API does not change.
aimdb-mqtt-connector: a test fixture only (RouteInfo::type_id).Verification
zenoh-keyexpr;ros2-interopjob on Jazzy and Lyrical:ros2 node list,ros2 topic info -v,ros2 topic echoandros2 topic pubagainst a realrmw_zenohd(make ros2-interop DISTRO=…).ROS_DOMAIN_IDedge cases;make denyand the Security workflow now also check the Zenoh connector'sstdgraph, whichcargo deny's default features never saw. Accepted, with reasons in.cargo/audit.tomlanddeny.toml:lz4_flexviazenoh-transport): unreachable, because compression is never enabled, and a Makefile guard asserts that. Tracked upstream as cargo audit reports two vulnerabilities in zenoh-transport eclipse-zenoh/zenoh#2589.paste, a proc-macro) and RUSTSEC-2025-0134 (rustls-pemfile): both unmaintained.webpki-roots.9740561, fixed in4d6e85f:openblocks insideblock_in_place; each attempt now runs on its own task), and the current-thread scheduler is refused at build;ROS_DOMAIN_IDis parsed like rcl'sstrtoul(…, 0), and a domain above 232 now warns instead of failing (this reverses the feat(zenoh): Ros2Connector for outbound ros2:// links (design 053 s09) #311 cap);auth-usrpwdfeature (pubkey auth is left out: it pulls inrsa, RUSTSEC-2023-0071);new("")scouts by multicast, both views on one builder, the runtime requirement, limits.intersectsrecurses once per chunk under**and overflows the stack on long keys eclipse-zenoh/zenoh#2836 (intersectsoverflows the stack on long keys). Records are indocs/upstream/, including the over-long key abort, which isn't reported upstream yet.Not in this PR
zenoh-nostd, plan stages s13–s15), deferred until zenoh-nostd is released on crates.io. A git dependency would make the crate unpublishable. Theembeddedfeature builds theno_stdparts, such asZenohGrammar.ros2://directly from a microcontroller (053 §4.9), services, actions andTRANSIENT_LOCAL.Release notes
aimdb-zenoh-connectorjoinsPUBLISH_ORDER, and phase 1 ofpublish-check(packaging) passes locally.Before or after merging
🤖 Generated with Claude Code