Проникливий лікар-стоматолог
Підключення до даних у режимі реального часу для оборонних систем
Проміжне програмне забезпечення, яке забезпечує роботу критично важливих транспортних платформ
Повнофункціональний DDS з X-Types. DDS збройового рівня для захисту.
Powering defence
Astute DDS – це проміжне програмне забезпечення розподілу даних, що лежить в основі комплексного рішення Astute Systems для загальної архітектури транспортних засобів (GVA) відповідно до стандарту DEF-STAN 23-009. Від датчиків до екранів, одна уніфікована платформа об'єднує кожну підсистему вашого військового транспортного засобу.
Why Publish/Subscribe
Проблема традиційної архітектури
Застарілі системи транспортних засобів використовують з'єднання типу "точка-точка". Коли ви додаєте нову підсистему, вам потрібно змінити кожну систему, з якою вона взаємодіє. Це створює:
- ❌ Дорога інтеграція — кожен новий компонент вимагає індивідуального кодування
- ❌ Крихкі системи — один збій може поширитися каскадом на всю мережу
- ❌ Прив’язаність до постачальника — Власні протоколи прив’язують вас до одного постачальника
- ❌ Повільне оновлення — Зміна однієї підсистеми означає повторне тестування всього
Рішення для публікації/підписки
Завдяки архітектурі публікації/підписки DDS, підсистеми просто публікують дані в іменованих темах. Будь-яка система, якій потрібні ці дані, підписується на тему. Жодних з'єднань типу "точка-точка". Жодного користувацького коду інтеграції.
| Бізнес-вигода | Як доставляється в Pub/Sub |
|---|---|
| 💰 Нижчі витрати на інтеграцію | Додавання нових підсистем без зміни існуючих |
| 🔧 Легше обслуговування | Самостійно замінити або оновити компоненти |
| 🛡️ Більша стійкість | Системи продовжують працювати навіть тоді, коли інші виходять з ладу |
| 🏭 Свобода від кількох постачальників | Об'єднуйте обладнання від різних постачальників на одній шині даних |
| ⏱️ Швидший вихід на ринок | Стандартні інтерфейси означають менше індивідуальної розробки |
Єдине джерело для повного стеку ВДВ
Astute Systems — єдиний постачальник, який пропонує повний, інтегрований програмний стек для військових машин, сумісних зі стандартом GVA:
| Компонент | Що це робить |
|---|---|
| Богемний | Перегляд та перевірка моделей SysML, створення визначень інтерфейсів |
| LDMX | Найкращий у своєму класі редактор та валідатор моделей земельних даних для LDM версії 10.0.0 |
| ToolX | Автоматизована генерація коду, інтеграція збірки та інструменти розгортання |
| Проникливий лікар-стоматолог | З’єднайте всі підсистеми за допомогою безпечного розподілу даних у режимі реального часу |
| Модель земельних даних версії 10.0.0 | Попередньо створені типи даних, сумісні з GVA, для всіх доменів транспортних засобів |
| Проникливий HMI | Програмне забезпечення для відображення інформації про екіпаж, що відповідає вимогам DEF-STAN 23-009 |
Переваги повного стеку
| Вигода | Вплив |
|---|---|
| 🎯 Єдина точка відповідальності | Один контракт, одна команда підтримки, один партнер по інтеграції |
| 📋 Підтверджена відповідність | Попередньо перевірено на відповідність вимогам DEF-STAN 23-009 |
| 🔄 Безперебійні оновлення | Оновіть будь-який компонент, не ламаючи інші |
| 💰 Передбачувані витрати | Без несподіваних комісій за інтеграцію чи проблем з ліцензуванням |
| ⏱️ Швидша доставка | Почніть з робочого програмного забезпечення, а не з порожніх фреймворків |
Comparison
Міркування щодо закупівель
| Фактор | Проникливий лікар-стоматолог | RTI Connext | ЦиклонДДС | OpenDDS | Швидкий DDS |
|---|---|---|---|---|---|
| Модель ліцензії | Гнучкі опції | Реклама на місце | Eclipse EPL 2.0 | LGPL | Апачі 2.0 |
| Вартість ліцензії | Конкурентний | $$$ за розгортання | Безкоштовно | Безкоштовно | Безкоштовно |
| Модель підтримки | Контракт з австралійським постачальником | Глобальне підприємство | Фонд «Екліпс» | Реклама OCI | Реклама eProsima |
| Підтримка в Австралії | ✅ Так | ❌ Базується в США | ❌ Ні | ❌ Базується в США | ❌ Базується в Іспанії |
| Попередня інтеграція ВДВ | ✅ Вбудований | ❌ Робота на замовлення | ❌ Зроби сам | ❌ Зроби сам | ❌ Зроби сам |
| Повний стек доступний | ✅ Єдине джерело: HMI + LDM + DDS + інструменти | ❌ Тільки проміжне програмне забезпечення | ❌ Тільки проміжне програмне забезпечення | ❌ Тільки проміжне програмне забезпечення | ❌ Тільки проміжне програмне забезпечення |
| Інструменти SysML | ✅ Богемний + LDMX + ToolX | ❌ Жоден | ❌ Жоден | ❌ Жоден | ❌ Жоден |
| Експортний контроль | Австралійська юрисдикція | Міркування щодо ITAR США | ЄС | США | ЄС |
Порівняння технічних характеристик
| Функція | Проникливий лікар-стоматолог | RTI Connext | ЦиклонДДС | OpenDDS | Швидкий DDS |
|---|---|---|---|---|---|
| DDSI-RTPS 2.5 | ✅ Завершено | ✅ Завершено | ✅ Завершено | ✅ Завершено | ✅ Завершено |
| Безпека DDS 1.1 | ✅ Завершено | ✅ Завершено | ⚠️ Часткове | ✅ Завершено | ✅ Завершено |
| X-Типи 1.3 | ✅ Завершено | ✅ Завершено | ⚠️ Часткове | ⚠️ Часткове | ⚠️ Часткове |
| API динамічних даних | ✅ Завершено | ✅ Завершено | ❌ Жоден | ⚠️ Базовий | ⚠️ Базовий |
| Служба пошуку типів | ✅ Завершено | ✅ Завершено | ❌ Жоден | ❌ Жоден | ⚠️ Часткове |
| Фільтрація контенту | ✅ Завершено | ✅ Завершено | ✅ Завершено | ✅ Завершено | ✅ Завершено |
| Транспортування спільної пам'яті | ✅ Завершено | ✅ Завершено | ✅ Завершено | ❌ Жоден | ✅ Завершено |
| TCP-транспорт | ✅ Завершено | ✅ Завершено | ✅ Завершено | ✅ Завершено | ✅ Завершено |
| Нульова копія | ✅ Підтримується | ✅ Підтримується | ✅ Підтримується | ❌ Жоден | ✅ Підтримується |
Відповідність стандартам
| Стандартний | Проникливий лікар-стоматолог | RTI Connext | ЦиклонДДС | OpenDDS | Швидкий DDS |
|---|---|---|---|---|---|
| Боже мій, DDS 1.4 | ✅ | ✅ | ✅ | ✅ | ✅ |
| OMG DDSI-RTPS 2.5 | ✅ | ✅ | ✅ | ✅ | ✅ |
| OMG DDS-XTypes 1.3 | ✅ | ✅ | ⚠️ | ⚠️ | ⚠️ |
| OMG DDS Безпека 1.1 | ✅ | ✅ | ⚠️ | ✅ | ✅ |
| Боже мій, IDL 4.2 | ✅ | ✅ | ✅ | ✅ | ✅ |
| DEF-STAN 23-009 (ВДВ) | ✅ | ❌ | ❌ | ❌ | ❌ |
| Модель земельних даних версії 10.0.0 | ✅ | ❌ | ❌ | ❌ | ❌ |
Підтримка мов та платформ
| Можливості | Проникливий лікар-стоматолог | RTI Connext | ЦиклонДДС | OpenDDS | Швидкий DDS |
|---|---|---|---|---|---|
| C++ | C++20 | C++11 | Обгортка C99 | C++11 | C++11 |
| С | Через C++ | ✅ Рідний | ✅ Рідний | ❌ | ✅ Рідний |
| Пітон | ✅ | ✅ | ✅ | ✅ | ✅ |
| Іржа | ✅ | ❌ | ✅ | ❌ | ❌ |
| Лінукс | ✅ | ✅ | ✅ | ✅ | ✅ |
| Вікна | ✅ | ✅ | ✅ | ✅ | ✅ |
| VxWorks | Дорожня карта | ✅ | ⚠️ | ✅ | ⚠️ |
| Вбудовані/RTOS | ✅ Розроблено для | ✅ Мікроваріант | ⚠️ | ⚠️ | ⚠️ |
| Статичне посилання | ✅ Єдина бібліотека | ⚠️ | ⚠️ Спільні бібліотеки | ⚠️ Спільні бібліотеки | ⚠️ Спільні бібліотеки |
Чому Astute DDS перемагає
| проти RTI Connext | проти CycloneDDS | проти OpenDDS | проти швидкого DDS |
|---|---|---|---|
| Гнучкі варіанти ліцензування | Повна підтримка X-Types | Повний API динамічних даних | Підтримка в Австралії |
| Австралійський постачальник, жодних проблем з ITAR | Вбудована безпека | Служба пошуку типів | Повна відповідність вимогам щодо ВДВ |
| Повний стек ВДВ з одного джерела | Найкращий у своєму класі LDMX + ToolX | Найкращий у своєму класі LDMX + ToolX | Простіше розгортання |
| LDM версії 10.0.0 включено | Комерційна підтримка | Австралійська юрисдикція | Повні X-типи |
Why Astute DDS
«Завдяки стеку Astute ми скоротили терміни інтеграції GVA на 40%. Наявність одного постачальника, відповідального за проміжне програмне забезпечення, HMI та модель даних, усунула проблему звинувачень, яка була характерна для попередніх програм».
— Керівник програми, прем’єр-міністр оборони Великої Британії
Гарантована сумісність
Astute DDS повністю сумісний з усіма основними реалізаціями DDS. Ваш автомобіль може безперешкодно взаємодіяти з:
Без прив’язки до постачальника. Якщо система партнера використовує іншу реалізацію DDS, Astute DDS підключиться без змін.
Відповідність оборонним стандартам
Створено для військових потреб
| Стандартний | Статус |
|---|---|
| DEF-STAN 23-009 | ✅ Повна відповідність вимогам щодо ВДВ |
| Модель земельних даних версії 10.0.0 | ✅ Повні типи доменів |
| НАТО STANAG | ✅ Готовий до сумісності |
| Основи кібербезпеки | ✅ Сертифіковано для безпеки |
Безпека, якій можна довіряти
- 🔐 Зашифрований зв'язок — усі дані захищені під час передачі
- 🎫 Автентифікація на основі сертифікатів — підключаються лише авторизовані системи
- 📋 Політики контролю доступу — Визначте, хто може публікувати або підписуватися на кожну тему
- 📝 Повне ведення журналу аудиту — Повний слід для перевірок безпеки
Перевірено у виробництві
Розгорнуто в кількох програмах
Компанії Astute DDS довіряють прем'єр-міністри оборони Австралії, Великої Британії та країн-союзників:
| Домен | Застосування |
|---|---|
| 🎖️ Броньовані машини | Дисплеї для екіпажу, злиття датчиків, інтеграція зброї |
| 🤖 Робототехніка та автономні системи | Безпілотні наземні транспортні засоби, роботизовані платформи, автономна навігація |
| 🛡️ Контр-БПЛА (CUAS) | Системи виявлення, відстеження та ураження дронів |
| ✈️ Наземні станції управління | Командування та управління БПЛА, сигнали датчиків |
| 🚢 Військово-морські системи | Інформація про міст, контроль пошкоджень, навігація |
| 🏭 Навчання та симуляція | Синтетичні середовища, огляд після дій, підбиття підсумків |
🎬 Замовити демоверсію
Перегляньте Astute DDS та повний стек GVA в дії. Дізнайтеся більше про наш стек або замовте демонстрацію зараз.
Frequently Asked Questions
Найчастіші питання, які розробники ставлять під час впровадження Astute DDS.
1. Що таке Astute DDS?
Astute DDS — це реалізація служби розподілу даних OMG на C++20.
(DDS) API DCPS, протокол DDSI-RTPS 2.5 дроту, система типу DDS-XTypes 1.3,
Плагіни DDS-Security 1.1/1.2 та IDL 4.2. Постачається як статичний
бібліотека libastutedds.a (плюс прив'язки C, Python та Rust) та постачається з
графічний інтерфейс діагностики astutedds-inspect та сумісна демонстрація фігур.
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) від кожного зчитувача, що відповідає запиту, та повторно передає пропущені порядкові номери, доки
читач наздоганяє, або історія повна.
Надійність залежить від кожного записуючого/читаючого пристрою та має бути сумісною: BEST_EFFORT
читач може зрівнятися з RELIABLE письменником, але не навпаки.
6. Що робить DURABILITY QoS?
DURABILITY контролює, чи зберігаються зразки для доставки читачамщо приєднуються після написання зразка:
| Вид | Доступно для тих, хто приєднався пізніше? |
|---|---|
VOLATILE | Ні |
TRANSIENT_LOCAL | Так, поки письменник живий |
TRANSIENT | Так, протягом усього життя автора (через службу збереження даних) |
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 (див. Конфігурація виявлення JSON ). - Несумісна якість обслуговування — див. питання 15.
- Різні транспортні вузли — перевірте, чи обидва вузли використовують UDPv4 (або обидва UDPv6,
ТСР, ШМ).
Увімкнути ведення журналу трасування за допомогою 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). - Структури, об'єднання, перелічення, бітові маски, типізовані визначення.
- Обмежені та необмежені послідовності, масиви, відображення.
-
@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 — встановленою
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
сумісний:
| Політика | Запитуване ≤ Пропоноване |
|---|---|
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. Як надсилати зразки, розмір яких перевищує UDP-дейтаграму?
Astute DDS автоматично фрагментує зразки, розмір яких перевищує налаштований розмір.
fragment_size (за замовчуванням 1344 байти для IPv4) та повторно збирає їх на зчитувач, що використовує підповідомлення DDSI-RTPS DATA_FRAG . Протокол надійності
відновлює відсутні фрагменти без повторної відправки всього зразка.
Для дуже великих зразків (≥ 1 МБ) збільште буфери сокетів ОС:
sudo sysctl -w net.core.rmem_max=8388608
sudo sysctl -w net.core.wmem_max=8388608та розглянути можливість переходу на транспортування зі спільною пам'яттю для локальних зчитувачів.
17. Як налаштувати, який мережевий інтерфейс використовуватиметься?
Три варіанти, у порядку пріоритетності:
- Змінна середовища:
ASTUTEDDS_NETWORK_INTERFACE=eth0. - Конфігурація виявлення JSON — див. Конфігурація виявлення JSON .
- Профіль QoS XML — див. Профілі QoS DDS-XML .
Якщо нічого не встановлено, Astute DDS вибирає перший інтерфейс без замикання з
адреса з підтримкою багатоадресної розсилки.
18. Чи можу я використовувати Astute DDS у мережі без багатоадресної розсилки?
Так. Два варіанти:
- Список однорангових вузлів Unicast SPDP : надає список пар хост/порт однорангових вузлів у
конфігурація виявлення; Astute DDS надсилає оголошення SPDP кожному вузлу однорангової мережі. - TCP-транспорт : перемикання учасника на TCP RTPS-транспорт для
середовища, які повністю блокують UDP. Див.
Доменний маршрутизатор DDS для перетину ізольованих мереж.
19. Як налаштувати звук для низької затримки?
- Використовуйте надійність
RELIABLEз історієюKEEP_LAST(1)на обох кінцях, щоб
повторні передачі мінімальні. - Увімкнути транспортування спільної пам'яті для учасників, що знаходяться поруч.
- Закріплення потоків Astute DDS зі спорідненістю процесора та використання планування в режимі реального часу
(SCHED_FIFO) на процесах видавця та передплатника. - Вимкніть Nagle за допомогою UDP (за замовчуванням).
- Збільште буфери сокетів (див. питання 16), щоб поглинати спалахи.
- Встановіть
LATENCY_BUDGET = 0, щоб вимкнути будь-яку затримку пакетної обробки.
20. Чому я бачу сплески затримки під час публікації великих зразків?
Коли розмір семплів перевищує стандартний буфер сокета ОС (часто 208 КБ у Linux),
ядро скидає пакети, і надійний протокол повинен повторно передати їх, що призводить до
шипи. Підвищення net.core.rmem_max / net.core.wmem_max щонайменше до
Розмір вибірки вирішує цю проблему. Розгляньте фрагментацію з меншим fragment_size
у мережах із втратами.
21. Як мені з’єднати два домени DDS?
Використовуйте маршрутизатор домену Astute DDS — службу, яка об’єднує два або більше
домени та пересилає налаштовані теми між ними, з опціональним
фільтрація ключів/контенту та перетворення QoS. Див.
Маршрутизатор домену DDS .
22. Які мовні прив'язки доступні?
| Мова | Статус | Нотатки |
|---|---|---|
| C++20 | Стабільний | Основний API — libastutedds.a |
| С | Стабільний | API плоского C для FFI, див. include/astutedds/c/astutedds.h |
| Пітон | Стабільний | Прив'язки pybind11, CPython 3.10 – 3.13 |
| Іржа | Бета-версія | крейт astutedds (безпечна обгортка поверх C API) |
23. Які платформи та версії ОС підтримуються?
| Платформа | Перевірені версії |
|---|---|
| Лінукс | 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 для властивостей учасників за допомогою автентифікації, контролю доступу та
Властивості криптоплагіна (сертифікат CA, сертифікат/ключ ідентифікації, файл дозволів,
файл управління). - Посилання на Astute DDS, побудоване з
-DASTUTEDDS_ENABLE_SECURITY=ON.
Дивіться DDS Security для отримання повних інструкцій та
шаблон управління/дозволів.
25. Як зберегти дані після перезавантажень?
Запустіть службу збереження даних разом із вашим доменом. Вона підписана на
налаштовані TRANSIENT / PERSISTENT теми, зберігає зразки в локальному
базу даних (SQLite за замовчуванням) та повторно публікує їх для пізнього приєднання
підписники, включаючи тих, хто приєднується після того, як оригінальний автор пішов.
Див. Служба стійкості .
26. Як записувати та відтворювати дорожній рух?
Використовуйте вбудований інструмент astutedds-record для запису домену в
.astdb файл та astutedds-replay для його публікації з налаштованими параметрами масштабування часу. Запис залежить від типу та використовує XCDR2 внутрішньо. Див.
Запис та відтворення .
27. Як мені еволюціонувати тип даних, не порушуючи роботу передплатників?
Анотуйте тип IDL за допомогою @extensibility(MUTABLE) (або APPENDABLE ) та
позначте кожного учасника @id(N) . Змінні потоки XCDR2 дозволяють:
- Додавання нових учасників з будь-якого боку.
- Видалення необов'язкових членів.
- Зміна порядку учасників.
Невідповідні члени пропускаються за допомогою правил призначення X-типів.
@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).