Зачем Docker?
ROS 2 устанавливается в контейнер с Ubuntu 24.04, независимо от вашей хостовой ОС. Хост может быть любой: Linux, macOS или Windows (через WSL2).

Шаг 0. Предусловия

  • Операционная система с установленным Docker Engine.
  • Docker Compose (опционально, для удобства).
# Проверка версии Docker
docker --version

# Проверка, что контейнеры запускаются
docker run hello-world

Шаг 1. Получить образ ROS 2 Jazzy

  • ros:jazzy-ros-base — минимальный набор (без GUI).
  • ros:jazzy-desktop — с RViz, rqt и другими GUI (рекомендовано для обучения).
docker pull ros:jazzy-desktop
# или минимальный:
# docker pull ros:jazzy-ros-base

Шаг 2. Настроить окружение (в хост-терминале)

# Задаём DOMAIN_ID (нужен для DDS/ROS 2 сетевого разделения)
export ROS_DOMAIN_ID=1

# Для X11 (Linux): разрешаем контейнеру доступ к X-серверу
xhost +local:docker
Для Windows и macOS: GUI-инструменты RViz/rqt требуют X-сервера (например, XQuartz на macOS или VcXsrv/Xming на Windows).

Шаг 3. Запуск контейнера

docker run -it --rm \
  --name ros-jazzy \
  --network host \
  -e DISPLAY=$DISPLAY \
  -e QT_QPA_PLATFORM=xcb \
  -e ROS_DOMAIN_ID=$ROS_DOMAIN_ID \
  -v /tmp/.X11-unix:/tmp/.X11-unix:rw \
  -v $HOME/ros2_ws:/root/ros2_ws \
  ros:jazzy-desktop \
  bash -lc "echo 'source /opt/ros/jazzy/setup.bash' >> ~/.bashrc && bash"
  • --network host упрощает обнаружение узлов ROS 2 в сети (Linux). На Windows/macOS можно использовать стандартную сеть Docker.
  • -v $HOME/ros2_ws:/root/ros2_ws монтирует вашу папку workspace внутрь контейнера.

Шаг 4. Проверка ROS 2 внутри контейнера

printenv ROS_DISTRO    # должно вывести: jazzy
printenv ROS_DOMAIN_ID # должно вывести: 1
ros2 --help            # список доступных команд

Шаг 5. Установка доп. пакетов внутри контейнера

apt update
apt install -y ros-dev-tools ros-jazzy-turtlesim

Шаг 6. Демонстрация turtlesim

# Терминал 1 (в контейнере)
ros2 run turtlesim turtlesim_node

# Терминал 2 (в контейнере)
ros2 run turtlesim turtle_teleop_key

Шаг 7. Создание рабочего пространства

mkdir -p ~/ros2_ws/src
cd ~/ros2_ws
colcon build
source install/setup.bash

Опционально: docker-compose

services:
  ros-jazzy:
    image: ros:jazzy-desktop
    container_name: ros-jazzy
    network_mode: host
    environment:
      - DISPLAY=${DISPLAY}
      - QT_QPA_PLATFORM=xcb
      - ROS_DOMAIN_ID=${ROS_DOMAIN_ID:-1}
    volumes:
      - /tmp/.X11-unix:/tmp/.X11-unix:rw
      - ${HOME}/ros2_ws:/root/ros2_ws
    command: bash -lc "echo 'source /opt/ros/jazzy/setup.bash' >> ~/.bashrc && bash"

Опционально: GPU-поддержка

docker run -it --rm --gpus all \
  --network host \
  -e DISPLAY=$DISPLAY -e QT_QPA_PLATFORM=xcb \
  -v /tmp/.X11-unix:/tmp/.X11-unix \
  -e ROS_DOMAIN_ID=$ROS_DOMAIN_ID \
  -v $HOME/ros2_ws:/root/ros2_ws \
  ros:jazzy-desktop bash
Готово! ROS 2 Jazzy работает в Docker-контейнере с Ubuntu 24.04 внутри. Хост может быть любым: Linux, Windows (WSL2) или macOS.