ROS2 использует Fast DDS Discovery Server в качестве протокола обнаружения.
ROS2 использует Fast DDS Discovery Server в качестве протокола обнаружения.

фон

В современных системах робототехники и автоматизации быстрые и надежные механизмы обмена сообщениями являются ключом к эффективной коммуникации. Будучи превосходной операционной системой для роботов, ROS2 представляет расширенные механизмы связи и архитектуру. Среди них сервер обнаружения Fast DDS (ранее Fast RTPS) может использоваться в качестве протокола обнаружения посредством настройки, обеспечивая возможность обнаружения узлов и доставки сообщений в сети. Система ROS2 более эффективный и надежный метод.

Fast DDS Discovery Server — это коммуникационная архитектура, основанная на протоколе DDS (служба распространения данных), разработанная eProsima. В традиционной модели Pub/Sub обнаружение узлов обычно выполняется посредством широковещательной или многоадресной рассылки. Когда масштаб системы увеличивается, этот метод приведет к широковещательным штормам в сети, что повлияет на эффективность и стабильность связи. Discovery Server меняет эту модель и управляет процессом обнаружения узлов через один или несколько центральных серверов, тем самым значительно сокращая количество сообщений об обнаружении в сети и улучшая масштабируемость и эффективность всей системы.

Целью этой статьи является анализ принципов и характеристик сервера Fast DDS Discovery и способов его использования в ROS2 для оптимизации обнаружения узлов и передачи данных.

Как работает сервер Fast DDS Discovery

В архитектуре Fast DDS Discovery Server Discovery Server отвечает за сбор информации обо всех узлах системы и поддержание этой информации. Когда присоединяется новый узел, ему необходимо обмениваться метаданными только с Discovery Server, а не с каждым существующим узлом по отдельности, что снижает использование полосы пропускания сети и общую нагрузку на систему. Кроме того, когда узлам необходимо взаимодействовать друг с другом, они могут получить информацию друг о друге, запросив сервер Discovery, а затем напрямую установить коммуникационное соединение.

На основе описанной выше архитектуры Fast DDS имеет следующие характеристики:

  1. Улучшение масштабируемости. Благодаря механизму централизованного обнаружения узлов можно эффективно управлять сотнями или тысячами узлов, что значительно повышает масштабируемость системы.
  2. Снижение потребления ресурсов: широковещательные и многоадресные сообщения в сети сокращаются, что значительно снижает пропускную способность и потребление ресурсов обработки.
  3. Поддержка сложной топологии сети: возможность поддержки нескольких сетевых структур.,исуществоватьсложная сетьсреда Средняя и стабильная работа,Например, работа в подсетях.
  4. Высокая гибкость и настраиваемость: предоставляет множество вариантов конфигурации, и пользователи могут выполнять подробные настройки в соответствии со своими потребностями, чтобы адаптироваться к различным сценариям применения.

Практические случаи

среда

ubuntu Сервер 20.04, установлена ​​ROS2 galacticВерсия。(еслииспользоватьsudo apt install ros-galactic-desktopУстановитьROS2,Вы можете напрямую выполнить следующее руководство,еслииспользоватьsudo apt install ros-galactic-ros-baseУстановитьROS2,则需要额外Установитьsudo apt install ros-galactic-rmw-fastrtps-cpp

существовать~/.bashrcДобавьте строку в:source /opt/ros/galactic/setup.bash

Язык кода:bash
копировать
ifconfig
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        inet6 fe80::42:56ff:fef2:94b9  prefixlen 64  scopeid 0x20<link>
        ether 02:42:56:f2:94:b9  txqueuelen 0  (Ethernet)
        RX packets 19113  bytes 11375364 (11.3 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2179  bytes 352756 (352.7 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 549822  bytes 172821223 (172.8 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 549822  bytes 172821223 (172.8 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

vethe0caf8a: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::78fe:72ff:fe94:db60  prefixlen 64  scopeid 0x20<link>
        ether 7a:fe:72:94:db:60  txqueuelen 0  (Ethernet)
        RX packets 19123  bytes 11643286 (11.6 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2256  bytes 361105 (361.1 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

wlp0s20f3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.16.15.37  netmask 255.255.252.0  broadcast 172.16.15.255
        inet6 fe80::3fc3:8152:fab9:bccb  prefixlen 64  scopeid 0x20<link>
        ether 4c:03:4f:65:86:cd  txqueuelen 1000  (Ethernet)
        RX packets 4739660  bytes 4342172075 (4.3 GB)
        RX errors 0  dropped 12908  overruns 0  frame 0
        TX packets 1188329  bytes 311106346 (311.1 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

fastdds discovery --server-id 0

Примечание: fastdds Discovery --help может получить инструкции по использованию.

Язык кода:bash
копировать
eProsima Версия инструмента Server-Client Discovery Assistant Builder 1.0.0

Как использовать: fastdds discovery -i {0-255} [необязательный параметр]
Распространенные варианты:
  -h  --help       Отображение справочной информации.

  -i  --server-id  Обязательный уникальный идентификатор сервера. Указать ROS_DISCOVERY_SERVER Местоположение сервера, отсчитываемое от нуля, в переменной среды.

  -l  --ip-address Интерфейс, выбранный сервером для прослушивания клиентов. По умолчанию любое (0.0.0.0).

  -p  --port       Выбранный клиент для прослушивания UDP порт. По умолчанию 11811

  -b  --backup     Создание сервера, связанного с файлом резервной копии.

Пример:
      1. использовать id для 0 Запуск сервера по умолчанию (ROS_DISCOVERY_SERVER первый включен)
         Слушайте все доступные интерфейсы UDP порт 11811. На каждой машине может быть только один
         Сервер использует значение по умолчанию.

      $ fastdds discovery -i 0

      2. использовать id для 1 Запуск сервера по умолчанию (ROS_DISCOVERY_SERVER второй)
         существовать localhost Монитор включен,ииспользовать UDP порт 14520. только localhost клиент
         能够использовать ROS_DISCOVERY_SERVER=;127.0.0.1:14520 Достичь сервера

      $ fastdds discovery -i 1 -l 127.0.0.1 -p 14520

      3. использовать id для 3 Запуск сервера по умолчанию (ROS_DISCOVERY_SERVER третий выше)
         соответственносуществовать Wi-Fi (192.168.36.34) Сумма Ethernet (172.20.96.1) локальный
         Слушайте интерфейс, UDP портсоответственнодля 8783 и 51083
         (Адрес ипорт был составлен для примера).

      $ fastdds discovery -i 1 -l 192.168.36.34 -p 14520 -l 172.20.96.1 -p
      51083

      4. использовать id для 4 Запуск сервера по умолчанию (ROS_DISCOVERY_SERVER четвертый выше)
         существовать 172.30.144.1 Слушай, UDP портдля 12345 и обеспечивает
         документы. Если сервер выйдет из строя, он автоматически возобновит свою работу.
         предыдущее состояние.

      $ fastdds discovery -i 1 -l 172.30.144.1 -p 12345 -b

В трех других окнах терминала выполните:

Язык кода:bash
копировать
# первое окно
export RMW_IMPLEMENTATION=rmw_fastrtps_cpp
export ROS_DOMAIN_ID=0 # Нет необходимости писать
export ROS_DISCOVERY_SERVER=172.16.15.37:11811

ros2 run demo_nodes_cpp listener --ros-args --remap __node:=listener_discovery_server
Язык кода:bash
копировать
# второе окно
export RMW_IMPLEMENTATION=rmw_fastrtps_cpp
export ROS_DOMAIN_ID=0 # Нет необходимости писать
export ROS_DISCOVERY_SERVER=172.16.15.37:11811

ros2 run demo_nodes_cpp talker --ros-args --remap __node:=talker_discovery_server
Язык кода:bash
копировать
# третье окно

ros2 run demo_nodes_cpp listener --ros-args --remap __node:=simple_listener
Язык кода:bash
копировать
# четвертое окно

ros2 run demo_nodes_cpp talker --ros-args --remap __node:=simple_talker

Среди них первое окно будет получать сообщения из второго окна, а третье окно будет получать сообщения из четвертого окна.

boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода