Сеть 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.
Используйте ros2node
создать узел в области по умолчанию, которая использует ID 0
. Узлы связываются с другими узлами в той же области и не знают об узлах в других областях.
defaultNode = ros2node("/default_node")
defaultNode = ros2node with properties: Name: '/default_node' ID: 0
Используйте clear
удалить ссылку на узел, позволяя ему быть удаленным из сети ROS 2.
clear defaultNode
Чтобы создать узел в области не по умолчанию, явным образом задайте доменный 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 не предоставляется явным образом узлу или 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 рекламирует свое присутствие к другим узлам в той же области. Другие узлы отвечают на эту рекламу путем предоставления их информации новому узлу. Узлы с коммуникационными объектами как издатели и подписчики устанавливают связи с другими узлами, если у них есть соответствующие объекты с совместимыми настройками Quality of Service (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-адреса.