Skip to content

ПР05. Launch, QoS и повтор записи ​

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

Входные данные ​

Простой launch уже знаком по ПР02; здесь добавляем аргументы, namespace и запись. Возьмите свой пакет patrol из ПР04 и добавьте пакет course_bringup и тестовую ноду pose_relay. pose_relay читает /turtle1/pose и публикует sensor_pose с best_effort: используйте turtlesim/msg/Pose в Jazzy или turtlesim_msgs/msg/Pose в Lyrical — тот же тип, который вернула команда ros2 topic type /turtle1/pose в ПР04. Отдельный подписчик использует настраиваемый QoS. Записывайте /robot_a/sensor_pose. Launch-файл принимает аргументы namespace, record, bag_dir и subscriber_reliability; имена топиков внутри нод остаются относительными. Если ПР04 ещё не готова, сначала доведите её до успешных функциональных тестов.

Цель ​

Одной launch-командой поднять систему, записать поток в MCAP и доказать, что несовместимые профили QoS обнаружены и исправлены на живом потоке и на повторе записи.

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

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

СтадияЧто требуется
1 · Собратьlaunch-файл с аргументами, namespace, переназначениями, логами и записью MCAP
2 · Сломатьreliable-подписчик против best effort-сенсора: топик виден, сообщений нет (qos-before.txt)
3 · Доказатьсовместимость восстановлена, тот же профиль проверен на живом потоке и записи (qos-after.txt)
Автопроверкаcheck_practice.py PR05 проверит src/**/package.xml, src/**/*launch.py, src/**/pose_relay.py, evidence/pr05/{qos-before.txt,qos-after.txt,bag-metadata.yaml} и заявления public_tests_passed, defect_reproduced, defect_fixed, replay_verified

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

Одна launch-команда поднимет систему в пространстве имён /robot_a. Вы запишете поток в MCAP и найдёте случай, когда топик виден, но сообщения не приходят из-за несовместимых профилей QoS.

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

  • course_bringup — пакет с launch-файлами: он поднимает всю систему одной командой, а не отдельные ноды вручную.
  • Пространство имён (namespace) — префикс полного имени топика (например, /robot_a/cmd_vel); переназначение (remap) переименовывает топик для конкретной ноды.
  • QoS — профиль надёжности обмена: издатель и подписчик совместимы только когда совместимы запрашиваемые и предлагаемые политики, в частности reliability и durability. Издатель best effort не может обслужить подписчика reliable.
  • MCAP — контейнер записи rosbag2: хранит сообщения и их временную шкалу, но не версии кода и аргументы запуска.

Что сделать ​

На паре сначала запустите одну систему в /robot_a; только затем добавляйте проверку QoS и запись. Используйте реальное время, а tf пока не требуется.

  1. Создайте launch-файл в пакете course_bringup: аргументы запуска, namespace, переназначения, логи и запись потока в MCAP через ros2 bag record. Передайте record через IfCondition; при false recorder не запускается. Не проверяйте LaunchConfiguration обычным if.
  2. Запустите систему в /robot_a и проверьте полные имена. Переназначьте её выход команды в /turtle1/cmd_vel; один turtlesim запускается глобально.
  3. Подписчик с reliable не получает сенсорный поток best effort — топик виден в ros2 topic list, но сообщения не доходят. Сохраните диагностику (qos-before.txt), исправьте совместимость профилей и повторите проверку на живом потоке и на повторе записи (qos-after.txt).

Для replay создайте config/qos-overrides.yaml:

yaml
/robot_a/sensor_pose:
  reliability: best_effort
  history: keep_last
  depth: 10

Сначала сохраните отсутствие сообщений у reliable-подписчика. Затем переключите его на best_effort, запишите один исправленный поток и проиграйте эту же запись с тем же QoS override. Не объединяйте «до» и «после» в разные наборы входных сообщений.

Сохраните launch-файл и evidence/pr05/{qos-before.txt,qos-after.txt,bag-metadata.yaml,report.json}. bag-metadata.yaml копируется из каталога MCAP; вывод ros2 bag info добавляется в qos-after.txt и показывает, что запись содержит один поток.

Проверка ​

Обязательные файлы сдачи ​

  • В корне репозитория — AI_USAGE.md, с отдельной записью для PR05: модель, инструмент, характер помощи и способ проверки. Если ИИ не использовался, напишите это явно и поставьте ai_used: false в отчёте; файл всё равно нужен. Предыдущие записи сохраняйте. Правила и пример.
  • В evidence/pr05/report.json поле commit — SHA уже созданного коммита реализации. Отчёт фиксируется следующим коммитом; его SHA указывается при сдаче вместе со ссылкой на CI. Пошаговый пример двух коммитов.
bash
colcon test
# Терминал 1, до исправления:
ros2 launch course_bringup patrol.launch.py \
  namespace:=robot_a subscriber_reliability:=reliable record:=false
# Терминал 2: ожидаемый timeout сохраните в qos-before.txt.
timeout 3s ros2 topic echo /robot_a/sensor_pose \
  --qos-reliability reliable --once > evidence/pr05/qos-before.txt
# Перезапустите launch с subscriber_reliability:=best_effort, затем:
timeout 3s ros2 topic echo /robot_a/sensor_pose \
  --qos-reliability best_effort --once > evidence/pr05/qos-after.txt
ros2 bag record -s mcap -o evidence/pr05/bag \
  --topics /robot_a/sensor_pose
# Остановите recorder через Ctrl+C, затем живой launch.
# В A запустите replay, в B повторите оба echo до/после:
ros2 bag play evidence/pr05/bag \
  --qos-profile-overrides-path config/qos-overrides.yaml
ros2 bag info evidence/pr05/bag >> evidence/pr05/qos-after.txt
cp evidence/pr05/bag/metadata.yaml evidence/pr05/bag-metadata.yaml
python3 .course-kit/v1/tools/check_practice.py PR05 --submission .

Готово, если система запускается из нового терминала, имена изолированы в /robot_a, а один bag-файл показывает сбой до и нормальную доставку после правки QoS. Дополнительно: launch-тест с корректным завершением процессов.

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

После проверки параметров разберём минимальный пример несовместимого QoS. Затем проверьте несовместимый профиль, после исправления запишите bag и соберите запуск в отдельном пространстве имён.

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

Декларация AI_USAGE.md оформляется по правилам курса, в том числе без ИИ.

Официальные справочники ​

Дополнительное расширение: вторая независимая копия /robot_b. Не делайте её условием первого рабочего запуска.

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