Действия ROS имеют связь клиент-сервер с заданным протоколом. Действия используют темы ROS для отправки сообщений о целях от клиента на сервер. Можно отменить цели с помощью клиента действий. После получения цели сервер обрабатывает ее и может передать информацию обратно клиенту. Эта информация включает состояние сервера, состояние текущей цели, обратную связь по этой цели во время работы и, наконец, сообщение результата, когда цель завершена.
Используйте sendGoal
функция для отправки целей серверу. Отправьте цель и ждите, пока она будет завершена с помощью sendGoalAndWait
. Эта функция позволяет вам вернуть сообщение результата, окончательное состояние цели и состояние сервера. Пока сервер выполняет цель, функция обратного вызова, FeedbackFcn
, вызывается, чтобы предоставить данные, относящиеся к этой цели (см SimpleActionClient
). Отменить текущую цель используя cancelGoal
или все цели на сервере используя cancelAllGoals
.
В целом, следующие шаги происходят при создании и выполнении действия ROS в сети ROS.
Setup сервера действий ROS. Проверьте, какие действия доступны в сети ROS, введя rosaction
list
в MATLAB® командное окно.
Использование rosactionclient
чтобы создать клиенты действий и подключить их к серверу. Укажите тип действия, доступный в настоящее время в сети ROS. Использовать waitForServer
чтобы дождаться подключения клиента действий к серверу.
Отправить цель используя sendGoal
. Задайте goalMsg
который соответствует типу действия. Когда вы создаете клиент действий, используя rosactionclient
, пустой goalMsg
возвращается. Вы можете изменить это сообщение с помощью нужных параметров.
Когда статус цели становится 'active'
, цель начинает выполнение и ActivationFcn
вызывается функция обратного вызова. Для получения дополнительной информации об изменении этой функции обратного вызова смотрите SimpleActionClient
.
Пока статус цели остается 'active'
сервер продолжает выполнять задачу. Функция обратного вызова с обратной связью периодически обрабатывает информацию об этом выполнении целей каждый раз, когда получено новое сообщение обратной связи. Используйте FeedbackFcn
для доступа или обработки данных сообщений, отправленных с сервера ROS.
Когда цель достигнута, сервер возвращает сообщение результата и состояние. Используйте ResultFcn
коллбэк для доступа или обработки сообщения результата и состояния.
Действия ROS используют сообщения ROS для отправки целей и получения обратной связи об их выполнении. В MATLAB можно использовать функции обратного вызова для доступа или обработки обратной связи и информации о результатах из этих сообщений. После создания SimpleActionClient
задайте функции обратного вызова путем назначения указателей на функцию свойствам объекта. Создать объект можно используя rosactionclient
.
GoalMsg
- Сообщение о цели содержит информацию о цели. Чтобы выполнить действие, вы должны отправить сообщение цели с обновленной информацией о цели (см. sendGoal
). Тип сообщения цели зависит от типа действия ROS.
ActivationFcn
- Когда цель получена на сервере действий, ее статус переходит к 'pending'
пока сервер не решит его выполнить. Статус затем 'active'
. В этот момент MATLAB выполняет функцию обратного вызова, заданную в ActivationFcn
свойство SimpleActionClient
объект. С этой функцией не связано ни сообщение ROS, ни данные. По умолчанию эта функция просто отображает 'Goal is active'
в командной строке MATLAB, чтобы уведомить вас о выполнении цели.
Указатель на функцию по умолчанию является:
@(~) disp('Goal is active')
FeedbackFcn
- функция обратной связи используется для обработки информации из сообщения обратной связи. Тип сообщения обратной связи зависит от типа действия. Функция обратной связи периодически выполняется во время целевой операции всякий раз, когда получено новое сообщение обратной связи. По умолчанию функция отображает детали сообщения, используя showdetails
. Вы можете выполнить другую обработку сообщения обратной связи в функции обратной связи.
Указатель на функцию по умолчанию является:
@(~,msg) disp(['Feedback: ',showdetails(msg)])
msg
- сообщение обратной связи как входной параметр функции, которую вы задаете.
ResultFcn
- функция результата выполняется, когда цель выполнена. Входные параметры этой функции включают в себя как сообщение результата, так и состояние выполнения. Тип сообщения результата зависит от типа действия. Это сообщение, msg
, и состояние, s
, те же, что и выходы, которые вы получаете при использовании sendGoalAndWait
. Эта функция может также использоваться, чтобы инициировать зависимые процессы после завершения цели.
Указатель на функцию по умолчанию является:
@(~,s,msg) disp(['Result with state ',char(s),': ',showdetails(msg)])