一\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. 【策略】一致性Hash算法(Hash环)的java代码实现

    [一]一致性hash算法,基本实现分布平衡. package org.ehking.quartz.curator; import java.util.SortedMap; import java.ut ...

  2. 10 结构体和类 - —— 《Swift3.0 从入门到出家》

    Swift中的面向对象5个要素:枚举.结构体.类.协议.扩展 面向对象研究的是对象,完成一件事情需要多个对象参与,是生活的映射 Swift中结构体和类非常相似,也就是结构体能完成类的所有功能.结构体是 ...

  3. PCB 锣板和半孔工艺的差别

    PCB 锣板和半孔工艺的差别 PCB 在做模块时会用到半孔工艺,但是由于半孔是特殊工艺. 需要加费用,打板时费还不低. 下面这个图是锣板和半孔工艺的差别. https://www.amobbs.com ...

  4. FastAdmin 后台 UserRule 勾选不完整 Bug 修复

    FastAdmin 后台 UserRule 勾选不完整 Bug 修复 当用户权限的级选择时出现有部分没有选中. 修复来自在 qmit 1 public static function getTreeL ...

  5. eclipse “”base revision” vs. “latest from repository”

    base revision(基本版本):代表的是最近一次从svn服务器上面获取的版本内容:本质还是本地版本,只不过这个版本是上次从服务器上面获取的. lastest from resource(资源库 ...

  6. spring切面配置,代理用jdk和cglib的区别

    jdk的动态代理大家应该都听说过,条件是必须要有接口:cglib不要求接口,那么它是怎么实现切面的呢?很简单,通过继承,它动态的创建出一个目标类的子类,复写父类的方法,由此实现对方法的增强.看例子: ...

  7. jinja2的一些用法

    1.split用法以及乘法运算 {% set user_list=l.users.split(',') %} <tr> <td>{{ l.name }}</td> ...

  8. Linux Change The I/O Scheduler For A Hard Disk

    ow do I change the I/O scheduler for a particular hard disk without rebooting my Linux server system ...

  9. codeforce 985C Liebig's Barrels(贪心+思维)

    Liebig's Barrels time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...

  10. win7 网站发布备注

    1.更改 .NET Framework 版本(改原设置v2.0 为v4.0) 2.程序池设置 3.基本设置 4.Web.config (debug="false") <sys ...