Odontólogo astuto
Conectividad de datos en tiempo real para sistemas de defensa
El middleware que impulsa las plataformas de vehículos de misión crítica
DDS con todas las funciones y tipo X. DDS de grado armamentístico para defensa.
Powering defence
Astute DDS es el middleware de distribución de datos que constituye el núcleo de la solución integral de arquitectura genérica de vehículos (GVA) DEF-STAN 23-009 de Astute Systems. Desde sensores hasta pantallas, una plataforma unificada conecta todos los subsistemas de su vehículo militar.
Why Publish/Subscribe
El problema de las arquitecturas tradicionales
Los sistemas de vehículos heredados utilizan conexiones punto a punto. Al agregar un nuevo subsistema, debe modificar todos los sistemas con los que se comunica. Esto crea:
- ❌ Integración costosa : cada nuevo componente requiere programación personalizada.
- ❌ Sistemas frágiles : un fallo puede propagarse en cascada por toda la red.
- ❌ Dependencia del proveedor : los protocolos propietarios te atan a un único proveedor.
- ❌ Actualizaciones lentas : cambiar un subsistema implica volver a probarlo todo.
La solución de publicación/suscripción
Con la arquitectura de publicación/suscripción de DDS, los subsistemas simplemente publican datos en temas con nombre. Cualquier sistema que necesite esos datos se suscribe al tema. Sin conexiones punto a punto. Sin código de integración personalizado.
| Beneficio empresarial | Cómo funciona Pub/Sub |
|---|---|
| 💰 Menores costos de integración | Agregar nuevos subsistemas sin modificar los existentes. |
| 🔧 Mantenimiento más sencillo | Reemplazar o actualizar componentes de forma independiente. |
| 🛡️ Mayor resiliencia | Los sistemas siguen funcionando incluso cuando otros fallan. |
| 🏭 Libertad para trabajar con múltiples proveedores | Combinar equipos de diferentes proveedores en un mismo bus de datos |
| ⏱️ Mayor rapidez para lanzar productos al mercado | Las interfaces estándar implican menos desarrollo personalizado. |
Fuente única para todo el conjunto de valores de valor agregado bruto (VAB).
Astute Systems es el único proveedor que ofrece un paquete de software completo e integrado para vehículos militares que cumplen con la normativa GVA:
| Componente | Qué hace |
|---|---|
| bohemio | Visualice y valide modelos SysML, genere definiciones de interfaz. |
| LDMX | Editor y validador de modelos de datos territoriales de primera categoría para LDM v10.0.0 |
| ToolX | Herramientas automatizadas para la generación de código, la integración de compilaciones y el despliegue. |
| Doctores en Cirugía Astutos | Conecte todos los subsistemas con distribución de datos segura y en tiempo real. |
| Modelo de datos territoriales v10.0.0 | Tipos de datos predefinidos compatibles con GVA para todos los dominios de vehículos. |
| Interfaz hombre-máquina (HMI) astuta | Software de visualización para la tripulación que cumple con los requisitos de DEF-STAN 23-009. |
Beneficios del Full Stack
| Beneficio | Impacto |
|---|---|
| 🎯 Punto único de responsabilidad | Un contrato, un equipo de soporte, un socio de integración. |
| 📋 Cumplimiento comprobado | Prevalidado según los requisitos de DEF-STAN 23-009. |
| 🔄 Actualizaciones sin interrupciones | Actualiza cualquier componente sin dañar los demás. |
| 💰 Costes predecibles | Sin costes de integración sorpresa ni sorpresas con las licencias. |
| ⏱️ Entrega más rápida | Empieza con software funcional, no con marcos de trabajo vacíos. |
Comparison
Consideraciones sobre adquisiciones
| Factor | Doctores en Cirugía Astutos | RTI Connext | CycloneDDS | OpenDDS | DDS rápido |
|---|---|---|---|---|---|
| Modelo de licencia | Opciones flexibles | Anuncio por asiento | Eclipse EPL 2.0 | LGPL | Apache 2.0 |
| Costo de la licencia | Competitivo | $$$ por despliegue | Gratis | Gratis | Gratis |
| Modelo de soporte | Contrato con proveedor australiano | Empresa global | Fundación Eclipse | Anuncio de OCI | eProsima comercial |
| Soporte con sede en Australia | ✅ Sí | ❌ Con sede en EE. UU. | ❌ No | ❌ Con sede en EE. UU. | ❌ Con sede en España |
| Preintegración del VAB | ✅ Integrado | ❌ Trabajo personalizado | ❌ Hazlo tú mismo | ❌ Hazlo tú mismo | ❌ Hazlo tú mismo |
| Paquete completo disponible | ✅ Fuente única: HMI + LDM + DDS + Herramientas | ❌ Solo middleware | ❌ Solo middleware | ❌ Solo middleware | ❌ Solo middleware |
| Herramientas SysML | ✅ Bohemian + LDMX + ToolX | ❌ Ninguno | ❌ Ninguno | ❌ Ninguno | ❌ Ninguno |
| Control de exportaciones | Jurisdicción australiana | Consideraciones de la ITAR de EE. UU. | UE | A NOSOTROS | UE |
Comparación de características técnicas
| Característica | Doctores en Cirugía Astutos | RTI Connext | CycloneDDS | OpenDDS | DDS rápido |
|---|---|---|---|---|---|
| DDSI-RTPS 2.5 | ✅ Completo | ✅ Completo | ✅ Completo | ✅ Completo | ✅ Completo |
| Seguridad DDS 1.1 | ✅ Completo | ✅ Completo | ⚠️ Parcial | ✅ Completo | ✅ Completo |
| X-Types 1.3 | ✅ Completo | ✅ Completo | ⚠️ Parcial | ⚠️ Parcial | ⚠️ Parcial |
| API de datos dinámicos | ✅ Completo | ✅ Completo | ❌ Ninguno | ⚠️ Básico | ⚠️ Básico |
| Servicio TypeLookup | ✅ Completo | ✅ Completo | ❌ Ninguno | ❌ Ninguno | ⚠️ Parcial |
| Filtrado de contenido | ✅ Completo | ✅ Completo | ✅ Completo | ✅ Completo | ✅ Completo |
| Transporte de memoria compartida | ✅ Completo | ✅ Completo | ✅ Completo | ❌ Ninguno | ✅ Completo |
| Transporte TCP | ✅ Completo | ✅ Completo | ✅ Completo | ✅ Completo | ✅ Completo |
| Copia cero | ✅ Compatible | ✅ Compatible | ✅ Compatible | ❌ Ninguno | ✅ Compatible |
Cumplimiento de las normas
| Estándar | Doctores en Cirugía Astutos | RTI Connext | CycloneDDS | OpenDDS | DDS rápido |
|---|---|---|---|---|---|
| Dios mío, DDS 1.4 | ✅ | ✅ | ✅ | ✅ | ✅ |
| ¡Dios mío, DDSI-RTPS 2.5! | ✅ | ✅ | ✅ | ✅ | ✅ |
| OMG DDS-XTypes 1.3 | ✅ | ✅ | ⚠️ | ⚠️ | ⚠️ |
| Seguridad OMG DDS 1.1 | ✅ | ✅ | ⚠️ | ✅ | ✅ |
| Dios mío, IDL 4.2 | ✅ | ✅ | ✅ | ✅ | ✅ |
| DEF-STAN 23-009 (GVA) | ✅ | ❌ | ❌ | ❌ | ❌ |
| Modelo de datos territoriales v10.0.0 | ✅ | ❌ | ❌ | ❌ | ❌ |
Soporte de idioma y plataforma
| Capacidad | Doctores en Cirugía Astutos | RTI Connext | CycloneDDS | OpenDDS | DDS rápido |
|---|---|---|---|---|---|
| C++ | C++20 | C++11 | Envoltorio C99 | C++11 | C++11 |
| do | Mediante C++ | ✅ Nativo | ✅ Nativo | ❌ | ✅ Nativo |
| Pitón | ✅ | ✅ | ✅ | ✅ | ✅ |
| Óxido | ✅ | ❌ | ✅ | ❌ | ❌ |
| Linux | ✅ | ✅ | ✅ | ✅ | ✅ |
| Windows | ✅ | ✅ | ✅ | ✅ | ✅ |
| VxWorks | Hoja de ruta | ✅ | ⚠️ | ✅ | ⚠️ |
| Sistema operativo en tiempo real (RTOS) integrado | ✅ Diseñado para | ✅ Variante micro | ⚠️ | ⚠️ | ⚠️ |
| Enlace estático | ✅ Biblioteca individual | ⚠️ | ⚠️ Bibliotecas compartidas | ⚠️ Bibliotecas compartidas | ⚠️ Bibliotecas compartidas |
Por qué gana Astute DDS
| vs RTI Connext | vs CycloneDDS | vs OpenDDS | vs Fast DDS |
|---|---|---|---|
| Opciones de licencia flexibles | Soporte completo para X-Types | API de datos dinámicos completa | Soporte con sede en Australia |
| Proveedor australiano, sin preocupaciones relacionadas con ITAR. | Seguridad integrada | Servicio TypeLookup | Cumplimiento total del GVA |
| Pila completa de GVA de fuente única | LDMX + ToolX de primera categoría | LDMX + ToolX de primera categoría | Implementación más sencilla |
| LDM v10.0.0 incluido | Soporte comercial | Jurisdicción australiana | X-Types completos |
Why Astute DDS
"Redujimos nuestro plazo de integración de GVA en un 40 % gracias a la plataforma Astute. Contar con un único proveedor responsable del middleware, la interfaz hombre-máquina (HMI) y el modelo de datos eliminó las acusaciones mutuas que plagaron los programas anteriores."
— Director de Programa, Primer Ministro de Defensa del Reino Unido
Interoperabilidad garantizada
Astute DDS es totalmente interoperable con todas las principales implementaciones de DDS. Su vehículo puede comunicarse sin problemas con:
Sin dependencia de un proveedor específico. Si un sistema asociado utiliza una implementación de DDS diferente, Astute DDS se conectará sin modificaciones.
Cumplimiento de las normas de defensa
Diseñado para cumplir con los requisitos militares.
| Estándar | Estado |
|---|---|
| DEF-STAN 23-009 | ✅ Cumplimiento total del GVA |
| Modelo de datos territoriales v10.0.0 | ✅ Tipos de dominio completos |
| STANAG de la OTAN | ✅ Preparado para la interoperabilidad |
| Elementos esenciales de ciberseguridad | ✅ Certificado de seguridad |
Seguridad en la que puede confiar
- 🔐 Comunicaciones cifradas : todos los datos están protegidos durante la transmisión.
- 🎫 Autenticación basada en certificados : solo los sistemas autorizados se conectan.
- 📋 Políticas de control de acceso : define quién puede publicar o suscribirse a cada tema.
- 📝 Registro de auditoría completo : historial completo para revisiones de seguridad
Probado en producción
Implementado en múltiples programas
Astute DDS goza de la confianza de los principales actores del sector de la defensa en Australia, el Reino Unido y las naciones aliadas:
| Dominio | Aplicaciones |
|---|---|
| 🎖️ Vehículos blindados | Pantallas para la tripulación, fusión de sensores, integración de armas |
| 🤖 Robótica y sistemas autónomos | Vehículos terrestres no tripulados, plataformas robóticas, navegación autónoma |
| 🛡️ Sistemas antidrones (CUAS) | Sistemas de detección, seguimiento y neutralización de drones |
| ✈️ Estaciones de control terrestre | Comando y control de UAV, señales de sensores |
| 🚢 Sistemas Navales | Pantallas del puente, control de daños, navegación |
| 🏭 Entrenamiento y simulación | Entornos sintéticos, análisis posterior a la acción, sesión informativa. |
🎬 Solicitar demostración
Vea Astute DDS y la plataforma GVA completa en acción. Obtenga más información sobre nuestra plataforma o solicite una demostración ahora.
Frequently Asked Questions
Las preguntas más frecuentes que hacen los desarrolladores al adoptar Astute DDS son:
1. ¿Qué es Astute DDS?
Astute DDS es una implementación en C++20 del Servicio de Distribución de Datos de OMG.
(DDS) DCPS API, protocolo de cable DDSI-RTPS 2.5, sistema de tipos DDS-XTypes 1.3,
Complementos DDS-Security 1.1/1.2 e IDL 4.2. Se entrega como el archivo estático.
La biblioteca libastutedds.a (más enlaces para C, Python y Rust) se incluye con
La interfaz gráfica de usuario (GUI) de diagnóstico de astutedds-inspect y una demostración interoperable de formas.
2. ¿Cómo puedo publicar y suscribirme a un tema?
Cree un DomainParticipant , un Topic y, a continuación, un DataWriter (lado del publicador).
o DataReader (lado del suscriptor):
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);Consulte Primeros pasos › Primera aplicación .
3. ¿Cuál es la diferencia entre read() y take() ?
-
read()devuelve muestras, pero **las deja en la caché del lector**, de modo que las llamadas posteriores (u otros lectores en el mismo suscriptor) puedan leerlas de nuevo. -
take()devuelve muestras y **las elimina** de la caché.
Utilice read() cuando el tema represente un estado compartido que desee inspeccionar.
repetidamente; use take() cuando el tema represente eventos que desee
consumir exactamente una vez.
4. ¿Por qué los suscriptores que se unen más tarde no reciben muestras anteriores?
Por defecto, DURABILITY es VOLATILE , por lo que las muestras escritas antes de un suscriptor
no se entregan si coinciden. Para entregar muestras históricas a los nuevos miembros,
configure el escritor y los lectores correspondientes con TRANSIENT_LOCAL
durabilidad (que también requiere una fiabilidad RELIABLE ):
DataWriterQos qos;
writer->get_qos(qos);
qos.durability().kind = TRANSIENT_LOCAL_DURABILITY_QOS;
qos.reliability().kind = RELIABLE_RELIABILITY_QOS;
writer->set_qos(qos); Para que persista entre reinicios del escritor, utilice el
Servicio de Persistencia o el TRANSIENT / PERSISTENT
tipos de durabilidad.
5. ¿Qué hace la QoS RELIABILITY ?
-
BEST_EFFORT(valor predeterminado para muchos temas integrados): las muestras que se pierden en la transmisión no se retransmiten. Menor sobrecarga. -
RELIABLE: el escritor rastrea los acuses de recibo (ACKNACK/ latido del corazón) de cada lector coincidente y retransmite los números de secuencia perdidos hasta que el
El lector se pone al día o el historial está completo.
La fiabilidad es por escritor/por lector y debe ser compatible: un BEST_EFFORT
Un lector puede coincidir con un escritor RELIABLE , pero no al revés.
6. ¿Qué hace la calidad de servicio (QoS) DURABILITY ?
DURABILITY controla si las muestras se conservan para su entrega a los lectores.que se unen después de que se escribió la muestra:
| Amable | ¿Disponible para quienes se incorporen tarde? |
|---|---|
VOLATILE | No |
TRANSIENT_LOCAL | Sí, mientras el escritor esté vivo. |
TRANSIENT | Sí, a lo largo de la vida del escritor (a través del Servicio de Persistencia). |
PERSISTENT | Sí, incluso tras reinicios de procesos (en disco). |
7. ¿Cuál es la diferencia entre HISTORY y DURABILITY ?
HISTORY ( KEEP_LAST(depth) o KEEP_ALL ) controla cuántas muestras La caché de escritura/lectura se mantiene en cualquier instante. DURABILITY controla si el
El escritor ofrece muestras a los lectores que luego coinciden. Trabajan juntos pero
resolver diferentes problemas: KEEP_ALL por sí solo no hace que las muestras estén disponibles
a los que se incorporan tarde.
8. ¿Cómo especifico un ID de dominio?
Pasa el ID del dominio como primer argumento a create_participant :
auto dp = DomainParticipantFactory::get_instance()
->create_participant(42, PARTICIPANT_QOS_DEFAULT, nullptr, 0); Los participantes en diferentes dominios no se comunican. El puerto DDSI-RTPS
La fórmula 7400 + 250 * domain_id determina los puertos UDP base utilizados para
descubrimiento.
9. ¿Por qué mi editor y mi suscriptor no se conocen?
Causas comunes:
- Identificadores de dominio diferentes : ambos participantes deben usar el mismo identificador.
- Multidifusión bloqueada : SPDP utiliza multidifusión UDP en
239.255.0.1por
Por defecto. Compruebe el firewall del host y el IGMP snooping del switch. - Interfaz de red incorrecta : en hosts con múltiples interfaces de red, configure
ASTUTEDDS_NETWORK_INTERFACE=o configurarlo en el perfil JSON/XML de descubrimiento (consulte Configuración de descubrimiento JSON ). - QoS incompatible : véase la pregunta 15.
- Transportes diferentes : verifique que ambos pares utilicen UDPv4 (o ambos UDPv6,
TCP, SHM).
Habilite el registro de rastreo con ASTUTEDDS_LOG_LEVEL=trace e inspeccione un paquete.
captura con astutedds-inspect .
10. ¿Qué características de IDL son compatibles?
El compilador astutedds-idl incluido implementa OMG IDL 4.2, que incluye:
- Tipos primitivos (
boolean,octet, tipos enterosint8–uint64,float/double/long double,char/wchar,string/wstring). - Estructuras, uniones, enumeraciones, máscaras de bits, definiciones de tipos.
- Secuencias, matrices y mapas acotados y no acotados.
-
@key,@id,@optional,@default,@range,@min,@max,@unit,@extensibility(FINAL|APPENDABLE|MUTABLE),@nested. - Constantes y espacios de nombres
module.
El código C++ generado utiliza XCDR2 por defecto, con XCDR1 opcional para la interoperabilidad.
11. ¿Cómo filtro las muestras que he publicado yo mismo?
Dos opciones:
- Ignorar a nivel de participante : llamar a
dp->ignore_publication(handle)
pasando elInstanceHandle_tdel escritor local. - Filtra en la función de devolución de llamada del lector usando
SampleInfo::publication_handle
y comparándolo conget_instance_handle()de tu escritor.
Un tema filtrado por contenido también puede excluir un campo clave autopublicado.
12. ¿Qué caracteres están permitidos en los nombres de los temas?
Los nombres de los temas pueden contener caracteres alfanuméricos ASCII, _ y / como
Separador de jerarquía. La longitud está limitada a 256 caracteres. Evite el inicio.
dígitos y prefijos integrados DDS reservados ( DCPS , dds ). Los nombres de los tipos son los siguientes:
La misma regla.
13. ¿Cómo puedo detectar cuándo un escritor o lector remoto se ausenta?
Instale un DataReaderListener e implemente on_subscription_matched /
on_liveliness_changed o poll reader->get_subscription_matched_status() . El current_count_changeEl campo es negativo cuando un par no coincide.
La vivacidad se rige por el conjunto de QoS LIVELINESS .
kind = AUTOMATIC_LIVELINESS_QOS con una lease_duration para detectarcompañeros silenciosos dentro de un tiempo limitado.
14. ¿Cómo recibo una notificación cuando llegan nuevos datos?
Adjunte un oyente con la máscara 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 se activa tanto para muestras nuevas como para el ciclo de vida de la instancia. cambios; siempre inspeccione SampleInfo::valid_data antes de desreferenciar el
carga útil de muestra.
15. ¿Qué significa "QoS incompatible"?
Un escritor y un lector coinciden solo cuando cada QoS de solicitud/oferta es
compatible:
| Política | Solicitado ≤ Ofrecido |
|---|---|
RELIABILITY | lector BEST_EFFORT ≤ escritor RELIABLE |
DURABILITY | tipo de lector ≤ tipo de escritor (en orden de especificación) |
DEADLINE | period de lectura ≥ period de escritura |
LATENCY_BUDGET | duration de lectura ≥ duration de escritura |
OWNERSHIP | deben ser iguales ( SHARED o EXCLUSIVE ) |
PARTITION | Al menos un nombre de partición debe superponerse |
Escuchar on_offered_incompatible_qos / on_requested_incompatible_qos
para encontrar el ID exacto de la política en tiempo de ejecución.
16. ¿Cómo puedo enviar muestras más grandes que un datagrama UDP?
Astute DDS fragmenta automáticamente las muestras más grandes que las configuradas.
fragment_size (por defecto 1344 bytes para IPv4) y los vuelve a ensamblar en el Lector que utiliza submensajes DDSI-RTPS DATA_FRAG . El protocolo de confiabilidad.
Recupera los fragmentos que faltan sin tener que reenviar la muestra completa.
Para muestras muy grandes (≥ 1 MB), aumente los búferes del socket del sistema operativo:
sudo sysctl -w net.core.rmem_max=8388608
sudo sysctl -w net.core.wmem_max=8388608y considere la posibilidad de cambiar al transporte de memoria compartida para los lectores locales.
17. ¿Cómo configuro qué interfaz de red se utiliza?
Tres opciones, en orden de prioridad:
- Variable de entorno:
ASTUTEDDS_NETWORK_INTERFACE=eth0. - Configuración de detección JSON: consulte Configuración de detección JSON .
- Perfil de QoS XML: consulte Perfiles de QoS DDS-XML .
Si no se establece ninguno, Astute DDS selecciona la primera interfaz que no sea de bucle invertido con una
Dirección compatible con multidifusión.
18. ¿Puedo usar Astute DDS en una red sin multidifusión?
Sí. Dos alternativas:
- Lista de pares SPDP Unicast : proporcione una lista de pares host/puerto en el
Configuración de descubrimiento; Astute DDS envía anuncios SPDP mediante unidifusión a cada par. - Transporte TCP : cambia el participante al transporte TCP RTPS para
entornos que bloquean UDP por completo. Ver
Enrutador de dominio DDS para cruzar redes aisladas.
19. ¿Cómo puedo optimizar la latencia?
- Utilice la confiabilidad
RELIABLEcon el historialKEEP_LAST(1)en ambos extremos, por lo que
Las retransmisiones son mínimas. - Habilitar el transporte de memoria compartida para los participantes ubicados en el mismo lugar.
- Fije los hilos DDS de Astute con afinidad de CPU y utilice la planificación en tiempo real.
(SCHED_FIFO) en los procesos del publicador y del suscriptor. - Desactive Nagle utilizando UDP (opción predeterminada).
- Aumente los búferes de los sockets (consulte la pregunta 16) para absorber las ráfagas.
- Establezca
LATENCY_BUDGET = 0para deshabilitar cualquier retraso en el procesamiento por lotes.
20. ¿Por qué observo picos de latencia al publicar muestras grandes?
Cuando las muestras superan el búfer de socket predeterminado del sistema operativo (a menudo 208 KB en Linux),
el kernel descarta paquetes y el protocolo confiable debe retransmitirlos, lo que causa
picos. Aumentar net.core.rmem_max / net.core.wmem_max a al menos el
El tamaño de la muestra resuelve esto. Considere fragmentar con fragment_size menor.
en redes con pérdidas.
21. ¿Cómo conecto dos dominios DDS?
Utilice el Astute DDS Domain Router , un servicio que une dos o más
dominios y reenvía temas configurados entre ellos, con opción
Filtrado de claves/contenido y traducción de QoS. Ver
Enrutador de dominio DDS .
22. ¿Qué enlaces de idioma están disponibles?
| Idioma | Estado | Notas |
|---|---|---|
| C++20 | Estable | API principal: libastutedds.a |
| do | Estable | API plana de C para FFI, consulte include/astutedds/c/astutedds.h |
| Pitón | Estable | Enlaces de pybind11, CPython 3.10 – 3.13 |
| Óxido | Beta | crate astutedds (envoltorio seguro para la API de C) |
23. ¿Qué plataformas y versiones de sistema operativo son compatibles?
| Plataforma | Versiones probadas |
|---|---|
| Linux | Ubuntu 22.04 / 24.04, RHEL 9 / 10, AlmaLinux 9 / 10, Debian 12 |
| Windows | Windows 10, Windows 11, Windows Server 2022 |
Los paquetes Python para Linux están etiquetados como manylinux_2_28 (glibc ≥ 2.28) y se ejecutan
en cualquier distribución compatible.
24. ¿Cómo habilito la seguridad DDS?
- Proporcionar artefactos de identidad (X.509) y permisos (XML firmado).
- Configure la propiedad QoS del participante con la autenticación, el control de acceso y
Propiedades del complemento criptográfico (certificado CA, certificado/clave de identidad, archivo de permisos,
archivo de gobernanza). - Enlace contra Astute DDS compilado con
-DASTUTEDDS_ENABLE_SECURITY=ON.
Consulte DDS Security para obtener instrucciones de extremo a extremo y una
Plantilla de gobernanza/permisos.
25. ¿Cómo puedo conservar los datos después de reiniciar el sistema?
Ejecute el Servicio de persistencia junto con su dominio. Se suscribe a
Temas TRANSIENT / PERSISTENT configurados, almacena muestras en un archivo local.
base de datos (SQLite por defecto) y las vuelve a publicar para unirse tardíamente.
suscriptores, incluidos aquellos que se unan después de que el autor original haya fallecido.
Consulte el Servicio de persistencia .
26. ¿Cómo puedo grabar y reproducir el tráfico?
Utilice la herramienta astutedds-record incluida para capturar un dominio en un
.astdb y astutedds-replay para volver a publicarlo con ajuste Escalado de tiempo. La grabación reconoce el tipo y utiliza XCDR2 internamente. Ver
Grabación y reproducción .
27. ¿Cómo puedo modificar un tipo de datos sin afectar a los suscriptores?
Anote el tipo IDL con @extensibility(MUTABLE) (o APPENDABLE ) y
Etiqueta a cada miembro con @id(N) . Los flujos mutables XCDR2 permiten:
- Agregar nuevos miembros a cualquiera de los extremos.
- Eliminando miembros opcionales.
- Reordenando a los miembros.
Los miembros que no coinciden se omiten mediante las reglas de asignabilidad de X-Types.
@extensibility(FINAL) bloquea el diseño y debe usarse cuando es binarioLa compatibilidad con los lectores XCDR1 antiguos es importante.
28. ¿Cómo utilizo los temas filtrados por contenido?
Crea un ContentFilteredTopic a partir de un tema normal con un filtro similar a SQL.
expresión y vincularle 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); El filtro se evalúa en el lado del escritor cuando es posible para ahorrar ancho de banda.
29. ¿Cómo configuro la calidad de servicio (QoS) desde un archivo XML?
Utilice XmlQosLoader para leer un perfil DDS-XML y aplicarlo al crearlo.
entidades:
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); Consulte los perfiles de QoS de DDS-XML para ver el esquema y el funcionamiento.
ejemplos.
30. ¿Cómo puedo solucionar problemas de interoperabilidad o detección?
- Ejecute
astutedds-inspectcontra el dominio para ver los detectados.
Participantes, resultados finales y estado de coincidencia en tiempo real. - Captura el tráfico con
tcpdump -i any -w dds.pcap 'udp port 7400 or portrange 7400-7500'y ábrelo en Wireshark (el analizador RTPS).
Decodifica datos SPDP, SEDP y de usuario. - Habilitar registros de seguimiento:
ASTUTEDDS_LOG_LEVEL=trace ASTUTEDDS_LOG_FILE=/tmp/astutedds.log. - Verifique los identificadores de entidad y los puertos:
- Escritor/lector SPDP:
00:01:00:c2/00:01:00:c7 - Publicación SEDP:
00:00:03:c2/00:00:03:c7 - Suscripción SEDP:
00:00:04:c2/00:00:04:c7 - Puerto base:
7400 + 250 × domain_id.
- Escritor/lector SPDP:
- Confirme que ambos pares anuncien identificadores de proveedor y versión de protocolo compatibles.
(DDSI-RTPS 2.5).