Пакеты и 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_python | Python | setup.py |
| ament_cmake | C++ | 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 позволяет накладывать ваши пакеты поверх системных.