Подключение к сети ROS

Сеть ROS состоит из одного ведущего ROS и нескольких узлов ROS. Мастер ROS облегчает коммуникацию в сети ROS, отслеживая все активные сущности ROS. Каждый узел должен зарегистрироваться в ведущем ROS, чтобы иметь возможность связи с остальной частью сети. MATLAB ® может запустить мастер ROS, или мастер может быть запущен вне MATLAB (например, на другом компьютере).

Когда вы работаете с ROS, вы обычно следуете следующим шагам:

  1. Подключение к сети ROS. Для подключения к сети ROS можно создать мастер ROS в MATLAB или подключиться к существующему мастеру ROS. В обоих случаях MATLAB также создает и регистрирует свой собственный узел ROS (называемый глобальным узлом MATLAB) с ведущим. The rosinit функция управляет этим процессом.

  2. Обмен данными. После подключения MATLAB обменивается данными с другими узлами ROS через издателей, подписчиков и сервисы.

  3. Отсоединитесь от сети ROS. Вызовите rosshutdown функция отключения MATLAB от сети ROS.

В этом примере показано, как:

  • Создайте мастер ROS в MATLAB

  • Подключение к внешнему мастеру ROS

Необходимые условия: Запуск с ROS

Создайте мастер ROS в MATLAB

  • Для создания хозяина ROS в MATLAB вызовите rosinit без аргументов. Эта функция также создает глобальный узел, который MATLAB использует для связи с другими узлами в сети ROS.

rosinit
Launching ROS Core...
Done in 0.73811 seconds.
Initializing ROS master on http://192.168.0.10:53297.
Initializing global node /matlab_global_node_63546 with NodeURI http://bat6315glnxa64:37089/

Узлы ROS, внешние по отношению к MATLAB, теперь могут присоединяться к сети ROS. Они могут подключиться к мастеру ROS в MATLAB с помощью имени хоста или IP-адреса хоста-компьютера MATLAB.

Можно отключить мастер ROS и глобальный узел путем вызова rosshutdown.

rosshutdown
Shutting down global node /matlab_global_node_63546 with NodeURI http://bat6315glnxa64:37089/
Shutting down ROS master on http://192.168.0.10:53297.

Подключение к внешнему мастеру ROS

Вы также можете использовать rosinit команда для подключения к внешнему мастеру ROS (для примеров, работающих на роботе или виртуальной машине). Указать адрес мастера можно двумя способами: по IP-адресу или по имени хоста компьютера, на котором работает мастер.

После каждого вызова в rosinit, вы должны позвонить rosshutdown перед вызовом rosinit с другим синтаксисом. Для краткости эти вызовы к rosshutdown опущены в этих примерах.

'master_host' является примером имени хоста и '192.168.1.1' является примером IP-адреса внешнего хозяина ROS. Настройте эти адреса в зависимости от расположения внешнего хозяина в сети. Эти команды будут неудачными, если по указанным адресам не найден мастер.

rosinit('192.168.1.1')
rosinit('master_host')

Оба вызова на rosinit предположим, что мастер принимает сетевые подключения к порту 11311, который является стандартным ведущим портом ROS. Если мастер работает на другом порте, можно задать его как второй аргумент. Подключение к мастеру ROS, работающему по имени хоста master_host и порт 12000, используйте следующую команду:

rosinit('master_host',12000)

Если вы знаете весь унифицированный идентификатор ресурса (URI) ведущего, можно создать глобальный узел и соединиться с этим хозяином с помощью этого синтаксиса:

rosinit('http://192.168.1.1:12000')

Спецификация узла

В некоторых случаях компьютер может быть подключен к нескольким сетям и иметь несколько IP-адресов. Этот рисунок показывает пример.

Компьютер внизу слева запускается MATLAB и соединяется с двумя различными сетями. В одной подсети ее IP-адрес 73.195.120.50, а в другом - его IP 192.168.1.100. Этот компьютер хочет подключиться к мастеру ROS на компьютере TurtleBot ® по IP-адресу 192.168.1.1. В рамках регистрации в ведущем узле глобальный узел MATLAB должен указать IP-адрес или имя хоста, куда могут достигать другие узлы ROS. Все узлы TurtleBot будут использовать этот адрес для отправки данных на глобальный узел в MATLAB.

Когда rosinit вызывается с помощью IP-адреса ведущего, он пытается обнаружить сетевой интерфейс, используемый для связи с ведущим и использовать его в качестве IP-адреса для глобального узла. В случае сбоя автоматического обнаружения можно явным образом указать IP-адрес или имя хоста при помощи NodeHost Пара "имя-значение" в rosinit вызов. The NodeHost пара "имя-значение" может использоваться с любым другим уже показанным синтаксисом.

Эти команды рекламируют IP-адрес вашего компьютера в сети ROS следующим 192.168.1.100.

rosinit('192.168.1.1','NodeHost','192.168.1.100')
rosinit('http://192.168.1.1:11311','NodeHost','192.168.1.100')
rosinit('master_host','NodeHost','192.168.1.100')

Как только узел зарегистрирован в сети ROS, вы можете увидеть адрес, который он рекламирует с помощью команды rosnode info <nodename>. Имена всех зарегистрированных узлов можно увидеть по телефону rosnode list.

Переменные окружения ROS

В расширенных случаях использования можно хотеть задать адрес ведущего ROS и адрес вашего объявленного узла через стандартные переменные окружения ROS. Синтаксисов, которые были объяснены в предыдущих разделах, должно быть достаточно для большинства вариантов использования.

Если аргументы не предоставлены rosinitфункция также проверит значения стандартных переменных окружения ROS. Эти переменные ROS_MASTER_URI, ROS_HOSTNAME, и ROS_IP. Вы можете увидеть их текущие значения, используя getenv команда:

getenv('ROS_MASTER_URI')
getenv('ROS_HOSTNAME')
getenv('ROS_IP')

Вы можете задать эти переменные, используя setenv команда. После установки переменных окружения вызовите rosinit без аргументов. Адрес хозяина ROS определяется ROS_MASTER_URI, а объявленный адрес глобального узла задается ROS_IP или ROS_HOSTNAME. Если вы задаете дополнительные аргументы для rosinit, они переопределяют значения в переменных окружения.

setenv('ROS_MASTER_URI','http://192.168.1.1:11311')
setenv('ROS_IP','192.168.1.100')
rosinit

Вам не нужно устанавливать оба ROS_HOSTNAME и ROS_IP. Если оба заданы, ROS_HOSTNAME имеет приоритет.

Проверьте подключение

Для корректной работы соединения ROS необходимо убедиться, что все узлы могут взаимодействовать с ведущим узлом и друг с другом. Отдельные узлы должны взаимодействовать с мастером для регистрации подписчиков, издателей и сервисов. Они также должны иметь возможность общаться друг с другом для отправки и получения данных. Если ваша сеть ROS настроена неправильно, возможно возможность отправки данных и невозможность получения данных (или наоборот).

Эта схема показывает сеть ROS с одним ведущим ROS и двумя различными узлами, которые регистрируются в главном. Каждый узел связывается с ведущим, чтобы найти объявленный адрес другого узла в сети ROS. Если каждый узел знает адрес другого узла, обмен данными может быть установлен без участия ведущего узла.

Следующие шаги