Έξυπνο DDS
Συνδεσιμότητα Δεδομένων σε Πραγματικό Χρόνο για Αμυντικά Συστήματα
Το middleware που τροφοδοτεί πλατφόρμες οχημάτων κρίσιμης σημασίας
Πλήρως εξοπλισμένο DDS με X-Types. DDS βαθμίδας όπλων για άμυνα.
Powering defence
Το Astute DDS είναι το middleware διανομής δεδομένων στην καρδιά της ολοκληρωμένης λύσης DEF-STAN 23-009 Generic Vehicle Architecture (GVA) της Astute Systems. Από αισθητήρες έως οθόνες, μια ενοποιημένη πλατφόρμα συνδέει κάθε υποσύστημα στο στρατιωτικό σας όχημα.
Why Publish/Subscribe
Το πρόβλημα με τις παραδοσιακές αρχιτεκτονικές
Τα παλαιότερα συστήματα οχημάτων χρησιμοποιούν συνδέσεις από σημείο σε σημείο. Όταν προσθέτετε ένα νέο υποσύστημα, πρέπει να τροποποιήσετε κάθε σύστημα με το οποίο επικοινωνεί. Αυτό δημιουργεί:
- ❌ Ακριβή ενσωμάτωση — Κάθε νέο στοιχείο απαιτεί προσαρμοσμένη κωδικοποίηση
- ❌ Ευάλωτα συστήματα — Μία βλάβη μπορεί να εξαπλωθεί καταρρακτωδώς στο δίκτυο
- ❌ Κλείδωμα προμηθευτή — Τα ιδιόκτητα πρωτόκολλα σας παγιδεύουν με έναν μόνο προμηθευτή
- ❌ Αργές αναβαθμίσεις — Η αλλαγή ενός υποσυστήματος σημαίνει επανέλεγχο των πάντων
Η Λύση Δημοσίευσης/Εγγραφής
Με την αρχιτεκτονική δημοσίευσης/εγγραφής DDS, τα υποσυστήματα απλώς δημοσιεύουν δεδομένα σε συγκεκριμένα θέματα. Οποιοδήποτε σύστημα χρειάζεται αυτά τα δεδομένα εγγράφεται στο θέμα. Δεν απαιτούνται συνδέσεις από σημείο σε σημείο. Δεν απαιτείται προσαρμοσμένος κώδικας ενσωμάτωσης.
| Επιχειρηματικό όφελος | Πώς παραδίδεται το Pub/Sub |
|---|---|
| 💰 Χαμηλότερο κόστος ενσωμάτωσης | Προσθήκη νέων υποσυστημάτων χωρίς τροποποίηση των υπαρχόντων |
| 🔧 Ευκολότερη συντήρηση | Αντικατάσταση ή αναβάθμιση εξαρτημάτων ανεξάρτητα |
| 🛡️ Μεγαλύτερη Ανθεκτικότητα | Τα συστήματα συνεχίζουν να λειτουργούν ακόμα και όταν άλλα αποτυγχάνουν |
| 🏭 Ελευθερία Πολλαπλών Προμηθευτών | Συνδυάστε εξοπλισμό από διαφορετικούς προμηθευτές σε ένα δίαυλο δεδομένων |
| ⏱️ Ταχύτερος χρόνος διάθεσης στην αγορά | Οι τυπικές διεπαφές σημαίνουν λιγότερη προσαρμοσμένη ανάπτυξη |
Μία πηγή για το πλήρες GVA Stack
Η Astute Systems είναι ο μόνος προμηθευτής που παρέχει μια ολοκληρωμένη, ολοκληρωμένη στοίβα λογισμικού για στρατιωτικά οχήματα συμβατά με GVA:
| Συστατικό | Τι κάνει |
|---|---|
| Τσιγγάνος | Προβολή και επικύρωση μοντέλων SysML, δημιουργία ορισμών διεπαφών |
| LDMX | Κορυφαίος επεξεργαστής και επικυρωτής μοντέλων δεδομένων γης για το LDM v10.0.0 |
| Εργαλείο X | Αυτοματοποιημένη δημιουργία κώδικα, ενσωμάτωση δομών και εργαλεία ανάπτυξης |
| Έξυπνο DDS | Συνδέστε όλα τα υποσυστήματα με ασφαλή διανομή δεδομένων σε πραγματικό χρόνο |
| Μοντέλο Δεδομένων Γης v10.0.0 | Προκατασκευασμένοι τύποι δεδομένων συμβατοί με GVA για όλους τους τομείς οχημάτων |
| Έξυπνο HMI | Λογισμικό προβολής πληρώματος που πληροί τις απαιτήσεις DEF-STAN 23-009 |
Οφέλη του Full Stack
| Οφελος | Σύγκρουση |
|---|---|
| 🎯 Ενιαίο Σημείο Ευθύνης | Ένα συμβόλαιο, μία ομάδα υποστήριξης, ένας συνεργάτης ενσωμάτωσης |
| 📋 Αποδεδειγμένη Συμμόρφωση | Προεπικυρωμένο σύμφωνα με τις απαιτήσεις του DEF-STAN 23-009 |
| 🔄 Απρόσκοπτες ενημερώσεις | Αναβαθμίστε οποιοδήποτε στοιχείο χωρίς να καταστρέψετε τα άλλα |
| 💰 Προβλέψιμο Κόστος | Χωρίς εκπληκτικές χρεώσεις ενσωμάτωσης ή προβλήματα αδειοδότησης |
| ⏱️ Ταχύτερη παράδοση | Ξεκινήστε με λειτουργικό λογισμικό, όχι με άδεια πλαίσια |
Comparison
Ζητήματα Προμηθειών
| Παράγοντας | Έξυπνο DDS | RTI Connect | CycloneDDS | OpenDDS | Γρήγορο DDS |
|---|---|---|---|---|---|
| Μοντέλο Άδειας Οδήγησης | Ευέλικτες επιλογές | Διαφήμιση ανά θέση | Eclipse EPL 2.0 | LGPL | Apache 2.0 |
| Κόστος Άδειας | Ανταγωνιστικός | $$$ ανά ανάπτυξη | Δωρεάν | Δωρεάν | Δωρεάν |
| Μοντέλο υποστήριξης | Σύμβαση προμηθευτή στην Αυστραλία | Παγκόσμια επιχείρηση | Ίδρυμα Eclipse | Διαφήμιση OCI | Διαφήμιση eProsima |
| Υποστήριξη με έδρα την Αυστραλία | ✅ Ναι | ❌ Με έδρα τις ΗΠΑ | ❌ Όχι | ❌ Με έδρα τις ΗΠΑ | ❌ Με έδρα την Ισπανία |
| Προ-Ενσωμάτωση ΑΠΑ | ✅ Ενσωματωμένο | ❌ Εργασίες κατά παραγγελία | ❌ Φτιάξ' το μόνος σου | ❌ Φτιάξ' το μόνος σου | ❌ Φτιάξ' το μόνος σου |
| Πλήρης στοίβα διαθέσιμη | ✅ Μία πηγή: HMI + LDM + DDS + Εργαλεία | ❌ Μόνο ενδιάμεσο λογισμικό | ❌ Μόνο ενδιάμεσο λογισμικό | ❌ Μόνο ενδιάμεσο λογισμικό | ❌ Μόνο ενδιάμεσο λογισμικό |
| Εργαλεία SysML | ✅ Μποέμ + LDMX + ToolX | ❌ Κανένα | ❌ Κανένα | ❌ Κανένα | ❌ Κανένα |
| Έλεγχος Εξαγωγών | Αυστραλιανή δικαιοδοσία | Σκέψεις για το ITAR των ΗΠΑ | ΕΕ | ΜΑΣ | ΕΕ |
Σύγκριση τεχνικών χαρακτηριστικών
| Χαρακτηριστικό | Έξυπνο DDS | RTI Connect | CycloneDDS | OpenDDS | Γρήγορο DDS |
|---|---|---|---|---|---|
| DDSI-RTPS 2.5 | ✅ Ολοκληρώθηκε | ✅ Ολοκληρώθηκε | ✅ Ολοκληρώθηκε | ✅ Ολοκληρώθηκε | ✅ Ολοκληρώθηκε |
| Ασφάλεια DDS 1.1 | ✅ Ολοκληρώθηκε | ✅ Ολοκληρώθηκε | ⚠️ Μερική | ✅ Ολοκληρώθηκε | ✅ Ολοκληρώθηκε |
| Τύποι X 1.3 | ✅ Ολοκληρώθηκε | ✅ Ολοκληρώθηκε | ⚠️ Μερική | ⚠️ Μερική | ⚠️ Μερική |
| Δυναμικό API Δεδομένων | ✅ Ολοκληρώθηκε | ✅ Ολοκληρώθηκε | ❌ Κανένα | ⚠️ Βασικό | ⚠️ Βασικό |
| Υπηρεσία αναζήτησης τύπου | ✅ Ολοκληρώθηκε | ✅ Ολοκληρώθηκε | ❌ Κανένα | ❌ Κανένα | ⚠️ Μερική |
| Φιλτράρισμα περιεχομένου | ✅ Ολοκληρώθηκε | ✅ Ολοκληρώθηκε | ✅ Ολοκληρώθηκε | ✅ Ολοκληρώθηκε | ✅ Ολοκληρώθηκε |
| Μεταφορά κοινόχρηστης μνήμης | ✅ Ολοκληρώθηκε | ✅ Ολοκληρώθηκε | ✅ Ολοκληρώθηκε | ❌ Κανένα | ✅ Ολοκληρώθηκε |
| Μεταφορά TCP | ✅ Ολοκληρώθηκε | ✅ Ολοκληρώθηκε | ✅ Ολοκληρώθηκε | ✅ Ολοκληρώθηκε | ✅ Ολοκληρώθηκε |
| Μηδενικό αντίγραφο | ✅ Υποστηρίζεται | ✅ Υποστηρίζεται | ✅ Υποστηρίζεται | ❌ Κανένα | ✅ Υποστηρίζεται |
Συμμόρφωση με τα πρότυπα
| Πρότυπο | Έξυπνο DDS | RTI Connect | CycloneDDS | OpenDDS | Γρήγορο DDS |
|---|---|---|---|---|---|
| Ω, Θεέ μου, DDS 1.4 | ✅ | ✅ | ✅ | ✅ | ✅ |
| Ω, Θεέ μου, DDSI-RTPS 2.5 | ✅ | ✅ | ✅ | ✅ | ✅ |
| OMG DDS-XTypes 1.3 | ✅ | ✅ | ⚠️ | ⚠️ | ⚠️ |
| Ασφάλεια OMG DDS 1.1 | ✅ | ✅ | ⚠️ | ✅ | ✅ |
| OMG IDL 4.2 | ✅ | ✅ | ✅ | ✅ | ✅ |
| DEF-STAN 23-009 (ΑΠΑ) | ✅ | ❌ | ❌ | ❌ | ❌ |
| Μοντέλο Δεδομένων Γης v10.0.0 | ✅ | ❌ | ❌ | ❌ | ❌ |
Υποστήριξη Γλώσσας & Πλατφόρμας
| Ικανότητα | Έξυπνο DDS | RTI Connect | CycloneDDS | OpenDDS | Γρήγορο DDS |
|---|---|---|---|---|---|
| C++ | C++20 | C++11 | Περιτύλιγμα C99 | C++11 | C++11 |
| ντο | Μέσω C++ | ✅ Ιθαγενής | ✅ Ιθαγενής | ❌ | ✅ Ιθαγενής |
| Πύθων | ✅ | ✅ | ✅ | ✅ | ✅ |
| Σκωρία | ✅ | ❌ | ✅ | ❌ | ❌ |
| Linux | ✅ | ✅ | ✅ | ✅ | ✅ |
| Παράθυρα | ✅ | ✅ | ✅ | ✅ | ✅ |
| VxWorks | Χάρτης πορείας | ✅ | ⚠️ | ✅ | ⚠️ |
| Ενσωματωμένο/RTOS | ✅ Σχεδιασμένο για | ✅ Μικροπαραλλαγή | ⚠️ | ⚠️ | ⚠️ |
| Στατική σύνδεση | ✅ Ενιαία βιβλιοθήκη | ⚠️ | ⚠️ Κοινόχρηστες βιβλιοθήκες | ⚠️ Κοινόχρηστες βιβλιοθήκες | ⚠️ Κοινόχρηστες βιβλιοθήκες |
Γιατί κερδίζει το Astute DDS
| εναντίον RTI Connext | εναντίον CycloneDDS | έναντι OpenDDS | έναντι Γρήγορου DDS |
|---|---|---|---|
| Ευέλικτες επιλογές αδειοδότησης | Πλήρης υποστήριξη X-Types | Πλήρες API Δυναμικών Δεδομένων | Υποστήριξη με έδρα την Αυστραλία |
| Αυστραλός προμηθευτής, δεν υπάρχουν ανησυχίες για το ITAR | Ενσωματωμένη ασφάλεια | Υπηρεσία αναζήτησης τύπου | Πλήρης συμμόρφωση με την ΑΠΑ |
| Πλήρης στοίβα ΑΠΑ από μία πηγή | Το καλύτερο στην κατηγορία του LDMX + ToolX | Το καλύτερο στην κατηγορία του LDMX + ToolX | Απλούστερη ανάπτυξη |
| Περιλαμβάνεται LDM v10.0.0 | Εμπορική υποστήριξη | Αυστραλιανή δικαιοδοσία | Πλήρεις τύποι X |
Why Astute DDS
«Μειώσαμε το χρονοδιάγραμμα ενσωμάτωσης της GVA κατά 40% χρησιμοποιώντας τη στοίβα Astute. Έχοντας έναν προμηθευτή υπεύθυνο για το middleware, το HMI και το μοντέλο δεδομένων, εξαλείφαμε τις κατηγορίες που μάστιζαν τα προηγούμενα προγράμματα.»
— Διευθυντής Προγράμματος, UK Defence Prime
Εγγυημένη διαλειτουργικότητα
Το Astute DDS είναι πλήρως διαλειτουργικό με όλες τις κύριες εφαρμογές DDS. Το όχημά σας μπορεί να επικοινωνεί απρόσκοπτα με:
Δεν υπάρχει δέσμευση προμηθευτή. Εάν ένα σύστημα συνεργάτη χρησιμοποιεί διαφορετική υλοποίηση DDS, το Astute DDS θα συνδεθεί χωρίς τροποποίηση.
Συμμόρφωση με τα Πρότυπα Άμυνας
Κατασκευασμένο για στρατιωτικές απαιτήσεις
| Πρότυπο | Κατάσταση |
|---|---|
| DEF-STAN 23-009 | ✅ Πλήρης συμμόρφωση με την ΑΠΑ |
| Μοντέλο Δεδομένων Γης v10.0.0 | ✅ Πλήρεις τύποι domain |
| ΝΑΤΟ ΣΤΑΝΑΓ | ✅ Έτοιμο για διαλειτουργικότητα |
| Βασικά στοιχεία στον κυβερνοχώρο | ✅ Πιστοποιημένο για ασφάλεια |
Ασφάλεια που μπορείτε να εμπιστευτείτε
- 🔐 Κρυπτογραφημένες επικοινωνίες — Όλα τα δεδομένα προστατεύονται κατά τη μεταφορά
- 🎫 Έλεγχος ταυτότητας βάσει πιστοποιητικού — Μόνο εξουσιοδοτημένα συστήματα συνδέονται
- 📋 Πολιτικές ελέγχου πρόσβασης — Ορίστε ποιος μπορεί να δημοσιεύσει ή να εγγραφεί σε κάθε θέμα
- 📝 Πλήρης καταγραφή ελέγχου — Πλήρης παρακολούθηση για ελέγχους ασφαλείας
Αποδεδειγμένο στην παραγωγή
Αναπτύχθηκε σε Πολλαπλά Προγράμματα
Το Astute DDS εμπιστεύονται οι αμυντικοί ιθύνοντες σε όλη την Αυστραλία, το Ηνωμένο Βασίλειο και συμμαχικά έθνη:
| Πεδίο ορισμού | Εφαρμογές |
|---|---|
| 🎖️ Τεθωρακισμένα Οχήματα | Οθόνες πληρώματος, σύντηξη αισθητήρων, ενσωμάτωση όπλων |
| 🤖 Ρομποτική & Αυτόνομα Συστήματα | Μη επανδρωμένα επίγεια οχήματα, ρομποτικές πλατφόρμες, αυτόνομη πλοήγηση |
| 🛡️ Αντι-UAS (CUAS) | Συστήματα ανίχνευσης, παρακολούθησης και αναχαίτισης drones |
| ✈️ Σταθμοί Ελέγχου Επίγειας Λειτουργίας | Διοίκηση και έλεγχος UAV, τροφοδοσίες αισθητήρων |
| 🚢 Ναυτικά Συστήματα | Οθόνες γέφυρας, έλεγχος ζημιών, πλοήγηση |
| 🏭 Εκπαίδευση & Προσομοίωση | Συνθετικά περιβάλλοντα, ανασκόπηση μετά την ενέργεια, απολογισμός |
🎬 Αίτημα επίδειξης
Δείτε το Astute DDS και την πλήρη στοίβα GVA σε δράση. Μάθετε περισσότερα για τη στοίβα μας ή ζητήστε μια επίδειξη τώρα.
Frequently Asked Questions
Οι πιο συχνές ερωτήσεις που κάνουν οι προγραμματιστές κατά την υιοθέτηση του Astute DDS.
1. Τι είναι το Astute DDS;
Το Astute DDS είναι μια υλοποίηση C++20 της Υπηρεσίας Διανομής Δεδομένων OMG
(DDS) DCPS API, πρωτόκολλο DDSI-RTPS 2.5 καλωδίων, σύστημα τύπου DDS-XTypes 1.3,
Πρόσθετα DDS-Security 1.1/1.2 και IDL 4.2. Παραδίδεται ως στατικό αρχείο
βιβλιοθήκη libastutedds.a (συν συνδέσεις C, Python και Rust) και αποστέλλεται με
Το γραφικό περιβάλλον χρήστη (GUI) διαγνωστικών astutedds-inspect και μια διαλειτουργική επίδειξη Shapes.
2. Πώς μπορώ να δημοσιεύσω και να εγγραφώ σε ένα θέμα;
Δημιουργήστε ένα DomainParticipant , ένα Topic και, στη συνέχεια, ένα DataWriter (από την πλευρά του εκδότη)
ή DataReader (πλευρά συνδρομητή):
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);Δείτε την ενότητα Ξεκινώντας › Πρώτη Εφαρμογή .
3. Ποια είναι η διαφορά μεταξύ read() και take() ;
-
read()επιστρέφει δείγματα αλλά **τα αφήνει στην προσωρινή μνήμη του αναγνώστη**, έτσι ώστε οι μεταγενέστερες κλήσεις (ή άλλοι αναγνώστες στον ίδιο συνδρομητή) να μπορούν να τα διαβάσουν ξανά. -
take()επιστρέφει δείγματα και **τα αφαιρεί** από την προσωρινή μνήμη.
Χρησιμοποιήστε read() όταν το θέμα αντιπροσωπεύει την κοινόχρηστη κατάσταση που θέλετε να ελέγξετε
επανειλημμένα· χρησιμοποιήστε take() όταν το θέμα αντιπροσωπεύει συμβάντα που θέλετε να
καταναλώστε ακριβώς μία φορά.
4. Γιατί οι συνδρομητές που εγγράφονται αργά δεν λαμβάνουν νωρίτερα δείγματα;
Από προεπιλογή, DURABILITY είναι VOLATILE , επομένως τα δείγματα γράφονται πριν από έναν συνδρομητή.
είναι ταιριασμένο δεν παραδίδονται. Για την παράδοση ιστορικών δειγμάτων σε όσους έχουν εγγραφεί αργότερα,
ρυθμίστε τον συγγραφέα και τους αντίστοιχους αναγνώστες με TRANSIENT_LOCAL
ανθεκτικότητα (η οποία απαιτεί επίσης RELIABLE αξιοπιστία):
DataWriterQos qos;
writer->get_qos(qos);
qos.durability().kind = TRANSIENT_LOCAL_DURABILITY_QOS;
qos.reliability().kind = RELIABLE_RELIABILITY_QOS;
writer->set_qos(qos); Για επιμονή σε όλες τις επανεκκινήσεις του συγγραφέα, χρησιμοποιήστε το
Υπηρεσία Επιμονής ή η TRANSIENT / PERSISTENT
είδη ανθεκτικότητας.
5. Τι κάνει το RELIABILITY QoS;
-
BEST_EFFORT(προεπιλογή για πολλά ενσωματωμένα θέματα): τα δείγματα που χάνονται στο καλώδιο δεν αναμεταδίδονται. Χαμηλότερη επιβάρυνση. -
RELIABLE: ο συγγραφέας παρακολουθεί τις επιβεβαιώσεις (ACKNACK/ heartbeat) από κάθε αντιστοιχισμένο αναγνώστη και αναμεταδίδει τους χαμένους αριθμούς ακολουθίας μέχρι να
ο αναγνώστης προλαβαίνει ή το ιστορικό είναι γεμάτο.
Η αξιοπιστία είναι ανά συγγραφέα/ανά αναγνώστη και πρέπει να είναι συμβατή: a BEST_EFFORT
ένας αναγνώστης μπορεί να φτάσει έναν RELIABLE συγγραφέα, αλλά όχι το αντίστροφο.
6. Τι κάνει το DURABILITY QoS;
DURABILITY ελέγχει εάν τα δείγματα διατηρούνται για παράδοση στους αναγνώστεςπου ενώνονται μετά τη σύνταξη του δείγματος:
| Είδος | Διαθέσιμο για όσους εγγραφούν αργότερα; |
|---|---|
VOLATILE | Οχι |
TRANSIENT_LOCAL | Ναι, όσο ο συγγραφέας είναι ζωντανός |
TRANSIENT | Ναι, καθ' όλη τη διάρκεια ζωής του συγγραφέα (μέσω της Υπηρεσίας Persistence) |
PERSISTENT | Ναι, επανεκκινήσεις σε όλες τις διεργασίες (στον δίσκο) |
7. Ποια είναι η διαφορά μεταξύ HISTORY και DURABILITY ;
HISTORY ( KEEP_LAST(depth) ή KEEP_ALL ) ελέγχει πόσα δείγματα η προσωρινή μνήμη εγγραφής/αναγνώστη διατηρείται ανά πάσα στιγμή. DURABILITY ελέγχει εάν η
ο συγγραφέας προσφέρει δείγματα στους αναγνώστες που ταιριάζουν αργότερα. Δουλεύουν μαζί, αλλά
επίλυση διαφορετικών προβλημάτων: KEEP_ALL από μόνο του δεν καθιστά διαθέσιμα δείγματα
σε όσους έφτασαν αργά.
8. Πώς μπορώ να καθορίσω ένα αναγνωριστικό τομέα;
Μεταβιβάστε το αναγνωριστικό τομέα ως το πρώτο όρισμα στο create_participant :
auto dp = DomainParticipantFactory::get_instance()
->create_participant(42, PARTICIPANT_QOS_DEFAULT, nullptr, 0); Οι συμμετέχοντες σε διαφορετικούς τομείς δεν επικοινωνούν. Η θύρα DDSI-RTPS
τύπος 7400 + 250 * domain_id καθορίζει τις βασικές θύρες UDP που χρησιμοποιούνται για
ανακάλυψη.
9. Γιατί ο εκδότης και ο συνδρομητής μου δεν ανακαλύπτουν ο ένας τον άλλον;
Συνήθεις αιτίες:
- Διαφορετικά αναγνωριστικά τομέα — και οι δύο συμμετέχοντες πρέπει να χρησιμοποιούν το ίδιο αναγνωριστικό.
- Αποκλεισμός πολλαπλής διανομής — Το SPDP χρησιμοποιεί πολλαπλή διανομή UDP στο
239.255.0.1από
προεπιλογή. Ελέγξτε το τείχος προστασίας του κεντρικού υπολογιστή και ενεργοποιήστε την παρακολούθηση IGMP. - Λάθος διεπαφή δικτύου — σε κεντρικούς υπολογιστές με πολλαπλά σπίτια που ορίστηκε
ASTUTEDDS_NETWORK_INTERFACE=ή διαμορφώστε το στο προφίλ JSON / XML discovery (ανατρέξτε στην ενότητα Διαμόρφωση JSON Discovery ). - Μη συμβατό QoS — βλέπε ερώτηση 15.
- Διαφορετικές μεταφορές — επαληθεύστε ότι και οι δύο ομότιμοι χρησιμοποιούν UDPv4 (ή και τα δύο UDPv6,
TCP, SHM).
Ενεργοποίηση καταγραφής ιχνών με ASTUTEDDS_LOG_LEVEL=trace και έλεγχος ενός πακέτου
καταγραφή με astutedds-inspect .
10. Ποιες λειτουργίες IDL υποστηρίζονται;
Ο ενσωματωμένος μεταγλωττιστής astutedds-idl υλοποιεί το OMG IDL 4.2, συμπεριλαμβανομένων:
- Πρωτόγονοι τύποι (
boolean,octet, ακέραιοι τύποιint8–uint64,float/double/long double,char/wchar,string/wstring). - Δομές, ενώσεις, απαριθμήσεις, μάσκες bit, ορισμοί τύπου.
- Οριοθετημένες και μη όριοθετημένες ακολουθίες, πίνακες, απεικονίσεις.
-
@key,@id,@optional,@default,@range,@min,@max,@unit,@extensibility(FINAL|APPENDABLE|MUTABLE),@nested. - Σταθερές και χώροι ονομάτων
module.
Η δημιουργημένη C++ χρησιμοποιεί το XCDR2 από προεπιλογή με το προαιρετικό XCDR1 για διαλειτουργικότητα.
11. Πώς μπορώ να φιλτράρω δείγματα που δημοσίευσα ο ίδιος;
Δύο επιλογές:
- Παράβλεψη σε επίπεδο συμμετέχοντα : κλήση
dp->ignore_publication(handle)
περνώντας τοInstanceHandle_tτου τοπικού συγγραφέα. - Φιλτράρισμα στην επανάκληση του αναγνώστη χρησιμοποιώντας
SampleInfo::publication_handle
και συγκρίνοντάς το μεget_instance_handle()του συγγραφέα σας.
Ένα θέμα φιλτραρισμένο με βάση το περιεχόμενο μπορεί επίσης να εξαιρέσει ένα αυτοδημοσιευμένο πεδίο κλειδιού.
12. Ποιοι χαρακτήρες επιτρέπονται στα ονόματα των θεμάτων;
Τα ονόματα θεμάτων ενδέχεται να περιέχουν αλφαριθμητικούς χαρακτήρες ASCII, _ και / ως
διαχωριστικό ιεραρχίας. Το μήκος περιορίζεται από 256 χαρακτήρες. Αποφύγετε την αρχή
ψηφία και δεσμευμένα ενσωματωμένα προθέματα DDS ( DCPS , dds ). Ακολουθούν ονόματα τύπων
ο ίδιος κανόνας.
13. Πώς μπορώ να εντοπίσω πότε ένας απομακρυσμένος συγγραφέας ή αναγνώστης αποχωρεί;
Εγκαταστήστε ένα DataReaderListener και υλοποιήστε on_subscription_matched /
on_liveliness_changed ή poll reader->get_subscription_matched_status() . Η current_count_changeΤο πεδίο είναι αρνητικό όταν ένας ομότιμος δεν ταιριάζει.
Η ζωντάνια διέπεται από το QoS LIVELINESS — set
kind = AUTOMATIC_LIVELINESS_QOS με lease_duration για ανίχνευσησιωπηλούς συνομηλίκους μέσα σε ένα οριοθετημένο χρονικό διάστημα.
14. Πώς μπορώ να λάβω μια επανάκληση όταν φτάνουν νέα δεδομένα;
Συνδέστε έναν ακροατή με τη μάσκα 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); Η συνάρτηση on_data_available ενεργοποιείται τόσο για νέα δείγματα όσο και για τον κύκλο ζωής της παρουσίας. αλλαγές· να ελέγχετε πάντα SampleInfo::valid_data πριν από την κατάργηση της αναφοράς στο
δείγμα ωφέλιμου φορτίου.
15. Τι σημαίνει «Μη συμβατό QoS»;
Ένας συγγραφέας και ένας αναγνώστης ταιριάζουν μόνο όταν κάθε Αίτημα/Προσφερόμενο QoS είναι
σύμφωνος:
| Πολιτική | Αιτούμενο ≤ Προσφερόμενο |
|---|---|
RELIABILITY | αναγνώστης BEST_EFFORT ≤ συγγραφέας RELIABLE |
DURABILITY | είδος αναγνώστη ≤ είδος συγγραφέα (με σειρά προδιαγραφών) |
DEADLINE | period αναγνώστη ≥ period συγγραφέα |
LATENCY_BUDGET | duration αναγνώστη ≥ duration συγγραφέα |
OWNERSHIP | πρέπει να είναι ίσο ( SHARED ή EXCLUSIVE ) |
PARTITION | τουλάχιστον ένα όνομα διαμερίσματος πρέπει να επικαλύπτεται |
Ακούστε για on_offered_incompatible_qos / on_requested_incompatible_qos
για να βρείτε το ακριβές αναγνωριστικό πολιτικής κατά τον χρόνο εκτέλεσης.
16. Πώς μπορώ να στείλω δείγματα μεγαλύτερα από ένα datagram UDP;
Το Astute DDS τμηματοποιεί αυτόματα δείγματα μεγαλύτερα από τα διαμορφωμένα
fragment_size (προεπιλογή 1344 bytes για IPv4) και τα επανασυναρμολογεί στο αναγνώστη χρησιμοποιώντας υπομηνύματα DDSI-RTPS DATA_FRAG . Το πρωτόκολλο αξιοπιστίας
Ανακτά τα χαμένα τμήματα χωρίς να στείλει ξανά ολόκληρο το δείγμα.
Για πολύ μεγάλα δείγματα (≥ 1 MB) αυξήστε τα buffer της υποδοχής λειτουργικού συστήματος:
sudo sysctl -w net.core.rmem_max=8388608
sudo sysctl -w net.core.wmem_max=8388608και σκεφτείτε να μεταβείτε στη μεταφορά κοινόχρηστης μνήμης για τοπικούς αναγνώστες.
17. Πώς μπορώ να διαμορφώσω ποια διεπαφή δικτύου θα χρησιμοποιηθεί;
Τρεις επιλογές, κατά σειρά προτεραιότητας:
- Μεταβλητή περιβάλλοντος:
ASTUTEDDS_NETWORK_INTERFACE=eth0. - Ρύθμιση παραμέτρων ανακάλυψης JSON — ανατρέξτε στην ενότητα Ρύθμιση παραμέτρων ανακάλυψης JSON .
- Προφίλ XML QoS — ανατρέξτε στην ενότητα Προφίλ DDS-XML QoS .
Εάν δεν έχει οριστεί καμία, το Astute DDS επιλέγει την πρώτη διεπαφή χωρίς βρόχο επιστροφής με ένα
διεύθυνση με δυνατότητα πολλαπλής διανομής.
18. Μπορώ να χρησιμοποιήσω το Astute DDS σε δίκτυο χωρίς multicast;
Ναι. Δύο εναλλακτικές:
- Λίστα ομότιμων SPDP Unicast : παρέχει μια λίστα ζευγών ομότιμων κεντρικών υπολογιστών/θυρών στο
Διαμόρφωση ανακάλυψης. Το Astute DDS μεταδίδει μοναδικές μεταδόσεις ανακοινώσεων SPDP σε κάθε peer. - Μεταφορά TCP : εναλλαγή του συμμετέχοντα στη μεταφορά TCP RTPS για
περιβάλλοντα που μπλοκάρουν εντελώς το UDP. Δείτε
Δρομολογητής τομέα DDS για τη διέλευση απομονωμένων δικτύων.
19. Πώς μπορώ να συντονιστώ για χαμηλή καθυστέρηση;
- Χρησιμοποιήστε
RELIABLEαξιοπιστία με ιστορικόKEEP_LAST(1)και στα δύο άκρα, ώστε
Οι αναμεταδόσεις είναι ελάχιστες. - Ενεργοποιήστε τη μεταφορά σε κοινόχρηστη μνήμη για συμμετέχοντες που βρίσκονται ταυτόχρονα.
- Καρφίτσωμα νημάτων Astute DDS με συσχέτιση CPU και χρήση προγραμματισμού σε πραγματικό χρόνο
(SCHED_FIFO) στις διαδικασίες εκδότη και συνδρομητή. - Απενεργοποιήστε το Nagle χρησιμοποιώντας το UDP (το προεπιλογή).
- Αυξήστε τα buffer των υποδοχών (βλ. ερώτηση 16) για την απορρόφηση των εκρήξεων.
- Ορίστε την
LATENCY_BUDGET = 0για να απενεργοποιήσετε οποιαδήποτε καθυστέρηση ομαδοποίησης.
20. Γιατί βλέπω αιχμές καθυστέρησης κατά τη δημοσίευση μεγάλων δειγμάτων;
Όταν τα δείγματα υπερβαίνουν το προεπιλεγμένο buffer υποδοχής του λειτουργικού συστήματος (συχνά 208 KB σε Linux),
ο πυρήνας απορρίπτει πακέτα και το αξιόπιστο πρωτόκολλο πρέπει να αναμεταδώσει, προκαλώντας
αιχμές. Αυξάνοντας net.core.rmem_max / net.core.wmem_max τουλάχιστον στο
Το μέγεθος δείγματος επιλύει αυτό το πρόβλημα. Σκεφτείτε τον κατακερματισμό με μικρότερο fragment_size
σε δίκτυα με απώλειες.
21. Πώς μπορώ να γεφυρώσω δύο τομείς DDS;
Χρησιμοποιήστε τον δρομολογητή τομέα Astute DDS — μια υπηρεσία που συνδέει δύο ή περισσότερα
τομείς και προωθήσεις διαμορφωμένων θεμάτων μεταξύ τους, με προαιρετικό
φιλτράρισμα κλειδιού/περιεχομένου και μετάφραση QoS. Βλ.
Δρομολογητής τομέα DDS .
22. Ποιες γλωσσικές συνδέσεις είναι διαθέσιμες;
| Γλώσσα | Κατάσταση | Σημειώσεις |
|---|---|---|
| C++20 | Σταθερός | Κύριο API — libastutedds.a |
| ντο | Σταθερός | API Flat C για FFI, βλ. include/astutedds/c/astutedds.h |
| Πύθων | Σταθερός | συνδέσεις pybind11, CPython 3.10 – 3.13 |
| Σκωρία | Βήτα | astutedds crate (ασφαλές περιτύλιγμα πάνω από το C API) |
23. Ποιες πλατφόρμες και εκδόσεις λειτουργικών συστημάτων υποστηρίζονται;
| Πλατφόρμα | Δοκιμασμένες εκδόσεις |
|---|---|
| Linux | Ubuntu 22.04 / 24.04, RHEL 9 / 10, AlmaLinux 9 / 10, Debian 12 |
| Παράθυρα | Windows 10, Windows 11, Windows Server 2022 |
Οι τροχοί του Linux Python φέρουν την ετικέτα manylinux_2_28 (glibc ≥ 2.28) και εκτελούνται.
σε οποιαδήποτε συμβατή διανομή.
24. Πώς μπορώ να ενεργοποιήσω την ασφάλεια DDS;
- Τεχνουργήματα ταυτότητας παροχής (X.509) και δικαιωμάτων (υπογεγραμμένη XML).
- Διαμορφώστε την ιδιότητα QoS του συμμετέχοντα με τις λειτουργίες Auth, Access Control και
Ιδιότητες πρόσθετου κρυπτογράφησης (πιστοποιητικό CA, πιστοποιητικό/κλειδί ταυτότητας, αρχείο δικαιωμάτων,
αρχείο διακυβέρνησης). - Σύνδεσμος έναντι Astute DDS που δημιουργήθηκε με
-DASTUTEDDS_ENABLE_SECURITY=ON.
Ανατρέξτε στην ενότητα Ασφάλεια DDS για οδηγίες από άκρο σε άκρο και
πρότυπο διακυβέρνησης/δικαιωμάτων.
25. Πώς μπορώ να διατηρήσω δεδομένα σε όλες τις επανεκκινήσεις;
Εκτελέστε την Υπηρεσία Persistence παράλληλα με τον τομέα σας. Εγγράφεται σε
διαμορφωμένα TRANSIENT / PERSISTENT θέματα, αποθηκεύει δείγματα σε τοπικό
βάση δεδομένων (SQLite από προεπιλογή) και τα δημοσιεύει ξανά για καθυστερημένη συμμετοχή
συνδρομητές — συμπεριλαμβανομένων εκείνων που εγγράφονται μετά την αποχώρηση του αρχικού συγγραφέα.
Δείτε την Υπηρεσία Επιμονής .
26. Πώς μπορώ να καταγράψω και να αναπαράγω την επισκεψιμότητα;
Χρησιμοποιήστε το ενσωματωμένο εργαλείο astutedds-record για να καταγράψετε έναν τομέα σε ένα
.astdb και astutedds-replay για να το δημοσιεύσετε ξανά με ρυθμιζόμενο χρονική κλιμάκωση. Η εγγραφή βασίζεται σε τύπο και χρησιμοποιεί εσωτερικά το XCDR2. Δείτε
Ηχογράφηση και Επανάληψη .
27. Πώς μπορώ να εξελίξω έναν τύπο δεδομένων χωρίς να διαταράξω τους συνδρομητές;
Σχολιάστε τον τύπο IDL με @extensibility(MUTABLE) (ή APPENDABLE ) και
Επισημάνετε κάθε μέλος με @id(N) . Οι μεταβλητές ροές XCDR2 επιτρέπουν:
- Προσθήκη νέων μελών σε κάθε άκρο.
- Αφαίρεση προαιρετικών μελών.
- Αναδιάταξη μελών.
Τα μέλη που δεν ταιριάζουν παραλείπονται μέσω των κανόνων εκχώρησης X-Types.
@extensibility(FINAL) κλειδώνει τη διάταξη και πρέπει να χρησιμοποιείται όταν είναι δυαδική.Η συμβατότητα με παλαιότερες συσκευές ανάγνωσης XCDR1 έχει σημασία.
28. Πώς μπορώ να χρησιμοποιήσω θέματα φιλτραρισμένα με βάση το περιεχόμενο;
Δημιουργήστε ένα ContentFilteredTopic από ένα κανονικό θέμα με ένα φίλτρο τύπου SQL
έκφραση και να συνδέσετε ένα DataReader σε αυτήν:
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); Το φίλτρο αξιολογείται από την πλευρά του συγγραφέα όταν είναι δυνατόν για εξοικονόμηση εύρους ζώνης.
29. Πώς μπορώ να ρυθμίσω το QoS από ένα αρχείο XML;
Χρησιμοποιήστε XmlQosLoader για να διαβάσετε ένα προφίλ DDS-XML και να το εφαρμόσετε κατά τη δημιουργία
οντότητες:
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); Δείτε τα προφίλ QoS DDS-XML για το σχήμα και το λειτουργικό σύστημα.
παραδείγματα.
30. Πώς μπορώ να εντοπίσω σφάλματα διαλειτουργικότητας ή εντοπισμού;
- Εκτελέστε
astutedds-inspectστον τομέα για να δείτε τον εντοπισμένο τομέα
συμμετέχοντες, τελικά σημεία και αντιστοιχισμένη κατάσταση σε πραγματικό χρόνο. - Καταγράψτε την κυκλοφορία με
tcpdump -i any -w dds.pcap 'udp port 7400 or portrange 7400-7500'και ανοίξτε το στο Wireshark — το εργαλείο ανάλυσης RTPS.
Αποκωδικοποιεί SPDP, SEDP και δεδομένα χρήστη. - Ενεργοποίηση αρχείων καταγραφής ιχνηλασίας:
ASTUTEDDS_LOG_LEVEL=trace ASTUTEDDS_LOG_FILE=/tmp/astutedds.log. - Επαλήθευση αναγνωριστικών οντοτήτων και θυρών:
- Εγγραφέας/αναγνώστης SPDP:
00:01:00:c2/00:01:00:c7 - Δημοσίευση SEDP:
00:00:03:c2/00:00:03:c7 - Συνδρομή SEDP:
00:00:04:c2/00:00:04:c7 - Βασική θύρα:
7400 + 250 × domain_id.
- Εγγραφέας/αναγνώστης SPDP:
- Επιβεβαιώστε ότι και οι δύο ομότιμοι διαφημίζουν συμβατά αναγνωριστικά προμηθευτών και έκδοση πρωτοκόλλου
(DDSI-RTPS 2.5).