一\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

最新文章

  1. php判断是否为微信浏览器访问
  2. 实现windows批处理下的计时功能
  3. hadoop1.1.2安装过程
  4. MySQL学习笔记——安装及配置环境
  5. Visual Studio 2013 and .NET 4.6
  6. UINavigationController的popViewControllerAnimated问题
  7. Order笔记-数据库创建
  8. [Kubernetes]基于角色的权限控制之RBAC
  9. VMware要不要装在固态SSD上,虚拟机系统文件要不要放固态SSD上,虚拟机伤不伤固态SSD
  10. The connection string 'MysqlEF' in the application's configuration file does not contain the require异常
  11. HDFS常用API(2)
  12. hdu5236 Article
  13. Linux性能优化 第二章 性能工具:系统CPU
  14. Apache tica详述
  15. 团队作业5——英语学习/词典App行业Top5
  16. 1.红黑树和自平衡二叉(查找)树区别 2.红黑树与B树的区别
  17. JQuery--使用autocomplete控件进行自己主动输入完毕(相当于模糊查询)
  18. VERSIONINFO Resource
  19. h5 html5 模拟时钟 页面
  20. 封装axios方法之一

热门文章

  1. niosii dma实验中的一点感想
  2. Markdown编辑器推荐与语法教程--图片版
  3. Maven依赖war开发,找不到war里头的class解决方案
  4. $GLOBALS超级全局变量(PHP学习)
  5. Vue.js:计算属性
  6. 记一次oralce 11g r2 rac安装问题
  7. python学习(一) 基础知识
  8. Spring Cloud与分布式系统
  9. PHP字符串的处理(三)-字符串的输出
  10. Python中的闭包与迭代器