美文网首页
ROS ActionLib

ROS ActionLib

作者: kino831143 | 来源:发表于2018-12-26 21:58 被阅读0次

1.Overview

通常情况下使用topic和service即可满足系统的通讯需求

In any large ROS based system, there are cases when someone would like to send a request to a node to perform some task, and also receive a reply to the request. This can currently be achieved via ROS services.

某些情况下需要请求能够中断或者能够给予反馈

In some cases, however, if the service takes a long time to execute, the user might want the ability to cancel the request during execution or get periodic feedback about how the request is progressing. The actionlib package provides tools to create servers that execute long-running goals that can be preempted. It also provides a client interface in order to send requests to the server.

2.Detailed Description

2.1.Server Description

Server State Machine
Goals are initiated by an ActionClient. Once a goal is received by an ActionServer, the ActionServer creates a state machine to track the status of the goal:

Server Transitions
The majority of these state transitions are triggered by the server implementer, using a small set of possible commands:
setAccepted - After inspecting a goal, decide to start processing it

setRejected - After inspecting a goal, decide to never process it because it is an invalid request (out of bounds, resources not available, invalid, etc)

setSucceeded - Notify that goal has been successfully processed

setAborted - Notify that goal encountered an error during processsing, and had to be aborted

setCanceled - Notify that goal is no longer being processed, due to a cancel request

The action client can also asynchronously trigger state transitions:
CancelRequest: The client notifies the action server that it wants the server to stop processing the goal.

Server States
Intermediate States
Pending - The goal has yet to be processed by the action server

Active - The goal is currently being processed by the action server

Recalling - The goal hasnot been processed and a cancel request has been received from the action client, but the action server has not confirmed the goal is canceled

Preempting - The goal is being processed, and a cancel request has been received from the action client, but the action server has not confirmed the goal is canceled

Terminal States
Rejected - The goal was rejected by the action server without being processed and without a request from the action client to cancel

Succeeded - The goal was achieved successfully by the action server

Aborted - The goal was terminated by the action server without an external request from the action client to cancel

Recalled - The goal was canceled by either another goal, or a cancel request, before the action server began processing the goal

Preempted - Processing of the goal was canceled by either another goal, or a cancel request sent to the action server

Simple Action Server
Many action servers follow a similar pattern where only one goal can be active at a time and each new goal preempts the previous one. The simple action server is a wrapper around the action server designed to enforce this simple policy for processing goals.


Upon reception of a new goal from an action client, the simple action server moves that goal into its pending slot. If a goal already occupies the pending slot, the simple action server sets that goal to canceled and replaces it with the goal that came in over the wire.

Once a new goal is received by the simple action server and is moved into the pending slot, the user of the simple action server is notified that a new goal is available. This notification occurs in one of two ways as described in the Notificaton of Goals section below. Upon receiving notification, the user can accept the goal which causes the goal in the pending slot to move to the current goal slot, and allows the user to modify the state machine associated with the newly accepted goal.

2.2.Client Description

Client State Machine
In actionlib, we treat the server state machine as the primary machine, and then treat the client state machine as a secondary/coupled state machine that tries to track the server's state:

Client Transitions
Server triggered Transitions
Reported [State]: Since the client is trying to track the server's state, most transitions are triggered by the server reporting its state to the ActionClient.

Receive Result Message: In this case, the server sends a result message to the client. Receiving a result will always signal the end of tracking a goal.

Client Triggered Transitions
Cancel Goal: Request the server to stop processing this goal

Simple Action Client
In general, high level applications and executives only care whether a goal is being processed, or if it's complete. They very rarely care about all the intermediate states. The Simple Action Client factors the original client state machine into three states: Pending, Active, & Done

template<class ActionSpec>
void SimpleActionClient<ActionSpec>::sendGoal(const Goal & goal,
  SimpleDoneCallback done_cb,
  SimpleActiveCallback active_cb,
  SimpleFeedbackCallback feedback_cb)
{
  // Reset the old GoalHandle, so that our callbacks won't get called anymore
  gh_.reset();

  // Store all the callbacks
  done_cb_ = done_cb;
  active_cb_ = active_cb;
  feedback_cb_ = feedback_cb;

  cur_simple_state_ = SimpleGoalState::PENDING;

  // Send the goal to the ActionServer
  gh_ = ac_->sendGoal(goal, boost::bind(&SimpleActionClientT::handleTransition, this, _1),
      boost::bind(&SimpleActionClientT::handleFeedback, this, _1, _2));
}

2.3.Action Interface & Transport Layer

The action client and server communicate with each other using a predefined action protocol. This action protocol relies on ROS topics in a specified ROS namespace in order to transport messages.


ROS Messages
goal - Used to send new goals to servers
cancel - Used to send cancel requests to servers

status - Used to notify clients on the current state of every goal in the system.
feedback - Used to send clients periodic auxiliary information for a goal.
result - Used to send clients one-time auxiliary information upon completion of a goal

3.Client-Server Interaction

从图中可以看到Action Clinet和Action Server之间的交互是双向


4.Action Specification: Goal, Feedback, & Result

为了实现客户端和服务器的通信,需要定义一些消息包括Goal,Feedback,Result

In order for the client and server to communicate, we need to define a few messages on which they communicate. This is with an action specification. This defines the Goal, Feedback, and Result messages with which clients and servers communicate:

ActionClient发送Goal给ActionServer

Goal
To accomplish tasks using actions, we introduce the notion of a goal that can be sent to an ActionServer by an ActionClient. In the case of moving the base, the goal would be a PoseStamped message that contains information about where the robot should move to in the world. For controlling the tilting laser scanner, the goal would contain the scan parameters (min angle, max angle, speed, etc).

ActionServer发送给ActionClinet的反馈,周期反馈任务运行状态数据

Feedback
Feedback provides server implementers a way to tell an ActionClient about the incremental progress of a goal. For moving the base, this might be the robot's current pose along the path. For controlling the tilting laser scanner, this might be the time left until the scan completes.

ActionServer发给ActionClient的任务运行结果,只发送一次

Result
A result is sent from the ActionServer to the ActionClient upon completion of the goal. This is different than feedback, since it is sent exactly once. This is extremely useful when the purpose of the action is to provide some sort of information. For move base, the result isn't very important, but it might contain the final pose of the robot. For controlling the tilting laser scanner, the result might contain a point cloud generated from the requested scan.

相关文章

  • ROS ActionLib

    1.Overview 通常情况下使用topic和service即可满足系统的通讯需求 In any large R...

  • 04-actionlib入门-新建action client

    代码可在 actionlib_tutorials 软件包中可见,可以以先阅读 actionlib 软件包再开始教程...

  • 04-actionlib入门

    入门示例 下面是两个辅助的actionlib工作包教程,可以通过下面的命令浏览actionlib_tutorial...

  • Actionlib

    适用环境 ROS中的服务service是一问一答的形式,你来查询了,我就返给你要的信息。action也有服务的概念...

  • ROS 控制 Motoman 真实机器人

    环境 Ubuntu 18.04 ROS Melodic 步骤 1.安装ROS   安装ROS, 创建并初始化ROS...

  • ROS安装教程(1) - 安装

    ROS安装教程目录 ROS安装教程(1) - 安装(本章)ROS安装教程(2) - 配置ROS安装教程(3) - ...

  • ROS安装教程(2) - 配置

    ROS安装教程目录 ROS安装教程(1) - 安装ROS安装教程(2) - 配置(本章)ROS安装教程(3) - ...

  • Ros机器人

    Ros机器 Ros机器

  • ROS.1 安装 基于ubunut melodic版本

    安装 http://wiki.ros.org/cn/ROS/Installationhttp://wiki.ros...

  • ROS安装教程(3) - 测试

    ROS安装教程目录 ROS安装教程(1) - 安装ROS安装教程(2) - 配置ROS安装教程(3) - 测试(本...

网友评论

      本文标题:ROS ActionLib

      本文链接:https://www.haomeiwen.com/subject/bboklqtx.html