Соединитесь с сетью ROS

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

Когда вы будете работать с ROS, вы будете обычно выполнять эти шаги:

  • Соединитесь с сетью ROS. Чтобы соединиться с сетью ROS, можно создать ведущее устройство ROS в MATLAB или соединиться с существующим ведущим устройством ROS. В обоих случаях MATLAB также создаст и укажет свой собственный узел ROS (названный MATLAB "глобальный узел") с ведущим устройством. Функция rosinit справляется с этим процессом.

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

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

Этот пример показывает вам как:

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

  • Соединитесь с внешним ведущим устройством ROS

Предпосылки: Запуск с ROS

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

  • Чтобы создать ведущее устройство ROS в MATLAB, вызовите rosinit без любых аргументов. Это также создаст "глобальный узел", который MATLAB будет использовать, чтобы связаться с другими узлами в сети ROS.

rosinit
Initializing ROS master on http://bat6230glnxa64:45251/.
Initializing global node /matlab_global_node_56181 with NodeURI http://bat6230glnxa64:40419/

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

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

rosshutdown
Shutting down global node /matlab_global_node_56181 with NodeURI http://bat6230glnxa64:40419/
Shutting down ROS master on http://bat6230glnxa64:45251/.

Соединитесь с внешним ведущим устройством 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. Все предыдущие методы для вызова 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 NODE. УЗЕЛ является именем узла в сети ROS. Вы видите имена всех зарегистрированных узлов путем вызова 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. Если каждый узел знает адрес другого узла, обмен данными может быть установлен без участия ведущего устройства.

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