Сеть ROS состоит из одного ведущего ROS и нескольких узлов ROS. Мастер ROS облегчает коммуникацию в сети ROS, отслеживая все активные сущности ROS. Каждый узел должен зарегистрироваться в ведущем ROS, чтобы иметь возможность связи с остальной частью сети. MATLAB ® может запустить мастер ROS, или мастер может быть запущен вне MATLAB (например, на другом компьютере).
Когда вы работаете с ROS, вы обычно следуете следующим шагам:
Подключение к сети ROS. Для подключения к сети ROS можно создать мастер ROS в MATLAB или подключиться к существующему мастеру ROS. В обоих случаях MATLAB также создает и регистрирует свой собственный узел ROS (называемый глобальным узлом MATLAB) с ведущим. The rosinit
функция управляет этим процессом.
Обмен данными. После подключения MATLAB обменивается данными с другими узлами ROS через издателей, подписчиков и сервисы.
Отсоединитесь от сети ROS. Вызовите rosshutdown
функция отключения MATLAB от сети ROS.
В этом примере показано, как:
Создайте мастер ROS в MATLAB
Подключение к внешнему мастеру ROS
Необходимые условия: Запуск с ROS
Для создания хозяина 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.
Вы также можете использовать 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. Синтаксисов, которые были объяснены в предыдущих разделах, должно быть достаточно для большинства вариантов использования.
Если аргументы не предоставлены 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. Если каждый узел знает адрес другого узла, обмен данными может быть установлен без участия ведущего узла.
См. раздел Обмен данными с ROS-издателями и подписчиками, чтобы исследовать издателей и подписчиков в ROS.