Skip to content

ПР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Гцчастота публикации команды (сообщений в секунду); ноль и отрицательные значения должны быть отклонены

Что сделать

  1. Соберите минимальные издатель и подписчик по официальному руководству для выбранной версии ROS 2 — так вы освоите каркас, в который встраивается patrol.
  2. В пакете patrol реализуйте ноду с параметрами linear_speed, turn_rate, publish_hz и границами поля. Нода читает позу /turtle1/pose, публикует команду в cmd_vel с заданной частотой (одна итерация таймера — одна публикация) и записывает телеметрию в CSV.
  3. Исходный код намеренно принимает нулевой или отрицательный 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.

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

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