exponenta event banner

Подключение к сети ROS 2

Сеть ROS 2 состоит из нескольких узлов ROS 2. В отличие от ROS, где мастер ROS облегчает связь, отслеживая все активные объекты ROS, ROS 2 основана на стандарте распределения данных (DDS), который является сквозным промежуточным программным обеспечением, обеспечивающим такие функции, как обнаружение, сериализация и транспортировка. Эти функции соответствуют принципам проектирования АФК 2, таким как распределенное обнаружение и управление различными вариантами «качества обслуживания» при транспортировке.

Сведения о подключении к сети ROS 1 см. в разделе Подключение к сети ROS.

При работе с ROS 2 обычно выполняются следующие действия:

  • Подключение к сети ROS 2. Для подключения к сети ROS 2 необходимо создать узел ROS 2 в MATLAB, определяющий идентификатор сетевого домена.

  • Обмен данными. После подключения MATLAB обменивается данными с другими узлами ROS 2 в том же идентификаторе домена через издателей и подписчиков.

  • Отключитесь от сети АФК 2. Удаление всех ссылок на узлы, издателей и подписчиков удаляет MATLAB из сети ROS 2.

Создание узла ROS 2 в домене по умолчанию

Использовать ros2node для создания узла в домене по умолчанию, который использует идентификатор 0. Узлы взаимодействуют с другими узлами в том же домене и не знают о узлах в других доменах.

defaultNode = ros2node("/default_node")
defaultNode = 
  ros2node with properties:

    Name: '/default_node'
      ID: 0

Использовать clear для удаления ссылки на узел, что позволяет удалить его из сети ROS 2.

clear defaultNode

Создание узла ROS 2 в другом домене

Чтобы создать узел в домене, отличном от домена по умолчанию, явно укажите идентификатор домена в качестве второго входного аргумента для 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 автоматически обнаруживает любые новые узлы, созданные в том же домене, в механизме, называемом обнаружением.

При запуске каждый узел в ROS 2 объявляет о своем присутствии другим узлам в том же домене. Другие узлы реагируют на это объявление, предоставляя свою информацию новому узлу. Узлы с объектами связи, такими как издатели и подписчики, устанавливают соединения с другими узлами, если они имеют соответствующие объекты с совместимыми настройками качества обслуживания (QoS). Дополнительные сведения о параметрах QoS см. в разделе Управление политиками качества обслуживания в ROS 2.

Обнаружение - это непрерывный процесс, который позволяет новым узлам присоединяться к сети по мере их создания. Каждый узел контролирует сеть ROS 2 и действует аналогично ведущему узлу ROS в сети ROS. Узлы также объявляют о своем отсутствии другим узлам при переходе в автономный режим.

Новый узел ROS 2 посылает свое объявление существующим узлам. Существующие узлы отвечают на объявление, а затем настраиваются для текущей связи.

Связь ROS вне подсети

Подсеть - это логический раздел 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-адресов.

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