Соединитесь с сетью 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, задающем сетевой доменный ID.

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

  • Отключитесь от сети ROS 2. Очищая все ссылки на узлы, издатели и подписчики удаляют MATLAB из сети ROS 2.

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

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

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

    Name: '/default_node'
      ID: 0

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

clear defaultNode

Создайте узел ROS 2 на различной области

Чтобы создать узел в области не по умолчанию, явным образом задайте доменный ID как второй входной параметр к ros2node. Ниже newDomainNode создается в области, заданной ID 25.

newDomainNode = ros2node("/new_domain_node",25)
newDomainNode = 
  ros2node with properties:

    Name: '/new_domain_node'
      ID: 25

Чтобы просмотреть сетевую информацию об определенной области, предоставьте ID в качестве параметра ros2 функция. Следующая команда отображает все узлы с доменным ID 25.

ros2("node","list","DomainID",25)
new_domain_node

Измените доменный ID по умолчанию

Если доменный ID не предоставляется явным образом узлу или ros2 команда, они используют значение ROS_DOMAIN_ID переменная окружения по умолчанию. Используйте getenv видеть текущее значение. Если та переменная окружения сброшена или не установлена в допустимое значение, доменный ID по умолчанию 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 просмотреть узлы с доменным ID 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 рекламирует свое присутствие к другим узлам в той же области. Другие узлы отвечают на эту рекламу путем предоставления их информации новому узлу. Узлы с коммуникационными объектами как издатели и подписчики устанавливают связи с другими узлами, если у них есть соответствующие объекты с совместимыми настройками Quality of Service (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-адреса.

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