actionlib的身世之谜

不知道为什么会把这么严肃认真的一篇技术整理贴起这么一个故事会风格类似的名字,就这样吧:^)shenmegui

园子里有人整理了actionlib的初学者教程,我来整理下actionlib的细节描述吧。初版偏向于逐字翻译+少量个人理解。等我再长大一些感悟更多的时候再修改更新我的更多理解。我boss说开始学ROS相关就是会很乱的。我是一个喜欢划分割线的奇女子~\(≧▽≦)/~



一、服务端描述

1)goal是在ActionClient端启动的(client会发送sendgoal嘛),一旦ActionServer接收到goal请求,它就会为这个goal创建一个状态机来追踪goal的状态转换,重复三遍,状态机是跟踪goal的不是跟踪ActionServer的:

zou是这个状态转换图,下面来细说这些个状态:

2)服务端状态

  • 这些状态的转换大多是服务的实施者触发的(这么生硬的翻译,其实就是服务的程序下同),用小一串命令:

    • setAccepted - 检查到有goal之后,决定开始处理它
    • setRejected - 检察到goal后,决定不去处理它,因为它是个无效请求(溢出,资源不可用,无效等)
    • setSucceeded - 告知goal被正确执行
    • setAborted - 告知goal在处理时遇到了问题不得不被终止了
    • setCanceled - 告知因cancle请求,goal不再被执行了

    action client也能异步触发状态转换:

    • CancelRequest: 客户端通知action server它想要server停止处理这个goal服务端状态
服务端状态
中间状态

(前面说了,simple的状态有三个,就是等待执行挂起)

  • Pending - goal还没有被ActionServer处理
  • Active - goal正在被AS处理
  • Recalling - goal没有被处理并且从客户端已发送取消它的命令,但AS还不确定goal已经被取消了(时差导致的?)
  • Preempting - goal正被处理呢,从AC端收到了取消请求,但AS还不确定goal已经被取消了
终点状态
  • Rejected - AC没有发cancle请求,goal被AS不处理直接拒绝了The goal was rejected by the action server without being processed and without a request from the action client to cancel
  • Succeeded - goal被AS成功实现 was achieved successfully by the action server
  • Aborted - goal被AS终止没有AC的cancle请求
  • Recalled - 在AS开始执行之前这个goal被另一个goal或者cancle请求取消了
  • Preempted - 处理中的goal被另一个goal或者AC的取消请求给取消了

并发问题

setAccepted-CancelRequest vs CancelRequest-setAccepted:

直接的说就是AS能在收到CR之后仍然能把goal给SA。这是因为执行CR的异步竞争机制,那是,因为除了server之外的其他代码触发了状态转换,server不能确定现在到底是在[PENDING]还是 [RECALLING]状态。



二、客户端描述

1)客户端状态机

actionlib中,认为server的状态机是主机,client的状态机是从机/耦合机,它在追随主机的状态。

2)客户端转换

服务端触发转换

  • Reported [State]: 因为client在追随主机状态,很多状态的转换都是通知自己状态转换后触发client的状态转换
  • Receive Result Message: 这种状态,server给client发送result message。接收到result就意味着追踪这个goal 结束了

客户端触发转换

  • Cancel Goal: 请求server停止处理这个goal

"略过" 状态

  • 鉴于ROS是基于传输层协议,非常有可能client并不能收到所有server状态的更新。因此,我们允许客户端状态机“略过”server的触发状态

    • Example: 客户端在 [WAITING FOR GOAL ACK]状态, 收到 [PREEMPTED]server的更新状态, 客户端状态可以跳过 [ACTIVE]状态,直接转移到  [WAITING FOR RESULT]状态
  • 因为多AC可以连接单一AS,因此允许一个client取消另一个client的goal。因此当收到server的[RECALLING]状态时允许client从 [PENDING] 转移到 [RECALLING]状态


三、Action接口和传输协议

那天例会时候讲过了,我先整理四,等整理完了再把三补完整。不然会再而衰三而竭的



四、协议

1)Simple Action Client

一般,高层的应用和可执行文件并不关心goal是否被处理或是否完整。他们才关心中间状态呢。Simple Action Client的原始客户端状态机只有三个状态:Pending, Active, & Done

1.1)客户端状态模糊

要开会了,等会写。。。

时间: 2024-08-04 12:27:27

actionlib的身世之谜的相关文章

ROS知识(17)----Actionlib使用的例子

1.Actionlib原理 英文版:DetailedDescription 翻译版:actionlib的身世之谜 2.Actionlib官方教程 Actionlib是ros的重要部件,对于复杂动作的执行问题,例如机械臂捉取物品和move_base实现等,使用actionlib是非常有效的.参考官方的Actionlib教程:actionlib/Tutorials ,我将例子代码做了整理,请参考以下的下载例子. 2.下载例子 代码:actionlib_tutorials.zip

ROS actionlib学习(一)

actionlib是ROS中一个很重要的功能包集合,尽管在ROS中已经提供了srevice机制来满足请求-响应式的使用场景,但是假如某个请求执行时间很长,在此期间用户想查看执行的进度或者取消这个请求的话,service机制就不能满足了,但是actionlib可满足用户这种需求.例如,控制机器人运动到地图中某一目标位置,这个过程可能复杂而漫长,执行过程中还可能强制中断或反馈信息,这时actionlib就能大展伸手了. actionlib使用client-server工作模式,ActionClien

第十二课 Actionlib(1)

一\Actionlib概念 在ROS系统中,有时需发送请求给某个节点完成相应的任务,同时获得一个一个响应,这种情况下可以通过ROS服务来 完成;然而,在某些情况下,服务需要很长时间才能执行完,如让机器人到达一个指定的地点,用户想要取消或者定期得到请求执行的进度的反馈,这个时候我们选择actionlib来完成. 二\Actionlib的实现 三\服务器的状态转移(server State transitions) 当客户端接受到目标之后,首先进入挂起的状态,如果服务器拒绝了(setRejected

actionlib 举例

catkin_create_pkg learning_actionlib actionlib message_generation roscpp rospy std_msgs actionlib_msgs action_client.cpp /* 下面显示怎样给名字为 "do_dishes"的DoDishes ActionServer 发送goal */ #include <learning_actionlib/DoDishesAction.h> #include <

AdaBoost 人脸检测介绍(1) : AdaBoost身世之谜

0. 引言 学习和使用AdaBoost算法来研究人脸检测有好几个月了,一直以来想对AdaBoost的算法和原理做一个总结,在网上也参考了很多牛人的博客和看了一些专业论文,总是觉得总结的不够全面和详细,因此想对AdaBoost的来龙去脉做一个详细的总结,对算法里涉及到的原理,自己经过细致考证和推理,给出了详细的理论证明和代码验证,而不仅仅是停留在只知结果而不知推理的层面上.因此需要花不少时间来总结和写下自己在AdaBoost道路上学习和研究的心路历程!在后面会给出所有的参考文献,对网上众多的未曾谋

ROS actionlib学习(二)

在ROS actionlib学习(一)中的例子展示了actionlib最基本的用法,下面我们看一个稍微实际一点的例子,用actionlib计算斐波那契数列,并发布反馈(feedback)和结果(result).斐波那契数列指的是这样一个数列: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368........ 这个数列从第3项开始,每一项都等于

ROS actionlib学习(三)

下面这个例子将展示用actionlib来计算随机变量的均值和标准差.首先在action文件中定义goal.result和feedback的数据类型,其中goal为样本容量,result为均值和标准差,feedback为样本编号.当前样本数据.均值和标准差. #goal definition int32 samples --- #result definition float32 mean float32 std_dev --- #feedback int32 sample float32 dat

ROS知识(12)----ActionLib的使用(一)

1.原理 1.1功能 1.2框架 2.例子 3.源码 the_first_actionlib_sample

actionlib

如果服务花费很长时间去执行,用户可能在程序执行或者如何获得周期反馈时有取消该请求的能力. Goal, Feedback, & Result 为了用action来完成任务,我们引用ActionClient发送给ActionServer目标点概念.在移动基体情况下,目标是PoseStamped的消息,包含有关机器人在世界坐标系中目标点位置信息.用于控制倾斜激光扫描仪,目标将包含扫描参数(最小角度,最大角度,速度等). 反馈提供服务器告诉给ActionClient关于到达目标进程的方法.对于移动机器人