Skip to content

Рабочее место разработчика

Рекомендуемый маршрут курса: Ubuntu 26.04 на ноутбуке для RViz, Gazebo и других GUI-программ; osrf/ros:lyrical-desktop-full — для одинаковых headless-проверок локально и в CI/CD. Контейнер Playwright нужен только для проверки сайта и слайдов, а не для запуска ROS 2.

Если терминал пока непривычен, сначала пройдите краткий справочник.

Что обязательно, а что опционально

СлойОбязательноПо желанию
Команды курса и CIBashfish для интерактивной работы
ROS-зависимостиapt, rosdep, colcon
Python-инструментысистемный Python ROSuv, Ruff, ty
Редакторлюбой текстовый редакторVS Code с рекомендованными расширениями
Графикарабочий OpenGL-рендерердискретный GPU и доступ к нему из Docker

Главное правило: удобный инструмент не должен создавать вторую, незаметную систему зависимостей поверх ROS.

1. Базовые пакеты

bash
sudo apt update
sudo apt install git curl build-essential pciutils mesa-utils vulkan-tools

git --version
glxinfo -B
vulkaninfo --summary

Если OpenGL renderer содержит llvmpipe, GUI работает через программный рендеринг на CPU. Это допустимо для диагностики, но обычно слишком медленно для Gazebo и больших сцен RViz.

2. Fish без конфликта с ROS

Fish полезен в интерактивном терминале: подсвечивает синтаксис, предлагает команды из истории и показывает варианты дополнения. Установите и попробуйте его без смены login-shell:

bash
sudo apt install fish
fish
fish --version
exit

Для ROS и скриптов курса оставайтесь в Bash:

bash
bash
source /opt/ros/lyrical/setup.bash
source ~/robotics_ws/install/setup.bash  # после первой сборки

Не выполняйте source setup.bash из fish: это Bash-скрипт. Также не копируйте автоматически весь ~/.bashrc в конфигурацию fish. Авторы fish отдельно предупреждают, что назначение fish login-shell может нарушить ожидаемую Bourne-совместимую настройку окружения некоторых Linux-систем.

3. uv, Ruff и ty: инструменты вокруг ROS-пакета

uv создаёт Python-окружения и воспроизводимые lock-файлы. В курсе он удобен для утилит анализа и самостоятельных Python-экспериментов:

bash
curl -LsSf https://astral.sh/uv/install.sh | sh
uv --version

uvx ruff check .
uvx ruff format --check .
uvx ty check

Роли не смешиваются:

  • rosdep устанавливает системные зависимости ROS-пакетов;
  • colcon build и colcon test собирают и проверяют workspace;
  • uv управляет отдельными Python-зависимостями и инструментами;
  • Ruff проверяет стиль и распространённые дефекты;
  • ty выполняет статическую проверку типов, но не доказывает корректность поведения ноды во время выполнения.

Не устанавливайте rclpy из PyPI поверх системной установки ROS. Если проекту нужен собственный pyproject.toml и .venv, сначала проверьте, что команды colcon test и запуск ноды по-прежнему видят выбранный underlay ROS.

Пример отдельного проекта, не являющегося ROS-пакетом:

bash
uv init experiment
cd experiment
uv add numpy
uv run python -c 'import numpy; print(numpy.__version__)'
uv lock

uv.lock хранит точные разрешённые версии и управляется самим uv; его не редактируют вручную.

4. VS Code и расширения

Откройте репозиторий целиком, а не отдельный файл: тогда редактор видит pyproject.toml, .devcontainer, YAML-схемы и настройки workspace.

bash
code --install-extension charliermarsh.ruff
code --install-extension astral-sh.ty
code --install-extension ms-azuretools.vscode-containers
code --install-extension redhat.vscode-yaml
РасширениеЗачем оно нужно
Ruff (charliermarsh.ruff)диагностика и форматирование Python
ty (astral-sh.ty)типы, переходы по коду и подсказки языка
Container Tools (ms-azuretools.vscode-containers)Dockerfile, образы, контейнеры и отладка
YAML (redhat.vscode-yaml)синтаксис, дополнение и проверка YAML по схеме

Для полноценной работы внутри контейнера Container Tools недостаточно: добавьте Dev Containers (ms-vscode-remote.remote-containers). Файл .devcontainer/devcontainer.json задаёт воспроизводимый стек инструментов, а команда Dev Containers: Open Folder in Container... открывает проект внутри него.

Расширения помогают раньше увидеть ошибку, но результат приёмки определяют команды репозитория, например colcon test и public tests.

5. Docker-маршрут Lyrical

bash
docker image inspect osrf/ros:lyrical-desktop-full \
  --format '{{index .RepoDigests 0}}'

docker run --rm --init --network host \
  -v "$PWD:/work" -w /work \
  osrf/ros:lyrical-desktop-full \
  bash -lc 'source /opt/ros/$ROS_DISTRO/setup.bash && ros2 doctor --report'

В CI фиксируется digest образа. Тег удобен человеку, но может начать указывать на другую сборку. GUI и GPU сначала проверяются нативно; контейнерный маршрут первой недели должен успешно проходить headless.

6. Определите графические адаптеры

bash
lspci -nnk | grep -EA3 'VGA|3D|Display'
glxinfo -B | grep -E 'direct rendering|OpenGL vendor|OpenGL renderer|OpenGL version'
vulkaninfo --summary

Сохраните три разных факта:

  1. какие GPU физически обнаружены (lspci);
  2. какой драйвер ядра используется (Kernel driver in use);
  3. какой GPU реально рендерит текущую GUI-сессию (OpenGL renderer).

Наличие дискретного адаптера в lspci ещё не означает, что RViz или Gazebo используют именно его.

7. Intel/AMD и гибридная графика Mesa

На ноутбуке с интегрированной и дискретной Mesa-графикой сравните обычный рендерер и offload:

bash
glxinfo -B | grep 'OpenGL renderer'
DRI_PRIME=1 glxinfo -B | grep 'OpenGL renderer'

Запуск конкретной программы на дискретном GPU выполняется тем же префиксом:

bash
DRI_PRIME=1 rviz2
DRI_PRIME=1 gz sim -v 4

Сравнивайте строку renderer и поведение одной и той же сцены; сам по себе рост загрузки GPU не является функциональным тестом.

8. NVIDIA на Ubuntu

Используйте подписанные пакеты Ubuntu, особенно при включённом Secure Boot:

bash
sudo ubuntu-drivers list
sudo ubuntu-drivers install
sudo reboot

После перезагрузки:

bash
nvidia-smi
cat /proc/driver/nvidia/version
glxinfo -B | grep 'OpenGL renderer'

Не устанавливайте .run-драйвер поверх пакетов Ubuntu без отдельной причины: официальная документация Ubuntu предупреждает, что смешивание источников может повредить установку драйвера и Secure Boot.

На гибридном NVIDIA-ноутбуке пункт GNOME «Запустить на дискретной видеокарте» или профиль PRIME зависит от модели и драйвера. После любого переключения снова проверяйте OpenGL renderer, а не только название выбранного режима.

9. Проверка RViz и Gazebo

bash
source /opt/ros/lyrical/setup.bash

rviz2
gz sim -v 4 shapes.sdf

Минимальный протокол:

  • оба окна открываются без падения;
  • в выводе нет повторяющихся ошибок создания OpenGL-контекста;
  • glxinfo -B не показывает llvmpipe, если ожидается аппаратный рендеринг;
  • одна и та же простая сцена проверяется до и после переключения GPU;
  • скриншот окна дополняется текстовым отчётом, а не заменяет его.

Если нативный GUI работает, а контейнерный нет, не переустанавливайте драйвер: это уже отдельная граница доступа контейнера к display socket и GPU.

10. NVIDIA GPU в Docker — отдельная проверка

Сначала добейтесь корректного nvidia-smi на хосте. Затем установите NVIDIA Container Toolkit по официальной инструкции и настройте Docker runtime:

bash
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
docker run --rm --gpus all ubuntu:24.04 nvidia-smi

Доступ к вычислительному GPU не гарантирует показ GUI-окна: X11/Wayland и OpenGL требуют отдельной настройки. Обязательные CI-тесты курса остаются headless и не зависят от преподавательского GPU.

11. Безопасный отчёт окружения

Из корня репозитория:

bash
bash tools/workstation_report.sh | tee workstation-report.txt

Скрипт только читает версии, выбранное ROS-окружение и сведения о renderer. Он не печатает полный env, токены или содержимое домашнего каталога. Перед публикацией всё равно просмотрите отчёт.

Критерий готовности к ПР01

  • Bash-команды pwd, ls, cd, grep и перенаправление понятны;
  • выбран ровно один ROS-дистрибутив и подключён его setup.bash;
  • talker/listener и turtlesim запускаются;
  • Docker headless-проверка проходит тем же образом, что будет в CI;
  • известны фактические OpenGL vendor/renderer;
  • fish, uv и VS Code остаются удобствами, а не скрытыми условиями сдачи.

Официальные источники

Проверено 26 августа 2026 года:

Учебные материалы: CC BY 4.0 · Код: Apache-2.0