8. Actions: цель, обратная связь и результат

Для чего нужен action

Длительная задача отличается от короткого вычисления: клиенту полезно знать, принята ли цель, как идёт выполнение и чем оно завершилось. Action предоставляет цель, промежуточную обратную связь и итоговый результат; также предусмотрен запрос отмены.

Определение .action содержит три части: goal, result и feedback. Их разделяют две строки ---. Порядок частей важно не путать с порядком событий: во время выполнения приходит feedback, а завершает задачу result.

Жизненный цикл

Клиент отправляет цель. Сервер принимает или отклоняет её. После принятия сервер выполняет задачу и при необходимости публикует feedback. Завершение должно иметь определённый статус: успешное выполнение, отмена или ошибка.

Длительная операция не должна лишать executor возможности обслуживать другие события. Продумайте ожидание, обработку отмены и завершение задачи, прежде чем подключать реальное движение.

Практика

Создайте учебное действие с числом шагов в цели, количеством выполненных шагов в feedback и итоговым результатом. Добавьте интерфейс в пакет генерации, соберите workspace и реализуйте отдельные сервер и клиент.

Для исследования работающей системы:

ros2 action list -t
ros2 action info /count_steps

Имя /count_steps — пример; используйте имя своего сервера. Цель можно отправить как собственным клиентом, так и через ros2 action send_goal, указав тип действия и поля цели. Для наблюдения промежуточных данных используйте опцию --feedback.

Самостоятельное задание

Отправьте корректную и некорректную цель, затем отмените длительное выполнение через клиент. Зафиксируйте итоговые статусы.

Самопроверка

  • Чем feedback отличается от результата?
  • Почему принятие цели не означает успешное завершение?
  • Когда лучше выбрать сервис, а когда action?

Основа урока: учебное пособие «Операционная система для роботов ROS 2», ИТМО, 2026, печатные страницы 53–60. Это учебный конспект с упражнениями; полные примеры и рисунки приведены в пособии.