Skip to content

ПР01. Окружение и граф ROS 2

Работа обязательна для обеих траекторий. Рассчитывайте на одну лабораторную пару и примерно 2 часа самостоятельной доработки.

Цель

Подготовить поддерживаемую среду и собрать минимальный граф ROS 2, доказав обмен сообщениями командами и сохранённым снимком окружения; затем намеренно разорвать связь доменом и устранить причину без переустановки ROS 2.

Критерии зачтено

Работа зачтена, когда выполнены все три стадии и прошла автопроверка:

СтадияЧто требуется
1 · Собратьустановка/проверка среды, graph_audit со списком нод, топиков, типов и частоты /turtle1/pose
2 · Сломатьразные ROS_DOMAIN_ID: процессы живы, сообщения не доставляются
3 · Доказатьдомены выровнены, те же команды показывают доставку, report.json полон
Автопроверкаcheck_practice.py PR01 проверит evidence/pr01/{doctor.txt,graph.md,environment.json} и заявления public_tests_passed, defect_reproduced, defect_fixed

Что получится

Вы подготовите одну из поддерживаемых сред, создадите рабочее пространство и запустите небольшой граф ROS 2. Затем намеренно разделите два терминала по ROS_DOMAIN_ID и найдёте причину пропавшей связи.

Пакеты и понятия

  • graph_audit — ROS 2-пакет (Python): package.xml, каталог src/graph_audit, исполняемый файл с точкой входа. Это целый пакет, а не отдельный скрипт.
  • ROS_DOMAIN_ID — переменная окружения: участники с разными значениями находятся в разных «комнатах» discovery и не обнаруживают друг друга.
  • «Без переустановки ROS 2» — не фильтр слов, а смысл стадии «доказать»: сбой вызван настройкой среды, а не повреждённой установкой, поэтому исправление — изменить переменную окружения и повторить те же команды.

Что сделать

  1. Пройдите инструкцию по установке, выполните ros2 doctor --report, соберите пустое рабочее пространство (colcon build --symlink-install, source install/setup.bash) и запустите turtlesim в отдельном терминале.
  2. Создайте ROS 2-пакет graph_audit. Нода сохраняет состав графа в Markdown (graph.md) и JSON (environment.json): ros2 node list, ros2 topic list -t, типы сообщений и измеренную частоту /turtle1/pose через ros2 topic hz /turtle1/pose. Замер частоты — не менее 10 секунд; ожидаемое значение — около 20 Гц.
  3. В одном из двух терминалов задайте другой ROS_DOMAIN_ID (export ROS_DOMAIN_ID=17 перед запуском команд). Процессы остаются живы, но ros2 node list в каждом терминале показывает только локальные ноды, а подписчик не получает данные. Сохраните вывод команд до исправления — это и есть воспроизведённый дефект.
  4. Выровняйте ROS_DOMAIN_ID в обоих терминалах и повторите те же команды: те же участники снова обнаруживают друг друга. Новая установка ROS 2 на этом шаге не выполняется и не требуется.

Форма результата — evidence/pr01/{doctor.txt,graph.md,environment.json,report.json}: в environment.json — способ запуска, версии ОС, ROS 2 и Gazebo (для Docker — digest образа); секреты и полный вывод переменных среды не сохраняются.

Проверка

bash
colcon build --symlink-install
source install/setup.bash
ros2 doctor --report
python3 /path/to/course/tools/check_practice.py PR01 --submission .

Готово, если команды выполняются из нового терминала, graph_audit находит ожидаемые типы и частоту, а один и тот же тест показывает разрыв и восстановление связи. Нужно уметь объяснить обнаружение участников и наложение рабочего пространства (overlay). Дополнительно: повторите безоконный smoke-тест в Docker.

Как работаем на лабораторной

На первой паре вместе проходим проблемные места установки. В начале следующей лабораторной сравним отчёты, разберём locale, source и обнаружение участников. Оставшееся время используйте на исправление ПР01 или создание пакета для ПР02.

Общий порядок: runbook · troubleshooting.

Если использовался ИИ, применяются правила курса.

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