一\Actionlib概念

在ROS系统中,有时需发送请求给某个节点完成相应的任务,同时获得一个一个响应,这种情况下可以通过ROS服务来 完成;然而,在某些情况下,服务需要很长时间才能执行完,如让机器人到达一个指定的地点,用户想要取消或者定期得到请求执行的进度的反馈,这个时候我们选择actionlib来完成.

二\Actionlib的实现

三\服务器的状态转移(server State transitions)

当客户端接受到目标之后,首先进入挂起的状态,如果服务器拒绝了(setRejected)请求,那么它最终的状态变为rejected被拒绝.如果被接受(setAccepted)则为激活的状态,可能由于服务器内部的某种原因使该任务终止了(setAborted),如果我们在执行目标的时候客户端有一个请求取消的命令(CancelRequest),则状态会变为PREEMPTING(正在抢占),正在抢占状态呢,如果由于服务器内部某种原因终止了则会变为ABORTED,如果是被取消掉,则状态为抢占(PREEMPTED).在激活的状态下如果是成功则设置为SUCCEEDED.在挂起的状态下(PENDING)仍然有客户端的请求取消(cancelRequest),那么这是时候服务器并不知道目标有没有被取消,这个时候的状态为RECALLING,如果它被再次取消掉setcancel,那么它的状态就变为RECALLED.如果它被setrejected,那么它的状态就变为REJECTED.

action文件是类似于我们定义的消息文件,它与消息和服务是基本一致的,

下面是它的定义首先是目标变量type goal_var,然后是结果变量,最后是反馈的变量.

这节课以计算斐波拉契数列为例子来说明Action文件

下面创建一个包

然后编译之

catkin_make

然后在包下面新建一个文件夹叫做action,然后再在下面新建一个文件把上面的action放进去

进入package.xml文件

进入CMakeLists.txt

首先添加动作action文件

完成以上步骤后,保存再编译

生成了下面一些动作的头文件

下面来简单的完成服务器和客户端

在客户端中的类的构造函数参数有一个NodeHandle,客户端的名字,以及默认的spin_thread=true自动等待消息的回调.

对于服务器的构造函数也有一个NodeHandle,服务器的名字,回调函数,以及是否自动运行.

以实际例子为例

创建一个源文件fibonacciclient.cpp

下面来看看该客户端都完成了什么任务:

首先创建一个客户端,然后等待服务,如果与服务器连接上之后,再创建一个Fibonacci goal对象,接着对goal赋值,并发送目标goal,接着是等待结果,如果结果在30s内完成了,则返回true,输出状态否则返回false.

对于客户端获得结果反馈的两种方法:

由于上面写的第一种客户端必须等待它的结果,即waitForResult,二第二种客户端可以得到它在执行过程中的反馈.

创建一个源文件fibonacciclientprogress.cpp

s上面是三个回调函数的原型

进入CMakeLists.txt

add_executable(fibonacciclient src/fibonacciclient.cpp)

add_executable(fibonacciclientprogress src/fibonacciclientprogress.cpp)

target_link_libraries(fibonacciclient ${catkin_LIBRARIES})

target_link_libraries(fibonacciclientprogress ${catkin_LIBRARIES})

然后编译

catkin_make

第十二课 Actionlib(1)的更多相关文章

  1. Kali Linux Web 渗透测试— 第十二课-websploit

    Kali Linux Web 渗透测试— 第十二课-websploit 文/玄魂 目录 Kali Linux Web 渗透测试— 第十二课-websploit..................... ...

  2. NeHe OpenGL教程 第四十二课:多重视口

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  3. NeHe OpenGL教程 第三十二课:拾取游戏

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  4. NeHe OpenGL教程 第二十二课:凹凸映射

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  5. NeHe OpenGL教程 第十二课:显示列表

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  6. 如何用three.js(webgl)搭建3D粮仓、3D仓库、3D物联网设备监控-第十二课

    序: 最近因为疫情,居家办公,索性翻翻之前的项目案例,总结总结. 这次疫情,深圳停摆,群众也挺恐慌的,封闭前一天,超市被抢购一空,虽然官方媒体一再强调,材米油盐蔬菜肉类管够,但是任然挡不住群众们的抢购 ...

  7. 斯坦福第十二课:支持向量机(Support Vector Machines)

    12.1  优化目标 12.2  大边界的直观理解 12.3  数学背后的大边界分类(可选) 12.4  核函数 1 12.5  核函数 2 12.6  使用支持向量机 12.1  优化目标 到目前为 ...

  8. 第十二课 CSS基本选择器 css学习2

    基础选择器一.标签选择器(元素选择器)标签选择器是指用HTML标签名称作为选择器,按标签名称分类语法:标签名{属性1:属性值1;属性2:属性值2;属性3:属性值3;} 二.类选择器1.类选择器使用&q ...

  9. 接口测试第十二课(fidller过滤)(转)

    转自: 经常有人问我,如何只抓手机上某个应用的请求包?在使用fiddler抓手机包的过程中,fiddler会话框上瞬间就满屏了,因为它不仅抓到手机上的请求数据包,也抓到了PC端的网络请求包.这时候很难 ...

随机推荐

  1. LeetCode Next Closest Time

    原题链接在这里:https://leetcode.com/problems/next-closest-time/description/ 题目: Given a time represented in ...

  2. 并发问题 关于Redis

    并发问题 关于Redis [吐槽]Jimesembria 付费请人解这个BUG , 有没有php同学有兴趣,(问题原因是理论上是5分钟内不生产同样金额的订单, 但是由于并发原因没控制好) 10:34: ...

  3. Python学习之变量的作用域

    学习地址:http://www.jianshu.com/p/17a9d8584530 1.变量作用域LEGB 1.1变量的作用域 在Python程序中创建.改变.查找变量名时,都是在一个保存变量名的空 ...

  4. 【转】使用JMeter 完成常用的压力测试(二)

    使用JMeter 完成常用的压力测试 Login.jsp 和welcome.jsp.其中 login.jsp 负责生成 User 对象,并调用 User 的login.当 login 返回为 true ...

  5. 【转】使用Jmeter针对ActiveMQ JMS Point To Point压力测试

    准备工作 针对JMS类型的Sampler,需要额外的jar包(这里用的是apache ActiveMQ,将下载的AMQ apache-activemq-5.5.0根目录下的activemq-all-5 ...

  6. 根文件系统的构建与分析(四)之瑞士军刀busybox生成系统基本命令

    根文件系统的构建与分析(四) 转载请注明 http://blog.csdn.net/jianchi88   Author:Lotte   邮箱:baihaowen08@126.com ls /bin, ...

  7. 记录一下学习Android的小知识

    目前要设计即时通讯的整体架构,包括服务端.Android.IOS.PC.平板等等系统,所以需要研究一下手机的实现方式,开始从Android入手,偶尔在这记录下小知识. ADT: 1.页面功能请求结构, ...

  8. powerdesigner Oracle.sql转mysql.sql

    将要导入的库的所有表的表结构(不要表数据,只要表结构)导出成一个.sql文件. 在PowerDesinger里找到 File -->> Reverse Engineer --->&g ...

  9. pl/sql Command Window

    由于工作需要,最近需要执行sql脚本,之前一直在用执行按钮操作,但最近公司制定了一套标准,其中就有执行sql脚本规范: 以前执行存存储过程: 现在修改存储过程如下: 第一步,打开对应窗口: 第二步,输 ...

  10. vmware 仅主机模式 ip配置

    首先关闭防火墙 主机(宿主机器 win7) 虚拟机(xp) 3..重要提示:  如果ping不通首先考虑防火墙的问题!!! vmware配置: nat模式下玩耍: 1. 配置nat的虚拟网卡:  2. ...