Appearance
ПР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 |
Что сделать
- Объявите параметры со значениями
0.5 м/с,0.3 рад/с,10.0 Гц. Допустимы конечные числа: скорость 0–1 м/с, поворот −1–1 рад/с, частота 1–30 Гц. Проверяйте вход до изменения таймера и активного состояния. - При допустимой смене частоты пересоздайте таймер с периодом
1/publish_hz. Прежний таймер должен быть остановлен; двух одновременных таймеров не остаётся. - В отдельной ветке/коммите временно отключите проверку частоты и передайте 0. Сохраните конкретный отказ. Верните проверку и тем же тестом подтвердите отклонение: значение и поток остаются прежними.
- Проверьте обычное изменение 10→5 Гц, ноль, отрицательное значение и NaN в тесте чистой функции. В
parameters.mdсохраните реальные команды и вывод. - По лекции вызовите готовый
/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 оформляется по правилам курса, в том числе без ИИ.