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
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose