Skip to content

ПР04. Параметризуем движение ​

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

Входные данные ​

Собственный patrol из ПР03. Используйте уже работающие подписку, таймер и Twist; переписывать пакет заново не нужно. Тип позы проверяйте через ros2 topic type /turtle1/pose: turtlesim/msg/Pose или turtlesim_msgs/msg/Pose.

Нужен course kit текущей недели с манифестом PR04.

Цель ​

Менять параметры работающей ноды и отклонять недопустимую частоту без разрушения активного состояния.

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

СтадияЧто требуется
1 · СобратьПараметры linear_speed, turn_rate, publish_hz управляют командой и таймером
2 · СломатьПроверка частоты временно отключена: значение 0 вызывает воспроизводимый отказ
3 · ДоказатьНоль отклонён, старая частота сохранена; допустимое значение меняет поток
Автопроверкаcheck_practice.py PR04 проверяет файлы манифеста и заявления public_tests_passed, defect_reproduced, defect_fixed

Что сделать ​

  1. Объявите параметры со значениями 0.5 м/с, 0.3 рад/с, 10.0 Гц. Допустимы конечные числа: скорость 0–1 м/с, поворот −1–1 рад/с, частота 1–30 Гц. Проверяйте вход до изменения таймера и активного состояния.
  2. При допустимой смене частоты пересоздайте таймер с периодом 1/publish_hz. Прежний таймер должен быть остановлен; двух одновременных таймеров не остаётся.
  3. В отдельной ветке/коммите временно отключите проверку частоты и передайте 0. Сохраните конкретный отказ. Верните проверку и тем же тестом подтвердите отклонение: значение и поток остаются прежними.
  4. Проверьте обычное изменение 10→5 Гц, ноль, отрицательное значение и NaN в тесте чистой функции. В parameters.md сохраните реальные команды и вывод.
  5. По лекции вызовите готовый /clear и найдите /turtle1/rotate_absolute через ros2 action list -t. В двух предложениях объясните отличие запроса и цели. Собственные IDL и action-сервер в обязательную часть не входят.

Проверка ​

Обязательные файлы сдачи ​

  • В корне репозитория — AI_USAGE.md, с отдельной записью для PR04: модель, инструмент, характер помощи и способ проверки. Если ИИ не использовался, напишите это явно и поставьте ai_used: false в отчёте; файл всё равно нужен. Предыдущие записи сохраняйте. Правила и пример.
  • В evidence/pr04/report.json поле commit — SHA уже созданного коммита реализации. Отчёт фиксируется следующим коммитом; его SHA указывается при сдаче вместе со ссылкой на CI. Пошаговый пример двух коммитов.
bash
python3 -m pytest src/patrol/test
ros2 param set /patrol publish_hz 5.0
ros2 param set /patrol publish_hz 0.0
python3 .course-kit/v1/tools/check_practice.py PR04 --submission .

Сохраните src/patrol/package.xml, evidence/pr04/parameters.md, evidence/pr04/tests.txt и evidence/pr04/report.json. Checker проверяет состав отчёта, а поведение подтверждается вашими тестами и повторением опыта.

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

Сначала повторите минимальный исправный запуск из лекции. Покажите один наблюдаемый результат, затем внесите указанный дефект и проверьте ту же гипотезу до и после исправления. Если исправный запуск ещё не работает, завершите его вместо добавления дополнительных возможностей.

Дополнительно: клиент готового действия поворота с feedback и отменой. Не добавляйте многопоточный executor, пока нет конкретной блокирующей операции.

Необязательное продолжение: настройки маршрута ​

Если выполнен маршрут мышью из ПР03, добавьте отдельному контроллеру параметры max_speed, goal_tolerance и turn_gain. Задайте конечные допустимые значения, отклоняйте нулевую/отрицательную точность и проверяйте изменения до обновления состояния.

Пройдите один сохранённый маршрут с двумя значениями максимальной скорости. Сравните длительность и отклонение от линии: более высокая скорость не обязана давать более точный проход. При изменении настройки окно и «Стоп» продолжают работать. Это дополнение не меняет обязательные параметры patrol, манифест или условия зачёта ПР04.

Общий порядок: runbook · troubleshooting. Декларация AI_USAGE.md оформляется по правилам курса, в том числе без ИИ.

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