Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
4c20691
feat: add ros-z-bridge-ros2dds — native DDS↔Zenoh bridge
YuanYuYuan May 7, 2026
631a0a0
feat(bridge): close gaps with zenoh-plugin-ros2dds
YuanYuYuan May 7, 2026
007f6c9
fix(bridge): correct service client_guid, strip reply header, add Loc…
YuanYuYuan May 7, 2026
ed96072
feat(bridge): close feature gaps G1–G7 vs zenoh-plugin-ros2dds
YuanYuYuan May 7, 2026
21cc9a8
fix: close remaining gaps in ros2dds bridge
YuanYuYuan May 7, 2026
912b949
feat: wire up G5 liveliness token declarations in bridge
YuanYuYuan May 7, 2026
5c765c2
refactor(liveliness): adopt zenoh-plugin-ros2dds wire format
YuanYuYuan May 7, 2026
ed9b5df
feat(liveliness): add action type extraction and wire into entity tokens
YuanYuYuan May 7, 2026
b978bc3
fix(bridge): include max_instances in TRANSIENT_LOCAL cache size formula
YuanYuYuan May 7, 2026
85a3852
feat(bridge): declare plugin self-announcement liveliness token on st…
YuanYuYuan May 7, 2026
9717502
feat(bridge): attach original DDS request header to Zenoh service que…
YuanYuYuan May 7, 2026
c74dc1d
feat(bridge): advertise action entities with AS/AC liveliness kinds
YuanYuYuan May 7, 2026
680212c
feat(bridge): add publication priority and express config options
YuanYuYuan May 7, 2026
160a356
feat(bridge): add max publication rate limiting for DDS→Zenoh routes
YuanYuYuan May 7, 2026
28f0dfb
refactor(bridge): abstract DDS interaction behind DdsParticipant trait
YuanYuYuan May 7, 2026
b693e52
test(bridge): add 42 protocol-level tests closing gap with zenoh-plug…
YuanYuYuan May 7, 2026
9af821c
feat(ros-z): expose ZNode accessors and ZContextBuilder::with_key_exp…
YuanYuYuan May 8, 2026
c347ff1
feat(ros-z-dds): new library crate for DDS bridging
YuanYuYuan May 8, 2026
5e95a53
refactor(ros-z-bridge-dds): shrink to thin CLI shell over ros-z-dds
YuanYuYuan May 8, 2026
5f40954
feat(ros-z-dds): publish ros_discovery_info for ROS 2 graph visibility
YuanYuYuan May 8, 2026
dfd7162
test(bridge): add G8 tests — rmw-zenoh wire format and API-level cove…
YuanYuYuan May 8, 2026
8c9e9a8
feat(ros-z-dds): bridge-to-bridge federation via liveliness subscription
YuanYuYuan May 8, 2026
0129c5f
feat(ros-z-dds): extend federation to service and action routes
YuanYuYuan May 8, 2026
33bd7aa
docs(ros-z-dds): add DDS bridge documentation and runnable examples
YuanYuYuan May 8, 2026
06a12ed
refactor(ros-z-dds): trim speculative and broken API surface
YuanYuYuan May 8, 2026
512d556
refactor(ros-z-dds): remove two dead parameters
YuanYuYuan May 8, 2026
171d4c7
refactor(ros-z-dds): tighten API surface — visibility, warnings, dead…
YuanYuYuan May 8, 2026
6f0d7cd
docs(ros-z-dds): fix stale ZDdsServiceBridge::new call in manual rout…
YuanYuYuan May 8, 2026
f5396a2
docs(dds-bridge): add migration guide from zenoh-plugin-ros2dds
YuanYuYuan May 8, 2026
9bb7ebe
docs(dds-bridge): add ZDdsClientBridge to manual route construction e…
YuanYuYuan May 8, 2026
aceb954
docs(dds-bridge): add missing -n short flag for --namespace in CLI re…
YuanYuYuan May 8, 2026
b96f5d1
refactor(ros-z-bridge-dds): rename binary from zenoh-bridge-dds to ro…
YuanYuYuan May 8, 2026
39822cc
refactor: finish renaming zenoh-bridge-dds → ros-z-bridge-dds in test…
YuanYuYuan May 8, 2026
8a9c748
fix(ros-z-dds): remove orphaned tests for deleted functions ros2_name…
YuanYuYuan May 8, 2026
bc3d564
docs(dds-bridge): move troubleshooting last, convert to collapsible a…
YuanYuYuan May 8, 2026
fcef297
fix(ros-z-dds): resolve clippy warnings (collapsible_if, new_ret_no_s…
YuanYuYuan May 8, 2026
f9e0795
fix(ros-z-dds): fix items_after_test_module and op_ref clippy lints
YuanYuYuan May 8, 2026
f1693cc
test(ros-z): cover ZNode::keyexpr_format and next_entity_id
YuanYuYuan May 8, 2026
5db740a
fix(ci): correct package name in bridge interop test step
YuanYuYuan May 8, 2026
915df65
fix(ci): correct feature name in bridge interop test step
YuanYuYuan May 8, 2026
6eca4cb
fix(ci): install protobuf-compiler for prost-build in bridge interop job
YuanYuYuan May 8, 2026
207afe5
fix(tests): wrap set_var in unsafe block for Rust 1.87 compatibility
YuanYuYuan May 8, 2026
e2340e8
fix(ci): create _tmp/ before bridge interop tests
YuanYuYuan May 8, 2026
1450049
fix(ci): check release+debug paths for bridge binary; link nushell on…
YuanYuYuan May 8, 2026
dcc1dc3
fix(ros-z-dds): fix service QoS and wildcard routing for rmw-zenoh br…
YuanYuYuan May 8, 2026
6568699
docs(ros-z-dds): update ZDdsServiceBridge API after type_hash removal
YuanYuYuan May 8, 2026
0a1890d
docs(ros-z-dds): fix ZDdsSubBridge docs and troubleshooting log modul…
YuanYuYuan May 8, 2026
25d11c6
test(bridge): add tests 14-20 — rmw-zenoh actions, federation, filter…
YuanYuYuan May 8, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ jobs:
- name: Install dependencies (macOS)
if: runner.os == 'macOS'
run: |
brew install nushell protobuf
brew install nushell protobuf || brew link nushell
chmod +x scripts/test-pure-rust.nu

- name: Install cargo-nextest (macOS)
Expand Down Expand Up @@ -308,7 +308,7 @@ jobs:
- name: Install dependencies (macOS)
if: runner.os == 'macOS'
run: |
brew install nushell protobuf
brew install nushell protobuf || brew link nushell
chmod +x scripts/test-pure-rust.nu

# Common setup
Expand Down
53 changes: 53 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -116,3 +116,56 @@ jobs:
--features ros-interop --release \
-E 'test(dynamic_subscriber)'
fi

ros2dds_bridge_test:
name: ros-z-bridge-ros2dds integration tests (Jazzy / CycloneDDS)
runs-on: ubuntu-latest
if: |
github.event_name == 'push' ||
github.event.pull_request.draft == false
container:
image: ros:jazzy-ros-base
steps:
- name: Cache apt packages
uses: actions/cache@v4
with:
path: /var/cache/apt/archives
key: apt-jazzy-bridge-v1-${{ hashFiles('.github/workflows/test.yml') }}

- name: Install system dependencies
run: apt-get update && apt-get install -y nodejs cmake clang mold protobuf-compiler

- name: Install ROS dependencies
run: |
apt-get install -y \
ros-jazzy-rmw-cyclonedds-cpp \
ros-jazzy-demo-nodes-cpp

- uses: actions/checkout@v4

- uses: actions-rust-lang/setup-rust-toolchain@v1

- name: Setup Rust cache
uses: Swatinem/rust-cache@v2
with:
shared-key: jazzy-bridge-interop

- name: Install cargo-nextest
uses: taiki-e/install-action@v2
with:
tool: cargo-nextest

- name: Build ros-z-bridge-ros2dds
run: |
RUSTFLAGS="-C linker=clang -C link-arg=-fuse-ld=mold" \
cargo build -p ros-z-bridge-dds --features jazzy --release -j4

- name: Run bridge integration tests
shell: bash
run: |
mkdir -p _tmp
source /opt/ros/jazzy/setup.bash
export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
export RUST_LOG=info
cargo nextest run -p ros-z-tests --profile interop \
--features "dds-bridge-interop,jazzy" --release -j4
146 changes: 142 additions & 4 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ members = [
"crates/ros-z-tests",
"crates/ros-z-console",
"crates/ros-z-bridge",
"crates/ros-z-dds",
"crates/ros-z-bridge-dds",
"crates/ros-z/examples/protobuf_demo",
]
default-members = ["crates/ros-z", "crates/ros-z-codegen"]
Expand Down
29 changes: 29 additions & 0 deletions crates/ros-z-bridge-dds/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
[package]
name = "ros-z-bridge-dds"
version.workspace = true
edition.workspace = true
description = "Bridge between DDS-based ROS 2 nodes and Zenoh via ros-z"

[[bin]]
name = "ros-z-bridge-dds"
path = "src/main.rs"

[dependencies]
ros-z = { path = "../ros-z" }
ros-z-dds = { path = "../ros-z-dds" }
ros-z-protocol = { path = "../ros-z-protocol", features = [
"rmw-zenoh",
"ros2dds",
] }

anyhow = { workspace = true }
clap = { workspace = true, features = ["derive"] }
tokio = { workspace = true, features = ["rt-multi-thread", "macros"] }
tracing = { workspace = true }
tracing-subscriber = { version = "0.3", features = ["env-filter"] }

[features]
default = ["jazzy"]
jazzy = ["ros-z/jazzy"]
humble = ["ros-z/humble"]
kilted = ["ros-z/kilted"]
11 changes: 11 additions & 0 deletions crates/ros-z-bridge-dds/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<!--
DO NOT EXPAND THIS README
Documentation source: book/ - Published: https://zettascalelabs.github.io/ros-z/
Keep this file minimal. Point readers to the book.
-->

# ros-z-bridge-dds

Standalone binary that bridges DDS-based ROS 2 nodes to a Zenoh/ros-z network.

**[Full Documentation](https://zettascalelabs.github.io/ros-z/user-guide/dds-bridge.html)**
Loading
Loading