Skip to main content

Interoperability Guide

One of DDS's greatest strengths is interoperability. HDDS can communicate with other DDS implementations out of the box, thanks to the standardized RTPS wire protocol.

Supported Implementations

HDDS has been tested and verified to interoperate with:

ImplementationVendorRTPS VersionStatus
FastDDSeProsima2.3Fully compatible
RTI ConnextRTI2.5Fully compatible
CycloneDDSEclipse2.3Fully compatible
OpenDDSOCI2.3Compatible (with notes)

How Interoperability Works

All compliant DDS implementations use the RTPS (Real-Time Publish Subscribe) protocol for communication. This means:

  1. Automatic Discovery - Participants find each other via SPDP multicast
  2. Wire Compatibility - Data is serialized using CDR2 format
  3. QoS Negotiation - Compatible QoS policies are matched automatically

Quick Start

To communicate between HDDS and another DDS implementation:

  1. Use the same Domain ID (e.g., domain 0)
  2. Use the same Topic name (e.g., "sensor/temperature")
  3. Use compatible data types (same structure, generated from same IDL)
  4. Use compatible QoS (e.g., both RELIABLE or both BEST_EFFORT)

Example: HDDS Publisher → FastDDS Subscriber

HDDS Publisher (Rust):

let participant = DomainParticipant::new(0)?;
let topic = participant.create_topic::<Temperature>("sensor/temp")?;
let writer = participant.create_writer(&topic)?;

writer.write(&Temperature { sensor_id: "s1".into(), value: 23.5 })?;

FastDDS Subscriber (C++):

auto participant = DomainParticipantFactory::get_instance()->create_participant(0, ...);
auto topic = participant->create_topic("sensor/temp", "Temperature", ...);
auto reader = subscriber->create_datareader(topic, ...);

// Will receive data from HDDS publisher

Detailed Guides

Common Issues

Type Mismatch

Ensure both sides use the same IDL definition:

// Both HDDS and FastDDS should use this exact IDL
struct Temperature {
@key string sensor_id;
float value;
};

QoS Incompatibility

QoS policies must be compatible for matching:

Writer QoSReader QoSResult
RELIABLERELIABLEMatch
RELIABLEBEST_EFFORTMatch
BEST_EFFORTRELIABLENo Match
BEST_EFFORTBEST_EFFORTMatch

Discovery Issues

If participants don't discover each other:

  1. Check firewall settings (ports 7400-7500)
  2. Verify multicast is enabled
  3. Check domain IDs match
  4. Use hdds_viewer to debug traffic