Appearance
ПР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» — не фильтр слов, а смысл стадии «доказать»: сбой вызван настройкой среды, а не повреждённой установкой, поэтому исправление — изменить переменную окружения и повторить те же команды.
Что сделать
- Пройдите инструкцию по установке, выполните
ros2 doctor --report, соберите пустое рабочее пространство (colcon build --symlink-install,source install/setup.bash) и запуститеturtlesimв отдельном терминале. - Создайте 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 Гц. - В одном из двух терминалов задайте другой
ROS_DOMAIN_ID(export ROS_DOMAIN_ID=17перед запуском команд). Процессы остаются живы, ноros2 node listв каждом терминале показывает только локальные ноды, а подписчик не получает данные. Сохраните вывод команд до исправления — это и есть воспроизведённый дефект. - Выровняйте
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.
Если использовался ИИ, применяются правила курса.