Astuto DDS
Connettività dati in tempo reale per sistemi di difesa
Il middleware che alimenta le piattaforme di veicoli mission-critical
DDS completo con X-Type. DDS di livello militare per la difesa.
Powering defence
Astute DDS è il middleware di distribuzione dati che costituisce il cuore della soluzione completa DEF-STAN 23-009 Generic Vehicle Architecture (GVA) di Astute Systems. Dai sensori agli schermi, un'unica piattaforma unificata connette ogni sottosistema del vostro veicolo militare.
Why Publish/Subscribe
Il problema delle architetture tradizionali
I sistemi legacy dei veicoli utilizzano connessioni punto-punto. Quando si aggiunge un nuovo sottosistema, è necessario modificare ogni sistema con cui comunica. Questo crea:
- ❌ Integrazione costosa : ogni nuovo componente richiede una programmazione personalizzata
- ❌ Sistemi fragili : un singolo guasto può propagarsi a cascata attraverso la rete
- ❌ Vincolo al fornitore : i protocolli proprietari ti vincolano a un unico fornitore
- ❌ Aggiornamenti lenti : la modifica di un sottosistema comporta la necessità di ritestare tutto
La soluzione Publish/Subscribe
Con l'architettura publish/subscribe di DDS, i sottosistemi pubblicano semplicemente i dati su argomenti denominati. Qualsiasi sistema che necessiti di tali dati si iscrive all'argomento. Nessuna connessione punto-punto. Nessun codice di integrazione personalizzato.
| Vantaggio per l'azienda | Come funziona Pub/Sub |
|---|---|
| 💰 Riduzione dei costi di integrazione | Aggiungere nuovi sottosistemi senza modificare quelli esistenti |
| 🔧 Manutenzione più semplice | Sostituire o aggiornare i componenti in modo indipendente |
| 🛡️ Maggiore resilienza | I sistemi continuano a funzionare anche quando altri falliscono. |
| 🏭 Libertà multi-vendor | È possibile collegare apparecchiature di diversi fornitori a un unico bus dati. |
| ⏱️ Tempi di immissione sul mercato più rapidi | Le interfacce standard significano meno sviluppo personalizzato |
Un unico fornitore per l'intera suite GVA
Astute Systems è l' unico fornitore a offrire una suite software completa e integrata per veicoli militari conformi allo standard GVA:
| Componente | Cosa fa |
|---|---|
| boliviano | Visualizza e convalida i modelli SysML, genera le definizioni delle interfacce |
| LDMX | Il miglior editor e validatore di modelli di dati territoriali (LDM) della categoria per LDM v10.0.0 |
| ToolX | Strumenti per la generazione automatica del codice, l'integrazione del processo di build e la distribuzione. |
| Astute DDS | Collega tutti i sottosistemi con una distribuzione dei dati sicura e in tempo reale. |
| Modello dati territoriali v10.0.0 | Tipi di dati predefiniti conformi a GVA per tutti i domini dei veicoli |
| Interfaccia HMI intelligente | Software di visualizzazione per l'equipaggio conforme ai requisiti DEF-STAN 23-009 |
Vantaggi del Full Stack
| Beneficio | impatto |
|---|---|
| 🎯 Punto unico di responsabilità | Un unico contratto, un unico team di supporto, un unico partner per l'integrazione. |
| 📋 Conformità comprovata | Pre-validato rispetto ai requisiti DEF-STAN 23-009 |
| 🔄 Aggiornamenti senza interruzioni | Aggiorna qualsiasi componente senza compromettere gli altri |
| 💰 Costi prevedibili | Nessun costo di integrazione a sorpresa o clausole di licenza insidiose. |
| ⏱️ Consegna più rapida | Iniziate con software funzionanti, non con framework vuoti. |
Comparison
Considerazioni relative agli appalti
| Fattore | Astute DDS | RTI Connect | CycloneDDS | OpenDDS | DDS veloce |
|---|---|---|---|---|---|
| Modello di licenza | Opzioni flessibili | Costo commerciale per posto | Eclipse EPL 2.0 | LGPL | Apache 2.0 |
| Costo della licenza | Competitivo | $$$ per implementazione | Gratuito | Gratuito | Gratuito |
| Modello di supporto | contratto con il fornitore australiano | Imprenditore globale | Fondazione Eclipse | OCI commerciale | eProsima commercial |
| Supporto con sede in Australia | ✅ Sì | ❌ Con sede negli Stati Uniti | ❌ No | ❌ Con sede negli Stati Uniti | ❌ Con sede in Spagna |
| Pre-integrazione GVA | ✅ Integrato | ❌ Lavori su misura | ❌ Fai da te | ❌ Fai da te | ❌ Fai da te |
| Stack completo disponibile | ✅ Un unico fornitore: HMI + LDM + DDS + Strumenti | ❌ Solo middleware | ❌ Solo middleware | ❌ Solo middleware | ❌ Solo middleware |
| Strumenti SysML | ✅ Bohemian + LDMX + ToolX | ❌ Nessuno | ❌ Nessuno | ❌ Nessuno | ❌ Nessuno |
| Controllo delle esportazioni | giurisdizione australiana | Considerazioni relative alla normativa ITAR statunitense | Unione Europea | NOI | Unione Europea |
Confronto delle caratteristiche tecniche
| Caratteristica | Astute DDS | RTI Connect | CycloneDDS | OpenDDS | DDS veloce |
|---|---|---|---|---|---|
| DDSI-RTPS 2.5 | ✅ Completo | ✅ Completo | ✅ Completo | ✅ Completo | ✅ Completo |
| DDS Security 1.1 | ✅ Completo | ✅ Completo | ⚠️ Parziale | ✅ Completo | ✅ Completo |
| X-Types 1.3 | ✅ Completo | ✅ Completo | ⚠️ Parziale | ⚠️ Parziale | ⚠️ Parziale |
| API per dati dinamici | ✅ Completo | ✅ Completo | ❌ Nessuno | ⚠️ Base | ⚠️ Base |
| Servizio di ricerca tipo | ✅ Completo | ✅ Completo | ❌ Nessuno | ❌ Nessuno | ⚠️ Parziale |
| Filtro dei contenuti | ✅ Completo | ✅ Completo | ✅ Completo | ✅ Completo | ✅ Completo |
| Trasporto di memoria condivisa | ✅ Completo | ✅ Completo | ✅ Completo | ❌ Nessuno | ✅ Completo |
| Trasporto TCP | ✅ Completo | ✅ Completo | ✅ Completo | ✅ Completo | ✅ Completo |
| Zero-Copy | ✅ Supportato | ✅ Supportato | ✅ Supportato | ❌ Nessuno | ✅ Supportato |
Conformità agli standard
| Standard | Astute DDS | RTI Connect | CycloneDDS | OpenDDS | DDS veloce |
|---|---|---|---|---|---|
| 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) | ✅ | ❌ | ❌ | ❌ | ❌ |
| Modello dati territoriali v10.0.0 | ✅ | ❌ | ❌ | ❌ | ❌ |
Supporto linguistico e di piattaforma
| Capacità | Astute DDS | RTI Connect | CycloneDDS | OpenDDS | DDS veloce |
|---|---|---|---|---|---|
| C++ | C++20 | C++11 | Involucro C99 | C++11 | C++11 |
| C | Via C++ | ✅ Nativo | ✅ Nativo | ❌ | ✅ Nativo |
| Pitone | ✅ | ✅ | ✅ | ✅ | ✅ |
| Ruggine | ✅ | ❌ | ✅ | ❌ | ❌ |
| Linux | ✅ | ✅ | ✅ | ✅ | ✅ |
| Windows | ✅ | ✅ | ✅ | ✅ | ✅ |
| VxWorks | Tabella di marcia | ✅ | ⚠️ | ✅ | ⚠️ |
| Sistemi embedded/RTOS | ✅ Progettato per | ✅ Variante Micro | ⚠️ | ⚠️ | ⚠️ |
| Collegamento statico | ✅ Biblioteca singola | ⚠️ | ⚠️ Librerie condivise | ⚠️ Librerie condivise | ⚠️ Librerie condivise |
Perché Astute DDS vince
| vs RTI Connext | vs CycloneDDS | vs OpenDDS | vs Fast DDS |
|---|---|---|---|
| Opzioni di licenza flessibili | Supporto completo per X-Type | API completa per dati dinamici | supporto con sede in Australia |
| Fornitore australiano, nessuna problematica relativa alle normative ITAR. | Sicurezza integrata | Servizio di ricerca tipo | Piena conformità GVA |
| Stack GVA completo da un'unica fonte | LDMX + ToolX, il meglio della categoria | LDMX + ToolX, il meglio della categoria | Implementazione più semplice |
| LDM v10.0.0 incluso | Supporto commerciale | giurisdizione australiana | X-Types complete |
Why Astute DDS
"Grazie alla suite Astute, abbiamo ridotto del 40% i tempi di integrazione di GVA. Avere un unico fornitore responsabile di middleware, HMI e modello dati ha eliminato le continue rimpallazioni di responsabilità che avevano caratterizzato i progetti precedenti."
— Responsabile del programma, contraente principale del settore difesa del Regno Unito
Interoperabilità garantita
Astute DDS è completamente interoperabile con tutte le principali implementazioni DDS. Il tuo veicolo può comunicare senza problemi con:
Nessun vincolo con un fornitore specifico. Se un sistema partner utilizza un'implementazione DDS diversa, Astute DDS si connetterà senza modifiche.
Conformità agli standard di difesa
Progettato per soddisfare i requisiti militari.
| Standard | Stato |
|---|---|
| DEF-STAN 23-009 | ✅ Piena conformità al GVA |
| Modello dati territoriali v10.0.0 | ✅ Tipi di dominio completi |
| STANAG NATO | ✅ Pronto per l'interoperabilità |
| Elementi essenziali di sicurezza informatica | ✅ Certificazione di sicurezza |
Sicurezza di cui ti puoi fidare
- 🔐 Comunicazioni crittografate : tutti i dati sono protetti durante la trasmissione.
- 🎫 Autenticazione basata su certificati : solo i sistemi autorizzati si connettono
- 📋 Politiche di controllo degli accessi : definiscono chi può pubblicare o iscriversi a ciascun argomento.
- 📝 Registrazione completa degli audit — Traccia completa per le verifiche di sicurezza
Comprovato in produzione
Implementato in molteplici programmi
Astute DDS gode della fiducia dei principali responsabili della difesa in Australia, nel Regno Unito e nei paesi alleati:
| Dominio | Applicazioni |
|---|---|
| 🎖️ Veicoli blindati | Display per l'equipaggio, fusione dei sensori, integrazione delle armi |
| 🤖 Robotica e sistemi autonomi | Veicoli terrestri senza pilota, piattaforme robotiche, navigazione autonoma |
| 🛡️ Anti-UAS (CUAS) | Sistemi di rilevamento, tracciamento e neutralizzazione dei droni |
| ✈️ Stazioni di controllo a terra | Comando e controllo del drone, flussi di dati dai sensori |
| 🚢 Sistemi navali | Display del ponte, controllo danni, navigazione |
| 🏭 Formazione e simulazione | Ambienti sintetici, analisi post-azione, debriefing |
🎬 Richiedi una demo
Scopri Astute DDS e l'intera suite GVA in azione. Scopri di più sulla nostra suite o richiedi subito una dimostrazione.
Frequently Asked Questions
Le domande più frequenti che gli sviluppatori si pongono quando adottano Astute DDS.
1. Cos'è Astute DDS?
Astute DDS è un'implementazione in C++20 del servizio di distribuzione dati OMG.
(DDS) API DCPS, protocollo di rete DDSI-RTPS 2.5, sistema di tipi DDS-XTypes 1.3,
Plugin DDS-Security 1.1/1.2 e IDL 4.2. Viene fornito come statico
libreria libastutedds.a (più binding per C, Python e Rust) e viene fornito con
l'interfaccia grafica di diagnostica astutedds-inspect e una demo interoperabile di Shapes.
2. Come faccio a pubblicare e iscrivermi a un argomento?
Crea un DomainParticipant , un Topic e poi un DataWriter (lato publisher).
oppure DataReader (lato abbonato):
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);Consulta la sezione "Per iniziare › Prima applicazione" .
3. Qual è la differenza tra read() e take() ?
-
read()restituisce i campioni, ma **li lascia nella cache del lettore**, in modo che le chiamate successive (o altri lettori nello stesso sottoscrittore) possano leggerli nuovamente. -
take()restituisce i campioni e **li rimuove** dalla cache.
Utilizza read() quando l'argomento rappresenta uno stato condiviso che desideri ispezionare.
ripetutamente; usa take() quando l'argomento rappresenta gli eventi che vuoi
consumare esattamente una volta.
4. Perché gli abbonati che si iscrivono in un secondo momento non ricevono i campioni in anteprima?
Per impostazione predefinita DURABILITY è VOLATILE , quindi i campioni scritti prima di un sottoscrittore
i campioni corrispondenti non vengono consegnati. Per consegnare campioni storici a chi si è unito in ritardo,
configurare lo scrittore e i lettori corrispondenti con TRANSIENT_LOCAL
durabilità (che richiede anche un'affidabilità RELIABLE ):
DataWriterQos qos;
writer->get_qos(qos);
qos.durability().kind = TRANSIENT_LOCAL_DURABILITY_QOS;
qos.reliability().kind = RELIABLE_RELIABILITY_QOS;
writer->set_qos(qos); Per la persistenza tra i riavvii dello scrittore utilizzare
Servizio di persistenza o TRANSIENT / PERSISTENT
tipi di durabilità.
5. Qual è la funzione QoS RELIABILITY ?
-
BEST_EFFORT(impostazione predefinita per molti argomenti integrati): i campioni persi durante la trasmissione non vengono ritrasmessi. Minimo overhead. -
RELIABLE: lo scrittore tiene traccia dei riconoscimenti (ACKNACK/ battito cardiaco) da ogni lettore corrispondente e ritrasmette i numeri di sequenza mancanti fino al
Il lettore si mette in pari oppure la cronologia è completa.
L'affidabilità è per scrittore/per lettore e deve essere compatibile: un BEST_EFFORT
Un lettore può trovare uno scrittore RELIABLE , ma non viceversa.
6. Qual è la funzione QoS DURABILITY ?
DURABILITY controlla se i campioni vengono conservati per la consegna ai lettoriche si uniscono dopo che l'esempio è stato scritto:
| Tipo | Disponibilità per chi si unisce in un secondo momento? |
|---|---|
VOLATILE | NO |
TRANSIENT_LOCAL | Sì, finché lo scrittore è in vita |
TRANSIENT | Sì, per tutta la durata della vita dell'autore (tramite il servizio di persistenza). |
PERSISTENT | Sì, anche dopo il riavvio del processo (su disco) |
7. Qual è la differenza tra HISTORY e DURABILITY ?
HISTORY ( KEEP_LAST(depth) o KEEP_ALL ) controlla quanti campioni La cache scrittore/lettore mantiene la sua validità in qualsiasi istante. DURABILITY controlla se la
Lo scrittore offre ai lettori esempi che corrispondono in seguito. Lavorano insieme ma
risolvere problemi diversi: KEEP_ALL da solo non rende disponibili i campioni
per chi si unisce in un secondo momento.
8. Come si specifica un ID di dominio?
Passa l'ID del dominio come primo argomento a create_participant :
auto dp = DomainParticipantFactory::get_instance()
->create_participant(42, PARTICIPANT_QOS_DEFAULT, nullptr, 0); I partecipanti su domini diversi non comunicano. La porta DDSI-RTPS
la formula 7400 + 250 * domain_id determina le porte UDP di base utilizzate per
scoperta.
9. Perché il mio editore e il mio abbonato non si scoprono a vicenda?
Cause comuni:
- ID di dominio diversi : entrambi i partecipanti devono utilizzare lo stesso ID.
- Multicast bloccato — SPDP utilizza il multicast UDP su
239.255.0.1da
Predefinito. Controlla il firewall dell'host e l'interruttore IGMP snooping. - Interfaccia di rete errata : sugli host multi-homed impostare
ASTUTEDDS_NETWORK_INTERFACE=oppure configurarlo nel profilo JSON/XML di rilevamento (vedere Configurazione rilevamento JSON ). - QoS incompatibile : vedi la domanda 15.
- Trasporti diversi : verificare che entrambi i peer utilizzino UDPv4 (o entrambi UDPv6,
TCP, SHM).
Abilita la registrazione di traccia con ASTUTEDDS_LOG_LEVEL=trace e ispeziona un pacchetto
cattura con astutedds-inspect .
10. Quali funzionalità di IDL sono supportate?
Il compilatore astutedds-idl incluso implementa OMG IDL 4.2, tra cui:
- Tipi primitivi (
boolean,octet, tipi interiint8–uint64,float/double/long double,char/wchar,string/wstring). - Strutture, unioni, enumerazioni, maschere di bit, typedef.
- Sequenze limitate e illimitate, matrici, mappe.
-
@key,@id,@optional,@default,@range,@min,@max,@unit,@extensibility(FINAL|APPENDABLE|MUTABLE),@nested. - Costanti e spazi dei nomi
module.
Il codice C++ generato utilizza XCDR2 per impostazione predefinita, con XCDR1 opzionale per l'interoperabilità.
11. Come posso filtrare gli esempi che ho pubblicato io stesso?
Due opzioni:
- Ignora a livello di partecipante : chiama
dp->ignore_publication(handle)
passando l'InstanceHandle_tdello scrittore locale. - Filtra nella funzione di callback del lettore utilizzando
SampleInfo::publication_handle
e confrontandolo con ilget_instance_handle()del tuo scrittore.
Un argomento filtrato in base al contenuto può anche escludere un campo chiave autopubblicato.
12. Quali caratteri sono consentiti nei nomi degli argomenti?
I nomi degli argomenti possono contenere caratteri alfanumerici ASCII, _ e / come
separatore di gerarchia. La lunghezza è limitata a 256 caratteri. Evitare caratteri iniziali
cifre e prefissi DDS riservati integrati ( DCPS , dds ). I nomi dei tipi seguono
la stessa regola.
13. Come faccio a capire quando un utente che scrive o legge da remoto si disconnette?
Installa un DataReaderListener e implementa on_subscription_matched /
on_liveliness_changed , oppure poll reader->get_subscription_matched_status() . Il current_count_changeIl campo è negativo quando un peer non corrisponde.
La vivacità è regolata dalla QoS LIVELINESS — impostata
kind = AUTOMATIC_LIVELINESS_QOS con una lease_duration per rilevarepari silenziosi entro un tempo limitato.
14. Come posso ricevere una notifica quando arrivano nuovi dati?
Collega un listener con la maschera 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 viene attivato sia per i nuovi campioni che per il ciclo di vita dell'istanza. modifiche; ispeziona sempre SampleInfo::valid_data prima di dereferenziare il
carico utile di esempio.
15. Cosa significa "QoS incompatibile"?
Uno scrittore e un lettore corrispondono solo quando ogni richiesta/QoS offerta è
compatibile:
| Politica | Richiesto ≤ Offerto |
|---|---|
RELIABILITY | lettore BEST_EFFORT ≤ scrittore RELIABLE |
DURABILITY | Tipo di lettore ≤ tipo di scrittore (nell'ordine delle specifiche) |
DEADLINE | period di lettura ≥ period di scrittura |
LATENCY_BUDGET | duration della lettura ≥ duration della scrittura |
OWNERSHIP | devono essere uguali ( SHARED o EXCLUSIVE ) |
PARTITION | almeno un nome di partizione deve sovrapporsi |
Ascolta on_offered_incompatible_qos / on_requested_incompatible_qos
per trovare l'ID esatto della policy in fase di esecuzione.
16. Come faccio a inviare campioni di dimensioni superiori a un datagramma UDP?
Astute DDS frammenta automaticamente i campioni più grandi di quelli configurati
fragment_size (predefinito 1344 byte per IPv4) e li riassembla su lettore che utilizza i sottomessaggi DDSI-RTPS DATA_FRAG . Il protocollo di affidabilità
Recupera i frammenti mancanti senza dover reinviare l'intero campione.
Per campioni molto grandi (≥ 1 MB) aumentare i buffer dei socket del sistema operativo:
sudo sysctl -w net.core.rmem_max=8388608
sudo sysctl -w net.core.wmem_max=8388608e valutare la possibilità di passare al trasporto a memoria condivisa per i lettori locali.
17. Come si configura l'interfaccia di rete da utilizzare?
Tre opzioni, in ordine di priorità:
- Variabile d'ambiente:
ASTUTEDDS_NETWORK_INTERFACE=eth0. - Configurazione di rilevamento JSON — vedi Configurazione di rilevamento JSON .
- Profilo QoS XML — vedere Profili QoS DDS-XML .
Se non ne è impostato alcuno, Astute DDS seleziona la prima interfaccia non loopback con un
Indirizzo compatibile con il multicast.
18. Posso utilizzare Astute DDS su una rete senza multicast?
Sì. Due alternative:
- Elenco peer SPDP unicast : fornisce un elenco di coppie host/porta peer nel
Configurazione di rilevamento; Astute DDS invia annunci SPDP unicast a ciascun peer. - Trasporto TCP : passa il partecipante al trasporto TCP RTPS per
ambienti che bloccano completamente UDP. Vedi
Router di dominio DDS per l'attraversamento di reti isolate.
19. Come posso ottimizzare la latenza?
- Utilizzare l'affidabilità
RELIABLEcon la cronologiaKEEP_LAST(1)su entrambe le estremità in modo
Le ritrasmissioni sono minime. - Abilita il trasporto della memoria condivisa per i partecipanti che si trovano nella stessa posizione.
- Blocca i thread DDS di Astute con affinità CPU e utilizza la pianificazione in tempo reale
(SCHED_FIFO) sui processi del publisher e del subscriber. - Disabilita Nagle utilizzando UDP (il protocollo predefinito).
- Aumentare i buffer dei socket (vedere la domanda 16) per assorbire i picchi di traffico.
- Imposta
LATENCY_BUDGET = 0per disabilitare qualsiasi ritardo di raggruppamento.
20. Perché si verificano picchi di latenza quando pubblico campioni di grandi dimensioni?
Quando i campioni superano il buffer socket predefinito del sistema operativo (spesso 208 KB su Linux),
il kernel scarta i pacchetti e il protocollo affidabile deve ritrasmetterli, causando
picchi. Aumentare net.core.rmem_max / net.core.wmem_max ad almeno il
La dimensione del campione risolve questo problema. Valuta la possibilità di frammentare con fragment_size inferiore.
su reti con perdita di dati.
21. Come si collegano due domini DDS?
Utilizza Astute DDS Domain Router , un servizio che unisce due o più
domini e inoltra argomenti configurati tra di essi, con opzioni
Filtro chiave/contenuto e traduzione QoS. Vedi
Router di dominio DDS .
22. Quali sono le opzioni di lingua disponibili?
| Lingua | Stato | Note |
|---|---|---|
| C++20 | Stabile | API principale: libastutedds.a |
| C | Stabile | API C flat per FFI, vedere include/astutedds/c/astutedds.h |
| Pitone | Stabile | Binding di pybind11, CPython 3.10 – 3.13 |
| Ruggine | Beta | astutedds crate (wrapper sicuro per l'API C) |
23. Quali piattaforme e versioni del sistema operativo sono supportate?
| Piattaforma | Versioni testate |
|---|---|
| Linux | Ubuntu 22.04 / 24.04, RHEL 9 / 10, AlmaLinux 9 / 10, Debian 12 |
| Windows | Windows 10, Windows 11, Windows Server 2022 |
I wheel Python per Linux sono etichettati manylinux_2_28 (glibc ≥ 2.28) e funzionano
su qualsiasi distribuzione compatibile.
24. Come si abilita la sicurezza DDS?
- Fornitura di artefatti di identità (X.509) e autorizzazioni (XML firmato).
- Configura la proprietà QoS del partecipante con l'autenticazione, il controllo degli accessi e
Proprietà del plugin Crypto (certificato CA, certificato/chiave di identità, file delle autorizzazioni,
(file di governance). - Collegamento con Astute DDS creato con
-DASTUTEDDS_ENABLE_SECURITY=ON.
Consultare DDS Security per istruzioni complete e un
Modello di governance/autorizzazioni.
25. Come faccio a mantenere i dati dopo un riavvio?
Esegui il servizio di persistenza insieme al tuo dominio. Si iscrive a
argomenti TRANSIENT / PERSISTENT configurati, memorizza i campioni in un file locale
database (SQLite per impostazione predefinita) e li ripubblica su late-join
abbonati, compresi coloro che si iscrivono dopo che l'autore originale non è più presente.
Vedi Servizio di persistenza .
26. Come si registra e si riproduce il traffico dati?
Utilizzare lo strumento astutedds-record incluso per catturare un dominio in un
.astdb e astutedds-replay per pubblicarlo nuovamente con impostazioni regolabili ridimensionamento temporale. La registrazione è consapevole del tipo e utilizza internamente XCDR2. Vedi
Registrazione e riproduzione .
27. Come posso far evolvere un tipo di dati senza compromettere gli abbonati?
Annota il tipo IDL con @extensibility(MUTABLE) (o APPENDABLE ) e
etichetta ciascun membro con @id(N) . I flussi mutabili XCDR2 consentono:
- Aggiunta di nuovi membri a entrambe le estremità.
- Rimozione degli elementi opzionali.
- Riordino dei membri.
I membri non corrispondenti vengono ignorati tramite le regole di assegnabilità X-Types.
@extensibility(FINAL) blocca il layout e deve essere utilizzato quando è binarioLa compatibilità con i lettori XCDR1 di vecchia generazione è importante.
28. Come si utilizzano gli argomenti filtrati per contenuto?
Crea un ContentFilteredTopic da un argomento normale con un filtro simile a SQL.
espressione e associare ad essa un 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); Il filtro viene valutato sul lato scrittore quando possibile per risparmiare larghezza di banda.
29. Come si configura il QoS da un file XML?
Utilizzare XmlQosLoader per leggere un profilo DDS-XML e applicarlo durante la creazione
entità:
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); Vedere Profili QoS DDS-XML per lo schema e il lavoro svolto
esempi.
30. Come si esegue il debug dei problemi di interoperabilità o di rilevamento?
- Esegui
astutedds-inspectsul dominio per visualizzare i dati scoperti
partecipanti, endpoint e stato di corrispondenza in tempo reale. - Cattura il traffico con
tcpdump -i any -w dds.pcap 'udp port 7400 or portrange 7400-7500'e aprilo in Wireshark, l'analizzatore RTPS.
Decodifica i dati SPDP, SEDP e i dati utente. - Abilita i log di traccia:
ASTUTEDDS_LOG_LEVEL=trace ASTUTEDDS_LOG_FILE=/tmp/astutedds.log. - Verifica gli ID delle entità e le porte:
- Scrittore/lettore SPDP:
00:01:00:c2/00:01:00:c7 - Pubblicazione SEDP:
00:00:03:c2/00:00:03:c7 - Abbonamento SEDP:
00:00:04:c2/00:00:04:c7 - Porta base:
7400 + 250 × domain_id.
- Scrittore/lettore SPDP:
- Verificare che entrambi i peer pubblicizzino ID fornitore e versione del protocollo compatibili.
(DDSI-RTPS 2.5).