Сетевой мост — это легкий узел 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
Сетевые протоколы реализованы как плагины библиотеки плагинов, позволяющие создавать произвольные интерфейсы с использованием абстрактного класса 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/).