Zeki Diş Hekimi
Savunma Sistemleri için Gerçek Zamanlı Veri Bağlantısı
Kritik öneme sahip araç platformlarına güç veren ara yazılım.
X-Type özellikli, tam donanımlı DDS. Savunma amaçlı, silah sınıfı DDS.
Powering defence
Astute DDS, Astute Systems'in eksiksiz DEF-STAN 23-009 Genel Araç Mimarisi (GVA) çözümünün kalbinde yer alan veri dağıtım ara yazılımıdır. Sensörlerden ekranlara kadar, tek bir birleşik platform askeri aracınızdaki her alt sistemi birbirine bağlar.
Why Publish/Subscribe
Geleneksel Mimariyle İlgili Sorunlar
Eski araç sistemleri noktadan noktaya bağlantılar kullanır. Yeni bir alt sistem eklediğinizde, iletişim kurduğu her sistemi değiştirmeniz gerekir. Bu da şunlara yol açar:
- ❌ Pahalı entegrasyon — Her yeni bileşen özel kodlama gerektirir.
- ❌ Kırılgan sistemler — Tek bir arıza, ağ genelinde zincirleme reaksiyonlara yol açabilir.
- ❌ Tedarikçi bağımlılığı — Tescilli protokoller sizi tek bir tedarikçiye hapseder.
- ❌ Yavaş güncellemeler — Bir alt sistemi değiştirmek her şeyi yeniden test etmek anlamına gelir.
Yayınla/Abone Ol Çözümü
DDS yayınlama/abone olma mimarisiyle, alt sistemler verileri adlandırılmış konulara yayınlar. Bu verilere ihtiyaç duyan herhangi bir sistem konuya abone olur. Noktadan noktaya bağlantı yok. Özel entegrasyon koduna gerek yok.
| İşletme Faydası | Pub/Sub Nasıl Teslimat Yapıyor? |
|---|---|
| 💰 Daha Düşük Entegrasyon Maliyetleri | Mevcut alt sistemleri değiştirmeden yeni alt sistemler ekleyin. |
| 🔧 Daha Kolay Bakım | Parçaları bağımsız olarak değiştirin veya yükseltin. |
| 🛡️ Daha Büyük Direnç | Diğer sistemler arızalansa bile sistemler çalışmaya devam eder. |
| 🏭 Çoklu Tedarikçi Özgürlüğü | Farklı tedarikçilerden gelen ekipmanları tek bir veri yolunda bir araya getirin. |
| ⏱️ Daha Hızlı Pazara Giriş Süresi | Standart arayüzler, daha az özel geliştirme anlamına gelir. |
GVA ürün gamının tamamı için tek kaynak
Astute Systems, GVA uyumlu askeri araçlar için eksiksiz ve entegre bir yazılım paketi sağlayan tek tedarikçidir :
| Bileşen | Ne İşe Yarar? |
|---|---|
| Bohem | SysML modellerini görüntüleyin ve doğrulayın, arayüz tanımları oluşturun. |
| LDMX | LDM v10.0.0 için sınıfının en iyisi Arazi Veri Modeli düzenleyici ve doğrulayıcı. |
| ToolX | Otomatik kod üretimi, derleme entegrasyonu ve dağıtım araçları |
| Zeki Diş Hekimi | Tüm alt sistemleri gerçek zamanlı, güvenli veri dağıtımıyla birbirine bağlayın. |
| Arazi Veri Modeli v10.0.0 | Tüm araç alanları için önceden oluşturulmuş GVA uyumlu veri tipleri. |
| Akıllı HMI | DEF-STAN 23-009 gereksinimlerini karşılayan mürettebat ekran yazılımı |
Tam Yığın Yazılımın Faydaları
| Fayda | Darbe |
|---|---|
| 🎯 Tek Sorumluluk Noktası | Tek sözleşme, tek destek ekibi, tek entegrasyon ortağı |
| 📋 Kanıtlanmış Uyumluluk | DEF-STAN 23-009 gerekliliklerine göre önceden doğrulanmıştır. |
| 🔄 Sorunsuz Güncellemeler | Diğer bileşenlere zarar vermeden herhangi bir bileşeni yükseltebilirsiniz. |
| 💰 Öngörülebilir Maliyetler | Beklenmedik entegrasyon ücretleri veya lisanslama sorunları yok. |
| ⏱️ Daha Hızlı Teslimat | Boş çerçevelerle değil, çalışan yazılımlarla başlayın. |
Comparison
Tedarik Hususları
| Faktör | Zeki Diş Hekimi | RTI Connext | CycloneDDS | OpenDDS | Hızlı DDS |
|---|---|---|---|---|---|
| Lisans Modeli | Esnek seçenekler | Koltuk başına reklam | Eclipse EPL 2.0 | LGPL | Apache 2.0 |
| Lisans Maliyeti | Rekabetçi | Dağıtım başına $$$ | Özgür | Özgür | Özgür |
| Destek Modeli | Avustralyalı tedarikçi sözleşmesi | Küresel işletme | Eclipse Vakfı | OCI ticari | eProsima reklamı |
| Avustralya Merkezli Destek | ✅ Evet | ❌ ABD merkezli | ❌ Hayır | ❌ ABD merkezli | ❌ İspanya merkezli |
| GVA Ön Entegrasyonu | ✅ Dahili | ❌ Özel sipariş | ❌ Kendin Yap | ❌ Kendin Yap | ❌ Kendin Yap |
| Tam Yığın Mevcut | ✅ Tek kaynak: HMI + LDM + DDS + Araçlar | ❌ Yalnızca ara yazılım | ❌ Yalnızca ara yazılım | ❌ Yalnızca ara yazılım | ❌ Yalnızca ara yazılım |
| SysML Araçları | ✅ Bohemian + LDMX + ToolX | ❌ Yok | ❌ Yok | ❌ Yok | ❌ Yok |
| İhracat Kontrolü | Avustralya yargı yetkisi | ABD ITAR hususları | AB | BİZ | AB |
Teknik Özellik Karşılaştırması
| Özellik | Zeki Diş Hekimi | RTI Connext | CycloneDDS | OpenDDS | Hızlı DDS |
|---|---|---|---|---|---|
| DDSI-RTPS 2.5 | ✅ Tamamlandı | ✅ Tamamlandı | ✅ Tamamlandı | ✅ Tamamlandı | ✅ Tamamlandı |
| DDS Güvenliği 1.1 | ✅ Tamamlandı | ✅ Tamamlandı | ⚠️ Kısmi | ✅ Tamamlandı | ✅ Tamamlandı |
| X-Types 1.3 | ✅ Tamamlandı | ✅ Tamamlandı | ⚠️ Kısmi | ⚠️ Kısmi | ⚠️ Kısmi |
| Dinamik Veri API'si | ✅ Tamamlandı | ✅ Tamamlandı | ❌ Yok | ⚠️ Temel | ⚠️ Temel |
| Tip Arama Hizmeti | ✅ Tamamlandı | ✅ Tamamlandı | ❌ Yok | ❌ Yok | ⚠️ Kısmi |
| İçerik Filtreleme | ✅ Tamamlandı | ✅ Tamamlandı | ✅ Tamamlandı | ✅ Tamamlandı | ✅ Tamamlandı |
| Paylaşımlı Bellek Aktarımı | ✅ Tamamlandı | ✅ Tamamlandı | ✅ Tamamlandı | ❌ Yok | ✅ Tamamlandı |
| TCP Taşıma | ✅ Tamamlandı | ✅ Tamamlandı | ✅ Tamamlandı | ✅ Tamamlandı | ✅ Tamamlandı |
| Sıfır Kopya | ✅ Destekleniyor | ✅ Destekleniyor | ✅ Destekleniyor | ❌ Yok | ✅ Destekleniyor |
Standartlara Uygunluk
| Standart | Zeki Diş Hekimi | RTI Connext | CycloneDDS | OpenDDS | Hızlı DDS |
|---|---|---|---|---|---|
| Aman Tanrım, DDS 1.4 | ✅ | ✅ | ✅ | ✅ | ✅ |
| OMG DDSI-RTPS 2.5 | ✅ | ✅ | ✅ | ✅ | ✅ |
| OMG DDS-XTypes 1.3 | ✅ | ✅ | ⚠️ | ⚠️ | ⚠️ |
| OMG DDS Güvenlik 1.1 | ✅ | ✅ | ⚠️ | ✅ | ✅ |
| Aman Tanrım, IDL 4.2 | ✅ | ✅ | ✅ | ✅ | ✅ |
| DEF-STAN 23-009 (GVA) | ✅ | ❌ | ❌ | ❌ | ❌ |
| Arazi Veri Modeli v10.0.0 | ✅ | ❌ | ❌ | ❌ | ❌ |
Dil ve Platform Desteği
| Yetenek | Zeki Diş Hekimi | RTI Connext | CycloneDDS | OpenDDS | Hızlı DDS |
|---|---|---|---|---|---|
| C++ | C++20 | C++11 | C99 ambalajı | C++11 | C++11 |
| C | C++ aracılığıyla | ✅ Yerli | ✅ Yerli | ❌ | ✅ Yerli |
| Python | ✅ | ✅ | ✅ | ✅ | ✅ |
| Pas | ✅ | ❌ | ✅ | ❌ | ❌ |
| Linux | ✅ | ✅ | ✅ | ✅ | ✅ |
| Windows | ✅ | ✅ | ✅ | ✅ | ✅ |
| VxWorks | Yol Haritası | ✅ | ⚠️ | ✅ | ⚠️ |
| Gömülü/Gerçek Zamanlı İşletim Sistemi | ✅ Şunlar için tasarlandı: | ✅ Mikro varyant | ⚠️ | ⚠️ | ⚠️ |
| Statik Bağlantı | ✅ Tek kütüphane | ⚠️ | ⚠️ Paylaşımlı kütüphaneler | ⚠️ Paylaşımlı kütüphaneler | ⚠️ Paylaşımlı kütüphaneler |
Astute DDS Neden Kazanıyor?
| vs RTI Connext | vs CycloneDDS | OpenDDS'ye karşı | Hızlı DDS'ye karşı |
|---|---|---|---|
| Esnek lisanslama seçenekleri | X-Types desteği eksiksizdir. | Tam Dinamik Veri API'si | Avustralya merkezli destek |
| Avustralyalı tedarikçi, ITAR endişesi yok. | Dahili güvenlik | Tip Arama Hizmeti | GVA'ya tam uyumluluk |
| Tek kaynaktan tam GVA yığını | Sınıfının en iyisi LDMX + ToolX | Sınıfının en iyisi LDMX + ToolX | Daha basit dağıtım |
| LDM v10.0.0 dahil | Ticari destek | Avustralya yargı yetkisi | X-Type'ların Tamamı |
Why Astute DDS
"Astute paketini kullanarak GVA entegrasyon sürecimizi %40 oranında kısalttık. Ara katman yazılımı, HMI ve veri modeli için tek bir tedarikçinin sorumlu olması, önceki programlarda yaşanan karşılıklı suçlamaları ortadan kaldırdı."
— Program Yöneticisi, İngiltere Savunma Bakanlığı Ana Yüklenicisi
Birlikte Çalışabilirlik Garantili
Astute DDS, tüm büyük DDS uygulamalarıyla tam uyumludur. Aracınız aşağıdaki sistemlerle sorunsuz bir şekilde iletişim kurabilir:
Tedarikçi bağımlılığı yok. İş ortağı sistemi farklı bir DDS uygulaması kullanıyorsa, Astute DDS herhangi bir değişiklik yapılmadan bağlanacaktır.
Savunma Standartlarına Uygunluk
Askeri Gereksinimlere Uygun Olarak Üretilmiştir
| Standart | Durum |
|---|---|
| DEF-STAN 23-009 | ✅ GVA'ya tam uyumluluk |
| Arazi Veri Modeli v10.0.0 | ✅ Eksiksiz alan adları |
| NATO STANAG | ✅ Birlikte çalışabilirlik özelliği hazır |
| Siber Güvenlik Temelleri | ✅ Güvenlik sertifikalı |
Güvenebileceğiniz Güvenlik
- 🔐 Şifreli iletişim — Tüm veriler iletim sırasında korunmaktadır.
- 🎫 Sertifika tabanlı kimlik doğrulama — Yalnızca yetkilendirilmiş sistemler bağlanabilir
- 📋 Erişim kontrol politikaları — Her bir konuya kimlerin yayın yapabileceğini veya abone olabileceğini tanımlayın.
- 📝 Tam denetim kaydı — Güvenlik incelemeleri için eksiksiz izleme kaydı
Üretimde Kanıtlanmış
Birden Çok Programda Kullanıldı
Astute DDS, Avustralya, İngiltere ve müttefik ülkelerdeki önde gelen savunma şirketleri tarafından güvenilen bir kuruluştur:
| İhtisas | Uygulamalar |
|---|---|
| 🎖️ Zırhlı Araçlar | Mürettebat ekranları, sensör füzyonu, silah entegrasyonu |
| 🤖 Robotik ve Otonom Sistemler | İnsansız kara araçları, robotik platformlar, otonom navigasyon |
| 🛡️ Karşı-İHA'lar (CUAS) | Drone tespit, takip ve etkisiz hale getirme sistemleri |
| ✈️ Yer Kontrol İstasyonları | İHA komuta ve kontrolü, sensör verileri |
| 🚢 Deniz Sistemleri | Köprü ekranları, hasar kontrolü, navigasyon |
| 🏭 Eğitim ve Simülasyon | Sentetik ortamlar, faaliyet sonrası değerlendirme, bilgilendirme |
🎬 Demo Talep Edin
Astute DDS ve GVA sisteminin tamamını çalışırken görün. Sistemimiz hakkında daha fazla bilgi edinin veya şimdi bir demo talep edin.
Frequently Asked Questions
Astute DDS'yi benimserken geliştiricilerin en sık sorduğu sorular şunlardır:
1. Astute DDS nedir?
Astute DDS, OMG Veri Dağıtım Hizmetinin C++20 ile yazılmış bir uygulamasıdır.
(DDS) DCPS API, DDSI-RTPS 2.5 kablo protokolü, DDS-XTypes 1.3 tip sistemi,
DDS-Security 1.1/1.2 eklentileri ve IDL 4.2 içerir. Statik olarak teslim edilir.
libastutedds.a kütüphanesi (C, Python ve Rust bağlayıcıları dahil) ve aşağıdakilerle birlikte gelir:
astutedds-inspect teşhis arayüzü ve birlikte çalışabilir bir Shapes Demosu.
2. Bir konuya nasıl yayın yaparım ve abone olurum?
Önce bir DomainParticipant , sonra bir Topic ve ardından bir DataWriter (yayıncı tarafı) oluşturun.
veya DataReader (abone tarafı):
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);Başlangıç Kılavuzu › İlk Başvuru bölümüne bakın.
3. read() ve take() fonksiyonları arasındaki fark nedir?
-
read()fonksiyonu örnekleri döndürür ancak **bunları okuyucu önbelleğinde bırakır**, böylece daha sonraki çağrılar (veya aynı abonedeki diğer okuyucular) bunları tekrar okuyabilir. -
take()fonksiyonu örnekleri döndürür ve **bunları önbellekten siler**.
Konu, incelemek istediğiniz paylaşılan durumu temsil ediyorsa read() işlevini kullanın.
Tekrar tekrar; konu, takip etmek istediğiniz olayları temsil ettiğinde take() işlevini kullanın.
Sadece bir kez tüketin.
4. Geç abone olanlar neden daha erken örnek ürün almıyor?
Varsayılan olarak DURABILITY VOLATILE , bu nedenle bir abone olmadan önce yazılan örnekler
Eşleştirilen örnekler teslim edilmez. Geç katılanlara tarihi örnekler teslim etmek için,
Yazıcıyı ve eşleşen okuyucuları TRANSIENT_LOCAL ile yapılandırın.
dayanıklılık (ki bu da RELIABLE güvenilirlik gerektirir):
DataWriterQos qos;
writer->get_qos(qos);
qos.durability().kind = TRANSIENT_LOCAL_DURABILITY_QOS;
qos.reliability().kind = RELIABLE_RELIABILITY_QOS;
writer->set_qos(qos); Yazıcı yeniden başlatıldığında verilerin kalıcı olması için şunu kullanın:
Daimi Hizmet veya TRANSIENT / PERSISTENT
dayanıklılık çeşitleri.
5. RELIABILITY Hizmeti (QoS) ne işe yarar?
-
BEST_EFFORT(birçok yerleşik konu için varsayılan değer): İletim sırasında kaybolan örnekler yeniden iletilmez. En düşük ek yük. -
RELIABLE: Yazar, eşleşen her okuyucudan gelen onayları (ACKNACK/ kalp atışı) takip eder ve eksik sıra numaralarını tekrar iletir.
Okuyucu olayları takip eder veya tarih zaten doludur.
Güvenilirlik, yazar/okuyucu bazında değişir ve uyumlu olmalıdır: BEST_EFFORT
Okuyucu RELIABLE bir yazarla eşleşebilir, ancak bunun tersi mümkün değildir.
6. DURABILITY Hizmeti (DURABILITY QoS) ne işe yarar?
DURABILITY örneklerin okuyuculara teslim edilmek üzere saklanıp saklanmayacağını kontrol eder.Örnek yazıldıktan sonra eklenenler:
| Tür | Geç katılanlar için de geçerli mi? |
|---|---|
VOLATILE | HAYIR |
TRANSIENT_LOCAL | Evet, yazar hayatta olduğu sürece. |
TRANSIENT | Evet, yazarın tüm yaşamı boyunca (Kalıcılık Hizmeti aracılığıyla) |
PERSISTENT | Evet, işlem yeniden başlatmaları boyunca (disk üzerinde) |
7. HISTORY ve DURABILITY arasındaki fark nedir?
HISTORY ( KEEP_LAST(depth) veya KEEP_ALL ) kaç örneğin saklanacağını kontrol eder Yazıcı/okuyucu önbelleği her an veri tutar. DURABILITY bunun ne kadar süreyle geçerli olacağını kontrol eder.
Yazar, okuyuculara daha sonra eşleşecek örnekler sunar. Birlikte çalışırlar, ancak
Farklı sorunları çözmek: KEEP_ALL tek başına örneklerin kullanılabilir olmasını sağlamaz.
Geç katılanlara.
8. Alan adı kimliğini nasıl belirtirim?
create_participant fonksiyonuna ilk argüman olarak etki alanı kimliğini (domain ID) iletin:
auto dp = DomainParticipantFactory::get_instance()
->create_participant(42, PARTICIPANT_QOS_DEFAULT, nullptr, 0); Farklı alanlardaki katılımcılar birbirleriyle iletişim kurmazlar. DDSI-RTPS bağlantı noktası
7400 + 250 * domain_id formülü, kullanılan temel UDP portlarını belirler.
Keşif.
9. Yayıncım ve abonelerim neden birbirlerini keşfedemiyorlar?
Yaygın nedenler:
- Farklı alan adı kimlikleri — her iki katılımcı da aynı kimliği kullanmalıdır.
- Çoklu yayın engellendi — SPDP,
239.255.0.1adresinde UDP çoklu yayınını kullanıyor.
Varsayılan değer. Ana bilgisayar güvenlik duvarını kontrol edin ve IGMP snooping özelliğini etkinleştirin. - Yanlış ağ arayüzü — çoklu ağ arayüzüne sahip sunucularda
ASTUTEDDS_NETWORK_INTERFACE=ayarını yapın.ASTUTEDDS_NETWORK_INTERFACE=veya bunu keşif JSON/XML profilinde yapılandırın (bkz. JSON Keşif Yapılandırması ). - Uyumsuz QoS — 15. soruya bakın.
- Farklı taşıma protokolleri — her iki tarafın da UDPv4 (veya her ikisinin de UDPv6,
TCP, SHM).
ASTUTEDDS_LOG_LEVEL=trace kullanarak izleme kaydını etkinleştirin ve bir paketi inceleyin.
astutedds-inspect ile yakalama işlemi.
10. Hangi IDL özellikleri desteklenmektedir?
Paket içeriğinde bulunan astutedds-idl derleyicisi, OMG IDL 4.2'yi aşağıdaki özelliklerle birlikte uygulamaktadır:
- Temel veri tipleri (
boolean,octet,int8–uint64tamsayı tipleri,float/double/long double,char/wchar,string/wstring). - Yapılar, birleşimler, numaralandırmalar, bit maskeleri, tür tanımları.
- Sınırlandırılmış ve sınırsız diziler, diziler, haritalar.
-
@key,@id,@optional,@default,@range,@min,@max,@unit,@extensibility(FINAL|APPENDABLE|MUTABLE),@nested. - Sabitler ve
modulead alanları.
Oluşturulan C++ kodu, varsayılan olarak XCDR2'yi kullanır; birlikte çalışabilirlik için isteğe bağlı olarak XCDR1 de kullanılabilir.
11. Kendim yayınladığım örnekleri nasıl filtreleyebilirim?
İki seçenek:
- Katılımcı düzeyinde göz ardı et :
dp->ignore_publication(handle)çağrısını yapın.
Yerel yazıcınınInstanceHandle_tiletiyoruz. - Okuyucu geri çağırma işlevinde
SampleInfo::publication_handlekullanarak filtreleme yapın.
ve bunu yazarınızınget_instance_handle()fonksiyonuyla karşılaştırın.
İçerik filtrelenmiş bir konu, kendi kendine yayınlanan bir anahtar alanı da hariç tutabilir.
12. Konu başlıklarında hangi karakterlere izin verilir?
Konu adları, ASCII alfanümerik karakterler, _ ve / içerebilir.
Hiyerarşi ayırıcı. Uzunluk 256 karakterle sınırlıdır. Baştaki boşluklardan kaçının.
Rakamlar ve ayrılmış DDS yerleşik önekleri ( DCPS , dds ). Tür adları aşağıdaki gibidir.
Aynı kural.
13. Uzaktan yazıcı veya okuyucunun bağlantısının kesildiğini nasıl tespit ederim?
Bir DataReaderListener yükleyin ve on_subscription_matched yöntemini uygulayın.
on_liveliness_changed veya poll reader->get_subscription_matched_status() . current_count_changeEşlerden biri eşleşmediğinde alan negatiftir.
Canlılık, LIVELINESS Hizmeti (QoS) tarafından yönetilir.
kind = AUTOMATIC_LIVELINESS_QOS tespit etmek için bir lease_duration ile birlikteBelirli bir zaman dilimi içinde sessiz kalan akranlar.
14. Yeni veri geldiğinde nasıl geri bildirim alabilirim?
DATA_AVAILABLE_STATUS maskesiyle bir dinleyici ekleyin:
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 olayı hem yeni örnekler hem de örnek yaşam döngüsü için tetiklenir. Değişiklikler; referansı kaldırmadan önce her zaman SampleInfo::valid_data inceleyin.
Örnek yük.
15. "Uyumsuz Hizmet Kalitesi" ne anlama gelir?
Yazar ve okuyucu ancak her Talep/Sunulan Hizmet Kalitesi karşılandığında uyum sağlar.
uyumlu:
| Politika | Talep edilen ≤ Sunulan |
|---|---|
RELIABILITY | okuyucu ELİNDEN GELENİN BEST_EFFORT ≤ yazar RELIABLE |
DURABILITY | Okuyucu türü ≤ Yazıcı türü (spesifikasyon sıralamasında) |
DEADLINE | Okuma period ≥ yazma period |
LATENCY_BUDGET | Okuma duration ≥ yazma duration |
OWNERSHIP | Eşit olmalıdır ( SHARED veya EXCLUSIVE ). |
PARTITION | En az bir bölüm adının çakışması gerekir. |
on_offered_incompatible_qos / on_requested_incompatible_qos ifadelerini dinleyin.
Çalışma zamanında tam politika kimliğini bulmak için.
16. UDP veri paketinden daha büyük örnekleri nasıl gönderebilirim?
Astute DDS, yapılandırılan boyutlardan daha büyük örnekleri otomatik olarak parçalara ayırır.
fragment_size (IPv4 için varsayılan 1344 bayt) değerini kullanarak bunları yeniden birleştirir. DDSI-RTPS DATA_FRAG alt mesajlarını kullanan okuyucu. Güvenilirlik protokolü
Eksik parçaları, tüm örneği yeniden göndermeden kurtarır.
Çok büyük örnekler için (≥ 1 MB) işletim sistemi soket tamponlarını artırın:
sudo sysctl -w net.core.rmem_max=8388608
sudo sysctl -w net.core.wmem_max=8388608Yerel okuyucular için paylaşımlı bellek aktarımına geçmeyi de düşünebilirsiniz.
17. Hangi ağ arayüzünün kullanılacağını nasıl yapılandırırım?
Öncelik sırasına göre üç seçenek:
- Ortam değişkeni:
ASTUTEDDS_NETWORK_INTERFACE=eth0. - JSON keşif yapılandırması — bkz. JSON Keşif Yapılandırması .
- XML QoS profili — bkz. DDS-XML QoS Profilleri .
Hiçbir ayar yapılmamışsa, Astute DDS, döngüsel olmayan ilk arayüzü seçer.
Çoklu yayın özelliğine sahip adres.
18. Çoklu yayın desteği olmayan bir ağda Astute DDS kullanabilir miyim?
Evet. İki alternatif:
- Unicast SPDP eş listesi : Eş ana bilgisayar/bağlantı noktası çiftlerinin bir listesini sağlayın.
Keşif yapılandırması; Astute DDS, her bir eşe SPDP duyuruları gönderir. - TCP taşıma protokolü : Katılımcıyı TCP RTPS taşıma protokolüne geçirin.
UDP'yi tamamen engelleyen ortamlar. Bkz.
İzole ağlar arasında geçiş yapmak için DDS Alan Yönlendiricisi .
19. Düşük gecikme süresi için nasıl ayar yaparım?
- Her iki uçta da
KEEP_LAST(1)geçmişiyleRELIABLEgüvenilirliğini kullanın, böylece
Yeniden iletimler minimum düzeydedir. - Aynı mekânda bulunan katılımcılar için paylaşımlı bellek aktarımını etkinleştirin.
- CPU yakınlığı ile DDS iş parçacıklarını sabitleyin ve gerçek zamanlı zamanlama kullanın.
Yayıncı ve abone süreçlerinde (SCHED_FIFO) kullanılır. - UDP kullanarak Nagle'ı devre dışı bırakın (varsayılan).
- Ani yüklenmeleri absorbe etmek için soket tamponlarını artırın (16. soruya bakın).
- Toplu işlem gecikmesini devre dışı bırakmak için
LATENCY_BUDGET = 0olarak ayarlayın.
20. Büyük örneklemler yayınlarken neden gecikme artışları görüyorum?
Örnekler işletim sisteminin varsayılan soket arabelleğini (Linux'ta genellikle 208 KB) aştığında,
Çekirdek paketleri düşürür ve güvenilir protokolün yeniden iletmesi gerekir, bu da şuna neden olur:
Ani yükselişler. net.core.rmem_max / net.core.wmem_max değerini en azından şu değere yükseltmek:
Örneklem boyutu bunu çözüyor. Daha küçük bir fragment_size ile parçalama yapmayı düşünün.
kayıplı ağlarda.
21. İki DDS etki alanını nasıl birbirine bağlarım?
İki veya daha fazla etki alanını birbirine bağlayan bir hizmet olan Astute DDS Etki Alanı Yönlendiricisini kullanın.
Alan adları ve bunlar arasında yapılandırılmış konuları iletir, isteğe bağlı olarak.
Anahtar/içerik filtreleme ve QoS çevirisi. Bkz.
DDS Alan Yönlendiricisi .
22. Hangi dil seçenekleri mevcuttur?
| Dil | Durum | Notlar |
|---|---|---|
| C++20 | Stabil | Birincil API — libastutedds.a |
| C | Stabil | FFI için düz C API'si, bkz. include/astutedds/c/astutedds.h |
| Python | Stabil | pybind11 bağlamaları, CPython 3.10 – 3.13 |
| Pas | Beta | astutedds kütüphanesi (C API'si üzerinde güvenli bir sarmalayıcı) |
23. Hangi platformlar ve işletim sistemi sürümleri desteklenmektedir?
| Platform | Test edilmiş sürümler |
|---|---|
| Linux | Ubuntu 22.04 / 24.04, RHEL 9 / 10, AlmaLinux 9 / 10, Debian 12 |
| Windows | Windows 10, Windows 11, Windows Server 2022 |
Linux Python paketleri manylinux_2_28 (glibc ≥ 2.28) etiketiyle etiketlenmiştir ve çalıştırılır.
Uyumlu herhangi bir dağıtımda.
24. DDS Güvenliğini nasıl etkinleştiririm?
- Kimlik (X.509) ve izinler (imzalı XML) öğelerini sağlayın.
- Katılımcı özelliğinin QoS'sini Kimlik Doğrulama, Erişim Kontrolü ve
Kripto eklentisi özellikleri (CA sertifikası, kimlik sertifikası/anahtarı, izin dosyası,
yönetim dosyası). -
-DASTUTEDDS_ENABLE_SECURITY=ONparametresiyle oluşturulmuş Astute DDS'ye karşı bağlantı.
Uçtan uca talimatlar ve daha fazlası için DDS Güvenliği bölümüne bakın.
Yönetim/izin şablonu.
25. Yeniden başlatmalar arasında verileri nasıl koruyabilirim?
Alan adınızla birlikte Kalıcılık Hizmetini çalıştırın. Bu hizmet, aşağıdakilere abone olur:
yapılandırılmış TRANSIENT / PERSISTENT konular, örnekleri yerel olarak depolar.
Veritabanını (varsayılan olarak SQLite) kullanır ve bunları geç katılanlara yeniden yayınlar.
Aboneler — orijinal yazar ayrıldıktan sonra katılanlar da dahil.
Kalıcılık Hizmetine bakın.
26. Trafik kayıtlarını nasıl alıp tekrar oynatabilirim?
Bir etki alanını kaydetmek için birlikte gelen astutedds-record aracını kullanın.
.astdb dosyası ve astutedds-replay ile ayarlanabilir şekilde geri yayınlanıyor. Zaman ölçeklendirme. Kayıt, türe duyarlıdır ve dahili olarak XCDR2 kullanır. Bkz.
Kayıt ve Tekrar Oynatma .
27. Aboneleri bozmadan bir veri türünü nasıl geliştirebilirim?
IDL türünü @extensibility(MUTABLE) (veya APPENDABLE ) ile işaretleyin ve
Her üyeyi @id(N) ile etiketleyin. XCDR2 değiştirilebilir akışlar şunlara izin verir:
- Her iki uca da yeni üyeler eklemek.
- İsteğe bağlı üyeler kaldırılıyor.
- Üyelerin sıralaması yeniden düzenleniyor.
Uyumsuz üyeler, X-Types atanabilirlik kuralları aracılığıyla atlanır.
@extensibility(FINAL) düzeni kilitler ve ikili dosyalar kullanılırken mutlaka kullanılmalıdır.Eski XCDR1 okuyucularıyla uyumluluk önemlidir.
28. İçerik filtreli konuları nasıl kullanırım?
SQL benzeri bir filtre kullanarak normal bir konudan ContentFilteredTopic oluşturun.
İfadeyi oluşturun ve ona bir DataReader bağlayı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); Bant genişliğinden tasarruf etmek için filtre, mümkün olduğunda yazıcı tarafında değerlendirilir.
29. XML dosyasından QoS'yi nasıl yapılandırırım?
XmlQosLoader kullanarak bir DDS-XML profilini okuyun ve oluşturma işlemi sırasında uygulayın.
Varlıklar:
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); Şema ve çalışma detayları için DDS-XML QoS Profillerine bakın.
Örnekler.
30. Birlikte çalışabilirlik veya keşif sorunlarını nasıl giderebilirim?
- Keşfedilen bulguları görüntülemek için etki alanı üzerinde
astutedds-inspectçalıştırın.
Katılımcılar, sonuç noktaları ve eşleşme durumu gerçek zamanlı olarak. -
tcpdump -i any -w dds.pcap 'udp port 7400 or portrange 7400-7500'komutuyla trafiği yakalayın ve RTPS çözümleyicisi Wireshark'ta açın.
SPDP, SEDP ve kullanıcı verilerini çözümler. - İzleme günlüklerini etkinleştirin:
ASTUTEDDS_LOG_LEVEL=trace ASTUTEDDS_LOG_FILE=/tmp/astutedds.log. - Varlık kimliklerini ve bağlantı noktalarını doğrulayın:
- SPDP yazıcı/okuyucu:
00:01:00:c2/00:01:00:c7 - SEDP yayını:
00:00:03:c2/00:00:03:c7 - SEDP aboneliği:
00:00:04:c2/00:00:04:c7 - Temel port:
7400 + 250 × domain_id.
- SPDP yazıcı/okuyucu:
- Her iki tarafın da uyumlu satıcı kimliklerini ve protokol sürümünü duyurduğunu doğrulayın.
(DDSI-RTPS 2.5).