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

Сеть 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.

Создайте узел 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-адресов.

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