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

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

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

  1. Соединитесь с сетью ROS. Чтобы соединиться с сетью ROS, можно создать ведущее устройство ROS в MATLAB или соединиться с существующим ведущим устройством ROS. В обоих случаях MATLAB также создаст и укажет свой собственный узел ROS (названный глобальным узлом MATLAB) с ведущим устройством. 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.65909 seconds.
Initializing ROS master on http://192.168.0.10:54516.
Initializing global node /matlab_global_node_62161 with NodeURI http://bat6312glnxa64:44267/

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

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

rosshutdown
Shutting down global node /matlab_global_node_62161 with NodeURI http://bat6312glnxa64:44267/
Shutting down ROS master on http://192.168.0.10:54516.

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

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