Skip to main content

Examples

Learn HDDS through 193 practical examples covering every aspect of DDS. All examples are available in multiple languages: Rust, Python, C++, and C.

SDK Samples

The complete samples collection is available in the HDDS repository:

git clone https://git.hdds.io/hdds/hdds.git
cd hdds/sdk/samples

Sample Categories

CategorySamplesDescription
01_basics21Hello world, pub/sub fundamentals
02_qos36All 22 QoS policies with examples
03_types62Every IDL type: structs, enums, sequences, maps, unions
04_discovery16SPDP/SEDP, static peers, discovery tuning
05_security17Authentication, encryption, access control
06_performance16Latency tuning, throughput optimization, benchmarks
07_advanced16Waitsets, listeners, content filters, instances
08_interop3Cross-vendor communication
09_ros23ROS2 rmw_hdds integration
10_usecases3Complete real-world scenarios

Basics

Path: sdk/samples/01_basics/

ExampleLanguagesDescription
hello_worldRust, Python, C++, CMinimal pub/sub
pubsubRust, Python, C++, CBasic publisher and subscriber
multiple_topicsRust, PythonMultiple topics in one participant
participant_configRust, PythonParticipant configuration options
graceful_shutdownRustClean shutdown with signal handling
# Run hello world
cd 01_basics/rust && cargo run --bin hello_world
cd 01_basics/python && python hello_world.py

QoS Policies

Path: sdk/samples/02_qos/

Examples for all 22 DDS QoS policies:

SampleDescriptionKey QoS
reliable_deliveryGuaranteed delivery with NACK retransmissionRELIABLE
best_effortFire-and-forget, lowest latencyBEST_EFFORT
transient_localLate-joiner support with historical dataTRANSIENT_LOCAL
deadline_monitorMonitor data update rate violationsDEADLINE
liveliness_autoSystem heartbeats for presence detectionLIVELINESS(AUTO)
liveliness_manualApp-level heartbeat assertionLIVELINESS(MANUAL)
partition_filterLogical data filtering by namespacePARTITION
ownership_exclusiveStrength-based writer arbitrationOWNERSHIP(EXCLUSIVE)
history_keep_lastRetain N most recent samplesHISTORY(KEEP_LAST)

QoS Quick Reference

QoS PolicyOptionsUse Case
ReliabilityRELIABLE / BEST_EFFORTGuaranteed delivery vs low latency
DurabilityVOLATILE / TRANSIENT_LOCALLate-joiner data access
HistoryKEEP_LAST(N) / KEEP_ALLSample retention
DeadlinePeriod durationMonitor update rate
LivelinessAUTOMATIC / MANUAL_BY_*Presence detection
OwnershipSHARED / EXCLUSIVEWriter arbitration
PartitionString patternsLogical separation
# Run reliability example
cd 02_qos/rust && cargo run --bin reliability

# Deadline monitoring
./deadline_monitor # Subscriber
./deadline_monitor pub # Publisher (meets deadlines)
./deadline_monitor slow # Publisher (misses deadlines)

# Partition filtering
./partition_filter sub A # Subscriber in partition "A"
./partition_filter pub A # Publisher in partition "A" (matches)
./partition_filter pub B # Publisher in partition "B" (no match)

IDL Types

Path: sdk/samples/03_types/

Every IDL type supported by hdds_gen:

ExampleLanguagesTypes
primitivesRust, Python, C++int8, uint32, float, double, bool
stringsRust, Pythonstring, bounded string<N>
sequencesRust, Pythonsequence<T>, bounded sequence<T, N>
arraysRust, PythonT[N], multidimensional
enumsRust, Pythonenum, @bit_bound
structsRust, Pythonstruct, nested structs
unionsRust, Pythonunion with discriminator
mapsRust, Pythonmap<K, V>
optionalRust, Python@optional fields
bitsets_bitmasksRust, Pythonbitset, bitmask
# Run sequences example
cd 03_types/rust && cargo run --bin sequences

Discovery

Path: sdk/samples/04_discovery/

SampleDescription
simple_discoveryAutomatic participant discovery using SPDP multicast
static_peersManual peer configuration for non-multicast networks
discovery_listenersCallbacks for discovery events (match/unmatch)
partitionsLogical data separation with partition QoS

Partition Matching

Partitions provide logical separation within a domain:

Partition A ────┬──── Partition B

Topic "Data" │ Topic "Data"
Writer ─────────┼──── Reader (NO MATCH - different partitions)


Partition A ────┴──── Partition A
Topic "Data" Topic "Data"
Writer ────────────── Reader (MATCH - same partition)

Wildcard matching: * matches any, Sensor* matches SensorA, SensorB, etc.

Network Requirements

SampleMulticastUnicastTCP
simple_discoveryRequiredOptionalNo
static_peersNot usedRequiredOptional
discovery_listenersRequiredOptionalNo
partitionsRequiredOptionalNo

Security

Path: sdk/samples/05_security/

DDS Security v1.1 examples:

SampleDescription
authenticationPKI-based participant authentication with X.509 certificates
access_controlGovernance and permissions for topic-level access control
encryptionData encryption (AES-GCM) and message authentication (GMAC)
secure_discoveryAuthenticated SPDP/SEDP discovery protocol

Security Architecture

┌─────────────────────────────────────────────────────────────┐
│ Application Layer │
├─────────────────────────────────────────────────────────────┤
│ DDS Layer │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ DataWriter │ │ DataReader │ │ Discovery │ │
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
├─────────┴────────────────┴────────────────┴─────────────────┤
│ Security Plugins │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │Authentication│ │Access Control│ │Cryptography │ │
│ │ Plugin │ │ Plugin │ │ Plugin │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
├─────────────────────────────────────────────────────────────┤
│ Transport Layer │
│ (UDP/TCP with TLS optional) │
└─────────────────────────────────────────────────────────────┘

Protection Levels

LevelConfidentialityIntegrityOverhead
NONENoNo0 bytes
SIGN (GMAC)NoYes16 bytes
ENCRYPT (GCM)YesYes16 bytes
SIGN+ENCRYPTYesYes32 bytes

Performance

Path: sdk/samples/06_performance/

SampleDescription
latencyPing-pong latency measurement with histograms
throughputMaximum messages/sec and MB/sec benchmarks
batchingMessage batching for improved throughput
zero_copyShared memory for eliminating data copies

Performance Metrics

MetricSmall (64B)Medium (1KB)Large (64KB)
Latency~50 us~75 us~200 us
Throughput1M msg/s500K msg/s50K msg/s
Bandwidth64 MB/s500 MB/s3.2 GB/s

Batching Efficiency

ConfigurationPacketsEfficiency
No batching10,0001.0x
Batch 1KB64015.6x
Batch 8KB80125x
Batch 64KB101000x

Tuning Tips

For low latency:

  • Reduce/disable batching
  • Pin threads to CPU cores
  • Use UDP transport
  • Set real-time priority

For high throughput:

  • Enable batching (8KB-64KB)
  • Use zero-copy for large payloads
  • Increase history depth
  • Tune socket buffers

Advanced

Path: sdk/samples/07_advanced/

SampleDescription
content_filterSQL-like content filtering for efficient data subscription
request_replyRPC-style communication patterns over DDS
waitsetsCondition-based event handling and multiplexing
dynamic_dataRuntime type manipulation and introspection

WaitSet Architecture

  ┌─────────────────────────────────────────┐
│ WaitSet │
│ ┌───────────┐ ┌───────────┐ │
│ │ ReadCond │ │ StatusCond│ │
│ │ (Topic A) │ │ (Reader) │ │
│ └───────────┘ └───────────┘ │
│ ┌───────────┐ ┌───────────┐ │
│ │ GuardCond │ │ ReadCond │ │
│ │ (Shutdown)│ │ (Topic B) │ │
│ └───────────┘ └───────────┘ │
└─────────────────────────────────────────┘


wait(timeout)


Active Conditions List

Condition Types

TypeTriggerUse Case
ReadConditionData availableData reception
StatusConditionEntity status changedLiveliness, matches
GuardConditionApplication signalShutdown, inter-thread
QueryConditionFiltered data availableContent-filtered reads

Content Filter Expressions

temperature > 30.0           -- Comparison
location = 'ServerRoom' -- Equality
sensor_id BETWEEN 1 AND 10 -- Range
humidity > %0 -- Parameter reference
location LIKE 'Building%' -- Pattern matching
temp > 25 AND hum > 60 -- Logical operators

Interoperability

Path: sdk/samples/08_interop/

ExampleDescription
hdds_to_fastddsHDDS publisher → FastDDS subscriber
hdds_to_rtiHDDS ↔ RTI Connext
hdds_to_cycloneHDDS ↔ CycloneDDS

ROS2 Integration

Path: sdk/samples/09_ros2/

ExampleDescription
rmw_hdds_talkerROS2 publisher with rmw_hdds
rmw_hdds_listenerROS2 subscriber with rmw_hdds
mixed_dds_ros2Native HDDS + ROS2 nodes

Real-World Use Cases

Path: sdk/samples/10_usecases/

ExampleDescription
autonomous_vehicleLiDAR, camera, control topics
industrial_iotSensor mesh with edge gateway
robotics_swarmMulti-robot coordination

Building All Samples

cd sdk/samples

# Build all Rust samples
./build.sh rust

# Build all C++ samples
./build.sh cpp

# Build all
make all

Contributing Examples

Want to add an example? See the contribution guide.