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