Установка ROS 2: дистрибутивы и Ubuntu

Готовим рабочее окружение: выбираем дистрибутив ROS 2 и ставим его на Ubuntu.

Дистрибутив ROS 2 — это именованный релиз (например, Humble, Jazzy), жёстко привязанный к конкретной версии Ubuntu и поддерживаемый несколько лет.

Что такое дистрибутив и почему версии важны

ROS 2 выходит регулярными релизами с именами в алфавитном порядке: Foxy, Galactic, Humble, Iron, Jazzy и так далее. Каждый дистрибутив собран и протестирован под определённую версию Ubuntu. Например, Humble рассчитан на Ubuntu 22.04, а Jazzy — на Ubuntu 24.04. Поставить дистрибутив на «не ту» Ubuntu официально нельзя — зависимости не совпадут.

Релизы делятся на обычные и LTS (Long-Term Support) — с долгой поддержкой. Для учебы и продакшна берут LTS-версии: они стабильны и поддерживаются годами. Humble и Jazzy — как раз LTS.

Почему именно Ubuntu

ROS 2 поддерживает Windows и macOS, но основная и наиболее обкатанная платформа — Ubuntu Linux. Подавляющее большинство пакетов, драйверов и инструкций пишут именно под неё. Если у вас Windows или Mac, проще всего поднять Ubuntu в виртуальной машине или, для реального робота, на Raspberry Pi с Ubuntu.

Установка через apt

Рекомендуемый способ — установка из официальных бинарных пакетов через менеджер apt. Схема такая: добавляем репозиторий ROS, обновляем список пакетов и ставим нужный набор. Команды ниже иллюстрируют логику (точные строки берите из официальной инструкции выбранного дистрибутива).

# Обновить систему
sudo apt update && sudo apt upgrade -y

# Поставить полный набор ROS 2 (пример для Jazzy)
sudo apt install ros-jazzy-desktop -y

Пакет ros-jazzy-desktop ставит «полный комплект»: ядро, инструменты, RViz, демо. Есть и облегчённый ros-jazzy-ros-base — без графических инструментов, для роботов без монитора.

Настройка окружения: source

После установки ROS не доступен в терминале сам по себе — его нужно «активировать» в текущей сессии командой source. Она добавляет переменные окружения, чтобы система знала, где лежат команды ros2 и пакеты.

# Активировать ROS 2 в текущем терминале
source /opt/ros/jazzy/setup.bash

# Чтобы не делать это каждый раз, добавить в ~/.bashrc
echo "source /opt/ros/jazzy/setup.bash" >> ~/.bashrc

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

Скрипт setup.bash прописывает переменные окружения: PATH (где искать команду ros2), AMENT_PREFIX_PATH (где лежат пакеты), ROS_DISTRO (какой дистрибутив активен). Ещё важна переменная ROS_DOMAIN_ID — это число, которое изолирует «домены» discovery. Узлы с одинаковым ROS_DOMAIN_ID видят друг друга, с разными — нет. Это удобно, когда в одной сети несколько независимых роботов или несколько студентов на одном Wi-Fi.

Проверка установки

ROS 2 поставляется с демонстрационными узлами. Классическая проверка — запустить болтуна и слушателя в двух терминалах.

# Терминал 1
ros2 run demo_nodes_cpp talker

# Терминал 2
ros2 run demo_nodes_py listener

Вывод (терминал 2):

[INFO] [listener]: I heard: [Hello World: 1]
[INFO] [listener]: I heard: [Hello World: 2]
[INFO] [listener]: I heard: [Hello World: 3]

Если слушатель печатает то, что шлёт болтун — установка и связь работают.

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

  • Несовпадение Ubuntu и дистрибутива. Jazzy не встанет на 22.04, Humble — на 24.04.
  • Забыть source. «command not found: ros2» почти всегда означает, что окружение не активировано.
  • Разный ROS_DOMAIN_ID. Узлы не видят друг друга, хотя оба запущены — проверьте, что домен одинаковый.

Итоги

  • Дистрибутив ROS 2 привязан к конкретной версии Ubuntu; для работы берут LTS (Humble, Jazzy).
  • Ставят через apt; desktop — полный набор, ros-base — без графики.
  • Перед использованием окружение нужно активировать через source.
  • ROS_DOMAIN_ID изолирует роботов в одной сети.
Проверьте себя
1. С чем жёстко связан дистрибутив ROS 2?
AС маркой робота
BС версией Ubuntu
CС языком программирования
DС моделью лидара
2. Что делает команда source /opt/ros/.../setup.bash?
AУстанавливает ROS заново
BАктивирует окружение ROS в текущем терминале
CУдаляет ROS
DЗапускает робота
3. Зачем нужен ROS_DOMAIN_ID?
AЧтобы ускорить узлы
BЧтобы изолировать наборы узлов в одной сети друг от друга
CЧтобы выбрать язык
DЧтобы задать имя робота