DDS astucieux
Connectivité des données en temps réel pour les systèmes de défense
Le logiciel intermédiaire qui alimente les plateformes de véhicules critiques pour la mission
DDS complet avec X-Types. DDS de qualité militaire pour la défense.
Powering defence
Astute DDS est le middleware de distribution de données au cœur de la solution complète DEF-STAN 23-009 d'Astute Systems pour l'architecture générique des véhicules (GVA). Des capteurs aux écrans, une plateforme unifiée connecte tous les sous-systèmes de votre véhicule militaire.
Why Publish/Subscribe
Le problème des architectures traditionnelles
Les systèmes embarqués existants utilisent des connexions point à point. Lorsque vous ajoutez un nouveau sous-système, vous devez modifier tous les systèmes avec lesquels il communique. Cela entraîne :
- ❌ Intégration coûteuse — Chaque nouveau composant nécessite un développement personnalisé
- ❌ Systèmes fragiles — Une seule panne peut se propager à l'ensemble du réseau
- ❌ Dépendance vis-à-vis du fournisseur — Les protocoles propriétaires vous enferment auprès d'un seul fournisseur.
- ❌ Mises à jour lentes — Modifier un seul sous-système implique de tout tester à nouveau
La solution de publication/abonnement
Avec l'architecture de publication/abonnement DDS, les sous-systèmes publient simplement des données sur des sujets nommés. Tout système ayant besoin de ces données s'abonne au sujet. Aucune connexion point à point. Aucun code d'intégration personnalisé.
| Avantages commerciaux | Comment Pub/Sub livre |
|---|---|
| 💰 Réduction des coûts d'intégration | Ajouter de nouveaux sous-systèmes sans modifier les sous-systèmes existants |
| 🔧 Maintenance simplifiée | Remplacez ou mettez à niveau les composants indépendamment |
| 🛡️ Une plus grande résilience | Les systèmes continuent de fonctionner même lorsque d'autres tombent en panne. |
| 🏭 Liberté multi-fournisseurs | Mélanger des équipements de différents fournisseurs sur un seul bus de données |
| ⏱️ Délai de mise sur le marché plus court | Les interfaces standardisées impliquent moins de développement personnalisé. |
Source unique pour l'ensemble de la pile GVA
Astute Systems est le seul fournisseur à proposer une suite logicielle complète et intégrée pour les véhicules militaires conformes aux normes GVA :
| Composant | Ce que ça fait |
|---|---|
| bohémien | Visualiser et valider les modèles SysML, générer des définitions d'interface |
| LDMX | Éditeur et validateur de modèles de données foncières de pointe pour LDM v10.0.0 |
| OutilX | Outils automatisés de génération de code, d'intégration et de déploiement |
| DDS astucieux | Connectez tous les sous-systèmes avec une distribution de données sécurisée en temps réel |
| Modèle de données foncières v10.0.0 | Types de données préconfigurés conformes à la norme GVA pour tous les domaines de véhicules |
| Astuce HMI | Logiciel d'affichage pour l'équipage conforme aux exigences DEF-STAN 23-009 |
Avantages de la pile complète
| Avantage | Impact |
|---|---|
| 🎯 Responsable unique | Un seul contrat, une seule équipe de support, un seul partenaire d'intégration |
| 📋 Conformité avérée | Prévalidé selon les exigences DEF-STAN 23-009 |
| 🔄 Mises à jour transparentes | Mettez à niveau n'importe quel composant sans en endommager les autres. |
| 💰 Coûts prévisibles | Pas de frais d'intégration surprises ni de pièges liés aux licences. |
| ⏱️ Livraison plus rapide | Commencez par des logiciels fonctionnels, pas par des structures vides. |
Comparison
Considérations relatives à l'approvisionnement
| Facteur | DDS astucieux | RTI Connext | CycloneDDS | OpenDDS | DDS rapide |
|---|---|---|---|---|---|
| Modèle de licence | options flexibles | Publicité par siège | Eclipse EPL 2.0 | LGPL | Apache 2.0 |
| Coût de la licence | Compétitif | $$$ par déploiement | Gratuit | Gratuit | Gratuit |
| Modèle de soutien | contrat avec un fournisseur australien | Entreprise mondiale | Fondation Eclipse | OCI commercial | Publicité eProsima |
| Soutien basé en Australie | ✅ Oui | ❌ Basé aux États-Unis | ❌ Non | ❌ Basé aux États-Unis | ❌ Basé en Espagne |
| Pré-intégration de la GVA | ✅ Intégré | ❌ Travaux sur mesure | ❌ Bricolage | ❌ Bricolage | ❌ Bricolage |
| Pile complète disponible | ✅ Source unique : IHM + LDM + DDS + Outils | ❌ Intergiciel uniquement | ❌ Intergiciel uniquement | ❌ Intergiciel uniquement | ❌ Intergiciel uniquement |
| Outils SysML | ✅ Bohème + LDMX + ToolX | ❌ Aucun | ❌ Aucun | ❌ Aucun | ❌ Aucun |
| Contrôle des exportations | juridiction australienne | Considérations relatives à la réglementation américaine sur les titres afférents (ITAR) | UE | NOUS | UE |
Comparaison des caractéristiques techniques
| Fonctionnalité | DDS astucieux | RTI Connext | CycloneDDS | OpenDDS | DDS rapide |
|---|---|---|---|---|---|
| DDSI-RTPS 2.5 | ✅ Complet | ✅ Complet | ✅ Complet | ✅ Complet | ✅ Complet |
| Sécurité DDS 1.1 | ✅ Complet | ✅ Complet | ⚠️ Partiel | ✅ Complet | ✅ Complet |
| X-Type 1.3 | ✅ Complet | ✅ Complet | ⚠️ Partiel | ⚠️ Partiel | ⚠️ Partiel |
| API de données dynamiques | ✅ Complet | ✅ Complet | ❌ Aucun | ⚠️ Basique | ⚠️ Basique |
| Service de recherche de type | ✅ Complet | ✅ Complet | ❌ Aucun | ❌ Aucun | ⚠️ Partiel |
| Filtrage du contenu | ✅ Complet | ✅ Complet | ✅ Complet | ✅ Complet | ✅ Complet |
| Transport de mémoire partagée | ✅ Complet | ✅ Complet | ✅ Complet | ❌ Aucun | ✅ Complet |
| Transport TCP | ✅ Complet | ✅ Complet | ✅ Complet | ✅ Complet | ✅ Complet |
| Copie zéro | ✅ Pris en charge | ✅ Pris en charge | ✅ Pris en charge | ❌ Aucun | ✅ Pris en charge |
Conformité aux normes
| Standard | DDS astucieux | RTI Connext | CycloneDDS | OpenDDS | DDS rapide |
|---|---|---|---|---|---|
| Oh mon Dieu, DDS 1.4 | ✅ | ✅ | ✅ | ✅ | ✅ |
| Oh mon Dieu, DDSI-RTPS 2.5 | ✅ | ✅ | ✅ | ✅ | ✅ |
| OMG DDS-XTypes 1.3 | ✅ | ✅ | ⚠️ | ⚠️ | ⚠️ |
| OMG DDS Security 1.1 | ✅ | ✅ | ⚠️ | ✅ | ✅ |
| OMG IDL 4.2 | ✅ | ✅ | ✅ | ✅ | ✅ |
| DEF-STAN 23-009 (GVA) | ✅ | ❌ | ❌ | ❌ | ❌ |
| Modèle de données foncières v10.0.0 | ✅ | ❌ | ❌ | ❌ | ❌ |
Assistance linguistique et de plateforme
| Capacité | DDS astucieux | RTI Connext | CycloneDDS | OpenDDS | DDS rapide |
|---|---|---|---|---|---|
| C++ | C++20 | C++11 | Emballage C99 | C++11 | C++11 |
| C | Via C++ | ✅ Natif | ✅ Natif | ❌ | ✅ Natif |
| Python | ✅ | ✅ | ✅ | ✅ | ✅ |
| Rouiller | ✅ | ❌ | ✅ | ❌ | ❌ |
| Linux | ✅ | ✅ | ✅ | ✅ | ✅ |
| Windows | ✅ | ✅ | ✅ | ✅ | ✅ |
| VxWorks | Feuille de route | ✅ | ⚠️ | ✅ | ⚠️ |
| Systèmes d'exploitation embarqués/temps réel | ✅ Conçu pour | ✅ Variante micro | ⚠️ | ⚠️ | ⚠️ |
| Liaison statique | ✅ Bibliothèque unique | ⚠️ | ⚠️ Bibliothèques partagées | ⚠️ Bibliothèques partagées | ⚠️ Bibliothèques partagées |
Pourquoi Astute DDS gagne
| vs RTI Connext | contre CycloneDDS | contre OpenDDS | contre Fast DDS |
|---|---|---|---|
| options de licence flexibles | Assistance complète pour les modèles X-Type | API de données dynamiques complète | soutien basé en Australie |
| Fournisseur australien, aucune préoccupation liée à l'ITAR | Sécurité intégrée | Service de recherche de type | Conformité totale à la GVA |
| Pile GVA complète à source unique | LDMX + ToolX, le meilleur de sa catégorie | LDMX + ToolX, le meilleur de sa catégorie | Déploiement simplifié |
| LDM v10.0.0 inclus | soutien commercial | juridiction australienne | X-Types complets |
Why Astute DDS
« Nous avons réduit de 40 % le délai d'intégration de notre GVA grâce à la suite Astute. Le fait qu'un seul fournisseur soit responsable du middleware, de l'IHM et du modèle de données a éliminé les accusations mutuelles qui ont entaché les programmes précédents. »
— Responsable de programme, UK Defence Prime
Interopérabilité garantie
Astute DDS est entièrement interopérable avec toutes les principales implémentations DDS. Votre véhicule peut communiquer de manière transparente avec :
Aucune dépendance vis-à-vis d'un fournisseur. Si un système partenaire utilise une implémentation DDS différente, Astute DDS se connectera sans modification.
Conformité aux normes de défense
Conçu pour répondre aux exigences militaires
| Standard | Statut |
|---|---|
| DEF-STAN 23-009 | ✅ Conformité totale à la GVA |
| Modèle de données foncières v10.0.0 | ✅ Types de domaines complets |
| STANAG de l'OTAN | ✅ Prêt pour l'interopérabilité |
| Cyber Essentials | ✅ Certifié en matière de sécurité |
Une sécurité digne de confiance
- 🔐 Communications chiffrées — Toutes les données sont protégées pendant leur transmission
- 🎫 Authentification par certificat — Seuls les systèmes autorisés se connectent
- 📋 Politiques de contrôle d'accès — Définissez qui peut publier ou s'abonner à chaque sujet
- 📝 Journalisation complète des audits — Piste d'audit complète pour les examens de sécurité
Éprouvé en production
Déployé dans le cadre de plusieurs programmes
Astute DDS bénéficie de la confiance des principaux acteurs du secteur de la défense en Australie, au Royaume-Uni et dans les pays alliés :
| Domaine | Applications |
|---|---|
| 🎖️ Véhicules blindés | Affichages pour l'équipage, fusion de capteurs, intégration des armes |
| 🤖 Robotique et systèmes autonomes | Véhicules terrestres sans pilote, plateformes robotiques, navigation autonome |
| 🛡️ Lutte contre les drones (CUAS) | Systèmes de détection, de suivi et de neutralisation des drones |
| ✈️ Stations de contrôle au sol | Commande et contrôle des drones, flux de données des capteurs |
| 🚢 Systèmes navals | Affichages sur la passerelle, contrôle des avaries, navigation |
| 🏭 Formation et simulation | Environnements synthétiques, analyse après action, débriefing |
🎬 Demander une démo
Découvrez Astute DDS et la suite GVA complète en action. Apprenez-en davantage sur notre suite ou demandez une démonstration dès maintenant.
Frequently Asked Questions
Les questions les plus fréquemment posées par les développeurs lors de l'adoption d'Astute DDS...
1. Qu'est-ce qu'Astute DDS ?
Astute DDS est une implémentation C++20 du service de distribution de données OMG.
(DDS) API DCPS, protocole de câblage DDSI-RTPS 2.5, système de types DDS-XTypes 1.3,
Il inclut les plugins DDS-Security 1.1/1.2 et IDL 4.2. Il est fourni sous forme de fichier statique.
la bibliothèque libastutedds.a (ainsi que les liaisons C, Python et Rust) est fournie avec
l'interface graphique de diagnostic astutedds-inspect et une démo interopérable de formes.
2. Comment publier un sujet et s'y abonner ?
Créez un DomainParticipant , un Topic , puis un DataWriter (côté éditeur).
ou DataReader (côté abonné) :
using namespace astutedds::dcps;
auto dpf = DomainParticipantFactory::get_instance();
auto dp = dpf->create_participant(0, PARTICIPANT_QOS_DEFAULT, nullptr, 0);
auto topic = dp->create_topic("Hello", "HelloMsg", TOPIC_QOS_DEFAULT, nullptr, 0);
// Publisher
auto pub = dp->create_publisher(PUBLISHER_QOS_DEFAULT, nullptr, 0);
auto writer = pub->create_datawriter(topic, DATAWRITER_QOS_DEFAULT, nullptr, 0);
writer->write(sample, HANDLE_NIL);
// Subscriber
auto sub = dp->create_subscriber(SUBSCRIBER_QOS_DEFAULT, nullptr, 0);
auto reader = sub->create_datareader(topic, DATAREADER_QOS_DEFAULT, nullptr, 0);Voir la section « Premiers pas » › Première application .
3. Quelle est la différence entre read() et take() ?
-
read()renvoie des échantillons mais **les laisse dans le cache du lecteur**, afin que les appels ultérieurs (ou d'autres lecteurs du même abonné) puissent les relire. -
take()renvoie des échantillons et les **supprime** du cache.
Utilisez read() lorsque le sujet représente un état partagé que vous souhaitez inspecter.
de manière répétée ; utilisez take() lorsque le sujet représente des événements que vous souhaitez
À consommer une seule fois.
4. Pourquoi les abonnés qui s'inscrivent tardivement ne reçoivent-ils pas d'échantillons plus tôt ?
Par défaut, DURABILITY est VOLATILE , donc les échantillons écrits avant un abonné
Les échantillons correspondants ne sont pas livrés. Pour livrer des échantillons historiques aux nouveaux arrivants,
Configurer l'écrivain et les lecteurs correspondants avec TRANSIENT_LOCAL
durabilité (qui nécessite également une fiabilité RELIABLE ) :
DataWriterQos qos;
writer->get_qos(qos);
qos.durability().kind = TRANSIENT_LOCAL_DURABILITY_QOS;
qos.reliability().kind = RELIABLE_RELIABILITY_QOS;
writer->set_qos(qos); Pour assurer la persistance des modifications lors des redémarrages du processus d'écriture, utilisez la méthode suivante :
Service de persistance ou service TRANSIENT / PERSISTENT
types de durabilité.
5. À quoi sert la QoS RELIABILITY ?
-
BEST_EFFORT(paramètre par défaut pour de nombreux sujets intégrés) : les échantillons perdus sur le réseau ne sont pas retransmis. Surcharge minimale. -
RELIABLE: le système d'écriture suit les accusés de réception (ACKNACK/ signal de présence) de chaque lecteur correspondant et retransmet les numéros de séquence manqués jusqu'à ce que
Le lecteur rattrape son retard ou l'histoire est complète.
La fiabilité est par auteur/par lecteur et la compatibilité est indispensable : un BEST_EFFORT
Un lecteur peut correspondre à un écrivain RELIABLE , mais pas l'inverse.
6. À quoi sert le QoS DURABILITY ?
DURABILITY détermine si les échantillons sont conservés pour être livrés aux lecteurs.qui se joignent après que l'échantillon a été écrit :
| Gentil | Disponible pour les nouveaux arrivants ? |
|---|---|
VOLATILE | Non |
TRANSIENT_LOCAL | Oui, tant que l'écrivain est vivant. |
TRANSIENT | Oui, tout au long de la vie de l'auteur (via le service de persistance). |
PERSISTENT | Oui, lors des redémarrages de processus (sur disque) |
7. Quelle est la différence entre HISTORY et DURABILITY ?
HISTORY ( KEEP_LAST(depth) ou KEEP_ALL ) contrôle le nombre d'échantillons conservés. Le cache d'écriture/lecture est conservé à tout instant. DURABILITY détermine si le
L'auteur propose des échantillons aux lecteurs qui correspondent plus tard. Ils travaillent ensemble, mais
résoudre différents problèmes : KEEP_ALL seul ne rend pas les échantillons disponibles
aux nouveaux arrivants.
8. Comment spécifier un ID de domaine ?
Transmettez l'identifiant du domaine comme premier argument à create_participant :
auto dp = DomainParticipantFactory::get_instance()
->create_participant(42, PARTICIPANT_QOS_DEFAULT, nullptr, 0); Les participants situés sur des domaines différents ne communiquent pas. Le port DDSI-RTPS
La formule 7400 + 250 * domain_id détermine les ports UDP de base utilisés pour
découverte.
9. Pourquoi mon éditeur et mon abonné ne se découvrent-ils pas mutuellement ?
Causes fréquentes :
- Identifiants de domaine différents — les deux participants doivent utiliser le même identifiant.
- Multicast bloqué — SPDP utilise le multicast UDP sur
239.255.0.1par
Par défaut, vérifiez le pare-feu hôte et activez/désactivez l'écoute IGMP. - Interface réseau incorrecte — sur les hôtes multihébergés, définissez
ASTUTEDDS_NETWORK_INTERFACE=ou configurez-le dans le profil JSON/XML de découverte (voir Configuration de la découverte JSON ). - QoS incompatible — voir question 15.
- Transports différents — vérifiez que les deux pairs utilisent UDPv4 (ou UDPv6).
TCP, SHM).
Activez la journalisation des traces avec ASTUTEDDS_LOG_LEVEL=trace et inspectez un paquet
capture avec astutedds-inspect .
10. Quelles fonctionnalités IDL sont prises en charge ?
Le compilateur astutedds-idl intégré implémente OMG IDL 4.2, notamment :
- Types primitifs (
boolean,octet, types entiersint8–uint64,float/double/long double,char/wchar,string/wstring). - Structures, unions, énumérations, masques de bits, typedefs.
- Séquences, tableaux et cartes bornés et non bornés.
-
@key,@id,@optional,@default,@range,@min,@max,@unit,@extensibility(FINAL|APPENDABLE|MUTABLE),@nested. - Constantes et espaces de noms
module.
Le code C++ généré utilise par défaut XCDR2 avec XCDR1 optionnel pour l'interopérabilité.
11. Comment filtrer les exemples que j'ai publiés moi-même ?
Deux options :
- Ignorer au niveau du participant : appelez
dp->ignore_publication(handle)
en passant l'InstanceHandle_tde l'écrivain local. - Filtrer dans le rappel du lecteur en utilisant
SampleInfo::publication_handle
et en le comparant à laget_instance_handle()de votre rédacteur.
Un sujet filtré par contenu peut également exclure un champ clé auto-publié.
12. Quels caractères sont autorisés dans les noms de sujets ?
Les noms de sujets peuvent contenir des caractères alphanumériques ASCII, _ et / comme un
Séparateur hiérarchique. Longueur limitée à 256 caractères. Évitez les caractères en début de chaîne.
chiffres et préfixes intégrés DDS réservés ( DCPS , dds ). Les noms de type suivent
La même règle.
13. Comment puis-je détecter lorsqu'un rédacteur ou un lecteur distant s'absente ?
Installez un DataReaderListener et implémentez on_subscription_matched /
on_liveliness_changed , ou poll reader->get_subscription_matched_status() . Le current_count_changeCe champ est négatif lorsqu'un pair ne correspond pas.
La vivacité est régie par le QoS LIVELINESS — ensemble
kind = AUTOMATIC_LIVELINESS_QOS avec une lease_duration pour détecterDes pairs silencieux dans un laps de temps limité.
14. Comment suis-je notifié lorsque de nouvelles données arrivent ?
Attachez un écouteur avec le masque DATA_AVAILABLE_STATUS :
class MyListener : public DataReaderListener {
void on_data_available(DataReader* reader) override {
// call reader->take(...) here
}
};
reader->set_listener(&listener, DATA_AVAILABLE_STATUS); L'événement on_data_available se déclenche à la fois pour les nouveaux échantillons et pour le cycle de vie des instances. modifications ; inspectez toujours SampleInfo::valid_data avant de déréférencer le
Exemple de charge utile.
15. Que signifie « QoS incompatible » ?
Un auteur et un lecteur ne s'accordent que lorsque chaque requête/offre de qualité de service est conforme.
compatible:
| Politique | Demandé ≤ Offert |
|---|---|
RELIABILITY | lecteur BEST_EFFORT ≤ écrivain RELIABLE |
DURABILITY | Type de lecteur ≤ type d'écrivain (dans l'ordre des spécifications) |
DEADLINE | period de lecture ≥ period d'écriture |
LATENCY_BUDGET | duration de lecture ≥ duration d'écriture |
OWNERSHIP | doivent être égales ( SHARED ou EXCLUSIVE ) |
PARTITION | Au moins un nom de partition doit se chevaucher. |
Écouter les événements on_offered_incompatible_qos / on_requested_incompatible_qos
pour trouver l'identifiant exact de la politique lors de l'exécution.
16. Comment envoyer des échantillons plus volumineux qu'un datagramme UDP ?
Astute DDS fragmente automatiquement les échantillons plus grands que la taille configurée
fragment_size (1344 octets par défaut pour IPv4) et les réassemble sur le Lecteur utilisant les sous-messages DATA_FRAG de DDSI-RTPS. Protocole de fiabilité
récupère les fragments manquants sans renvoyer l'échantillon entier.
Pour les échantillons très volumineux (≥ 1 Mo), augmentez la taille des tampons de socket du système d'exploitation :
sudo sysctl -w net.core.rmem_max=8388608
sudo sysctl -w net.core.wmem_max=8388608et envisagez de passer au transport à mémoire partagée pour les lecteurs locaux.
17. Comment configurer l'interface réseau utilisée ?
Trois options, par ordre de priorité :
- Variable d'environnement :
ASTUTEDDS_NETWORK_INTERFACE=eth0. - Configuration de la découverte JSON — voir Configuration de la découverte JSON .
- Profil QoS XML — voir Profils QoS DDS-XML .
Si aucune interface n'est définie, Astute DDS sélectionne la première interface non-boucle avec une
Adresse compatible avec la multidiffusion.
18. Puis-je utiliser Astute DDS sur un réseau sans multidiffusion ?
Oui. Deux alternatives :
- Liste des pairs SPDP unicast : fournissez une liste de paires hôte/port homologues dans le
Configuration de découverte ; Astute DDS diffuse des annonces SPDP unicast à chaque pair. - Transport TCP : basculer le participant vers le transport TCP RTPS pour
environnements qui bloquent complètement le protocole UDP. Voir
Routeur de domaine DDS pour la traversée de réseaux isolés.
19. Comment optimiser pour obtenir une faible latence ?
- Utilisez la fiabilité
RELIABLEavec l'historiqueKEEP_LAST(1)aux deux extrémités.
Les retransmissions sont minimales. - Activer le transport de mémoire partagée pour les participants situés au même endroit.
- Associez les threads Astute DDS à une affinité CPU et utilisez la planification en temps réel.
(SCHED_FIFO) sur les processus de publication et d'abonnement. - Désactiver Nagle en utilisant UDP (par défaut).
- Augmentez les tampons de socket (voir question 16) pour absorber les pics.
- Définissez
LATENCY_BUDGET = 0pour désactiver tout délai de traitement par lots.
20. Pourquoi observe-t-on des pics de latence lors de la publication de grands échantillons ?
Lorsque les échantillons dépassent la taille par défaut du tampon de socket du système d'exploitation (souvent 208 Ko sous Linux),
Le noyau abandonne des paquets et le protocole fiable doit les retransmettre, ce qui provoque
pics. Augmenter net.core.rmem_max / net.core.wmem_max à au moins la valeur
La taille de l'échantillon résout ce problème. Envisagez une fragmentation avec fragment_size plus petite.
sur les réseaux à pertes.
21. Comment puis-je relier deux domaines DDS ?
Utilisez le routeur de domaine Astute DDS — un service qui connecte deux domaines ou plus.
domaines et transfert des sujets configurés entre eux, avec option
Filtrage des clés/du contenu et traduction QoS. Voir
Routeur de domaine DDS .
22. Quelles liaisons linguistiques sont disponibles ?
| Langue | Statut | Notes |
|---|---|---|
| C++20 | Écurie | API principale — libastutedds.a |
| C | Écurie | API C plate pour FFI, voir include/astutedds/c/astutedds.h |
| Python | Écurie | Liaisons pybind11, CPython 3.10 – 3.13 |
| Rouiller | Bêta | crate astutedds (enveloppe sécurisée pour l'API C) |
23. Quelles plateformes et versions de systèmes d'exploitation sont prises en charge ?
| Plate-forme | Versions testées |
|---|---|
| Linux | Ubuntu 22.04 / 24.04, RHEL 9 / 10, AlmaLinux 9 / 10, Debian 12 |
| Windows | Windows 10, Windows 11, Windows Server 2022 |
Les roues Python pour Linux sont étiquetées manylinux_2_28 (glibc ≥ 2.28) et s'exécutent
sur toute distribution compatible.
24. Comment activer la sécurité DDS ?
- Fournir les artefacts d'identité (X.509) et d'autorisation (XML signé).
- Configurez la qualité de service (QoS) des participants avec l'authentification, le contrôle d'accès et
Propriétés du plugin crypto (certificat d'autorité de certification, certificat/clé d'identité, fichier d'autorisations,
fichier de gouvernance). - Lien avec Astute DDS construit avec
-DASTUTEDDS_ENABLE_SECURITY=ON.
Consultez la section Sécurité de DDS pour obtenir des instructions complètes et un
Modèle de gouvernance/autorisations.
25. Comment puis-je conserver les données après un redémarrage ?
Exécutez le service de persistance en parallèle de votre domaine. Il s'abonne à
sujets TRANSIENT / PERSISTENT configurés, stockent les échantillons localement
base de données (SQLite par défaut), et les republie dans la base de données à jonction tardive
abonnés — y compris ceux qui s'abonnent après le départ de l'auteur original.
Voir Service de persistance .
26. Comment enregistrer et rejouer le trafic ?
Utilisez l'outil astutedds-record intégré pour capturer un domaine dans un
.astdb et astutedds-replay permettent de le republier avec des paramètres ajustables. Mise à l'échelle temporelle. L'enregistrement prend en compte le type de fichier et utilise le format XCDR2 en interne. Voir
Enregistrement et relecture .
27. Comment faire évoluer un type de données sans perturber les abonnés ?
Annotez le type IDL avec @extensibility(MUTABLE) (ou APPENDABLE ) et
Chaque membre est identifié par @id(N) . Les flux mutables XCDR2 permettent :
- Ajout de nouveaux membres à chaque extrémité.
- Suppression des membres optionnels.
- Réorganisation des membres.
Les membres incompatibles sont ignorés via les règles d'assignabilité des types X.
@extensibility(FINAL) verrouille la mise en page et doit être utilisé lorsque le binaireLa compatibilité avec les anciens lecteurs XCDR1 est importante.
28. Comment utiliser les sujets filtrés par contenu ?
Créez un ContentFilteredTopic à partir d'un sujet classique avec un filtre de type SQL.
expression et lier un DataReader à celle-ci :
std::vector params{"42"};
auto cft = dp->create_contentfilteredtopic(
"HighSeverity", topic, "severity > %0", params);
auto reader = sub->create_datareader(cft, DATAREADER_QOS_DEFAULT, nullptr, 0); Le filtre est évalué côté écriture lorsque cela est possible afin d'économiser de la bande passante.
29. Comment configurer la QoS à partir d'un fichier XML ?
Utilisez XmlQosLoader pour lire un profil DDS-XML et l'appliquer lors de la création
entités :
XmlQosLoader loader;
loader.load_file("qos_profiles.xml");
auto qos = loader.get_datawriter_qos("MyLib", "ReliableProfile");
auto writer = pub->create_datawriter(topic, qos, nullptr, 0); Consultez les profils QoS DDS-XML pour le schéma et les exemples fonctionnels.
exemples.
30. Comment puis-je déboguer les problèmes d'interopérabilité ou de découverte ?
- Exécutez
astutedds-inspectsur le domaine pour afficher les éléments découverts
participants, points de terminaison et statut de correspondance en temps réel. - Capturez le trafic avec
tcpdump -i any -w dds.pcap 'udp port 7400 or portrange 7400-7500'et ouvrez-le dans Wireshark, l'analyseur RTPS.
décode les données SPDP, SEDP et utilisateur. - Activer les journaux de trace :
ASTUTEDDS_LOG_LEVEL=trace ASTUTEDDS_LOG_FILE=/tmp/astutedds.log. - Vérifiez les identifiants et les ports des entités :
- Écrivain/lecteur SPDP :
00:01:00:c2/00:01:00:c7 - Publication SEDP :
00:00:03:c2/00:00:03:c7 - Abonnement SEDP :
00:00:04:c2/00:00:04:c7 - Port de base :
7400 + 250 × domain_id.
- Écrivain/lecteur SPDP :
- Vérifiez que les deux pairs annoncent des identifiants de fournisseur et une version de protocole compatibles.
(DDSI-RTPS 2.5).