Appearance
ПР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, а не прошлое измерение.
Что сделать
- Запишите изображение, детекции, одометрию и tf2. Постройте ближайшие пары по меткам источника и посчитайте P50/P95 рассогласования до исправления.
- Задайте допустимое рассогласование, глубину очереди и тайм-аут. Неполная пара должна приводить к явному
unknown, а синхронизированные данные и запрос tf2 — использовать одну временную метку. - 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.
Если использовался ИИ, применяются правила курса.