Network Bridge عبارة عن عقدة ROS2 خفيفة الوزن مصممة للاتصال القوي بين الأنظمة الآلية عبر بروتوكولات الشبكة العشوائية. من خلال دعم بروتوكولات UDP وTCP، تعمل هذه الحزم على ربط موضوعات ROS2 بسلاسة عبر الشبكات، مما يسهل الاتصالات الفعالة عن بعد بين المحطة الأساسية والأنظمة الآلية، أو بين الأنظمة الآلية المتعددة.
ما عليك سوى استنساخ المستودع في مساحة عمل ROS2 الخاصة بك والبناء باستخدام colcon build
.
ros2 launch network_bridge tcp.launch.py
ros2 topic pub /tcp1/MyDefaultTopic std_msgs/msg/String "data: 'Hello World'"
ros2 topic echo /tcp2/MyDefaultTopic
ros2 launch network_bridge udp.launch.py
ros2 topic pub /udp1/MyDefaultTopic std_msgs/msg/String "data: 'Hello World'"
ros2 topic echo /udp2/MyDefaultTopic
ما عليك سوى إعداد معلمات واجهة الشبكة وإدراج الموضوعات التي تريدها للبدء. إذا كنت تستخدم UDP عبر البيانات الخلوية، فمن المستحسن إعداد VPN لتسهيل الاتصال. يرجى أيضًا ملاحظة أنه لا يحدث أي تشفير داخل هذه الحزمة. حاليًا، إذا كنت تريد التشفير، فيجب عليك استخدام VPN.
راجع config/Udp1.yaml
للحصول على وصف لجميع المعلمات، بالإضافة إلى أمثلة ملفات تكوين TCP.
توضح أمثلة التكوين التالية روبوتًا يرسل رسالة على /gps/fix
عبر UDP إلى محطة أساسية ستعيد بعد ذلك نشر الرسالة. يعمل هذا بسلاسة على جميع أنواع الرسائل، طالما أنها مبنية ومزودة بمصدر على طرفي الإرسال.
/udp_sender:
ros__parameters:
UdpInterface:
local_address: "192.168.1.2"
receive_port: 5001
remote_address: "192.168.1.3"
send_port: 5000
topics:
- "/gps/fix"
/udp_receiver:
ros__parameters:
UdpInterface:
local_address: "192.168.1.3"
receive_port: 5000
remote_address: "192.168.1.2"
send_port: 5001
يتم تنفيذ بروتوكولات الشبكة كمكونات إضافية لـ pluginlib، مما يسمح بإنشاء واجهات عشوائية باستخدام الفئة المجردة include/network_interfaces/network_interface_base.hpp
. يمكن نظريًا تنفيذ أي واجهة يمكنها إرسال واستقبال البايتات، بما في ذلك البروتوكولات التي تتجاوز الاتصال من نقطة إلى نقطة، مثل ZMQ. يرجى النظر في فتح طلب سحب إذا قمت بتطبيق واجهة شبكة جديدة.
يمكن تشغيل هذه العقدة باستخدام DEBUG على مستوى المسجل، والذي يوفر معلومات مفيدة لضبط معلمات الضغط ومعدل الرسائل التي لا معنى لها. لكل رسالة يتم إرسالها، سيقوم الجانب المتلقي بإخراج عدد البايتات المستلمة والحجم المضغوط بالبايتات وتأخر الإرسال.
تم تطوير هذه الحزمة للاستخدام في Indy Autonomous Challenge بواسطة فريق Purdue AI Racing. تم أخذ الإلهام من mqtt_client (https://github.com/ika-rwth-aachen/mqtt_client/).