Scharfsinniger Zahnarzt
Echtzeit-Datenkonnektivität für Verteidigungssysteme
Die Middleware, die missionskritische Fahrzeugplattformen antreibt
Voll ausgestattetes DDS mit X-Types. DDS in Waffenqualität für Verteidigungszwecke.
Powering defence
Astute DDS ist die Datenverteilungs-Middleware, die das Herzstück der Komplettlösung DEF-STAN 23-009 Generic Vehicle Architecture (GVA) von Astute Systems bildet. Von Sensoren bis zu Bildschirmen verbindet eine einheitliche Plattform jedes Subsystem Ihres Militärfahrzeugs.
Why Publish/Subscribe
Das Problem mit traditionellen Architekturen
Ältere Fahrzeugsysteme nutzen Punkt-zu-Punkt-Verbindungen. Beim Hinzufügen eines neuen Subsystems müssen alle Systeme, mit denen es kommuniziert, angepasst werden. Dies führt zu Folgendem:
- ❌ Aufwändige Integration – Jede neue Komponente erfordert individuelle Programmierung
- ❌ Fragile Systeme – Ein Fehler kann sich kaskadenartig im gesamten Netzwerk auswirken.
- ❌ Anbieterabhängigkeit – Proprietäre Protokolle binden Sie an einen einzigen Anbieter
- ❌ Langsame Upgrades – Die Änderung eines Teilsystems bedeutet, dass alles erneut getestet werden muss
Die Publish/Subscribe-Lösung
Bei der DDS-Publish/Subscribe-Architektur veröffentlichen Subsysteme Daten einfach in benannten Themen. Jedes System, das diese Daten benötigt, abonniert das jeweilige Thema. Es sind keine Punkt-zu-Punkt-Verbindungen erforderlich. Es wird kein benutzerdefinierter Integrationscode benötigt.
| Geschäftlicher Nutzen | Wie Pub/Sub funktioniert |
|---|---|
| 💰 Geringere Integrationskosten | Neue Subsysteme hinzufügen, ohne bestehende zu verändern |
| 🔧 Einfachere Wartung | Komponenten unabhängig austauschen oder aufrüsten |
| 🛡️ Größere Widerstandsfähigkeit | Systeme funktionieren auch dann weiter, wenn andere ausfallen. |
| 🏭 Wahlfreiheit bei mehreren Anbietern | Geräte verschiedener Hersteller an einen Datenbus anschließen |
| ⏱️ Schnellere Markteinführung | Standardisierte Schnittstellen bedeuten weniger individuelle Entwicklung |
Eine einzige Quelle für den gesamten GVA-Stack
Astute Systems ist der einzige Anbieter, der einen kompletten, integrierten Software-Stack für GVA-konforme Militärfahrzeuge anbietet :
| Komponente | Was es bewirkt |
|---|---|
| Bohemien | SysML-Modelle anzeigen und validieren, Schnittstellendefinitionen generieren |
| LDMX | Erstklassiger Editor und Validator für Landdatenmodelle (LDM) v10.0.0 |
| ToolX | Automatisierte Codegenerierung, Build-Integration und Bereitstellungstools |
| Scharfsinniger Zahnarzt | Verbinden Sie alle Subsysteme mit einer sicheren Datenverteilung in Echtzeit. |
| Landdatenmodell v10.0.0 | Vorkonfigurierte, GVA-konforme Datentypen für alle Fahrzeugdomänen |
| Scharfsinnige HMI | Crew-Display-Software, die den Anforderungen von DEF-STAN 23-009 entspricht |
Vorteile des Full-Stacks
| Nutzen | Auswirkungen |
|---|---|
| 🎯 Einheitliche Verantwortlichkeit | Ein Vertrag, ein Support-Team, ein Integrationspartner |
| 📋 Nachgewiesene Konformität | Vorvalidiert gemäß den Anforderungen von DEF-STAN 23-009 |
| 🔄 Nahtlose Updates | Rüsten Sie beliebige Komponenten auf, ohne die anderen zu beschädigen. |
| 💰 Vorhersehbare Kosten | Keine versteckten Integrationsgebühren oder Lizenzfallen |
| ⏱️ Schnellere Lieferung | Beginnen Sie mit funktionierender Software, nicht mit leeren Frameworks. |
Comparison
Beschaffungsüberlegungen
| Faktor | Scharfsinniger Zahnarzt | RTI Connext | CycloneDDS | OpenDDS | Fast DDS |
|---|---|---|---|---|---|
| Lizenzmodell | Flexible Optionen | Pro-Sitzplatz-Kommerziell | Eclipse EPL 2.0 | LGPL | Apache 2.0 |
| Lizenzkosten | Wettbewerbsfähig | $$$ pro Einsatz | Frei | Frei | Frei |
| Unterstützungsmodell | Australischer Lieferantenvertrag | Globales Unternehmen | Eclipse-Stiftung | OCI-Werbung | eProsima-Werbespot |
| Australienbasierter Support | ✅ Ja | ❌ US-basiert | ❌ Nein | ❌ US-basiert | ❌ Spanien-basiert |
| GVA-Vorintegration | ✅ Eingebaut | ❌ Maßanfertigung | ❌ Selbermachen | ❌ Selbermachen | ❌ Selbermachen |
| Vollständiger Stack verfügbar | ✅ Aus einer Hand: HMI + LDM + DDS + Tools | ❌ Nur Middleware | ❌ Nur Middleware | ❌ Nur Middleware | ❌ Nur Middleware |
| SysML-Tools | ✅ Bohemian + LDMX + ToolX | ❌ Keine | ❌ Keine | ❌ Keine | ❌ Keine |
| Exportkontrolle | Australische Gerichtsbarkeit | US-ITAR-Überlegungen | EU | UNS | EU |
Vergleich der technischen Merkmale
| Besonderheit | Scharfsinniger Zahnarzt | RTI Connext | CycloneDDS | OpenDDS | Fast DDS |
|---|---|---|---|---|---|
| DDSI-RTPS 2.5 | ✅ Abgeschlossen | ✅ Abgeschlossen | ✅ Abgeschlossen | ✅ Abgeschlossen | ✅ Abgeschlossen |
| DDS Security 1.1 | ✅ Abgeschlossen | ✅ Abgeschlossen | ⚠️ Teilweise | ✅ Abgeschlossen | ✅ Abgeschlossen |
| X-Types 1.3 | ✅ Abgeschlossen | ✅ Abgeschlossen | ⚠️ Teilweise | ⚠️ Teilweise | ⚠️ Teilweise |
| Dynamische Daten-API | ✅ Abgeschlossen | ✅ Abgeschlossen | ❌ Keine | ⚠️ Basic | ⚠️ Basic |
| TypeLookup-Dienst | ✅ Abgeschlossen | ✅ Abgeschlossen | ❌ Keine | ❌ Keine | ⚠️ Teilweise |
| Inhaltsfilterung | ✅ Abgeschlossen | ✅ Abgeschlossen | ✅ Abgeschlossen | ✅ Abgeschlossen | ✅ Abgeschlossen |
| Gemeinsamer Speichertransport | ✅ Abgeschlossen | ✅ Abgeschlossen | ✅ Abgeschlossen | ❌ Keine | ✅ Abgeschlossen |
| TCP-Transport | ✅ Abgeschlossen | ✅ Abgeschlossen | ✅ Abgeschlossen | ✅ Abgeschlossen | ✅ Abgeschlossen |
| Zero-Copy | ✅ Unterstützt | ✅ Unterstützt | ✅ Unterstützt | ❌ Keine | ✅ Unterstützt |
Einhaltung von Standards
| Standard | Scharfsinniger Zahnarzt | RTI Connext | CycloneDDS | OpenDDS | Fast DDS |
|---|---|---|---|---|---|
| OMG DDS 1.4 | ✅ | ✅ | ✅ | ✅ | ✅ |
| OMG DDSI-RTPS 2.5 | ✅ | ✅ | ✅ | ✅ | ✅ |
| OMG DDS-XTypes 1.3 | ✅ | ✅ | ⚠️ | ⚠️ | ⚠️ |
| OMG DDS Security 1.1 | ✅ | ✅ | ⚠️ | ✅ | ✅ |
| OMG IDL 4.2 | ✅ | ✅ | ✅ | ✅ | ✅ |
| DEF-STAN 23-009 (GVA) | ✅ | ❌ | ❌ | ❌ | ❌ |
| Landdatenmodell v10.0.0 | ✅ | ❌ | ❌ | ❌ | ❌ |
Sprach- und Plattformunterstützung
| Fähigkeit | Scharfsinniger Zahnarzt | RTI Connext | CycloneDDS | OpenDDS | Fast DDS |
|---|---|---|---|---|---|
| C++ | C++20 | C++11 | C99-Verpackung | C++11 | C++11 |
| C | Über C++ | ✅ Einheimisch | ✅ Einheimisch | ❌ | ✅ Einheimisch |
| Python | ✅ | ✅ | ✅ | ✅ | ✅ |
| Rost | ✅ | ❌ | ✅ | ❌ | ❌ |
| Linux | ✅ | ✅ | ✅ | ✅ | ✅ |
| Windows | ✅ | ✅ | ✅ | ✅ | ✅ |
| VxWorks | Roadmap | ✅ | ⚠️ | ✅ | ⚠️ |
| Eingebettetes Betriebssystem/RTOS | ✅ Entwickelt für | ✅ Mikro-Variante | ⚠️ | ⚠️ | ⚠️ |
| Statische Verknüpfung | ✅ Einzelne Bibliothek | ⚠️ | ⚠️ Gemeinsam genutzte Bibliotheken | ⚠️ Gemeinsam genutzte Bibliotheken | ⚠️ Gemeinsam genutzte Bibliotheken |
Warum kluge Zahnärzte gewinnen
| vs RTI Connext | vs CycloneDDS | vs OpenDDS | vs Fast DDS |
|---|---|---|---|
| Flexible Lizenzierungsoptionen | Vollständige X-Type-Unterstützung | Vollständige dynamische Daten-API | Unterstützung in Australien |
| Australischer Anbieter, keine ITAR-Bedenken | Eingebaute Sicherheit | TypeLookup-Dienst | Vollständige GVA-Konformität |
| Vollständiger GVA-Stack aus einer einzigen Quelle | Erstklassiges LDMX + ToolX | Erstklassiges LDMX + ToolX | Einfachere Bereitstellung |
| LDM v10.0.0 enthalten | Kommerzielle Unterstützung | Australische Gerichtsbarkeit | Komplette X-Types |
Why Astute DDS
„Mithilfe des Astute-Stacks konnten wir unsere GVA-Integrationszeit um 40 % verkürzen. Dass nur ein Anbieter für Middleware, HMI und Datenmodell verantwortlich war, hat die gegenseitigen Schuldzuweisungen beseitigt, die frühere Projekte geplagt hatten.“
— Programmmanager, UK Defence Prime
Interoperabilität garantiert
Astute DDS ist vollständig interoperabel mit allen gängigen DDS-Implementierungen. Ihr Fahrzeug kann nahtlos kommunizieren mit:
Keine Anbieterbindung. Selbst wenn ein Partnersystem eine andere DDS-Implementierung verwendet, lässt sich Astute DDS ohne Änderungen verbinden.
Einhaltung der Verteidigungsstandards
Für militärische Anforderungen entwickelt
| Standard | Status |
|---|---|
| DEF-STAN 23-009 | ✅ Vollständige GVA-Konformität |
| Landdatenmodell v10.0.0 | ✅ Vollständige Domänentypen |
| NATO STANAG | ✅ Interoperabilitätsbereit |
| Cyber Essentials | ✅ Sicherheitszertifiziert |
Sicherheit, der Sie vertrauen können
- 🔐 Verschlüsselte Kommunikation – Alle Daten sind während der Übertragung geschützt.
- 🎫 Zertifikatsbasierte Authentifizierung – Nur autorisierte Systeme verbinden sich
- 📋 Zugriffskontrollrichtlinien – Legen Sie fest, wer welches Thema veröffentlichen oder abonnieren darf.
- 📝 Vollständige Audit-Protokollierung – Lückenlose Dokumentation für Sicherheitsüberprüfungen
In der Produktion bewährt
In mehreren Programmen eingesetzt
Astute DDS genießt das Vertrauen führender Verteidigungsunternehmen in Australien, Großbritannien und verbündeten Nationen:
| Domain | Anwendungen |
|---|---|
| 🎖️ Gepanzerte Fahrzeuge | Crew-Displays, Sensorfusion, Waffenintegration |
| 🤖 Robotik & Autonome Systeme | Unbemannte Bodenfahrzeuge, Roboterplattformen, autonome Navigation |
| 🛡️ Drohnenabwehr (CUAS) | Drohnenerkennungs-, Verfolgungs- und Abwehrsysteme |
| ✈️ Bodenkontrollstationen | UAV-Befehls- und Kontrollsystem, Sensordaten |
| 🚢 Marinesysteme | Brückenanzeigen, Schadensbegrenzung, Navigation |
| 🏭 Training & Simulation | Synthetische Umgebungen, Nachbesprechung, Debriefing |
🎬 Demo anfordern
Erleben Sie Astute DDS und den kompletten GVA-Stack in Aktion. Erfahren Sie mehr über unseren Stack oder fordern Sie jetzt eine Demo an.
Frequently Asked Questions
Die wichtigsten Fragen, die Entwickler bei der Einführung von Astute DDS am häufigsten stellen.
1. Was ist Astute DDS?
Astute DDS ist eine C++20-Implementierung des OMG-Datenverteilungsdienstes.
(DDS) DCPS API, DDSI-RTPS 2.5 Wire-Protokoll, DDS-XTypes 1.3 Typsystem,
DDS-Security 1.1/1.2-Plugins und IDL 4.2. Es wird als statische Datei bereitgestellt.
Die Bibliothek libastutedds.a (sowie C-, Python- und Rust-Bindings) wird mitgeliefert.
Die grafische Benutzeroberfläche für die Diagnose von astutedds-inspect und eine interoperable Shapes-Demo.
2. Wie kann ich ein Thema veröffentlichen und abonnieren?
Erstellen Sie einen DomainParticipant , ein Topic und anschließend einen DataWriter (auf der Publisher-Seite).
oder DataReader (Abonnentenseite):
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);Siehe Erste Schritte › Erste Bewerbung .
3. Worin besteht der Unterschied zwischen read() und take() ?
-
read()gibt Stichproben zurück, **behält sie aber im Reader-Cache**, sodass spätere Aufrufe (oder andere Reader im selben Subscriber) sie erneut lesen können. -
take()gibt Stichproben zurück und **entfernt sie** aus dem Cache.
Verwenden Sie read() wenn das Thema einen gemeinsam genutzten Zustand repräsentiert, den Sie untersuchen möchten.
wiederholt; verwenden Sie take() wenn das Thema Ereignisse repräsentiert, die Sie erfassen möchten.
Genau einmal konsumieren.
4. Warum erhalten Abonnenten, die erst später beitreten, keine früheren Proben?
Standardmäßig ist DURABILITY VOLATILE eingestellt, daher werden Samples, die vor einem Abonnenten geschrieben wurden, nicht berücksichtigt.
Die zugeordneten Muster werden nicht geliefert. Um historischen Nachzüglern historische Muster zukommen zu lassen,
Konfigurieren Sie den Writer und die zugehörigen Reader mit TRANSIENT_LOCAL
Langlebigkeit (die auch RELIABLE Zuverlässigkeit erfordert):
DataWriterQos qos;
writer->get_qos(qos);
qos.durability().kind = TRANSIENT_LOCAL_DURABILITY_QOS;
qos.reliability().kind = RELIABLE_RELIABILITY_QOS;
writer->set_qos(qos); Um die Speicherung über Neustarts des Writers hinweg zu gewährleisten, verwenden Sie die
Persistenzdienst oder der TRANSIENT / PERSISTENT
Haltbarkeitsarten.
5. Was leistet die QoS-Kennzeichnung RELIABILITY ?
-
BEST_EFFORT(Standardeinstellung für viele integrierte Themen): Auf dem Übertragungsweg verlorene Samples werden nicht erneut gesendet. Geringster Overhead. -
RELIABLE: Der Absender verfolgt die Bestätigungen (ACKNACK/Heartbeat) jedes übereinstimmenden Lesers und sendet fehlende Sequenznummern erneut, bis
Der Leser holt auf, oder die Geschichte ist auserzählt.
Die Zuverlässigkeit ist pro Schreiber/Leser und muss kompatibel sein: ein BEST_EFFORT
Ein Leser kann einem RELIABLE Autor entsprechen, aber nicht umgekehrt.
6. Was leistet die QoS-Kennzeichnung DURABILITY ?
DURABILITY bestimmt, ob Proben für die Auslieferung an die Leser aufbewahrt werden.dass der Join nach dem Schreiben des Beispiels erfolgte:
| Art | Auch für Späteinsteiger geeignet? |
|---|---|
VOLATILE | NEIN |
TRANSIENT_LOCAL | Ja, solange der Schriftsteller noch lebt |
TRANSIENT | Ja, über die gesamte Lebenszeit des Autors (über den Persistenzdienst). |
PERSISTENT | Ja, auch nach Neustarts des Prozesses (auf der Festplatte). |
7. Worin besteht der Unterschied zwischen HISTORY und DURABILITY ?
HISTORY ( KEEP_LAST(depth) or KEEP_ALL ) steuert, wie viele Samples die Der Writer-/Reader-Cache speichert jederzeit die aktuellen Daten. DURABILITY steuert, ob die
Der Autor bietet Lesern, die später zu ihm passen, Arbeitsproben an. Sie arbeiten zusammen, aber
löst unterschiedliche Probleme: KEEP_ALL allein stellt keine Stichproben bereit.
für Späteinsteiger.
8. Wie gebe ich eine Domänen-ID an?
Übergeben Sie die Domänen-ID als erstes Argument an create_participant :
auto dp = DomainParticipantFactory::get_instance()
->create_participant(42, PARTICIPANT_QOS_DEFAULT, nullptr, 0); Teilnehmer aus verschiedenen Domänen kommunizieren nicht miteinander. Der DDSI-RTPS-Port
Die Formel 7400 + 250 * domain_id bestimmt die verwendeten Basis-UDP-Ports für
Entdeckung.
9. Warum finden mein Verlag und mein Abonnent nicht zueinander?
Häufige Ursachen:
- Unterschiedliche Domain-IDs – beide Teilnehmer müssen dieselbe ID verwenden.
- Multicast blockiert — SPDP verwendet UDP-Multicast auf
239.255.0.1durch
Standardmäßig. Überprüfen Sie die Host-Firewall und deaktivieren Sie IGMP-Snooping. - Falsche Netzwerkschnittstelle – auf Hosts mit mehreren Netzwerkanschlüssen
ASTUTEDDS_NETWORK_INTERFACE=setzenASTUTEDDS_NETWORK_INTERFACE=oder konfigurieren Sie es im Discovery-JSON-/XML-Profil (siehe JSON Discovery Config ). - Inkompatible QoS – siehe Frage 15.
- Unterschiedliche Transportprotokolle – überprüfen Sie, ob beide Peers UDPv4 (oder beide UDPv6) verwenden.
TCP, SHM).
Aktivieren Sie die Protokollierung mit ASTUTEDDS_LOG_LEVEL=trace und untersuchen Sie ein Paket.
Aufnahme mit astutedds-inspect .
10. Welche IDL-Funktionen werden unterstützt?
Der mitgelieferte astutedds-idl Compiler implementiert OMG IDL 4.2 einschließlich:
- Primitive Datentypen (
boolean,octet, integer typesint8–uint64,float/double/long double,char/wchar,string/wstring). - Strukturen, Vereinigungen, Aufzählungen, Bitmasken, Typdefinitionen.
- Beschränkte und unbeschränkte Folgen, Arrays, Abbildungen.
-
@key,@id,@optional,@default,@range,@min,@max,@unit,@extensibility(FINAL|APPENDABLE|MUTABLE),@nested. - Konstanten und
moduleNamensräume.
Der generierte C++-Code verwendet standardmäßig XCDR2, optional ist XCDR1 für die Interoperabilität verfügbar.
11. Wie filtere ich selbst veröffentlichte Beispiele?
Zwei Möglichkeiten:
- Ignorieren auf Teilnehmerebene : Aufruf von
dp->ignore_publication(handle)
Übergabe desInstanceHandle_tdes lokalen Writers. - Filtern Sie im Reader-Callback mit
SampleInfo::publication_handle
und vergleichen Sie es mitget_instance_handle()Ihres Writers.
Ein inhaltsgefiltertes Thema kann auch ein selbstveröffentlichtes Schlüsselfeld ausschließen.
12. Welche Zeichen sind in Themennamen erlaubt?
Themennamen dürfen alphanumerische ASCII-Zeichen, _ und / enthalten.
Hierarchietrennzeichen. Die Länge ist auf 256 Zeichen begrenzt. Führende Zeichen vermeiden.
Ziffern und reservierte DDS-Präfixe ( DCPS , dds ). Es folgen die Typnamen.
die gleiche Regel.
13. Wie kann ich feststellen, wann ein Remote-Schreiber oder -Leser die Verbindung verliert?
Installieren Sie einen DataReaderListener und implementieren Sie on_subscription_matched /
on_liveliness_changed oder poll reader->get_subscription_matched_status() . Die Änderung der current_count_changeDas Feld ist negativ, wenn eine Übereinstimmung mit einem Peer nicht mehr besteht.
Die Lebendigkeit wird durch die LIVELINESS QoS gesteuert.
kind = AUTOMATIC_LIVELINESS_QOS mit einer zu erkennenden lease_durationstumme Gleichaltrige innerhalb eines begrenzten Zeitraums.
14. Wie erhalte ich einen Rückruf, wenn neue Daten eintreffen?
Fügen Sie einen Listener mit der Maske DATA_AVAILABLE_STATUS hinzu:
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 wird sowohl für neue Samples als auch für den Instanzlebenszyklus ausgelöst. Änderungen; überprüfen Sie immer SampleInfo::valid_data bevor Sie darauf verweisen.
Beispielnutzlast.
15. Was bedeutet „Inkompatible QoS“?
Ein Schreiber und ein Leser passen nur dann zusammen, wenn jede angeforderte/angebotene Dienstgüte (QoS) erfüllt ist.
kompatibel:
| Politik | Angefragt ≤ Angeboten |
|---|---|
RELIABILITY | Leser BEST_EFFORT ≤ Autor RELIABLE |
DURABILITY | Lesertyp ≤ Schreibertyp (in Spezifikationsreihenfolge) |
DEADLINE | period ≥ period |
LATENCY_BUDGET | duration ≥ duration |
OWNERSHIP | müssen gleichberechtigt sein ( SHARED oder EXCLUSIVE ) |
PARTITION | Mindestens ein Partitionsname muss sich überschneiden. |
Lauschen Sie auf on_offered_incompatible_qos / on_requested_incompatible_qos
um die genaue Richtlinien-ID zur Laufzeit zu ermitteln.
16. Wie sende ich Samples, die größer als ein UDP-Datagramm sind?
Astute DDS fragmentiert automatisch Proben, die größer als die konfigurierte Größe sind.
fragment_size (standardmäßig 1344 Bytes für IPv4) und setzt sie wieder zusammen auf dem Leser, der DDSI-RTPS DATA_FRAG Unternachrichten verwendet. Das Zuverlässigkeitsprotokoll
Stellt fehlende Fragmente wieder her, ohne die gesamte Probe erneut senden zu müssen.
Bei sehr großen Samples (≥ 1 MB) sollten die Socket-Puffer des Betriebssystems erhöht werden:
sudo sysctl -w net.core.rmem_max=8388608
sudo sysctl -w net.core.wmem_max=8388608und erwägen Sie, für lokale Leser auf den Shared-Memory-Transport umzusteigen.
17. Wie konfiguriere ich, welche Netzwerkschnittstelle verwendet wird?
Drei Optionen, in der Reihenfolge ihrer Priorität:
- Umgebungsvariable:
ASTUTEDDS_NETWORK_INTERFACE=eth0. - JSON-Discovery-Konfiguration — siehe JSON-Discovery-Konfiguration .
- XML-QoS-Profil — siehe DDS-XML-QoS-Profile .
Wenn keine Schnittstelle festgelegt ist, wählt Astute DDS die erste Nicht-Loopback-Schnittstelle mit einer solchen aus.
Multicast-fähige Adresse.
18. Kann ich Astute DDS in einem Netzwerk ohne Multicast verwenden?
Ja. Zwei Alternativen:
- Unicast SPDP-Peerliste : Gibt eine Liste von Peer-Host/Port-Paaren an.
Discovery-Konfiguration; Astute DDS sendet SPDP-Ankündigungen per Unicast an jeden Peer. - TCP-Transport : Den Teilnehmer auf den TCP-RTPS-Transport umschalten für
Umgebungen, die UDP vollständig blockieren. Siehe
DDS-Domänenrouter zur Verbindung isolierter Netzwerke.
19. Wie kann ich die Latenz optimieren?
- Verwenden Sie die Zuverlässigkeitsstufe
RELIABLEmitKEEP_LAST(1)-Historie auf beiden Seiten, so
Die Anzahl der erneuten Übertragungen ist minimal. - Aktivieren Sie den gemeinsamen Speichertransport für Teilnehmer am selben Standort.
- Weisen Sie Astute DDS-Threads CPU-Affinität zu und nutzen Sie Echtzeit-Scheduling.
(SCHED_FIFO) auf den Publisher- und Subscriber-Prozessen. - Nagle über UDP deaktivieren (Standardeinstellung).
- Erhöhen Sie die Socket-Puffer (siehe Frage 16), um Lastspitzen abzufangen.
- Setzen Sie
LATENCY_BUDGET = 0, um jegliche Verzögerung bei der Stapelverarbeitung zu deaktivieren.
20. Warum treten Latenzspitzen auf, wenn große Stichproben veröffentlicht werden?
Wenn die Anzahl der Samples den standardmäßigen Socket-Puffer des Betriebssystems überschreitet (oft 208 KB unter Linux),
Der Kernel verwirft Pakete, und das zuverlässige Protokoll muss sie erneut senden, was dazu führt, dass
Spitzenwerte. Erhöhen Sie net.core.rmem_max / net.core.wmem_max auf mindestens
Die Stichprobengröße löst dieses Problem. Erwägen Sie eine Fragmentierung mit einer kleineren fragment_size
auf verlustbehafteten Netzwerken.
21. Wie kann ich zwei DDS-Domänen verbinden?
Nutzen Sie den Astute DDS Domain Router – einen Dienst, der zwei oder mehr Domänen verbindet.
Domänen und Weiterleitungen konfigurierter Themen zwischen ihnen, mit optionalen
Schlüssel-/Inhaltsfilterung und QoS-Übersetzung. Siehe
DDS-Domänenrouter .
22. Welche Sprachbindungen sind verfügbar?
| Sprache | Status | Anmerkungen |
|---|---|---|
| C++20 | Stabil | Primäre API — libastutedds.a |
| C | Stabil | Flat-C-API für FFI, siehe include/astutedds/c/astutedds.h |
| Python | Stabil | pybind11-Bindungen, CPython 3.10 – 3.13 |
| Rost | Beta | astutedds Crate (sicherer Wrapper für die C-API) |
23. Welche Plattformen und Betriebssystemversionen werden unterstützt?
| Plattform | Getestete Versionen |
|---|---|
| Linux | Ubuntu 22.04 / 24.04, RHEL 9 / 10, AlmaLinux 9 / 10, Debian 12 |
| Windows | Windows 10, Windows 11, Windows Server 2022 |
Die Linux-Python-Wheels sind mit manylinux_2_28 (glibc ≥ 2.28) gekennzeichnet und laufen
auf jeder kompatiblen Distribution.
24. Wie aktiviere ich DDS Security?
- Bereitstellung von Identitäts- (X.509) und Berechtigungsartefakten (signiertes XML).
- Konfigurieren Sie die Teilnehmer-Eigenschaft QoS mit Authentifizierung, Zugriffskontrolle und
Eigenschaften des Krypto-Plugins (CA-Zertifikat, Identitätszertifikat/Schlüssel, Berechtigungsdatei,
Governance-Datei). - Link gegen Astute DDS, erstellt mit
-DASTUTEDDS_ENABLE_SECURITY=ON.
Eine vollständige Anleitung finden Sie unter DDS Security .
Vorlage für Governance/Berechtigungen.
25. Wie kann ich Daten über Neustarts hinweg erhalten?
Führen Sie den Persistenzdienst zusammen mit Ihrer Domain aus. Er abonniert
Konfigurierte TRANSIENT / PERSISTENT Themen, speichert Beispiele lokal
Datenbank (standardmäßig SQLite) und veröffentlicht sie erneut für Late-Joining.
Abonnenten – einschließlich derer, die nach dem Tod des ursprünglichen Autors beitreten.
Siehe Persistenzdienst .
26. Wie kann ich den Verkehr aufzeichnen und wiedergeben?
Verwenden Sie das mitgelieferte Tool astutedds-record , um eine Domain in einem
.astdb Datei und astutedds-replay , um sie mit anpassbaren Parametern wieder zu veröffentlichen. Zeitskalierung. Die Aufzeichnung ist typabhängig und verwendet intern XCDR2. Siehe
Aufnahme und Wiedergabe .
27. Wie kann ich einen Datentyp weiterentwickeln, ohne die Abonnenten zu beeinträchtigen?
Annotieren Sie den IDL-Typ mit @extensibility(MUTABLE) (oder APPENDABLE ) und
Jedes Element wird mit @id(N) gekennzeichnet. Veränderliche XCDR2-Streams ermöglichen Folgendes:
- Neue Mitglieder an beiden Enden hinzufügen.
- Optionale Elemente entfernen.
- Mitglieder neu ordnen.
Nicht übereinstimmende Elemente werden gemäß den Zuweisungsregeln von X-Types übersprungen.
@extensibility(FINAL) sperrt das Layout und muss bei Binärdateien verwendet werden.Kompatibilität mit älteren XCDR1-Lesegeräten ist wichtig.
28. Wie verwende ich inhaltsgefilterte Themen?
Erstellen Sie ein ContentFilteredTopic aus einem regulären Thema mit einem SQL-ähnlichen Filter.
Ausdruck und einen DataReader daran binden:
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); Der Filter wird nach Möglichkeit auf der Schreibseite ausgewertet, um Bandbreite zu sparen.
29. Wie konfiguriere ich QoS über eine XML-Datei?
Verwenden Sie XmlQosLoader , um ein DDS-XML-Profil zu lesen und es beim Erstellen anzuwenden.
Entitäten:
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); Siehe DDS-XML QoS-Profile für das Schema und die Funktionsweise.
Beispiele.
30. Wie kann ich Interoperabilitäts- oder Erkennungsprobleme beheben?
- Führen Sie
astutedds-inspectfür die Domain aus, um die gefundenen Ergebnisse anzuzeigen.
Teilnehmer, Endpunkte und Übereinstimmungsstatus in Echtzeit. - Erfassen Sie den Datenverkehr mit
tcpdump -i any -w dds.pcap 'udp port 7400 or portrange 7400-7500'und öffnen Sie ihn in Wireshark – dem RTPS-Dissector.
Dekodiert SPDP-, SEDP- und Benutzerdaten. - Trace-Protokolle aktivieren:
ASTUTEDDS_LOG_LEVEL=trace ASTUTEDDS_LOG_FILE=/tmp/astutedds.log. - Überprüfen Sie die Entitäts-IDs und Ports:
- SPDP-Schreiber/Leser:
00:01:00:c2/00:01:00:c7 - SEDP-Veröffentlichung:
00:00:03:c2/00:00:03:c7 - SEDP-Abonnement:
00:00:04:c2/00:00:04:c7 - Basisport:
7400 + 250 × domain_id.
- SPDP-Schreiber/Leser:
- Bestätigen Sie, dass beide Peers kompatible Hersteller-IDs und Protokollversionen angeben.
(DDSI-RTPS 2.5).