예리한 치과의사
국방 시스템을 위한 실시간 데이터 연결
임무 수행에 필수적인 차량 플랫폼을 구동하는 미들웨어
X-Type을 탑재한 완벽한 기능의 DDS. 방어용으로 설계된 무기급 DDS.
Powering defence
Astute DDS는 Astute Systems의 완벽한 DEF-STAN 23-009 범용 차량 아키텍처(GVA) 솔루션의 핵심인 데이터 배포 미들웨어입니다. 센서부터 스크린까지, 하나의 통합 플랫폼이 군용 차량의 모든 하위 시스템을 연결합니다.
Why Publish/Subscribe
전통 건축의 문제점
기존 차량 시스템은 지점 간 연결을 사용합니다. 새로운 하위 시스템을 추가할 때는 해당 시스템과 통신하는 모든 시스템을 수정해야 합니다. 이로 인해 다음과 같은 문제가 발생합니다.
- ❌ 비용이 많이 드는 통합 — 각 새로운 구성 요소에는 맞춤형 코딩이 필요합니다.
- ❌ 취약한 시스템 — 하나의 장애가 네트워크 전체에 연쇄적으로 영향을 미칠 수 있습니다.
- ❌ 특정 공급업체에 종속됨 — 독점 프로토콜로 인해 단일 공급업체에 묶이게 됩니다.
- ❌ 느린 업그레이드 — 하나의 하위 시스템을 변경하면 모든 것을 다시 테스트해야 합니다.
발행/구독 솔루션
DDS 발행/구독 아키텍처를 사용하면 하위 시스템은 명명된 토픽에 데이터를 발행하기만 하면 됩니다. 해당 데이터가 필요한 시스템은 해당 토픽을 구독하기만 하면 됩니다. 지점 간 연결이나 사용자 지정 통합 코드가 필요하지 않습니다.
| 사업상 이점 | 펍/서브는 어떻게 서비스를 제공할까요? |
|---|---|
| 💰 통합 비용 절감 | 기존 시스템을 수정하지 않고 새로운 하위 시스템을 추가합니다. |
| 🔧 더욱 쉬운 유지보수 | 구성품을 독립적으로 교체하거나 업그레이드하세요. |
| 🛡️ 더욱 강력한 회복력 | 다른 시스템이 고장나더라도 시스템은 계속 작동합니다. |
| 🏭 다양한 공급업체 선택의 자유 | 서로 다른 공급업체의 장비를 하나의 데이터 버스에서 혼합하여 사용할 수 있습니다. |
| ⏱️ 출시 기간 단축 | 표준 인터페이스를 사용하면 사용자 정의 개발이 줄어듭니다. |
GVA 스택 전체를 위한 단일 공급원
Astute Systems는 GVA 규격을 준수하는 군용 차량을 위한 완벽하고 통합된 소프트웨어 스택을 제공하는 유일한 공급업체 입니다.
| 요소 | 이 제품의 기능은 무엇인가요? |
|---|---|
| 보헤미아 사람 | SysML 모델을 보고 유효성을 검사하고 인터페이스 정의를 생성합니다. |
| LDMX | LDM v10.0.0을 위한 최고 수준의 토지 데이터 모델 편집기 및 유효성 검사기 |
| 툴엑스 | 자동 코드 생성, 빌드 통합 및 배포 도구 |
| 예리한 치과의사 | 모든 하위 시스템을 실시간으로 안전하게 데이터 배포하여 연결합니다. |
| 토지 데이터 모델 v10.0.0 | 모든 차량 도메인에 대해 GVA 규격을 준수하는 사전 구축된 데이터 유형 |
| 뛰어난 HMI | 승무원 표시 소프트웨어는 DEF-STAN 23-009 요구 사항을 충족합니다. |
풀스택의 장점
| 혜택 | 영향 |
|---|---|
| 🎯 단일 책임 주체 | 하나의 계약, 하나의 지원팀, 하나의 통합 파트너 |
| 📋 검증된 규정 준수 | DEF-STAN 23-009 요구사항에 대한 사전 검증 완료 |
| 🔄 끊김 없는 업데이트 | 다른 구성 요소에 영향을 주지 않고 원하는 구성 요소를 업그레이드하세요. |
| 💰 예측 가능한 비용 | 예상치 못한 통합 비용이나 라이선스 관련 문제가 없습니다. |
| ⏱️ 빠른 배송 | 빈 프레임워크가 아닌 작동하는 소프트웨어부터 시작하세요. |
Comparison
조달 고려 사항
| 요인 | 예리한 치과의사 | RTI 커넥스트 | 사이클론DDS | 오픈DDS | 패스트 DDS |
|---|---|---|---|---|---|
| 라이선스 모델 | 유연한 옵션 | 좌석당 상업용 | 이클립스 EPL 2.0 | LGPL | 아파치 2.0 |
| 라이선스 비용 | 경쟁력 있는 | 배포당 $$$ | 무료 | 무료 | 무료 |
| 지원 모델 | 호주 공급업체 계약 | 글로벌 기업 | 이클립스 재단 | OCI 광고 | eProsima 광고 |
| 호주 기반 지원 | ✅ 예 | ❌ 미국 기반 | ❌ 아니요 | ❌ 미국 기반 | ❌ 스페인 소재 |
| GVA 사전 통합 | ✅ 내장형 | ❌ 맞춤 제작 | ❌ DIY | ❌ DIY | ❌ DIY |
| 풀 스택 이용 가능 | ✅ 단일 공급원: HMI + LDM + DDS + 도구 | ❌ 미들웨어 전용 | ❌ 미들웨어 전용 | ❌ 미들웨어 전용 | ❌ 미들웨어 전용 |
| SysML 툴링 | ✅ 보헤미안 + LDMX + 툴엑스 | ❌ 없음 | ❌ 없음 | ❌ 없음 | ❌ 없음 |
| 수출 통제 | 호주 관할권 | 미국 ITAR 고려 사항 | EU | 우리를 | EU |
기술적 특징 비교
| 특징 | 예리한 치과의사 | RTI 커넥스트 | 사이클론DDS | 오픈DDS | 패스트 DDS |
|---|---|---|---|---|---|
| DDSI-RTPS 2.5 | ✅ 완료 | ✅ 완료 | ✅ 완료 | ✅ 완료 | ✅ 완료 |
| DDS 보안 1.1 | ✅ 완료 | ✅ 완료 | ⚠️ 부분적 | ✅ 완료 | ✅ 완료 |
| X-Types 1.3 | ✅ 완료 | ✅ 완료 | ⚠️ 부분적 | ⚠️ 부분적 | ⚠️ 부분적 |
| 동적 데이터 API | ✅ 완료 | ✅ 완료 | ❌ 없음 | ⚠️ 기본 | ⚠️ 기본 |
| 유형 조회 서비스 | ✅ 완료 | ✅ 완료 | ❌ 없음 | ❌ 없음 | ⚠️ 부분적 |
| 콘텐츠 필터링 | ✅ 완료 | ✅ 완료 | ✅ 완료 | ✅ 완료 | ✅ 완료 |
| 공유 메모리 전송 | ✅ 완료 | ✅ 완료 | ✅ 완료 | ❌ 없음 | ✅ 완료 |
| TCP 전송 | ✅ 완료 | ✅ 완료 | ✅ 완료 | ✅ 완료 | ✅ 완료 |
| 제로카피 | ✅ 지원됨 | ✅ 지원됨 | ✅ 지원됨 | ❌ 없음 | ✅ 지원됨 |
표준 준수
| 기준 | 예리한 치과의사 | RTI 커넥스트 | 사이클론DDS | 오픈DDS | 패스트 DDS |
|---|---|---|---|---|---|
| 세상에 DDS 1.4 | ✅ | ✅ | ✅ | ✅ | ✅ |
| 세상에 DDSI-RTPS 2.5 | ✅ | ✅ | ✅ | ✅ | ✅ |
| OMG DDS-XTypes 1.3 | ✅ | ✅ | ⚠️ | ⚠️ | ⚠️ |
| OMG DDS 보안 1.1 | ✅ | ✅ | ⚠️ | ✅ | ✅ |
| 세상에 IDL 4.2 | ✅ | ✅ | ✅ | ✅ | ✅ |
| DEF-STAN 23-009 (GVA) | ✅ | ❌ | ❌ | ❌ | ❌ |
| 토지 데이터 모델 v10.0.0 | ✅ | ❌ | ❌ | ❌ | ❌ |
언어 및 플랫폼 지원
| 능력 | 예리한 치과의사 | RTI 커넥스트 | 사이클론DDS | 오픈DDS | 패스트 DDS |
|---|---|---|---|---|---|
| C++ | C++20 | C++11 | C99 래퍼 | C++11 | C++11 |
| 기음 | C++를 통해 | ✅ 원어민 | ✅ 원어민 | ❌ | ✅ 원어민 |
| 파이썬 | ✅ | ✅ | ✅ | ✅ | ✅ |
| 녹 | ✅ | ❌ | ✅ | ❌ | ❌ |
| 리눅스 | ✅ | ✅ | ✅ | ✅ | ✅ |
| 윈도우 | ✅ | ✅ | ✅ | ✅ | ✅ |
| VxWorks | 로드맵 | ✅ | ⚠️ | ✅ | ⚠️ |
| 임베디드/RTOS | ✅ ~을 위해 설계되었습니다 | ✅ 마이크로 변종 | ⚠️ | ⚠️ | ⚠️ |
| 정적 링크 | ✅ 단일 라이브러리 | ⚠️ | ⚠️ 공유 라이브러리 | ⚠️ 공유 라이브러리 | ⚠️ 공유 라이브러리 |
뛰어난 치과의사가 승리하는 이유
| vs RTI Connext | vs 사이클론DDS | OpenDDS와 비교 | 패스트 DDS와 비교 |
|---|---|---|---|
| 유연한 라이선스 옵션 | X-Type에 대한 완벽한 지원 | 완전한 동적 데이터 API | 호주 기반 지원 |
| 호주 업체이므로 ITAR 관련 문제는 없습니다. | 내장형 보안 기능 | 유형 조회 서비스 | GVA 규정 완벽 준수 |
| 단일 소스 전체 GVA 스택 | 동급 최고의 LDMX + ToolX | 동급 최고의 LDMX + ToolX | 더욱 간편한 배포 |
| LDM v10.0.0 포함됨 | 상업적 지원 | 호주 관할권 | 완전한 X-타입 |
Why Astute DDS
"Astute 스택을 사용하여 GVA 통합 기간을 40% 단축했습니다. 미들웨어, HMI 및 데이터 모델을 한 공급업체가 담당하게 되면서 이전 프로그램들을 괴롭혔던 책임 전가 문제를 해결할 수 있었습니다."
— 영국 국방부 주요 사업부 프로그램 관리자
상호 운용성 보장
Astute DDS는 모든 주요 DDS 구현과 완벽하게 호환됩니다. 차량은 다음과 같은 시스템과 원활하게 통신할 수 있습니다.
벤더 종속성이 없습니다. 파트너 시스템이 다른 DDS 구현을 사용하는 경우 Astute DDS는 수정 없이 연결됩니다.
국방 표준 준수
군사적 요구 사항에 맞춰 제작됨
| 기준 | 상태 |
|---|---|
| DEF-STAN 23-009 | ✅ GVA 규정 완벽 준수 |
| 토지 데이터 모델 v10.0.0 | ✅ 모든 도메인 유형 |
| 나토 STANAG | ✅ 상호 운용성 준비 완료 |
| 사이버 필수 사항 | ✅ 보안 인증 완료 |
믿을 수 있는 보안
- 🔐 암호화된 통신 — 모든 데이터는 전송 중 보호됩니다
- 🎫 인증서 기반 인증 — 승인된 시스템만 연결 가능
- 📋 접근 제어 정책 — 각 주제에 대해 누가 게시하거나 구독할 수 있는지 정의합니다.
- 📝 완벽한 감사 로깅 — 보안 검토를 위한 모든 기록
실제 생산 환경에서 검증됨
다양한 프로그램에 걸쳐 배포됨
Astute DDS는 호주, 영국 및 동맹국의 주요 방위산업체들로부터 신뢰를 받고 있습니다.
| 도메인 | 응용 프로그램 |
|---|---|
| 🎖️ 장갑차 | 승무원 디스플레이, 센서 융합, 무기 통합 |
| 🤖 로봇공학 및 자율 시스템 | 무인 지상 차량, 로봇 플랫폼, 자율 항법 |
| 🛡️ 무인항공기 대응(CUAS) | 드론 탐지, 추적 및 격퇴 시스템 |
| ✈️ 지상 관제소 | 무인항공기(UAV) 명령 및 제어, 센서 정보 |
| 🚢 해군 시스템 | 함교 디스플레이, 손상 제어, 항해 |
| 🏭 훈련 및 시뮬레이션 | 합성 환경, 사후 검토, 브리핑 |
🎬 데모 요청
Astute DDS와 GVA 스택 전체의 작동 방식을 확인해 보세요. 스택에 대한 자세한 정보를 알아보거나 지금 바로 데모를 요청하세요.
Frequently Asked Questions
Astute DDS를 도입할 때 개발자들이 가장 자주 묻는 질문은 다음과 같습니다.
1. Astute DDS란 무엇인가요?
Astute DDS는 OMG 데이터 배포 서비스의 C++20 구현체입니다.
(DDS) DCPS API, DDSI-RTPS 2.5 와이어 프로토콜, DDS-XTypes 1.3 유형 시스템,
DDS-Security 1.1/1.2 플러그인 및 IDL 4.2를 지원합니다. 정적 파일로 제공됩니다.
라이브러리 libastutedds.a (C, Python 및 Rust 바인딩 포함)가 함께 제공됩니다.
astutedds-inspect 진단 GUI와 상호 운용 가능한 Shapes 데모.
2. 어떻게 게시글을 올리고 구독할 수 있나요?
DomainParticipant , Topic , 그리고 DataWriter (게시자 측)를 생성합니다.
또는 DataReader (구독자 측):
using namespace astutedds::dcps;
auto dpf = DomainParticipantFactory::get_instance();
auto dp = dpf->create_participant(0, PARTICIPANT_QOS_DEFAULT, nullptr, 0);
auto topic = dp->create_topic("Hello", "HelloMsg", TOPIC_QOS_DEFAULT, nullptr, 0);
// Publisher
auto pub = dp->create_publisher(PUBLISHER_QOS_DEFAULT, nullptr, 0);
auto writer = pub->create_datawriter(topic, DATAWRITER_QOS_DEFAULT, nullptr, 0);
writer->write(sample, HANDLE_NIL);
// Subscriber
auto sub = dp->create_subscriber(SUBSCRIBER_QOS_DEFAULT, nullptr, 0);
auto reader = sub->create_datareader(topic, DATAREADER_QOS_DEFAULT, nullptr, 0);시작하기 > 첫 번째 신청서를 참조하세요.
3. read() 와 take() 의 차이점은 무엇입니까?
-
read()는 샘플을 반환하지만 **리더 캐시에 샘플을 남겨둡니다.** 따라서 이후 호출(또는 동일한 구독자의 다른 리더)에서 해당 샘플을 다시 읽을 수 있습니다. -
take()함수는 샘플을 반환하고 캐시에서 **제거**합니다.
검사하려는 공유 상태를 나타내는 토픽을 사용할 때는 read() 를 활용하세요.
반복적으로 사용하세요. 토픽이 원하는 이벤트를 나타낼 때는 take() 사용하세요.
딱 한 번만 섭취하세요.
4. 늦게 가입한 구독자는 왜 샘플을 더 빨리 받지 못하나요?
기본적으로 DURABILITY VOLATILE 이므로 구독자 이전에 작성된 샘플은
일치하는 항목이 전달되지 않습니다. 늦게 합류한 사람들에게 과거 샘플을 제공하려면
TRANSIENT_LOCAL 사용하여 라이터 와 해당 리더를 구성합니다.
내구성 (이는 또한 RELIABLE 신뢰성을 요구합니다):
DataWriterQos qos;
writer->get_qos(qos);
qos.durability().kind = TRANSIENT_LOCAL_DURABILITY_QOS;
qos.reliability().kind = RELIABLE_RELIABILITY_QOS;
writer->set_qos(qos); 작성기 재시작 시 지속성을 유지하려면 다음을 사용하십시오.
지속성 서비스 또는 TRANSIENT / PERSISTENT
내구성 종류.
5. RELIABILITY QoS는 어떤 역할을 하나요?
-
BEST_EFFORT(많은 내장 토픽의 기본값): 전송 중 손실된 샘플은 재전송되지 않습니다. 오버헤드가 가장 낮습니다. -
RELIABLE: 작성기는 각 일치하는 판독기로부터 확인 응답(ACKNACK/하트비트)을 추적하고 누락된 순번을 재전송합니다.
독자가 내용을 따라잡거나 기록이 가득 찼습니다.
신뢰성은 작성자/읽는 사람별로 다르며 호환되어야 합니다: 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. 도메인 ID는 어떻게 지정하나요?
create_participant 의 첫 번째 인수로 도메인 ID를 전달하세요.
auto dp = DomainParticipantFactory::get_instance()
->create_participant(42, PARTICIPANT_QOS_DEFAULT, nullptr, 0); 서로 다른 도메인의 참가자는 통신하지 않습니다. DDSI-RTPS 포트
공식 7400 + 250 * domain_id UDP에 사용되는 기본 포트를 결정합니다.
발견.
9. 왜 제 출판사와 구독자가 서로를 발견하지 못하는 걸까요?
일반적인 원인:
- 도메인 ID가 다른 경우 , 두 참가자 모두 동일한 ID를 사용해야 합니다.
- 멀티캐스트 차단됨 — SPDP는
239.255.0.1에서 UDP 멀티캐스트를 사용합니다.
기본 설정입니다. 호스트 방화벽을 확인하고 IGMP 스누핑을 활성화하세요. - 잘못된 네트워크 인터페이스 — 멀티홈 호스트의 경우
ASTUTEDDS_NETWORK_INTERFACE=설정하십시오.ASTUTEDDS_NETWORK_INTERFACE=또는 검색 JSON/XML 프로필에서 구성하십시오( JSON 검색 구성 참조). - 호환되지 않는 QoS — 질문 15를 참조하십시오.
- 서로 다른 전송 방식 — 양쪽 피어가 UDPv4를 사용하는지 확인합니다(또는 둘 다 UDPv6를 사용하는지 확인).
TCP, SHM).
ASTUTEDDS_LOG_LEVEL=trace 로 설정하여 추적 로깅을 활성화하고 패킷을 검사하십시오.
astutedds-inspect 로 캡처합니다.
10. 어떤 IDL 기능이 지원되나요?
번들로 제공되는 astutedds-idl 컴파일러는 OMG IDL 4.2를 구현하며 다음을 포함합니다.
- 기본 데이터 유형(
boolean,octet,int8~uint64정수형,float/double/long double,char/wchar,string/wstring). - 구조체, 공용체, 열거형, 비트마스크, typedef.
- 유한 및 무한 시퀀스, 배열, 맵.
-
@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피어가 일치하지 않을 때 필드 값이 음수가 됩니다.
활력은 LIVELINESS QoS 설정에 의해 제어됩니다.
kind = AUTOMATIC_LIVELINESS_QOS lease_duration 사용하여 감지)제한된 시간 내에 침묵하는 동료들.
14. 새 데이터가 도착했을 때 콜백을 받으려면 어떻게 해야 하나요?
DATA_AVAILABLE_STATUS 마스크를 사용하여 리스너를 연결합니다.
class MyListener : public DataReaderListener {
void on_data_available(DataReader* reader) override {
// call reader->take(...) here
}
};
reader->set_listener(&listener, DATA_AVAILABLE_STATUS); on_data_available 은 새로운 샘플과 인스턴스 수명 주기 모두에 대해 실행됩니다. 변경 사항이 있습니다. 역참조하기 전에 항상 SampleInfo::valid_data 검사하십시오.
샘플 페이로드.
15. "호환되지 않는 QoS"란 무엇을 의미합니까?
작성자와 독자가 일치하는 경우는 모든 요청/제공 QoS가 일치할 때뿐입니다.
호환 가능:
| 정책 | 요청됨 ≤ 제공됨 |
|---|---|
RELIABILITY | 독자 BEST_EFFORT ≤ 작가 RELIABLE |
DURABILITY | 독자 유형 ≤ 작성자 유형 (명시 순서상) |
DEADLINE | 독자 period ≥ 작가 period |
LATENCY_BUDGET | 읽는 duration ≥ 쓰는 duration |
OWNERSHIP | 동등해야 합니다 ( SHARED 또는 EXCLUSIVE ). |
PARTITION | 적어도 하나의 파티션 이름이 겹쳐야 합니다. |
on_offered_incompatible_qos / on_requested_incompatible_qos 이벤트를 수신합니다.
실행 시점에 정확한 정책 ID를 찾기 위해서입니다.
16. UDP 데이터그램보다 큰 샘플을 어떻게 보낼 수 있나요?
Astute DDS는 설정된 크기보다 큰 샘플을 자동으로 분할합니다.
fragment_size (IPv4의 경우 기본값은 1344바이트)를 지정하고 이를 다시 조립합니다. DDSI-RTPS DATA_FRAG 하위 메시지를 사용하는 리더. 신뢰성 프로토콜
전체 샘플을 다시 보내지 않고도 누락된 조각을 복구합니다.
샘플 크기가 매우 큰 경우(≥ 1MB) OS 소켓 버퍼를 늘리십시오.
sudo sysctl -w net.core.rmem_max=8388608
sudo sysctl -w net.core.wmem_max=8388608로컬 리더의 경우 공유 메모리 전송 방식으로 전환하는 것을 고려해 보세요.
17. 어떤 네트워크 인터페이스를 사용할지 어떻게 설정하나요?
우선순위 순서대로 세 가지 옵션이 있습니다.
- 환경 변수:
ASTUTEDDS_NETWORK_INTERFACE=eth0. - JSON 검색 구성 — JSON 검색 구성을 참조하세요.
- XML QoS 프로필 — DDS-XML QoS 프로필을 참조하십시오.
아무것도 설정되지 않은 경우 Astute DDS는 루프백이 아닌 첫 번째 인터페이스를 선택합니다.
멀티캐스트 가능한 주소.
18. 멀티캐스트를 지원하지 않는 네트워크에서 Astute DDS를 사용할 수 있습니까?
네. 두 가지 선택지가 있습니다.
- 유니캐스트 SPDP 피어 목록 : 피어 호스트/포트 쌍 목록을 제공합니다.
검색 구성; Astute DDS는 각 피어에게 SPDP 공지를 유니캐스트합니다. - TCP 전송 : 참가자를 TCP RTPS 전송으로 전환합니다.
UDP를 완전히 차단하는 환경. 참조
격리된 네트워크를 연결하는 DDS 도메인 라우터 .
19. 지연 시간을 줄이려면 어떻게 설정해야 하나요?
- 양쪽 끝에서
KEEP_LAST(1)기록을 사용하여RELIABLE신뢰성을 사용하십시오.
재전송 횟수는 최소화됩니다. - 같은 위치에 있는 참가자들을 위해 공유 메모리 전송을 활성화합니다.
- Astute DDS 스레드를 CPU 선호도로 고정하고 실시간 스케줄링을 사용하세요.
(SCHED_FIFO)는 게시자 및 구독자 프로세스에 적용됩니다. - UDP(기본값)를 사용하여 Nagle을 비활성화하십시오.
- 소켓 버퍼를 늘려(질문 16 참조) 트래픽 급증을 흡수하십시오.
- 배치 지연을 비활성화하려면
LATENCY_BUDGET = 0설정하십시오.
20. 대용량 샘플을 게시할 때 지연 시간이 급증하는 이유는 무엇입니까?
샘플 크기가 운영체제 기본 소켓 버퍼(리눅스에서는 보통 208KB)를 초과하면,
커널이 패킷을 드롭하면 신뢰할 수 있는 프로토콜이 재전송해야 하므로 문제가 발생합니다.
급증 현상. net.core.rmem_max / net.core.wmem_max 값을 최소한으로 높이세요.
샘플 크기를 조정하면 이 문제가 해결됩니다. fragment_size 줄여서 분할하는 것을 고려해 보세요.
손실이 발생하는 네트워크에서.
21. 두 DDS 도메인을 연결하려면 어떻게 해야 하나요?
Astute DDS 도메인 라우터를 사용하십시오. 이 서비스는 두 개 이상의 도메인을 연결합니다.
도메인과 그 사이에 구성된 주제를 전달하며, 선택 사항으로
키/콘텐츠 필터링 및 QoS 변환. 참조
DDS 도메인 라우터 .
22. 사용 가능한 언어 바인딩은 무엇입니까?
| 언어 | 상태 | 메모 |
|---|---|---|
| C++20 | 안정적인 | 주요 API — libastutedds.a |
| 기음 | 안정적인 | FFI용 플랫 C API는 include/astutedds/c/astutedds.h 참조하세요. |
| 파이썬 | 안정적인 | pybind11 바인딩, CPython 3.10 – 3.13 |
| 녹 | 베타 | astutedds 크레이트(C API에 대한 안전한 래퍼) |
23. 지원되는 플랫폼 및 운영체제 버전은 무엇입니까?
| 플랫폼 | 테스트 버전 |
|---|---|
| 리눅스 | 우분투 22.04/24.04, RHEL 9/10, AlmaLinux 9/10, 데비안 12 |
| 윈도우 | 윈도우 10, 윈도우 11, 윈도우 서버 2022 |
Linux Python 휠은 manylinux_2_28 (glibc ≥ 2.28) 태그가 지정되어 있으며 실행됩니다.
호환되는 모든 배포판에서 사용 가능합니다.
24. DDS 보안을 활성화하려면 어떻게 해야 합니까?
- 프로비저닝 ID(X.509) 및 권한(서명된 XML) 아티팩트를 생성합니다.
- 인증, 접근 제어 및 참가자 속성 QoS를 구성합니다.
암호화 플러그인 속성(CA 인증서, ID 인증서/키, 권한 파일,
거버넌스 파일). -
-DASTUTEDDS_ENABLE_SECURITY=ON옵션으로 빌드된 Astute DDS에 대한 링크입니다.
전체 과정 지침 및 자세한 내용은 DDS 보안을 참조하십시오.
관리/권한 템플릿.
25. 재부팅 후에도 데이터가 유지되도록 하려면 어떻게 해야 하나요?
도메인과 함께 지속성 서비스를 실행하세요. 이 서비스는 다음을 구독합니다.
구성된 TRANSIENT / PERSISTENT 토픽은 샘플을 로컬에 저장합니다.
데이터베이스(기본적으로 SQLite)에 저장하고, 이를 늦은 참여자들에게 다시 게시합니다.
구독자 - 원래 작성자가 떠난 후에 가입한 구독자까지 포함합니다.
지속성 서비스(Persistence Service)를 참조하십시오.
26. 교통 정보를 어떻게 녹화하고 재생하나요?
번들로 제공되는 astutedds-record 도구를 사용하여 도메인을 캡처하십시오.
.astdb 파일과 astutedds-replay 사용하여 조정 가능한 값으로 다시 게시합니다. 시간 스케일링. 레코딩은 타입 인식을 지원하며 내부적으로 XCDR2를 사용합니다. 자세한 내용은 다음을 참조하세요.
녹화 및 재생 .
27. 구독자에게 피해를 주지 않고 데이터 유형을 발전시키려면 어떻게 해야 하나요?
IDL 타입에 @extensibility(MUTABLE) (또는 APPENDABLE ) 어노테이션을 추가하세요.
각 멤버에 @id(N) 태그를 지정합니다. XCDR2 가변 스트림은 다음을 허용합니다.
- 양쪽 끝에 새로운 멤버를 추가합니다.
- 선택적 멤버를 제거합니다.
- 멤버 순서를 재정렬합니다.
X-Types 할당 가능성 규칙에 따라 일치하지 않는 멤버는 건너뛰어집니다.
@extensibility(FINAL) 은 레이아웃을 고정하며 바이너리 처리 시 반드시 사용해야 합니다.기존 XCDR1 리더기와의 호환성이 중요합니다.
28. 콘텐츠 필터링된 주제는 어떻게 사용하나요?
SQL과 유사한 필터를 사용하여 일반 토픽에서 ContentFilteredTopic 생성합니다.
표현식을 만들고 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. XML 파일에서 QoS를 어떻게 구성하나요?
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); 스키마 및 작동 방식은 DDS-XML QoS 프로파일을 참조하십시오.
예시.
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. - 엔티티 ID와 포트를 확인하십시오.
- 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 쓰기/읽기:
- 양쪽 피어가 호환되는 벤더 ID와 프로토콜 버전을 알리는지 확인하십시오.
(DDSI-RTPS 2.5).