📖
Arduino + ROS
  • О методичке
  • 1 Введение в ROS
    • Проблемы современной робототехники
    • История ROS
    • Что такое ROS, основные задачи
    • Устройство мобильного робота
    • Почему Linux для роботов?
    • Подготовка рабочего места
  • 2 Linux. Основы командной строки.
    • Команды терминала Linux
    • Протокол SSH
    • Пользователи и их права
  • 3 Основы ROS
    • Введение
    • Базовые понятия ROS
    • Сообщения
    • Topic
    • Service
    • Action
    • Стандарты ROS
    • Установка и запуск ROS
    • Практика с Turtlesim
  • 4 Работа с Arduino
    • Arduino и ROS
    • Создание издателя
    • Создание подписчика
Powered by GitBook
On this page
  • Файл описания действия (Action) .action
  • Использование Action из консоли
  • Дополнительная информация
  1. 3 Основы ROS

Action

PreviousServiceNextСтандарты ROS

Last updated 3 years ago

Модель коммуникации в режиме Действие (Action) используется, когда выполнение запрошенной команды занимает продолжительное время и необходима обратная связь с процессом. Это очень похоже на модель Service: (Service Request) используется как Задача (Action Goal), а ответ (Service Response) используется как Результат (Action Result). Также есть дополнительная сущность Обратная Связь (Action Feedback) для передачи промежуточных результатов выполнения процесса для клиента. После отправки запроса (Action Goal) программа может продолжать работать, "отвлекаясь" только на обработку или Результата (Action Result), или промежуточного состояния (Action Feedback). Такой метод работы будет асинхронным.

Например, как показано на рисунке, если клиент устанавливает цель -- мыть посуду, сервер начинает мыть посуду и в процессе информирует клиента о ходе мытья посуды в форме обратной связи. После окончания обработки, сервер отправляет клиенту сообщение об окончании процесса.

В отличие от службы (Service), действие (Action) часто используется для управления сложными задачами робота, такими как передвижение к заданной точке, запуск лазерного сканирования, перемещение манипуляторов робота по сложной траектории и т.п.

Файл описания действия (Action) .action

Файлы описания действия (Action) находятся в директории ./action пакета, имеют расширение .action, и выглядят приблизительно так:

# Определение цели (goal)
uint32 dishes  # Сколько мыть тарелок
---
# Определение результата (result)
uint32 total_dishes_cleaned # Сколько всего было вымыто
---
# Определение обратной связи (feedback)
uint32 dishes_cleaned # Сколько вымыто посуды сейчас

На основе этого файла .action создаются 6 вспомогательных сообщений, чтобы клиент и сервер могли общаться. Это создание сообщений автоматически запускается во время процесса сборки пакета.

Для файла DoDishes.action будут созданы файлы

DoDishesAction.msg
DoDishesActionGoal.msg
DoDishesActionResult.msg
DoDishesActionFeedback.msg
DoDishesGoal.msg
DoDishesResult.msg
DoDishesFeadback.msg

Использование Action из консоли

Мы обсуждаем работу ActionLib как отдельного протокола, но на самом деле ActionLib именно с точки зрения "транспорта" использует механизм работы с Топиками (Topic).

Поэтому для отладки работы Actions мы будем использовать утилиту rostopic

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

Запустим ноду симулятора turtlesim

rosrun turtlesim turtlesim_node

Запустим тестовый ActionServer

rosrun turtle_actionlib shape_server

Если вы получили ошибку запуска ноды, то возможно вы установили не полную версию ROS, выполните команды

sudo apt install ros-noetic-turtle-actionlib

Получим список работающий топиков rostopic list

***
/turtle_shape/cancel
/turtle_shape/feedback
/turtle_shape/goal
/turtle_shape/result
/turtle_shape/status

Мы видим топики в одном пространстве имен turtle_shape: /cancel, /feedback, /goal, /result и /status

Эти топики реализуют работу нашего Action shape_server

При помощи довольно сложного вызова, мы можем отправить нашу Цель (Goal) на сервер для начала работы.

 rostopic pub /turtle_shape/goal turtle_actionlib/ShapeActionGoal "header:
  seq: 0
  stamp:
    secs: 0
    nsecs: 0
  frame_id: ''
goal_id:
  stamp:
    secs: 0
    nsecs: 0
  id: ''
goal:
  edges: 6
  radius: 1.0"

Но нам не обязательно это все набирать, тут нас выручает подсказка через вызов Tab

Мы можем набрать rostopic pub /turtle_shape/goal и нажать два раза таб для заполнения всей структуры сообщения.

Если мы заполним цель как edges: 6, radius: 1.0, то черепаха в эмуляторе начнет движение по шестиугольнику с гранями в 1 метр.

Дополнительная информация

Не так важно сейчас в этом полностью разобраться, как важно знать, что эти механизмы существуют, и обратиться к документации, когда это будет необходимо.

Модуль ActionLib имеет довольно сложную структуру взаимодействия и выполнения задач. Как Сервер, так и Клиент обрабатывают запросы по принципу Машины состояния (State Machine). Задачи могут отменяться, останавливаться и заново запускаться. Подробное описание этого взаимодействия описано на Wiki странице

http://wiki.ros.org/actionlib/DetailedDescription