Сборка с colcon
Чтобы превратить исходники пакетов в работающие узлы, ROS 2 использует систему сборки colcon.
colcon — инструмент сборки ROS 2: он находит все пакеты в workspace, определяет порядок их сборки по зависимостям и собирает каждый.
Зачем отдельная система сборки
В реальном проекте пакеты зависят друг от друга: пакет навигации использует типы сообщений из вашего пакета интерфейсов. Значит, интерфейсы надо собрать раньше навигации. Делать это вручную — мучение. colcon сам строит граф зависимостей и собирает пакеты в правильном порядке, параллельно, где можно. Для Python-пакетов «сборка» — это скорее установка скриптов и регистрация узлов, для C++ — настоящая компиляция, но команда одна.
Основная команда
cd ~/ros2_ws
colcon build
# собрать только один пакет
colcon build --packages-select my_robot_driver
# режим разработки: правки в .py видны без пересборки
colcon build --symlink-installВывод:
Starting >>> my_robot_interfaces Finished <<< my_robot_interfaces [2.1s] Starting >>> my_robot_driver Finished <<< my_robot_driver [1.4s] Summary: 2 packages finished [3.6s]
После сборки — source
colcon кладёт результат в папку install. Чтобы система увидела ваши свежие узлы, эту папку нужно активировать:
source ~/ros2_ws/install/setup.bash
# теперь можно запускать свои узлы
ros2 run my_robot_driver drive_forwardПолезные флаги
| Флаг | Что делает |
--packages-select X | собрать только пакет X |
--packages-up-to X | X и всё, от чего он зависит |
--symlink-install | правки Python без пересборки |
--event-handlers console_direct+ | подробный вывод сборки |
Как работает под капотом
colcon сканирует src, читает package.xml каждого пакета и строит ориентированный граф зависимостей. Затем он выполняет топологическую сортировку: пакет собирается только после всех, от кого зависит. Независимые пакеты собираются параллельно в нескольких потоках. Для каждого пакета colcon вызывает подходящий бэкенд (ament_python или ament_cmake), а результат изолирует в build и устанавливает в install. Папка install — это самодостаточный overlay, который можно скопировать на робота.
Частые ошибки
- Запускать colcon build не из корня workspace. Его надо вызывать из
~/ros2_ws, а не из src. - Забыть source install/setup.bash. Сборка прошла, а
ros2 runне находит узел. - Циклические зависимости между пакетами. colcon не сможет определить порядок и выдаст ошибку.
Итоги
- colcon собирает все пакеты workspace в правильном порядке по зависимостям.
- Команда colcon build вызывается из корня рабочего пространства.
- --symlink-install ускоряет цикл правок для Python.
- После сборки обязательно source install/setup.bash.