Skip to content

Связь в ROS между нодами

Мастер (Master), Мастер-Нода

Мастер выполняет роль сервера имен для возможности подключения между собой различных нод. Команда roscore запускает сервер мастера, и после этого к нему могут подключиться и зарегистрироваться ноды ROS. Связь между нодами (обмен сообщениями) невозможна без запущенного мастера. При запуске ROS roscore мастер будет запущен по адресу URI, установленным в переменной окружения ROS_MASTER_URI. По умолчанию адрес использует IP-адрес локального ПК и номер порта 11311.

Нода (Node)

Понятие ноды относится к наименьшей «рабочей» единице, используемой в ROS. Можно провести аналогию с одной исполняемой программой. ROS рекомендует создать одну ноду для каждой задачи, что позволить легче использовать ее в других проектах. При запуске нода регистрирует информацию о себе на мастере (название ноды, типы обрабатываемых сообщений). Зарегистрированная нода может взаимодействовать с другими нодами (получать и отправлять запросы). Важно отметить, что обмен сообщениями между нодами работает без участия мастера (соединение между нодами происходит напрямую). Мастер обеспечивает только единое пространство имен для решения вопроса, куда подключиться к конкретной ноде. Адрес запуска ноды берется из переменной окружения ROS_HOSTNAME, которая должна быть определена до запуска. Порт устанавливается на произвольное уникальное значение.

Пакет (Package)

Пакет является основной единицей ROS. Любое приложение ROS оформляется в пакет, в котором определяются: конфигурация пакета, ноды, необходимые для работы пакета, зависимости от других пакетов ROS. Работа с пакетами ROS очень похожа на работу с пакетами Linux. Пакет ROS можно как поставить готовым из репозитория пакетов, так и скачать и скомпилировать из исходного кода. Поиск доступных пакетов ROS возможен командой apt search ros-noetic.

Сообщение (Message)

Ноды отправляют и принимают данные между собой, согласно заданному формату. Эти данные называют Сообщения, а описание – Типом Сообщения. Сообщения могут быть как простых типов (integer, float, boolean), так и состоять из сложных структур, содержащих вложенные сообщения и массивы сообщений. Например, для сообщения с координатами объекта (XYZ) есть существующий тип сообщения geometry_msgs/Point.msg, который описывается:

float64 x

float64 y

float64 z

Топик (Topic), модель Издатель и Подписчик

Топик (Topic) --- это один из видов обмена сообщениями, который буквально похож на тему в разговоре. Нода издателя (publisher) сначала регистрирует свою тему на мастере, а затем начинает публикацию сообщений в эту тему (топик). Узлы подписчиков, которые хотят получать информацию из этой темы (топика), при помощи мастера получают адрес этой темы и далее получают сообщения из этого топика.

Издатель (Publisher)

Издателем называется процесс, который рассылает сообщения в рамках созданного топика для других нод. Одна нода может содержать несколько издателей, публикующих данные в разные топики.

Подписчик (Subscriber)

Подписчиком (Subscriber) называется процесс, который получает сообщения из определенного топика (Topic). Подписчик (Subscriber) регистрируется на Мастере (Master), указывая, какие топики Подписчик (Subscriber) хочет получать. После этого Издатель (Publisher) начинает отправлять сообщения подписчику. Связь с топиком для подписчика является асинхронной (издатель публикует сообщения вне зависимости от статуса подписчиков). Этот тип взаимодействия удобно применять для работы с датчиками, которые непрерывно передают полученные значения.

Сервис (Service), Сервис Клиент и Сервис Сервер

Сервис --- это модель коммуникации, работающая по принципу синхроной двунаправленной связи между клиентом (Service Client), который запрашивает данные и сервером (Service Server), который отвечает на запросы.

Сервис Сервер (Service Server)

«Сервис Сервер» --- это узел коммуникации (процесс), который получает запрос, обрабатывает данные и передает обратно ответ. Запрос и ответ представляют собой обычное Сообщение (Message).

Сервис Клиент (Service Client)

Сервис Клиент --- это узел коммуникации (процесс), который создает запрос на Сервис Сервере (Service Server) и получает ответ после выполнения запроса. Данная модель взаимодействия применяется для удаленного выполнения различных операций в рамках разных нод.

Действие (Action), Action Goal, Action Result, Action Feedback

Действие представляет собой модель связи, используемую для асинхронной двунаправленной связи. Действие используется там, где требуется больше времени для ответа после получения запроса, и промежуточные ответы требуются до тех пор, пока результат не будет достигнут. Структура протокола Действия (Action) похожа на структуру Сервис (Service), однако в протокол внесены дополнительные параметры: задача (Action Goal), обратная связь (Action Feedback), результат (Action Result).