Interoperabilitas ROS 2 dan DDS: Panduan Praktis untuk Integrasi Mulus

ROS 2 bergantung pada DDS untuk lapisan komunikasi dasarnya, namun mencapai interoperabilitas yang sempurna antara penerapan DDS asli dan ROS 2 masih dapat menimbulkan tantangan yang halus. Panduan ini menguraikan langkah praktis dan penyesuaian konfigurasi yang telah terbukti efektif sejak rilis ROS 2 “Bouncy Bolson” (Juli 2018), membantu tim menghindari jebakan umum dan memanfaatkan kekuatan penuh Connext DDS dalam ROS 2.
Keadaan Saat Ini ROS 2
ROS 2 adalah framework yang berkembang pesat, dan rilis masa depan mungkin memperkenalkan nuansa interoperabilitas tambahan. Namun, saat Anda menjalankan ROS 2 dengan lapisan RMW rmw_connext_cpp, Anda masih menggunakan stack Connext DDS asli. Itu berarti Anda mempertahankan semua fitur canggih Connext—seperti kontrol QoS yang detail dan dukungan transport multi—sambil menikmati abstrak tingkat lebih tinggi ROS 2.
Pengaturan Interoperabilitas Kunci
Nama Topik & Partisi
ROS 2 mengenkode namespace topik dalam nama topik atau partisi DDS. Semua topik pengguna ROS 2 berada di namespace “rt” (ROS Topic). Dalam DDS ini direpresentasikan sebagai:

Tipe Data Topik
Saat lapisan RMW Connext aktif, ROS 2 mengiklan setiap topik “rt/*” dengan tipe serialisasi generik. Akibatnya, aplikasi DDS murni yang mempublikasikan data asli yang strongly typed akan mengalami ketidakcocokan QoS dan tidak dapat terhubung.

Cara termudah adalah menekan publikasi type-code otomatis dari peserta ROS 2. Tambahkan file USER_QOS_PROFILES.xml ke direktori yang meluncurkan node ROS 2 Anda. Konfigurasi minimal yang menyembunyikan type code dan menonaktifkan pembagian type object terlihat seperti ini:

Silakan sesuaikan pengaturan keandalan sesuai kebutuhan aplikasi Anda; contoh di atas menggunakan “Best Effort” sebagai titik awal.
Ingat bahwa file QoS ini hanya berlaku untuk node ROS 2 yang dimulai dari direktori yang sama. Jika Anda membutuhkan konfigurasi terisolasi, letakkan file USER_QOS_PROFILES.xml terpisah di samping folder peluncuran setiap node.
Pemilihan Transport
Saat sistem DDS dan sistem ROS 2 berbagi jaringan yang sama, peringatan tentang transport yang hilang atau tidak didukung (misalnya, udpv6 tidak tersedia pada peserta yang hanya mendukung udpv4) dapat muncul. Untuk menghindari peringatan tersebut dan memastikan konektivitas yang andal, konfigurasikan preferensi transport secara eksplisit.
- Definisikan transport yang diizinkan dalam
USER_QOS_PROFILES.xml dengan menambahkan mask <transport_builtin> di dalam <participant_qos>:
<participant_qos> <transport_builtin> <mask>UDPV4|SHMEM</mask> </transport_builtin> </participant_qos>
- Buat file
NDDS_DISCOVERY_PEERS di direktori peluncuran dan daftar alamat peer yang ingin Anda temukan. Contoh yang dipisahkan koma yang menonaktifkan penemuan multicast adalah:
localhost,192.168.1.12,shmem://
Memilih Lapisan RMW dalam ROS 2
Selalu atur variabel lingkungan RMW_IMPLEMENTATION ke rmw_connext_cpp sebelum memulai node ROS 2:
export RMW_IMPLEMENTATION=rmw_connext_cpp
Atau teruskan secara inline saat meluncurkan node:
RMW_IMPLEMENTATION=rmw_connext_cpp ros2 run demo_nodes_cpp talker
Sequences & Strings Tanpa Batas
Beberapa topik ROS 2 berisi sequences atau strings tanpa batas. Jika aplikasi DDS Anda perlu mengonsumsi atau mempublikasikan topik ini, aktifkan “Unbounded Support” di generator kode DDS. Lihat dokumentasi RTI untuk cara mengaktifkan opsi ini selama pembuatan kode.

Langkah Selanjutnya dengan RTI
Kami akan membahas kesenjangan sementara dalam fitur ROS 2 saat ini—perekaman dan pemutaran ulang data topik—dalam bagian berikutnya dari seri ini. Sementara itu, jika Anda siap untuk menerapkan solusi ROS 2 yang andal dengan dukungan DDS, hubungi para ahli RTI kami. Kami akan membantu Anda menyempurnakan konfigurasi Anda dan mempercepat waktu ke pasar.