Qu'est-ce que RTPS ?
RTPS (Real-Time Publish Subscribe) est le protocole filaire qui permet aux implémentations DDS de communiquer entre elles. Défini par l'OMG, il spécifié exactement comment les messages sont formatés et échangés sur le réseau.
Pourquoi RTPS est important
RTPS est ce qui rend DDS interopérable. Toute implémentation DDS conforme -- que ce soit HDDS, FastDDS, CycloneDDS ou RTI Connext -- peut communiquer si elles parlent la même version RTPS.
Versions de RTPS
| Version | Année | Nouveautés |
|---|---|---|
| 2.0 | 2008 | Spécification originale |
| 2.1 | 2010 | Extensions sécurité |
| 2.2 | 2014 | Améliorations de performance |
| 2.3 | 2019 | Writer liveliness, content filters |
| 2.5 | 2022 | Large data, redundance Participant |
HDDS implémente RTPS 2.5 avec rétrocompatibilité jusqu'à la version 2.3.
Architecture du protocole
Structure des messages
Chaque message RTPS est composé de :
+--------------------------------------------------------+
| En-tete RTPS |
| +----------+----------+----------+-----------------+ |
| | Protocol | Version | Vendor | GuidPrefix | |
| | "RTPS" | 2.5 | HDDS | 12 octets | |
| +----------+----------+----------+-----------------+ |
+--------------------------------------------------------+
| Sous-messages |
| +------------------------------------------------+ |
| | Sous-message 1 (ex. DATA) | |
| +------------------------------------------------+ |
| +------------------------------------------------+ |
| | Sous-message 2 (ex. HEARTBEAT) | |
| +------------------------------------------------+ |
| ... |
+--------------------------------------------------------+
Types de sous-messages
| Sous-message | Fonction |
|---|---|
| DATA | Transporte les échantillons de données utilisateur |
| DATA_FRAG | Données fragmentees pour les gros échantillons |
| HEARTBEAT | Annonce les numéros de sequence disponibles |
| ACKNACK | Accuse réception / demande de données |
| GAP | Indique des numéros de sequence manquants |
| INFO_TS | Fournit des informations d'horodatage |
| INFO_DST | Spécifié le Participant de destination |
| INFO_SRC | Spécifié le Participant source |
Protocole de découverte
RTPS definit deux protocoles de découverte :
SPDP (Simple Participant Discovery Protocol)
Découvre les autres Participants dans le Domain :
- Chaque Participant envoie des annonces périodiques à une adresse multicast bien connue
- Les annonces incluent le GUID du Participant, les endpoints et les locators
- Les autres Participants apprennent l'existence des nouveaux arrivants
SEDP (Simple Endpoint Discovery Protocol)
Découvre les endpoints (Writers et Readers) :
- Apres la découverte de Participants, SEDP commence
- Les Participants échangent les informations d'endpoints via unicast
- Chaque côté apprend les Writers et Readers distants
Mappage des ports
RTPS utilise un mappage de ports déterministe basé sur le Domain ID :
Port Discovery Multicast = 7400 + (250 x domainId)
Port Discovery Unicast = 7410 + (250 x domainId) + (2 x participantId)
Port User Multicast = 7401 + (250 x domainId)
Port User Unicast = 7411 + (250 x domainId) + (2 x participantId)
Exemple pour Domain 0, Participant 0 :
| Type de port | Numéro de port |
|---|---|
| Discovery Multicast | 7400 |
| Discovery Unicast | 7410 |
| User Multicast | 7401 |
| User Unicast | 7411 |
Assurez-vous que les ports 7400-7500 (et au-dela pour le multi-domain) sont ouverts pour le trafic DDS.
Sérialisation des données (CDR)
RTPS utilise CDR2 (Common Data Representation) pour la sérialisation :
- Indépendant de la plateforme - Fonctionne entre différentes architectures CPU
- Auto-descriptif - Informations de type optionnelles incluses
- Efficace - Overhead minimal comparé à JSON/XML
CDR2 Serialization of Temperature { sensor_id: "room1", value: 23.5 }
+-----+-----+-----+-----+-----+-----+-----+-----+
| 0x00| 0x01| 0x00| 0x00| 'r' | 'o' | 'o' | 'm' |
+-----+-----+-----+-----+-----+-----+-----+-----+
| '1' | 0x00| pad | pad | 0x41| 0xBC| 0x00| 0x00|
+-----+-----+-----+-----+-----+-----+-----+-----+
-- string length -- -- "room1" + null -- -- 23.5 as f32 (LE) --
Protocole de fiabilité
RTPS implémente la fiabilité via :
Best-Effort
- Envoyer et oublier
- Pas d'accusés de réception
- Latence la plus basse
Reliable
- HEARTBEAT annonce les échantillons disponibles
- ACKNACK demande les échantillons manquants
- La retransmission garantit la livraison
RTPS vs autres protocoles
| Caractéristique | RTPS | MQTT | AMQP | ZeroMQ |
|---|---|---|---|---|
| Broker | Aucun | Requis | Requis | Optionnel |
| Multicast | Oui | Non | Non | Oui |
| QoS | Riche (22 politiques) | 3 niveaux | Basique | Aucun |
| Discovery | Automatique | Manuel | Manuel | Manuel |
| Temps réel | Oui | Non | Non | Partiel |
| Standard | OMG | OASIS | OASIS | Aucun |
Déboguer RTPS
Avec Wireshark
Wireshark dispose d'un dissecteur RTPS intégré :
- Capturez le trafic sur les ports UDP 7400-7500
- Filtre :
rtps - Inspectez les sous-messages individuels
Avec hdds_viewer
Notre outil hdds_viewer fournit :
- Capture du trafic RTPS en temps réel
- Decodage des messages avec informations de type
- Visualisation de la topologie
- Analyse de latence
Prochaines étapes
Maintenant vous comprenez comment DDS fonctionne sous le capot. Installons HDDS :
- Guide d'installation - Installer HDDS sur votre système