Сеть 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-адресов.
