Пакеты и workspace

Код в ROS живёт не россыпью файлов, а в пакетах внутри рабочего пространства.

Пакет (package) — минимальная единица организации и распространения кода в ROS: папка с узлами, описанием зависимостей и метаданными. Workspace — папка, где вы собираете свои пакеты.

Зачем пакеты

Пакет группирует связанный код: например, пакет my_robot_driver с драйверами моторов и лидара, пакет my_robot_nav с навигацией. Пакет — это то, что можно собрать, установить, переиспользовать и поделиться. Вся экосистема ROS — это тысячи пакетов. Когда вы ставите драйвер лидара через apt, вы ставите пакет. Когда пишете своего робота — создаёте свои пакеты.

Структура workspace

Рабочее пространство — это папка с подпапкой src, куда складывают исходники пакетов. После сборки рядом появляются служебные папки:

ros2_ws/                  <- рабочее пространство
  src/                    <- сюда кладут пакеты (исходники)
    my_robot_driver/
    my_robot_nav/
  build/                  <- промежуточные файлы сборки
  install/                <- результат сборки (его и source'ят)
  log/                    <- логи сборки

Создание пакета

Пакет на Python создают одной командой; она генерирует скелет с нужными файлами:

cd ~/ros2_ws/src
ros2 pkg create --build-type ament_python my_robot_driver \
  --dependencies rclpy geometry_msgs sensor_msgs

Появится папка пакета с package.xml (метаданные и зависимости), setup.py (как устанавливать и какие узлы регистрировать) и подпапкой с кодом.

Два типа сборки

ТипЯзыкГлавный файл
ament_pythonPythonsetup.py
ament_cmakeC++CMakeLists.txt

Как работает под капотом

Изоляция между пакетами достигается через overlay. Базовый ROS лежит в /opt/ros/.... Ваше рабочее пространство «накладывается» поверх него: когда вы делаете source install/setup.bash, ваши пакеты добавляются к путям поиска в дополнение к системным. Если ваш пакет имеет то же имя, что системный, ваш «перекрывает» его. Так можно безопасно дорабатывать чужие пакеты, не трогая установленные. Это многослойная модель: можно накладывать несколько workspace друг на друга.

Частые ошибки

  • Класть код вне src. colcon ищет пакеты именно в src рабочего пространства.
  • Не сделать source install/setup.bash после сборки. Свежесобранные узлы не будут видны.
  • Смешивать всё в один гигантский пакет. Теряется переиспользование; дробите по смыслу.

Итоги

  • Пакет — единица кода: узлы, зависимости, метаданные.
  • Workspace содержит src с пакетами; сборка создаёт build/install/log.
  • ament_python (setup.py) для Python, ament_cmake (CMake) для C++.
  • Overlay позволяет накладывать ваши пакеты поверх системных.
Проверьте себя
1. Что такое пакет (package) в ROS?
AОдин файл с кодом
BЕдиница организации кода: узлы, зависимости и метаданные
CТип сообщения
DСетевой протокол
2. В какую подпапку workspace кладут исходники пакетов?
Abuild
Binstall
Csrc
Dlog
3. Что даёт механизм overlay?
AУскоряет сеть
BПозволяет накладывать ваши пакеты поверх системных, перекрывая их
CШифрует сообщения
DСоздаёт топики