Back

DDS

Loading views...

DDS

Category: Networking/IoT

Overview

DDS (Data Distribution Service) is an OMG standard for real-time, broker-less, data-centric pub/sub. Used in robotics (ROS 2), defense, autonomous vehicles, and medical systems, it provides deterministic low-latency distribution with 22 QoS policies and peer-to-peer RTPS discovery.


1. Theory & Fundamentals

  • Broker-less: Peer-to-peer RTPS discovery via multicast
  • Data-centric: Topics are typed data streams
  • QoS: 22 policies — Reliability, Durability, Deadline, Latency Budget, Liveliness, etc.
  • Domain: Integer isolation space (0–232)
  • GUID: 12-byte prefix + 4-byte entity ID (globally unique)
  • Implementations: Fast DDS (eProsima), Cyclone DDS, RTI Connext DDS

2. Frame / Packet Structure

RTPS Wire Protocol:
  Header: "RTPS" | Version | VendorID | GUIDPrefix
  Submessages: SubMsgHeader + Payload

Submessage types:
  DATA: Application payload
  HEARTBEAT: Publisher announces available samples
  ACKNACK: Subscriber requests missing
  GAP: Samples no longer available
  INFO_TS: Timestamp

DataWriter→DataReader match requires compatible QoS:
  Reliability: RELIABLE publisher ≥ BEST_EFFORT subscriber
  Durability: TRANSIENT_LOCAL ≥ VOLATILE

3. Protocol Mechanics

  • Discovery: PDP (Participant) + EDP (Endpoint) phases via multicast
  • Reliable: HEARTBEAT/ACKNACK retransmit missing samples
  • TRANSIENT_LOCAL durability: Late subscribers get history
  • Deadline: Subscriber detects missed update
  • Content-filtered topics: Server-side filter, reduces bandwidth

4. Hardware Implementation

  • Any Linux/RTOS with UDP/TCP stack
  • Micro-XRCE-DDS: MCU client (~50 KB RAM) for ROS 2 micro-ROS
  • ROS 2: Default middleware layer uses Fast DDS or Cyclone DDS
  • Network: UDP unicast + multicast; works on LAN
  • Docker: Deploy DDS applications in containers

5. Register-Level / Configuration

#include <fastdds/dds/domain/DomainParticipantFactory.hpp>
using namespace eprosima::fastdds::dds;
DomainParticipant* p =
    DomainParticipantFactory::get_instance()
    ->create_participant(0, PARTICIPANT_QOS_DEFAULT);
Topic* t = p->create_topic("Temp",
    "Float32", TOPIC_QOS_DEFAULT);
Publisher* pub = p->create_publisher(PUBLISHER_QOS_DEFAULT);
DataWriter* w = pub->create_datawriter(t,
    DATAWRITER_QOS_DEFAULT);
Float32 sample; sample.data(23.5f);
w->write(&sample);

6. Driver / Software Development

from cyclonedds.domain import DomainParticipant
from cyclonedds.topic import Topic
from cyclonedds.pub import DataWriter
from cyclonedds.idl import IdlStruct
from dataclasses import dataclass

@dataclass
class Temperature(IdlStruct):
    value: float
    sensor_id: str

dp = DomainParticipant()
topic = Topic(dp, "Temperature", Temperature)
writer = DataWriter(dp, topic)
writer.write(Temperature(value=23.5, sensor_id="r1"))

7. Debugging & Testing

  • Fast DDS Monitor / RTI Spy: Visualize topics, QoS, writer/reader pairs
  • Wireshark: RTPS dissector (filter: rtps)
  • ros2 topic list/echo (ROS 2 environments)
  • Common issues: QoS mismatch; multicast blocked by firewall; domain ID wrong

8. Real-World Applications

  1. ROS 2 robot middleware
  2. Autonomous vehicle sensor fusion
  3. US Navy / NATO C2 systems
  4. Medical device integration
  5. Flight simulation systems

9. Advanced Topics & Edge Cases

  • RTPS over shared memory: Zero-copy for intra-host
  • DDS Security: Auth, encryption, access control plugins
  • Micro-XRCE-DDS: Client-agent model for MCUs
  • Content-filtered topics: Subscribe to subset of data
  • QoS tuning: Reliability vs latency for different data types

10. Standards & Variants

Standard Notes
DDS 1.4 OMG core
RTPS 2.3 Wire protocol
DDS-XTYPES Type extensibility
DDS Security 1.1 Auth + encryption
Micro-XRCE-DDS MCU/ROS 2 micro-ROS

💡 Practical Examples

Ex 1: Reliable QoS writer: qos.reliability().kind = RELIABLERELIABILITYQOS;

Ex 2: Content filter: Create ContentFilteredTopic with SQL predicate value > 30.

Ex 3: ROS 2 publisher: pub = node.create_publisher(Float32, 'temperature', 10)


🧪 Practice Questions

Beginner: 1) Broker-less? 2) What is RTPS? 3) What is a domain? 4) DDS in ROS 2? 5) Reliable vs best-effort?

Intermediate: 1) QoS TRANSIENT_LOCAL. 2) HEARTBEAT/ACKNACK. 3) Content-filtered topic. 4) DDS discovery phases. 5) QoS mismatch diagnosis.

Advanced: 1) LiDAR QoS design 1M pts/sec. 2) DDS Security with PKIX. 3) Micro-XRCE-DDS on STM32. 4) Minimum latency control loop. 5) DDS vs MQTT vs AMQP.


Checklist

  • [ ] Implement DDS publisher and subscriber
  • [ ] Configure QoS (Reliability, Durability, Deadline)
  • [ ] Use content-filtered topic
  • [ ] Monitor with Fast DDS Monitor
  • [ ] Debug with Wireshark RTPS dissector
  • [ ] Integrate with ROS 2
  • [ ] Implement DDS Security
  • [ ] Connect MCU with Micro-XRCE-DDS
  • [ ] Design QoS for real-time system
  • [ ] Compare DDS vs message brokers