Skip to content

ПР07. Время и синхронизация сенсоров

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

Цель

Измерить частоту, джиттер, пропуски и рассогласование камеры с одометрией и доказать на одном bag-файле, что политика синхронизации исправлена: P95 укладывается в заданный предел, неполные пары дают явный unknown.

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

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

СтадияЧто требуется
1 · Собратьзапись потока и tf2, ближайшие пары по меткам источника, P50/P95 рассогласования
2 · Сломатьfixture задерживает поток, меняет метку или удаляет сообщения
3 · Доказатьдопуск/очередь/тайм-аут настроены, отчёты до/после построены на том же bag-файле
Автопроверкаcheck_practice.py PR07 проверит evidence/pr07/{timing-before.csv,timing-after.csv,replay.md} и заявления public_tests_passed, defect_reproduced, defect_fixed, replay_verified

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

Вы измерите частоту, джиттер, пропуски и рассогласование камеры с одометрией, а затем повторите одну и ту же запись до и после исправления синхронизации.

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

  • sensor_contract — пакет синхронизации: политика пар (допуск, очередь, тайм-аут) и отчёт по времени.
  • Время источника (source) — метка, когда сообщение было измерено; время получения (receive) — когда его обработал подписчик. Это разные величины.
  • P50/P95 рассогласования — медиана и 95-й процентиль разницы меток ближайших пар; P95 — целевая метрика предела.
  • Допуск — максимальная допустимая разница меток пары; очередь — сколько кандидатов хранится; тайм-аут — сколько ждать второе сообщение пары.
  • unknown — явный результат вместо устаревшего значения: если пара не собрана, публикуется unknown, а не прошлое измерение.

Что сделать

  1. Запишите изображение, детекции, одометрию и tf2. Постройте ближайшие пары по меткам источника и посчитайте P50/P95 рассогласования до исправления.
  2. Задайте допустимое рассогласование, глубину очереди и тайм-аут. Неполная пара должна приводить к явному unknown, а синхронизированные данные и запрос tf2 — использовать одну временную метку.
  3. Fixture задерживает поток, меняет метку или удаляет сообщения. Исправьте политику и сравните отчёты до и после на одном и том же bag-файле: timing-before.csv → правка → timing-after.csv.

Сохраните evidence/pr07/{timing-before.csv,timing-after.csv,replay.md,report.json}. replay.md показывает, что та же запись после исправления даёт P95 в пределах допуска и неполные пары превращаются в unknown.

Проверка

bash
colcon test --packages-select sensor_contract
ros2 bag play fixtures/pr07-sync-defect --clock
python3 /path/to/course/tools/check_practice.py PR07 --submission .

Готово, если время измерения и получения считаются отдельно, преобразование tf2 доступно на момент измерения, а P95 после исправления укладывается в заданный предел. Дополнительно: сравните точную и приближённую синхронизацию.

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

После проверки архитектуры проекта запустите общий bag-файл с неисправностью, объясните выбор одной пары сообщений и постройте собственный отчёт по времени.

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

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

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

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