Сборка с 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 XX и всё, от чего он зависит
--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.
Проверьте себя
1. Что делает colcon?
AСоздаёт топики
BСобирает пакеты workspace в правильном порядке по зависимостям
CВизуализирует граф узлов
DУправляет моторами
2. Что нужно сделать сразу после colcon build, чтобы запустить свои узлы?
AПерезагрузить компьютер
Bsource install/setup.bash
CПереустановить ROS
DУдалить папку build
3. Зачем флаг --symlink-install?
AУскоряет сеть
BПозволяет видеть правки в Python-файлах без пересборки
CШифрует пакеты
DУдаляет зависимости