Actionlib

适用环境

ROS中的服务service是一问一答的形式,你来查询了,我就返给你要的信息。
action也有服务的概念,但是它不一样的地方是:不是一问一答,而多了一个反馈,它会不断反馈项目进度。如navigation下的move_base package,你设定了目标点,反馈信息可能是机器人在规划路径上的即时位姿,直到机器人到达目标点,返回SUCCEEDED消息。

所以action lib适用于无法及时返回结果,处理时间较长的场合。还有需要实时获取进度的场合。

步骤一:创建action文件

action消息和msg和srv很像,

其中包括了三个部分:1. goal;2. result; 3.feedback message


image.png

步骤二:修改CMakelist.txt和package.xml

CMakelist.txt

image.png

image.png

package.xml

catkin_make
在第二步之后进行catkin_make,如果去devel下面msg查看,可以看到7个消息文件。

image.png

如果action文档的名字是DoDishes,那么这7个文档分别是

DoDishesAction
DoDishesActionFeedback
DoDishesActionGoal
DoDishesActionResult
DoDishesFeedback
DoDishesGoal
DoDishesResult

步骤三:创建client

image.png

这里引入了7个msg中的两个:DoDishesAction 和 DoDishesGoal

有3个回调函数:

  1. action激活后回调
  2. 完成之后回调
  3. 过程中反馈的回调

步骤四:创建server

image.png

这里引入了三个msg:DoDishesAction、DoDishesGoal 和 DoDishesResult

有一个回调函数:

  1. 有action goal 到来时的执行回调函数

创建了两个重要变量:

image.png

用了两个函数来发送这两个变量:

遗留问题

至此我们用到了7个msg中的4个,而其余的不知道怎么用:
大致上明白了,

DoDishesActionFeedback
DoDishesActionGoal
DoDishesActionResult

DoDishesFeedback
DoDishesGoal
DoDishesResult

再往上封装了一层,比如:

goal = DoDishesActionGoal
goal1 = DoDishesGoal

goal.goal 的类型就是DoDishesGoal

对于actionlib,有两个状态机,我们看一下
server端状态机:

image.png

client状态机

image.png

其中有些操作在SimpleActionServer和SimpleActionClient是没有的,但是大部分用simple这个类就足够了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 新建 action messages 在新建action之前,有必要先定义好什么是目标goal,结果result,...
    joey_zhou阅读 5,078评论 0 0
  • 入门示例 下面是两个辅助的actionlib工作包教程,可以通过下面的命令浏览actionlib_tutorial...
    joey_zhou阅读 3,089评论 0 0
  • 引入 定义 等待服务 发送goal 发送后可以指定完成函数,激活函数和回调函数 等待 阻塞,直到返回结果 返回结果...
    marine0131阅读 9,674评论 0 2
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 11,698评论 0 17
  • 我自身最大的问题就是大大咧咧 心直口快 这个性格不是不好 确实 看工作了 我的工作是二手房中介销售顾问 每...
    最好的时间遇见你阅读 1,930评论 0 0