exponenta event banner

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

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

При работе с ROS обычно выполняются следующие действия:

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

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

  3. Отключитесь от сети АФК. Позвоните в 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 звоните. 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_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. Как только каждый узел знает адрес другого узла, обмен данными может быть установлен без участия ведущего узла.

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