Bác sĩ giỏi
Kết nối dữ liệu thời gian thực cho các hệ thống quốc phòng
Phần mềm trung gian cung cấp năng lượng cho các nền tảng xe cộ quan trọng.
Hệ thống DDS đầy đủ tính năng với X-Type. Hệ thống DDS cấp độ vũ khí dành cho phòng thủ.
Powering defence
Astute DDS là phần mềm trung gian phân phối dữ liệu, cốt lõi của giải pháp Kiến trúc Xe quân sự tổng quát (GVA) DEF-STAN 23-009 hoàn chỉnh của Astute Systems. Từ cảm biến đến màn hình, một nền tảng thống nhất kết nối mọi hệ thống con trong xe quân sự của bạn.
Why Publish/Subscribe
Vấn đề của kiến trúc truyền thống
Các hệ thống xe đời cũ sử dụng kết nối điểm-điểm. Khi bạn thêm một hệ thống con mới, bạn phải sửa đổi mọi hệ thống mà nó kết nối. Điều này tạo ra:
- ❌ Tích hợp tốn kém — Mỗi thành phần mới đều yêu cầu lập trình tùy chỉnh.
- ❌ Hệ thống dễ bị tổn thương — Một lỗi có thể gây ra hậu quả lan rộng khắp mạng lưới.
- ❌ Ràng buộc với nhà cung cấp duy nhất — Các giao thức độc quyền khiến bạn bị phụ thuộc vào một nhà cung cấp duy nhất
- ❌ Nâng cấp chậm — Thay đổi một hệ thống con đồng nghĩa với việc phải kiểm tra lại toàn bộ mọi thứ.
Giải pháp Xuất bản/Đăng ký
Với kiến trúc xuất bản/đăng ký của DDS, các hệ thống con chỉ cần xuất bản dữ liệu đến các chủ đề được đặt tên. Bất kỳ hệ thống nào cần dữ liệu đó đều đăng ký nhận dữ liệu từ chủ đề đó. Không cần kết nối điểm-điểm. Không cần mã tích hợp tùy chỉnh.
| Lợi ích kinh doanh | Cách Pub/Sub giao hàng |
|---|---|
| 💰 Giảm chi phí tích hợp | Thêm các hệ thống con mới mà không cần sửa đổi các hệ thống con hiện có. |
| 🔧 Dễ bảo trì hơn | Thay thế hoặc nâng cấp các linh kiện một cách độc lập |
| 🛡️ Khả năng phục hồi tốt hơn | Các hệ thống vẫn tiếp tục hoạt động ngay cả khi các hệ thống khác gặp sự cố. |
| 🏭 Tự do lựa chọn nhiều nhà cung cấp | Kết hợp các thiết bị từ các nhà cung cấp khác nhau trên cùng một bus dữ liệu. |
| ⏱️ Rút ngắn thời gian đưa sản phẩm ra thị trường | Giao diện tiêu chuẩn giúp giảm thiểu việc phát triển tùy chỉnh. |
Nguồn duy nhất cung cấp đầy đủ các giải pháp GVA Stack.
Astute Systems là nhà cung cấp duy nhất cung cấp bộ phần mềm tích hợp hoàn chỉnh cho các phương tiện quân sự tuân thủ tiêu chuẩn GVA:
| Thành phần | Chức năng của nó |
|---|---|
| Bohemia | Xem và xác thực các mô hình SysML, tạo định nghĩa giao diện. |
| LDMX | Trình chỉnh sửa và xác thực Mô hình Dữ liệu Đất đai hàng đầu dành cho LDM v10.0.0 |
| Công cụX | Công cụ tự động tạo mã, tích hợp bản dựng và triển khai. |
| Bác sĩ giỏi | Kết nối tất cả các hệ thống con với khả năng phân phối dữ liệu an toàn theo thời gian thực. |
| Mô hình dữ liệu đất đai v10.0.0 | Các kiểu dữ liệu tuân thủ GVA được xây dựng sẵn cho tất cả các lĩnh vực xe cộ. |
| Giao diện người máy tinh tế | Phần mềm hiển thị cho kíp lái đáp ứng các yêu cầu của tiêu chuẩn DEF-STAN 23-009. |
Lợi ích của Full Stack
| Lợi ích | Sự va chạm |
|---|---|
| 🎯 Trách nhiệm duy nhất | Một hợp đồng, một đội ngũ hỗ trợ, một đối tác tích hợp. |
| 📋 Đã được chứng minh tuân thủ | Đã được kiểm định trước theo các yêu cầu của DEF-STAN 23-009. |
| 🔄 Cập nhật liền mạch | Nâng cấp bất kỳ thành phần nào mà không làm hỏng các thành phần khác. |
| 💰 Chi phí có thể dự đoán được | Không có phí tích hợp bất ngờ hoặc các vấn đề phát sinh về bản quyền. |
| ⏱️ Giao hàng nhanh hơn | Hãy bắt đầu với phần mềm hoạt động được, chứ không phải các framework trống rỗng. |
Comparison
Các yếu tố cần xem xét trong quá trình mua sắm
| Nhân tố | Bác sĩ giỏi | RTI Connext | CycloneDDS | OpenDDS | DDS nhanh |
|---|---|---|---|---|---|
| Mô hình cấp phép | Tùy chọn linh hoạt | Quảng cáo theo từng chỗ ngồi | Eclipse EPL 2.0 | LGPL | Apache 2.0 |
| Chi phí giấy phép | Cạnh tranh | $$$ cho mỗi lần triển khai | Miễn phí | Miễn phí | Miễn phí |
| Mô hình hỗ trợ | Hợp đồng nhà cung cấp Úc | Doanh nghiệp toàn cầu | Tổ chức Eclipse | Thương mại OCI | Quảng cáo eProsima |
| Hỗ trợ có trụ sở tại Úc | ✅ Có | ❌ Có trụ sở tại Hoa Kỳ | ❌ Không | ❌ Có trụ sở tại Hoa Kỳ | ❌ Có trụ sở tại Tây Ban Nha |
| GVA Tiền hội nhập | ✅ Tích hợp sẵn | ❌ Sản phẩm đặt làm theo yêu cầu | ❌ Tự làm | ❌ Tự làm | ❌ Tự làm |
| Đầy đủ các tính năng có sẵn | ✅ Nguồn duy nhất: HMI + LDM + DDS + Công cụ | ❌ Chỉ dành cho phần mềm trung gian | ❌ Chỉ dành cho phần mềm trung gian | ❌ Chỉ dành cho phần mềm trung gian | ❌ Chỉ dành cho phần mềm trung gian |
| Công cụ SysML | ✅ Phong cách Bohemian + LDMX + ToolX | ❌ Không có | ❌ Không có | ❌ Không có | ❌ Không có |
| Kiểm soát xuất khẩu | thẩm quyền của Úc | Các cân nhắc về ITAR của Hoa Kỳ | Liên minh châu Âu | CHÚNG TA | Liên minh châu Âu |
So sánh các tính năng kỹ thuật
| Tính năng | Bác sĩ giỏi | RTI Connext | CycloneDDS | OpenDDS | DDS nhanh |
|---|---|---|---|---|---|
| DDSI-RTPS 2.5 | ✅ Hoàn thành | ✅ Hoàn thành | ✅ Hoàn thành | ✅ Hoàn thành | ✅ Hoàn thành |
| Bảo mật DDS 1.1 | ✅ Hoàn thành | ✅ Hoàn thành | ⚠️ Một phần | ✅ Hoàn thành | ✅ Hoàn thành |
| X-Types 1.3 | ✅ Hoàn thành | ✅ Hoàn thành | ⚠️ Một phần | ⚠️ Một phần | ⚠️ Một phần |
| API dữ liệu động | ✅ Hoàn thành | ✅ Hoàn thành | ❌ Không có | ⚠️ Cơ bản | ⚠️ Cơ bản |
| Dịch vụ tra cứu kiểu dữ liệu | ✅ Hoàn thành | ✅ Hoàn thành | ❌ Không có | ❌ Không có | ⚠️ Một phần |
| Lọc nội dung | ✅ Hoàn thành | ✅ Hoàn thành | ✅ Hoàn thành | ✅ Hoàn thành | ✅ Hoàn thành |
| Vận chuyển bộ nhớ dùng chung | ✅ Hoàn thành | ✅ Hoàn thành | ✅ Hoàn thành | ❌ Không có | ✅ Hoàn thành |
| Giao thức TCP | ✅ Hoàn thành | ✅ Hoàn thành | ✅ Hoàn thành | ✅ Hoàn thành | ✅ Hoàn thành |
| Không sao chép | ✅ Được hỗ trợ | ✅ Được hỗ trợ | ✅ Được hỗ trợ | ❌ Không có | ✅ Được hỗ trợ |
Tuân thủ tiêu chuẩn
| Tiêu chuẩn | Bác sĩ giỏi | RTI Connext | CycloneDDS | OpenDDS | DDS nhanh |
|---|---|---|---|---|---|
| Ôi trời ơi DDS 1.4 | ✅ | ✅ | ✅ | ✅ | ✅ |
| Ôi trời ơi DDSI-RTPS 2.5 | ✅ | ✅ | ✅ | ✅ | ✅ |
| OMG DDS-XTypes 1.3 | ✅ | ✅ | ⚠️ | ⚠️ | ⚠️ |
| OMG DDS Security 1.1 | ✅ | ✅ | ⚠️ | ✅ | ✅ |
| Ôi trời ơi IDL 4.2 | ✅ | ✅ | ✅ | ✅ | ✅ |
| DEF-STAN 23-009 (GVA) | ✅ | ❌ | ❌ | ❌ | ❌ |
| Mô hình dữ liệu đất đai v10.0.0 | ✅ | ❌ | ❌ | ❌ | ❌ |
Hỗ trợ ngôn ngữ và nền tảng
| Khả năng | Bác sĩ giỏi | RTI Connext | CycloneDDS | OpenDDS | DDS nhanh |
|---|---|---|---|---|---|
| C++ | C++20 | C++11 | Bao bì C99 | C++11 | C++11 |
| C | Thông qua C++ | ✅ Bản địa | ✅ Bản địa | ❌ | ✅ Bản địa |
| Python | ✅ | ✅ | ✅ | ✅ | ✅ |
| Gỉ sét | ✅ | ❌ | ✅ | ❌ | ❌ |
| Linux | ✅ | ✅ | ✅ | ✅ | ✅ |
| Windows | ✅ | ✅ | ✅ | ✅ | ✅ |
| VxWorks | Lộ trình | ✅ | ⚠️ | ✅ | ⚠️ |
| Hệ điều hành nhúng/RTOS | ✅ Được thiết kế cho | ✅ Biến thể siêu nhỏ | ⚠️ | ⚠️ | ⚠️ |
| Liên kết tĩnh | ✅ Thư viện đơn | ⚠️ | ⚠️ Thư viện dùng chung | ⚠️ Thư viện dùng chung | ⚠️ Thư viện dùng chung |
Vì sao Astute DDS giành chiến thắng
| so với RTI Connext | so với CycloneDDS | so với OpenDDS | so sánh với Fast DDS |
|---|---|---|---|
| Các tùy chọn cấp phép linh hoạt | Hỗ trợ đầy đủ cho dòng X-Types | API dữ liệu động hoàn chỉnh | Hỗ trợ có trụ sở tại Úc |
| Nhà cung cấp Úc, không có vấn đề liên quan đến ITAR. | Bảo mật tích hợp | Dịch vụ tra cứu kiểu dữ liệu | Tuân thủ đầy đủ GVA |
| Trọn bộ giải pháp GVA từ một nguồn duy nhất. | LDMX + ToolX hàng đầu | LDMX + ToolX hàng đầu | Triển khai đơn giản hơn |
| LDM v10.0.0 được bao gồm | Hỗ trợ thương mại | thẩm quyền của Úc | Các loại X hoàn chỉnh |
Why Astute DDS
"Chúng tôi đã giảm thời gian tích hợp GVA xuống 40% bằng cách sử dụng bộ giải pháp Astute. Việc chỉ có một nhà cung cấp chịu trách nhiệm về phần mềm trung gian, giao diện người dùng (HMI) và mô hình dữ liệu đã loại bỏ tình trạng đổ lỗi lẫn nhau vốn gây khó khăn cho các chương trình trước đây."
— Quản lý chương trình, Bộ trưởng Quốc phòng Anh
Đảm bảo khả năng tương tác
Astute DDS hoàn toàn tương thích với tất cả các hệ thống DDS chính. Xe của bạn có thể giao tiếp liền mạch với:
Không bị ràng buộc bởi nhà cung cấp. Nếu hệ thống đối tác sử dụng triển khai DDS khác, Astute DDS sẽ kết nối mà không cần sửa đổi.
Tuân thủ các tiêu chuẩn quốc phòng
Được thiết kế đáp ứng các yêu cầu quân sự.
| Tiêu chuẩn | Trạng thái |
|---|---|
| DEF-STAN 23-009 | ✅ Tuân thủ đầy đủ GVA |
| Mô hình dữ liệu đất đai v10.0.0 | ✅ Các loại tên miền hoàn chỉnh |
| NATO STANAG | ✅ Sẵn sàng cho khả năng tương tác |
| Các yếu tố thiết yếu của an ninh mạng | ✅ Được chứng nhận an ninh |
Bảo mật mà bạn có thể tin tưởng
- 🔐 Truyền thông được mã hóa — Tất cả dữ liệu được bảo vệ trong quá trình truyền tải
- 🎫 Xác thực dựa trên chứng chỉ — Chỉ các hệ thống được ủy quyền mới có thể kết nối
- 📋 Chính sách kiểm soát truy cập — Xác định ai có thể đăng bài hoặc đăng ký theo dõi từng chủ đề
- 📝 Nhật ký kiểm toán đầy đủ — Theo dõi toàn diện cho các đánh giá bảo mật
Đã được chứng minh trong sản xuất
Được triển khai trên nhiều chương trình khác nhau
Astute DDS được các nhà thầu quốc phòng hàng đầu tại Úc, Anh và các quốc gia đồng minh tin tưởng:
| Lãnh địa | Ứng dụng |
|---|---|
| 🎖️ Xe bọc thép | Màn hình hiển thị cho kíp lái, tích hợp cảm biến, tích hợp vũ khí. |
| 🤖 Robot & Hệ thống tự hành | Xe mặt đất không người lái, nền tảng robot, điều hướng tự động |
| 🛡️ Chống máy bay không người lái (CUAS) | Hệ thống phát hiện, theo dõi và vô hiệu hóa máy bay không người lái |
| ✈️ Trạm điều khiển mặt đất | Điều khiển và giám sát UAV, nguồn cấp dữ liệu cảm biến |
| 🚢 Hệ thống Hải quân | Màn hình cầu tàu, kiểm soát thiệt hại, điều hướng |
| 🏭 Đào tạo & Mô phỏng | Môi trường mô phỏng, đánh giá sau hành động, tóm tắt sau hoạt động. |
🎬 Yêu cầu bản demo
Hãy xem Astute DDS và toàn bộ bộ công cụ GVA hoạt động như thế nào. Tìm hiểu thêm về bộ công cụ của chúng tôi hoặc yêu cầu bản demo ngay bây giờ.
Frequently Asked Questions
Những câu hỏi hàng đầu mà các nhà phát triển thường đặt ra khi áp dụng Astute DDS.
1. Astute DDS là gì?
Astute DDS là một triển khai bằng C++20 của Dịch vụ Phân phối Dữ liệu OMG.
(DDS) API DCPS, giao thức truyền tải DDSI-RTPS 2.5, hệ thống kiểu DDS-XTypes 1.3,
Các plugin DDS-Security 1.1/1.2 và IDL 4.2. Nó được phân phối dưới dạng tệp tĩnh.
Thư viện libastutedds.a (cùng với các liên kết C, Python và Rust) và được cung cấp kèm theo.
Giao diện người dùng đồ họa (GUI) chẩn đoán astutedds-inspect và bản demo Shapes tương tác.
2. Làm thế nào để đăng tải và đăng ký theo dõi một chủ đề?
Tạo một DomainParticipant , một Topic , sau đó là một DataWriter (phía nhà xuất bản).
hoặc DataReader (phía người đăng ký):
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);Xem phần Bắt đầu › Ứng dụng đầu tiên .
3. Sự khác biệt giữa read() và take() là gì?
-
read()trả về các mẫu nhưng **lưu trữ chúng trong bộ nhớ cache của trình đọc**, do đó các lần gọi sau (hoặc các trình đọc khác trong cùng một người đăng ký) có thể đọc lại chúng. -
take()trả về các mẫu và **xóa chúng** khỏi bộ nhớ cache.
Hãy sử dụng read() khi chủ đề đại diện cho trạng thái được chia sẻ mà bạn muốn kiểm tra.
lặp đi lặp lại; sử dụng take() khi chủ đề đại diện cho các sự kiện bạn muốn
Chỉ dùng một lần duy nhất.
4. Tại sao những người đăng ký muộn không nhận được mẫu sản phẩm sớm hơn?
Theo mặc định, DURABILITY là VOLATILE , vì vậy các mẫu được ghi trước khi người đăng ký
Các mẫu đã được đối khớp nhưng chưa được giao. Để cung cấp các mẫu lịch sử cho những người tham gia muộn,
cấu hình trình ghi và các trình đọc tương ứng với TRANSIENT_LOCAL
độ bền (điều này cũng đòi hỏi độ tin cậy RELIABLE ):
DataWriterQos qos;
writer->get_qos(qos);
qos.durability().kind = TRANSIENT_LOCAL_DURABILITY_QOS;
qos.reliability().kind = RELIABLE_RELIABILITY_QOS;
writer->set_qos(qos); Để đảm bảo tính nhất quán sau khi khởi động lại trình ghi, hãy sử dụng phương pháp sau:
Dịch vụ lưu trữ dữ liệu hoặc Dịch vụ TRANSIENT / PERSISTENT
các loại độ bền.
5. Chức năng QoS RELIABILITY là gì?
-
BEST_EFFORT(mặc định cho nhiều chủ đề tích hợp sẵn): các mẫu bị mất trên đường truyền sẽ không được truyền lại. Chi phí thấp nhất. -
RELIABLE: người viết theo dõi các phản hồi xác nhận (ACKNACK/ nhịp tim) từ mỗi người đọc phù hợp và gửi lại các số thứ tự bị thiếu cho đến khi...
Người đọc bắt kịp hoặc lịch sử đã đầy đủ.
Độ tin cậy phụ thuộc vào từng người viết/người đọc và phải tương thích: một BEST_EFFORT
Người đọc có thể tìm được một người viết RELIABLE , nhưng điều ngược lại thì không thể.
6. Chức năng DURABILITY QoS (Chất lượng dịch vụ) có tác dụng gì?
DURABILITY kiểm soát việc các mẫu có được giữ lại để giao cho người đọc hay không.sự kết nối đó diễn ra sau khi mẫu được viết xong:
| Loại | Có chỗ cho người đăng ký muộn không? |
|---|---|
VOLATILE | KHÔNG |
TRANSIENT_LOCAL | Vâng, chừng nào tác giả còn sống. |
TRANSIENT | Đúng vậy, trong suốt vòng đời của người viết (thông qua Dịch vụ Lưu trữ). |
PERSISTENT | Đúng vậy, ngay cả khi khởi động lại tiến trình (trên ổ đĩa). |
7. Sự khác biệt giữa HISTORY và DURABILITY là gì?
HISTORY ( KEEP_LAST(depth) or KEEP_ALL ) kiểm soát số lượng mẫu được lưu trữ. Bộ nhớ đệm của trình ghi/đọc được lưu giữ tại mọi thời điểm. DURABILITY kiểm soát liệu...
Người viết cung cấp các mẫu cho người đọc để họ đối chiếu sau này. Họ làm việc cùng nhau nhưng
Giải quyết các vấn đề khác nhau: Chỉ riêng KEEP_ALL không đủ để cung cấp các mẫu.
Dành cho những người tham gia muộn.
8. Làm thế nào để chỉ định ID miền?
Truyền ID miền làm đối số đầu tiên cho hàm create_participant :
auto dp = DomainParticipantFactory::get_instance()
->create_participant(42, PARTICIPANT_QOS_DEFAULT, nullptr, 0); Những người tham gia ở các miền khác nhau không liên lạc với nhau. Cổng DDSI-RTPS
Công thức 7400 + 250 * domain_id xác định các cổng UDP cơ bản được sử dụng cho
khám phá.
9. Tại sao nhà xuất bản và người đăng ký của tôi không biết đến nhau?
Nguyên nhân phổ biến:
- Các ID miền khác nhau — cả hai người tham gia phải sử dụng cùng một ID.
- Phát đaicast bị chặn — SPDP sử dụng phát đaicast UDP trên
239.255.0.1bởi
Mặc định. Kiểm tra tường lửa của máy chủ và tính năng dò tìm IGMP của thiết bị chuyển mạch. - Giao diện mạng không chính xác — trên các máy chủ đa kết nối, hãy đặt
ASTUTEDDS_NETWORK_INTERFACE=hoặc cấu hình nó trong hồ sơ JSON/XML khám phá (xem Cấu hình khám phá JSON ). - Chất lượng dịch vụ không tương thích — xem câu hỏi 15.
- Các giao thức truyền tải khác nhau — xác minh cả hai bên đều sử dụng UDPv4 (hoặc cả hai đều sử dụng UDPv6,
TCP, SHM).
Bật tính năng ghi nhật ký theo dõi với ASTUTEDDS_LOG_LEVEL=trace và kiểm tra gói tin.
Chụp bằng astutedds-inspect .
10. IDL hỗ trợ những tính năng nào?
Trình biên dịch astutedds-idl đi kèm triển khai OMG IDL 4.2 bao gồm:
- Các kiểu dữ liệu nguyên thủy (
boolean,octet, các kiểu số nguyênint8–uint64,float/double/long double,char/wchar,string/wstring). - Cấu trúc, liên hợp, kiểu liệt kê, mặt nạ bit, kiểu dữ liệu định nghĩa.
- Dãy số có giới hạn và không giới hạn, mảng, bản đồ.
-
@key,@id,@optional,@default,@range,@min,@max,@unit,@extensibility(FINAL|APPENDABLE|MUTABLE),@nested. - Hằng số và không gian tên
module.
Mã C++ được tạo ra sử dụng XCDR2 theo mặc định, với tùy chọn XCDR1 để tương thích.
11. Làm thế nào để lọc các mẫu mà tôi tự đăng tải?
Có hai lựa chọn:
- Bỏ qua ở cấp độ người tham gia : gọi
dp->ignore_publication(handle)
truyềnInstanceHandle_tcủa trình ghi cục bộ. - Lọc trong hàm gọi lại của trình đọc bằng cách sử dụng
SampleInfo::publication_handle
và so sánh nó vớiget_instance_handle()của tác giả.
Một chủ đề được lọc theo nội dung cũng có thể loại trừ một trường khóa tự xuất bản.
12. Những ký tự nào được phép sử dụng trong tên chủ đề?
Tên chủ đề có thể chứa các ký tự chữ và số ASCII, _ và / dưới dạng dấu gạch chéo ngược (/).
Dấu phân cách thứ bậc. Độ dài giới hạn trong 256 ký tự. Tránh ký tự đầu tiên.
các chữ số và tiền tố tích hợp sẵn dành riêng của DDS ( DCPS , dds ). Tên kiểu theo sau
Quy tắc tương tự.
13. Làm thế nào để tôi phát hiện khi người viết hoặc người đọc từ xa rời đi?
Cài đặt DataReaderListener và triển khai phương on_subscription_matched /
on_liveliness_changed , hoặc thăm dò reader->get_subscription_matched_status() . The current_count_changeTrường này có giá trị âm khi có sự không khớp giữa các đối tác.
Độ sống động được điều chỉnh bởi LIVELINESS QoS — được thiết lập
kind = AUTOMATIC_LIVELINESS_QOS với lease_duration để phát hiệnNhững người bạn đồng hành im lặng trong một khoảng thời gian nhất định.
14. Làm thế nào để tôi nhận được phản hồi khi có dữ liệu mới?
Gắn trình lắng nghe với mặt nạ 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); Sự kiện on_data_available được kích hoạt cho cả các mẫu mới và vòng đời của thể hiện. thay đổi; luôn kiểm tra SampleInfo::valid_data trước khi truy cập vào biến đó.
Tải trọng mẫu.
15. "Chất lượng dịch vụ không tương thích" nghĩa là gì?
Người viết và người đọc chỉ khớp nhau khi mọi Yêu cầu/Chất lượng dịch vụ được cung cấp đều
tương thích:
| Chính sách | Đã yêu cầu ≤ Đã cung cấp |
|---|---|
RELIABILITY | người đọc BEST_EFFORT ≤ người viết RELIABLE |
DURABILITY | Loại người đọc ≤ loại người viết (theo thứ tự trong đặc tả) |
DEADLINE | period đọc ≥ period viết |
LATENCY_BUDGET | duration đọc ≥ duration viết |
OWNERSHIP | phải bằng nhau ( SHARED hoặc EXCLUSIVE ) |
PARTITION | Ít nhất một tên phân vùng phải trùng lặp |
Lắng nghe sự kiện on_offered_incompatible_qos / on_requested_incompatible_qos
Để tìm ra ID chính sách chính xác trong quá trình thực thi.
16. Làm thế nào để gửi các mẫu dữ liệu lớn hơn kích thước gói tin UDP?
Astute DDS tự động phân mảnh các mẫu có kích thước lớn hơn kích thước đã cấu hình.
fragment_size (mặc định là 1344 byte cho IPv4) và lắp ráp lại chúng trên Trình đọc sử dụng các thông báo con DDSI-RTPS DATA_FRAG . Giao thức độ tin cậy
Khôi phục các đoạn bị thiếu mà không cần gửi lại toàn bộ mẫu.
Đối với các mẫu dữ liệu rất lớn (≥ 1 MB), hãy tăng bộ đệm socket của hệ điều hành:
sudo sysctl -w net.core.rmem_max=8388608
sudo sysctl -w net.core.wmem_max=8388608và cân nhắc chuyển sang phương thức truyền tải bộ nhớ dùng chung cho các thiết bị đọc cục bộ.
17. Tôi cấu hình giao diện mạng nào sẽ được sử dụng như thế nào?
Ba lựa chọn, theo thứ tự ưu tiên:
- Biến môi trường:
ASTUTEDDS_NETWORK_INTERFACE=eth0. - Cấu hình khám phá JSON — xem Cấu hình khám phá JSON .
- Hồ sơ QoS XML — xem Hồ sơ QoS DDS-XML .
Nếu không có tùy chọn nào được thiết lập, Astute DDS sẽ chọn giao diện không phải vòng lặp đầu tiên có
Địa chỉ có khả năng truyền đa hướng.
18. Tôi có thể sử dụng Astute DDS trên mạng không hỗ trợ multicast không?
Vâng. Có hai lựa chọn:
- Danh sách các thiết bị ngang hàng Unicast SPDP : cung cấp danh sách các cặp máy chủ/cổng ngang hàng trong
Cấu hình khám phá; Astute DDS gửi thông báo SPDP đơn hướng đến từng thiết bị ngang hàng. - Giao thức truyền tải TCP : chuyển người tham gia sang giao thức truyền tải TCP RTPS.
môi trường chặn hoàn toàn UDP. Xem
Bộ định tuyến miền DDS dùng để kết nối các mạng biệt lập.
19. Làm thế nào để tinh chỉnh nhằm đạt độ trễ thấp?
- Sử dụng độ tin cậy
RELIABLEvới lịch sửKEEP_LAST(1)ở cả hai đầu để
Việc phát lại dữ liệu là rất ít. - Kích hoạt tính năng truyền tải bộ nhớ dùng chung cho các thiết bị tham gia cùng vị trí.
- Ghim các luồng Astute DDS với khả năng ưu tiên CPU và sử dụng lập lịch thời gian thực.
(SCHED_FIFO) trên các tiến trình xuất bản và đăng ký. - Vô hiệu hóa Nagle bằng cách sử dụng UDP (mặc định).
- Tăng dung lượng bộ đệm socket (xem câu hỏi 16) để hấp thụ các xung đột.
- Đặt
LATENCY_BUDGET = 0để tắt mọi độ trễ xử lý theo lô.
20. Tại sao tôi lại thấy độ trễ tăng đột biến khi xuất bản các mẫu dữ liệu lớn?
Khi các mẫu dữ liệu vượt quá bộ đệm socket mặc định của hệ điều hành (thường là 208 KB trên Linux),
Nhân hệ điều hành loại bỏ các gói tin và giao thức đáng tin cậy phải truyền lại, gây ra
các xung đột. Tăng net.core.rmem_max / net.core.wmem_max lên ít nhất là
Kích thước mẫu sẽ giải quyết vấn đề này. Hãy cân nhắc việc phân mảnh với fragment_size nhỏ hơn.
trên các mạng có tổn hao dữ liệu.
21. Làm thế nào để kết nối hai miền DDS?
Sử dụng Astute DDS Domain Router — một dịch vụ kết nối hai hoặc nhiều miền.
các miền và chuyển tiếp các chủ đề đã được cấu hình giữa chúng, với tùy chọn
Lọc từ khóa/nội dung và dịch QoS. Xem
Bộ định tuyến miền DDS .
22. Có những tùy chọn ngôn ngữ nào?
| Ngôn ngữ | Trạng thái | Ghi chú |
|---|---|---|
| C++20 | Ổn định | API chính — libastutedds.a |
| C | Ổn định | API C phẳng cho FFI, xem include/astutedds/c/astutedds.h |
| Python | Ổn định | Liên kết pybind11, CPython 3.10 – 3.13 |
| Gỉ sét | Phiên bản Beta | Thư viện astutedds (lớp bao bọc an toàn cho API C) |
23. Những nền tảng và phiên bản hệ điều hành nào được hỗ trợ?
| Nền tảng | Các phiên bản đã được kiểm thử |
|---|---|
| Linux | Ubuntu 22.04 / 24.04, RHEL 9 / 10, AlmaLinux 9 / 10, Debian 12 |
| Windows | Windows 10, Windows 11, Windows Server 2022 |
Các gói Python dành cho Linux được gắn thẻ manylinux_2_28 (glibc ≥ 2.28) và chạy
trên bất kỳ bản phân phối tương thích nào.
24. Làm thế nào để kích hoạt tính năng bảo mật DDS?
- Cung cấp các thành phần nhận dạng (X.509) và quyền hạn (XML đã ký).
- Cấu hình thuộc tính QoS của người tham gia với Xác thực, Kiểm soát truy cập và
Thuộc tính plugin mã hóa (chứng chỉ CA, chứng chỉ/khóa định danh, tệp quyền,
(tệp quản trị). - Liên kết với Astute DDS được xây dựng với
-DASTUTEDDS_ENABLE_SECURITY=ON.
Xem DDS Security để biết hướng dẫn từ đầu đến cuối và...
Mẫu quản trị/quyền hạn.
25. Làm thế nào để giữ nguyên dữ liệu sau khi khởi động lại?
Hãy chạy Dịch vụ Duy trì (Persistence Service) song song với tên miền của bạn. Nó sẽ đăng ký nhận thông tin từ...
Đã cấu hình các chủ đề TRANSIENT / PERSISTENT , lưu trữ các mẫu trong bộ nhớ cục bộ.
cơ sở dữ liệu (mặc định là SQLite) và xuất bản lại chúng để tham gia muộn.
người đăng ký — bao gồm cả những người tham gia sau khi tác giả gốc đã rời đi.
Xem Dịch vụ Lưu trữ Dữ liệu .
26. Làm thế nào để ghi lại và phát lại lưu lượng truy cập?
Sử dụng công cụ astutedds-record được tích hợp sẵn để ghi lại thông tin về một tên miền vào tệp.
.astdb và astutedds-replay để xuất bản lại với các thông số có thể điều chỉnh. Điều chỉnh tỷ lệ thời gian. Quá trình ghi âm nhận biết loại thiết bị và sử dụng XCDR2 bên trong. Xem thêm
Ghi âm và phát lại .
27. Làm thế nào để phát triển một kiểu dữ liệu mà không làm ảnh hưởng đến người đăng ký?
Chú thích kiểu IDL bằng @extensibility(MUTABLE) (hoặc APPENDABLE ) và
gắn thẻ cho mỗi thành viên bằng @id(N) . Luồng có thể thay đổi XCDR2 cho phép:
- Thêm thành viên mới vào một trong hai đầu.
- Loại bỏ các thành viên tùy chọn.
- Sắp xếp lại các thành viên.
Các thành viên không khớp sẽ bị bỏ qua theo quy tắc gán của X-Types.
@extensibility(FINAL) khóa bố cục và phải được sử dụng khi sử dụng nhị phânKhả năng tương thích với các đầu đọc XCDR1 đời cũ rất quan trọng.
28. Tôi sử dụng các chủ đề được lọc theo nội dung như thế nào?
Tạo ContentFilteredTopic từ một topic thông thường với bộ lọc giống SQL.
biểu thức và liên kết một DataReader với nó:
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); Bộ lọc được đánh giá ở phía người ghi khi có thể để tiết kiệm băng thông.
29. Làm thế nào để cấu hình QoS từ một tệp XML?
Sử dụng XmlQosLoader để đọc cấu hình DDS-XML và áp dụng nó khi tạo.
các thực thể:
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); Xem Hồ sơ QoS DDS-XML để biết lược đồ và cách hoạt động.
Ví dụ.
30. Làm thế nào để gỡ lỗi các vấn đề về tương tác hoặc phát hiện?
- Chạy lệnh
astutedds-inspecttrên tên miền để xem các kết quả đã được phát hiện.
Thông tin về người tham gia, điểm cuối và trạng thái khớp nối được cập nhật theo thời gian thực. - Thu thập lưu lượng truy cập bằng
tcpdump -i any -w dds.pcap 'udp port 7400 or portrange 7400-7500'và mở tệp đó trong Wireshark — công cụ phân tích RTPS.
Giải mã dữ liệu SPDP, SEDP và dữ liệu người dùng. - Bật nhật ký theo dõi:
ASTUTEDDS_LOG_LEVEL=trace ASTUTEDDS_LOG_FILE=/tmp/astutedds.log. - Xác minh ID thực thể và cổng:
- Người ghi/đọc SPDP:
00:01:00:c2/00:01:00:c7 - Ấn phẩm SEDP:
00:00:03:c2/00:00:03:c7 - Đăng ký SEDP:
00:00:04:c2/00:00:04:c7 - Cổng gốc:
7400 + 250 × domain_id.
- Người ghi/đọc SPDP:
- Xác nhận cả hai bên đều quảng cáo ID nhà cung cấp và phiên bản giao thức tương thích.
(DDSI-RTPS 2.5).