Сеть ROS 2 состоит из нескольких узлов ROS 2. В отличие от ROS, где мастер ROS облегчает коммуникацию путем отслеживания всех активных сущностей ROS, ROS 2 основана на стандарте распределения данных (DDS), который является сквозным промежуточным программным обеспечением, обеспечивающим такие функции, как обнаружение, сериализация и транспортировка. Эти функции соответствуют проекту принципам ROS 2, таким как распределенное обнаружение и контроль за различными опциями «Качество обслуживания» для транспортировки.
Для подключения к сети ROS 1 смотрите раздел Подключение к сети ROS.
Когда вы работаете с ROS 2, вы обычно следуете следующим шагам:
Подключение к сети ROS 2. Чтобы подключиться к сети ROS 2, необходимо создать узел ROS 2 в MATLAB, задающий идентификатор сетевой области.
Обмен данными. После подключения MATLAB обменивается данными с другими узлами ROS 2 в том же идентификаторе области через издателей и подписчиков.
Отсоединитесь от сети ROS 2. Очистка всех ссылок на узлы, издатели и подписчики удаляет MATLAB из сети ROS 2.
Использование ros2node
чтобы создать узел в области по умолчанию, который использует идентификатор 0
. Узлы взаимодействуют с другими узлами в той же области и не знают о узлах в других областях.
defaultNode = ros2node("/default_node")
defaultNode = ros2node with properties: Name: '/default_node' ID: 0
Использование clear
для удаления ссылки на узел, что позволяет удалить ее из сети ROS 2.
clear defaultNode
Чтобы создать узел в области, не используемой по умолчанию, явным образом укажите идентификатор домена как второй входной параметр для ros2node
. Ниже newDomainNode
создается в области, заданной идентификатором 25
.
newDomainNode = ros2node("/new_domain_node",25)
newDomainNode = ros2node with properties: Name: '/new_domain_node' ID: 25
Чтобы просмотреть сетевую информацию о конкретной области, укажите идентификатор в качестве параметра для ros2
функция. Следующая команда отображает все узлы с идентификатором области 25
.
ros2("node","list","DomainID",25)
/new_domain_node
Если идентификатор области явным образом не предоставляется узлу или ros2
команда, они используют значение ROS_DOMAIN_ID
переменная окружения по умолчанию. Использование getenv
чтобы увидеть текущее значение. Если эта переменная окружения не установлена или не имеет допустимого значения, идентификатор области по умолчанию 0
будет использоваться.
getenv("ROS_DOMAIN_ID")
ans = 0x0 empty char array
Можно задать ROS_DOMAIN_ID
использование setenv
команда.
setenv("ROS_DOMAIN_ID","25") envDomainNode = ros2node("/env_domain_node")
envDomainNode = ros2node with properties: Name: '/env_domain_node' ID: 25
Функция ros2 предоставляет информацию о сети, заданную этого переменного окружения. Использование ros2 node list
для просмотра узлов с идентификатором области 25
.
ros2 node list
/env_domain_node /new_domain_node
Сбросьте ROS_DOMAIN_ID
по умолчанию.
setenv("ROS_DOMAIN_ID","")
Чтобы подключиться к существующей сети ROS 2, создайте узел в нужной области. Сеть ROS 2 автоматически обнаруживает любые новые узлы, созданные в той же области, в механизме, называемом обнаружением.
После запуска каждый узел в ROS 2 объявляет свое присутствие другим узлам в той же области. Другие узлы отвечают на это объявление, предоставляя свою информацию новому узлу. Узлы с объектами связи, такими как издатели и абоненты, устанавливают соединения с другими узлами, если у них есть соответствующие объекты с совместимыми настройками качества обслуживания (QoS). Дополнительные сведения о параметрах QoS см. в разделе Управление политиками качества обслуживания в ROS 2.
Обнаружение - это текущий процесс, который позволяет новым узлам присоединяться к сети по мере ее создания. Каждый узел контролирует сеть ROS 2 и действует так же, как и ведущий узел ROS в сети ROS. Узлы также рекламируют их отсутствие другим узлам, когда они переходят в автономный режим.
Новый узел ROS 2 отправляет объявление существующим узлам. Существующие узлы отвечают на объявление и затем настраиваются на постоянную связь.
Подсеть является логическим разделом IP-сети на несколько небольших сегментов сети. Узлы ROS 2 могут взаимодействовать с другими узлами в той же подсети. Чтобы обнаружить узлы, существующие вне подсети, создайте файл DEFAULT_FASTRTPS_PROFILE.xml, чтобы сконфигурировать конкретную реализацию DDS, которую использует MATLAB. Добавьте список IP-адресов систем за пределами подсети, с которыми можно взаимодействовать внутри address
элементы. Обратите внимание, что для обмена данными между обеими системами они должны указывать адрес другой системы в своих соответствующих файлах DEFAULT_FASTRTPS_PROFILE.xml. Установите domainId
элемент к соответствующему значению для сети, которая используется для связи.
Сохраните этот файл в текущей рабочей директории MATLAB. Системы, использующие ROS 2 за пределами MATLAB, должны поместить этот файл в ту же директорию, из которого запускается приложение ROS 2. Ниже приведен пример DEFAULT_FASTRTPS_PROFILES.xml файла.
<?xml version="1.0" encoding="UTF-8" ?> <profiles> <participant profile_name="participant_win" is_default_profile="true"> <rtps> <builtin> <domainId>0</domainId> <initialPeersList> <locator> <kind>UDPv4</kind> <address>192.34.17.36</address> </locator> <locator> <kind>UDPv4</kind> <address>182.30.45.12</address> </locator> <locator> <kind>UDPv4</kind> <address>194.158.78.29</address> </locator> </initialPeersList> </builtin> </rtps> </participant> </profiles>
ROS 2 объявляет информацию узлам, присутствующим в системах, с IP-адресами, перечисленными в DEFAULT_FASTRTPS_PROFILES.xml. Информация от узлов на другом компьютере вне подсети не будет получена, если DEFAULT_FASTRTPS_PROFILES.xml либо отсутствует, либо не содержит правильных IP-адресов.