Знакомство с ROS2. Часть 2. Ключевые концепции: пакеты, рабочие пространства, наложение

Знакомство с ROS2. Часть 2. Ключевые концепции: пакеты, рабочие пространства, наложение

Что такое пакет (Package)?

Пакет — это контейнер исходного кода, разработанного в ROS 2.

Пакет можно создать самостоятельно, загрузить из репозиториев или установить в систему с помощью менеджера пакетов.

Такая организация позволяет легко делиться разработанным кодом с другими членами команды или сообществом ROS 2.

По сути, пакеты ROS 2 — это модульные единицы программного обеспечения, содержащие ноды, библиотеки и конфигурационные файлы, что обеспечивает модульность и возможность повторного использования. ROS 2 в основном поддерживает два типа пакетов: C++ и Python.

Впрочем, члены сообщества ROS 2 создали дополнительные клиентские библиотеки для Android, C#, Rust и других языков.Пакет может содержать несколько нод, организованных в разных исходных файлах.

Несколько нод могут быть объединены в одном пакете ROS 2, что позволяет модульно разрабатывать роботизированные приложения.

Пакет создается с помощью инструментов командной строки ROS 2.

Кроме того, пакет может содержать как обязательные, так и необязательные файлы или директории.Простейшая структура пакета ROS 2, созданного для размещения нод Python, выглядит так:Plaintext

wtf_package/
    setup.py
    package.xml
    resource/wtf_package

Эти файлы обязательны для идентификации пакета ROS 2, и их содержимое используется следующим образом:

  • package.xml: файл, содержащий метаинформацию о пакете, такую как информация о пакете, авторах, лицензиях и зависимостях.

  • setup.py: содержит инструкции по установке пакета.

  • setup.cfg: требуется, когда пакет содержит исполняемые файлы, чтобы ROS 2 мог их найти.

  • resource/<имя_пакета>: директория с тем же именем, что и наш пакет, используемая инструментами ROS 2 для поиска пакета в системе. Однако создание пакета только с этими файлами бесполезно, поскольку в нем нет конфигурационных или исполняемых файлов.

Помимо указанных файлов, пакет ROS 2 может содержать следующие ключевые элементы:

  • Ноды: отдельные процессы, выполняющие определенные задачи в роботизированной системе. Они представлены файлами реализации (например, написанными на C++, Python), определяющими функциональность нод и других компонентов.

  • Файлы запуска: конфигурационные файлы для запуска нескольких нод и установки их параметров.

  • Конфигурационные файлы: файлы, определяющие параметры, настройки или другие конфигурации, используемые нодами.

  • Зависимости: внешние библиотеки или пакеты, необходимые для функционирования пакета.

  • Документация: описания, инструкции и руководства по использованию пакета и его компонентов.

  • Тесты: модульные тесты, интеграционные тесты или другие тестовые скрипты для обеспечения корректности и надежности пакета. При реализации вышеупомянутых моделей коммуникации пакет ROS 2 может содержать все необходимые файлы для реализации интерфейсов связи:

  • Файлы сообщений (.msg): определяют структуру данных, которыми обмениваются ноды. Сообщения могут представлять показания датчиков, команды управления или любой другой тип данных, передаваемых между компонентами роботизированной системы.

  • Файлы сервисов (.srv): определяют модель коммуникации «запрос-ответ» между узлами. Сервисы позволяют узлам предоставлять функциональность, которую могут вызывать другие ноды, обеспечивая синхронную коммуникацию.

  • Файлы действий (.action): определяют более сложную модель коммуникации, чем сервисы, позволяющую асинхронное, целеориентированное поведение.

Рабочее пространство (Workspace)

Рабочее пространство — это не что иное, как директория, в которой расположены все пакеты ROS 2.

Эта директория также содержит файлы, генерируемые во время установки и компиляции нового программного обеспечения. В этом контексте из рабочего пространства пакеты ROS 2 собираются, устанавливаются и управляются.

Конечно, рабочее пространство ROS 2 может содержать несколько пакетов ROS 2, даже написанных на разных языках программирования.

Также в этом случае файлы и поддиректории, содержащиеся в рабочем пространстве, не строго определены.

Общая структура и основные файлы рабочего пространства выглядят следующим образом:Plaintext

wtf_worskapce/
    build/
    install/
        setup.bash
    log/
    src/
        pkg1/
        pkg2/
    CmakeLists.txt

Значение каждой директории и файла:

  • build: директория, содержащая артефакты сборки, генерируемые в процессе компиляции.

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

  • log: директория, где хранятся файлы журналов, генерируемые во время сборки и выполнения.

  • src: исходная директория для пакетов ROS 2. Каждая поддиректория соответствует пакету ROS 2, содержащему файлы исходного кода, конфигурационные файлы и другие ресурсы, специфичные для пакета.

  • CMakeLists.txt: верхнеуровневый скрипт сборки CMake, который настраивает процесс сборки для всего рабочего пространства и указывает зависимости между пакетами.

  • setup.bash: скрипт, используемый для настройки переменных окружения для рабочего пространства ROS 2. Обычно он подключается перед работой с командами и инструментами ROS 2. Перед запуском узлов ROS 2 рабочее пространство, в котором находится пакет, содержащий узел, должно быть правильно подключено (активировано), чтобы проинформировать операционную систему о его доступности.

Рабочее пространство не уникально. В одной системе могут сосуществовать несколько рабочих пространств.

Чтобы обеспечить сосуществование различных рабочих пространств в одной системе, необходимо ввести концепцию наложения (overlay).

Наложение (overlay)

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

Это позволяет расширять или модифицировать функциональность существующих пакетов без прямого изменения их исходного кода.

Вот как работает наложение в рабочем пространстве ROS 2:

  • Несколько рабочих пространств: в нашей системе может быть несколько рабочих пространств ROS 2. Каждое рабочее пространство — это структура директорий, содержащая пакеты ROS 2.

  • Порядок приоритета: при выполнении команд ROS 2 пакеты в активном рабочем пространстве имеют приоритет. Если пакет с одним и тем же именем существует в нескольких рабочих пространствах, будет использоваться тот, который находится в активном рабочем пространстве.

  • Наложение: мы можем наложить одно рабочее пространство поверх другого. Это означает, что пакеты из накладываемого рабочего пространства используются вместе с пакетами из базового рабочего пространства. Если пакет существует как в накладываемом, так и в базовом рабочем пространстве, приоритет имеет пакет из накладываемого рабочего пространства.


Содержание

  1. Установка

  2. Установка на Windows и Ubuntu

  3. Установка на Raspberry Pi

  4. Ключевые концепции:

  5. Нода, топик, издатель, подписчик, сервисы и действия

  6. Пакеты, рабочие пространства, наложение

  7. Практикум: cоздаем систему издатель-подписчик

  8. Практикум: управляем двигателем с помощью Raspberry Pi