Skip to content
ROS Discourse — Community updates· phmorton·· 2 hours agoSignalEditorial score82

Zenoh + RaptorQ: Handling bulk asset transfer and command QoS in degraded/NLOS environments

Zenoh + RaptorQ: Handling bulk asset transfer and command QoS in degraded/NLOS environments

Summary

A ROS 2 transport prototype using Zenoh and RaptorQ fountain codes addresses packet loss and command prioritization in outdoor robotics. It uses interleaved source blocks, token bucket pacing, and priority-based congestion control to ensure reliable data transfer in degraded NLOS conditions.

Editorial context

The prototype combines Eclipse Zenoh with RaptorQ fountain codes to address packet loss and command prioritization in outdoor robotics scenarios, offering a novel approach to reliable data transfer in degraded NLOS environments.

Source: ROS Discourse — Community updates · Read original article ↗

Article text · Original source · English

On this page

Hi ROS Community,

I’ve been working on an open-source transport prototype pairing Eclipse Zenoh with RaptorQ (RFC 6330) fountain codes, designed around the constraints of outdoor ground robots (such as mowers and agricultural rovers) operating in non-line-of-sight (NLOS) conditions.

The Problem

When ground vehicles operate across large outdoor sites with foliage, structures, or rolling topography, wireless links frequently experience sustained packet loss (15–30%).

When this occurs, reliable retransmissions quickly trigger head-of-line blocking—trapping urgent commands and telemetry behind stalled bulk data (like costmaps or boundary files).

How the Prototype Works

  • Fountain Coding: Bulk assets are compressed and partitioned across interleaved RaptorQ source blocks. The receiver can reconstruct the bit-exact payload once any sufficient set of droplets arrives, eliminating round-trip retransmission overhead.
  • Airtime Pacing: Map streaming is rate-limited via a token bucket (defaulting to 128 kbps to match sub-GHz telemetry links) using Zenoh’s Priority.DATA_LOW and CongestionControl.DROP.
  • Command QoS: Signed Ed25519 commands bypass background map traffic by using Priority.DATA_HIGH and CongestionControl.BLOCK.
  • Edge Storage: Droplets append asynchronously with batched disk commits to avoid I/O stalls on embedded flash media.

Running the Simulation

You can test two peers communicating over a simulated 25% packet-loss link locally:

git clone https://github.com/oceans-niagara/zenoh-fountain-transport
cd zenoh-fountain-transport
pip install eclipse-zenoh raptorq cryptography cbor2
python demo.py

Expected output:

Original Size   : 158,500 bytes
Compressed Size : 36,042 bytes
CID (SHA-256)   : 7d4a2e...
RFC 6330 Blocks : 3 Source Blocks (Interleaved)
Total Droplets  : 111

Streaming interleaved droplets across Zenoh (simulating 25% radio drop)...

Ingested: 83, Dropped: 28
Broadcast Duration: 3.82s
Solved Blocks: 3 of 3
Assembly & Hash Time: 0.62 ms
Security: SUCCESS (Ed25519 whitelisted command delivered via Zenoh DATA_HIGH)
Status: SUCCESS (Multi-block bit-exact match, 0 retransmissions)

Seeking Community Feedback

  1. Integration Architecture: Would this be most useful packaged as an external Zenoh transport daemon/bridge, or as a native ROS 2 node wrapping types like nav_msgs/OccupancyGrid?
  2. Sub-GHz Radio Behavior: For those running 900 MHz radios (e.g., RFD900 or Digi) or 802.11ah, is application-level token bucket pacing sufficient, or does native link-layer MTU batching provide measurable benefits without increasing command latency?
  3. Loss Traces: If your team has real-world packet loss profiles or pcap logs from degraded field links, I’d be interested in testing against those traces.

Repository (Apache 2.0): Oceans-Niagara/zenoh-fountain-transport

I would appreciate any critique, architectural thoughts, or advice from anyone dealing with tricky outdoor links.

Thanks,
Perry

What the source reports

Publisher-reported claims, with original evidence. These results have not been independently verified by RoboSignal.

Reported numbers

  • original size

    158,500

    View original evidence
    nchronously with batched disk commits to avoid I/O stalls on embedded flash media. Running the Simulation You can test two peers communicating over a simulated 25% packet-loss link locally: git clone https://github.com/oceans-niagara/zenoh-fountain-transport cd zenoh-fountain-transport pip install eclipse-zenoh raptorq cryptography cbor2 python demo.py Expected output: Original Size : 158,500 bytes Compressed Size :
    Open source S5
  • total droplets

    111

    View original evidence
    36,042 bytes CID (SHA-256) : 7d4a2e... RFC 6330 Blocks : 3 Source Blocks (Interleaved) Total Droplets : 111 Streaming interleaved droplets across Zenoh (simulating 25% radio drop)... Ingested: 83, Dropped: 28 Broadcast Duration: 3.82s Solved Blocks: 3 of 3 Assembly & Hash Time: 0.62 ms Security: SUCCESS (Ed25519 whitelisted command delivered via Zenoh DATA_HIGH) Status: SUCCESS (Multi-block bit-exact match, 0 retrans
    Open source S6
  • ingested droplets

    83

    View original evidence
    36,042 bytes CID (SHA-256) : 7d4a2e... RFC 6330 Blocks : 3 Source Blocks (Interleaved) Total Droplets : 111 Streaming interleaved droplets across Zenoh (simulating 25% radio drop)... Ingested: 83, Dropped: 28 Broadcast Duration: 3.82s Solved Blocks: 3 of 3 Assembly & Hash Time: 0.62 ms Security: SUCCESS (Ed25519 whitelisted command delivered via Zenoh DATA_HIGH) Status: SUCCESS (Multi-block bit-exact match, 0 retrans
    Open source S6
  • dropped droplets

    28

    View original evidence
    36,042 bytes CID (SHA-256) : 7d4a2e... RFC 6330 Blocks : 3 Source Blocks (Interleaved) Total Droplets : 111 Streaming interleaved droplets across Zenoh (simulating 25% radio drop)... Ingested: 83, Dropped: 28 Broadcast Duration: 3.82s Solved Blocks: 3 of 3 Assembly & Hash Time: 0.62 ms Security: SUCCESS (Ed25519 whitelisted command delivered via Zenoh DATA_HIGH) Status: SUCCESS (Multi-block bit-exact match, 0 retrans
    Open source S6
  • broadcast duration

    3.82

    View original evidence
    36,042 bytes CID (SHA-256) : 7d4a2e... RFC 6330 Blocks : 3 Source Blocks (Interleaved) Total Droplets : 111 Streaming interleaved droplets across Zenoh (simulating 25% radio drop)... Ingested: 83, Dropped: 28 Broadcast Duration: 3.82s Solved Blocks: 3 of 3 Assembly & Hash Time: 0.62 ms Security: SUCCESS (Ed25519 whitelisted command delivered via Zenoh DATA_HIGH) Status: SUCCESS (Multi-block bit-exact match, 0 retrans
    Open source S6
  • assembly time

    0.62

    View original evidence
    36,042 bytes CID (SHA-256) : 7d4a2e... RFC 6330 Blocks : 3 Source Blocks (Interleaved) Total Droplets : 111 Streaming interleaved droplets across Zenoh (simulating 25% radio drop)... Ingested: 83, Dropped: 28 Broadcast Duration: 3.82s Solved Blocks: 3 of 3 Assembly & Hash Time: 0.62 ms Security: SUCCESS (Ed25519 whitelisted command delivered via Zenoh DATA_HIGH) Status: SUCCESS (Multi-block bit-exact match, 0 retrans
    Open source S6
  • security status

    0

    View original evidence
    36,042 bytes CID (SHA-256) : 7d4a2e... RFC 6330 Blocks : 3 Source Blocks (Interleaved) Total Droplets : 111 Streaming interleaved droplets across Zenoh (simulating 25% radio drop)... Ingested: 83, Dropped: 28 Broadcast Duration: 3.82s Solved Blocks: 3 of 3 Assembly & Hash Time: 0.62 ms Security: SUCCESS (Ed25519 whitelisted command delivered via Zenoh DATA_HIGH) Status: SUCCESS (Multi-block bit-exact match, 0 retrans
    Open source S6
  • code: not_reported
  • dataset: not_reported
  • paper: not_reported
Source excerpts and review record

Automatically extracted; no manual editorial approval recorded.

nchronously with batched disk commits to avoid I/O stalls on embedded flash media. Running the Simulation You can test two peers communicating over a simulated 25% packet-loss link locally: git clone https://github.com/oceans-niagara/zenoh-fountain-transport cd zenoh-fountain-transport pip install eclipse-zenoh raptorq cryptography cbor2 python demo.py Expected output: Original Size : 158,500 bytes Compressed Size :

Open source S5

36,042 bytes CID (SHA-256) : 7d4a2e... RFC 6330 Blocks : 3 Source Blocks (Interleaved) Total Droplets : 111 Streaming interleaved droplets across Zenoh (simulating 25% radio drop)... Ingested: 83, Dropped: 28 Broadcast Duration: 3.82s Solved Blocks: 3 of 3 Assembly & Hash Time: 0.62 ms Security: SUCCESS (Ed25519 whitelisted command delivered via Zenoh DATA_HIGH) Status: SUCCESS (Multi-block bit-exact match, 0 retrans

Open source S6

Source:ROS Discourse — Community updates · discourse.openrobotics.org

Timezone · UTC

Article dates follow your selected timezone. Briefing editions use Hong Kong time (UTC+8).