Appearance
Рабочее место разработчика
Рекомендуемый маршрут курса: Ubuntu 26.04 на ноутбуке для RViz, Gazebo и других GUI-программ; osrf/ros:lyrical-desktop-full — для одинаковых headless-проверок локально и в CI/CD. Контейнер Playwright нужен только для проверки сайта и слайдов, а не для запуска ROS 2.
Если терминал пока непривычен, сначала пройдите краткий справочник.
Что обязательно, а что опционально
| Слой | Обязательно | По желанию |
|---|---|---|
| Команды курса и CI | Bash | fish для интерактивной работы |
| ROS-зависимости | apt, rosdep, colcon | — |
| Python-инструменты | системный Python ROS | uv, 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 lockuv.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Сохраните три разных факта:
- какие GPU физически обнаружены (
lspci); - какой драйвер ядра используется (
Kernel driver in use); - какой 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 года: