Модуль 9
Пакеты, воркспейс, launch: проект на диске
6 блок(ов) теории · 12 заданий · 145 баллов
Проект ROS 2 на диске начинается с пакета — единицы сборки и распространения кода: папки, которую собирают, устанавливают и передают коллегам целиком. Лицо пакета — манифест package.xml: карточка с именем, версией, описанием и зависимостями, по которой сборщик узнаёт, что пакету нужно для жизни. Инструменты ROS 2 работают только с кодом, оформленным пакетом: «россыпь .py-файлов без манифеста» для них не существует.
Второй опорный файл — setup.py: файл установки python-пакета, где перечислены точки входа. Точка входа — строка вида telemetry_node = my_package.telemetry:main: «команда telemetry_node запускает функцию main из модуля telemetry внутри папки my_package». Именно по точкам входа ros2 run находит ноду по короткому имени. Внутри пакета: my_package/ — сам код, resource/ — служебный маркер имени пакета, test/ — автотесты.
Собирает проект colcon — консольный сборщик ROS 2. Команда colcon build, запущенная из корня воркспейса (рабочей папки проекта), собирает все пакеты, которые находит в src/, и готовит окружение: рядом появляются папки build/, install/ и log/, в install/ лежат собранные пакеты. Затем source install/setup.bash подключает окружение к текущей оболочке — и только после этого ros2 видит ваши пакеты. Забытый source — классическая ошибка новичка: сборка зелёная, а ros2 run отвечает «пакет не найден».
Отсюда рабочий круг джуна: написать код → описать точки входа в setup.py → colcon build → source install/setup.bash → ros2 run для одной ноды или ros2 launch для состава. Подправили код — круг повторяется: сборка, затем обновление окружения. Круг короткий и после пары дней практики выполняется на автомате; прыгать через шаги нельзя: ros2 run без build не найдёт пакет, а build без точек входа соберёт пакет без запускаемых нод.
ros2 run поднимает одну ноду, но настоящая система — состав. Launch-файл описывает запуск многих нод одной командой ros2 launch: кого поднять, с какими параметрами и ремапами — переименованиями топиков и нод. Симулятор АКБ, монитор и логгер «Модуля» — один файл, одна команда, одинаковый состав на любой машине: в этом сила launch как единицы запуска. Состав держат минимальным: в launch берут только нужные ноды, лишних не тащат.
И правило соседства: системные пакеты в /opt/ros не правят. Свой воркспейс перекрывает системный — это называют overlay: ROS 2 сначала ищет пакеты в вашем install/ и только потом в системе. Даже чтобы поправить чужой пакет, его исходники копируют в src/ своего воркспейса, правят там и собирают — системная версия остаётся нетронутой, а «откат» — это удалить пакет из своего воркспейса.
Задания
0/12 заданий · 0/145 баллов
1. Пакет: единица сборки и распространения
10 балл(ов)Словарь проекта начинается со слова «пакет». На собеседовании спросили: «Что такое пакет в ROS 2?» Выберите вариант, который верно называет природу пакета и объясняет, чем пакет не является: не хранилище системы, не сетевая схема и не архив сообщений.