Appearance
ПР02. Нода patrol с параметрами
Работа обязательна для обеих траекторий. Рассчитывайте на одну лабораторную пару и примерно 2 часа самостоятельной доработки.
Цель
Реализовать ноду patrol с параметрами и телеметрией и доказать, что недопустимое значение параметра отклоняется, не ломая уже запущенный таймер.
Критерии зачтено
Работа зачтена, когда выполнены все три стадии и прошла автопроверка:
| Стадия | Что требуется |
|---|---|
| 1 · Собрать | издатель, подписчик и patrol с параметрами linear_speed, turn_rate, publish_hz и CSV-телеметрией |
| 2 · Сломать | publish_hz=0 (или отрицательный) принят без проверки: воспроизвести сбой таймера |
| 3 · Доказать | проверка параметра + регрессионный тест; ros2 param set меняет поведение без перезапуска |
| Автопроверка | check_practice.py PR02 проверит src/**/package.xml, evidence/pr02/{telemetry.csv,demo.md} и заявления public_tests_passed, defect_reproduced, defect_fixed |
Что получится
Нода patrol будет читать позу turtlesim, публиковать команду движения и записывать телеметрию. Частоту и скорость можно менять во время работы, а некорректное значение параметра не ломает уже запущенный таймер.
Пакеты и понятия
patrol— это ROS 2-пакет; внутри него живёт нода с тем же именемpatrol(файл Python + точка входа вsetup.py/package.xml).- Издатель ноды публикует команду движения в топик
cmd_vel; подписчик читает позуturtlesimиз/turtle1/pose.
| Параметр | Единица | Что означает |
|---|---|---|
linear_speed | м/с | целевая линейная скорость движения |
turn_rate | рад/с | угловая скорость поворота |
publish_hz | Гц | частота публикации команды (сообщений в секунду); ноль и отрицательные значения должны быть отклонены |
Что сделать
- Соберите минимальные издатель и подписчик по официальному руководству для выбранной версии ROS 2 — так вы освоите каркас, в который встраивается
patrol. - В пакете
patrolреализуйте ноду с параметрамиlinear_speed,turn_rate,publish_hzи границами поля. Нода читает позу/turtle1/pose, публикует команду вcmd_velс заданной частотой (одна итерация таймера — одна публикация) и записывает телеметрию в CSV. - Исходный код намеренно принимает нулевой или отрицательный
publish_hz. Воспроизведите сбой (таймер не запускается или падает), добавьте проверку параметра с регрессионным тестом, который сначала показывает сбой, а после правки — что активное значение не изменилось и поток продолжился.
Сохраните тесты пакета и evidence/pr02/{telemetry.csv,demo.md,report.json}. В telemetry.csv — одна строка на итерацию таймера: время симуляции, поза, команда и активные параметры.
Проверка
bash
colcon test --packages-select patrol
ros2 param set /patrol publish_hz 0
python3 /path/to/course/tools/check_practice.py PR02 --submission .Готово, если параметр меняет поведение без перезапуска, недопустимое значение отклоняется, а подписчик не содержит скрытой логики управления. Дополнительно: сделайте patrol управляемой нодой жизненного цикла.
Как работаем на лабораторной
После проверки ПР01 сравним результаты graph_audit и типичные ошибки. Затем добавьте обработчик изменения параметров и сначала запустите тест, который показывает сбой на publish_hz=0.
Общий порядок: runbook · troubleshooting.
Если использовался ИИ, применяются правила курса.