Skip to content

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

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

Цель

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

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

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

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

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

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

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

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

Что сделать

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

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

Проверка

bash
colcon test
ros2 launch course_bringup patrol.launch.py namespace:=robot_a
ros2 bag info evidence/pr04/bag
python3 /path/to/course/tools/check_practice.py PR04 --submission .

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

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

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

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

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

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