第十二课 Actionlib(1)

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

时间: 2024-08-10 21:30:11

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

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

Kali Linux Web 渗透测试— 第十二课-websploit 文/玄魂 目录 Kali Linux Web 渗透测试— 第十二课-websploit............................................... 1 Websploit 简介........................................................................................... 2 主要功能...........

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

转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢. NeHe OpenGL第四十二课:多重视口 多重视口 画中画效果,很酷吧.使用视口它变得很简单,但渲染四次可会大大降低你的显示速度哦:) 欢迎来到充满趣味的另一课.这次我将向你展示怎样在单个窗口内显示多个视口.这些视口在窗口模式下能正确的调整大小.其中有

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

转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢. NeHe OpenGL第二十二课:凹凸映射 凹凸映射,多重纹理扩展: 这是一课高级教程,请确信你对基本知识已经非常了解了.这一课是基于第六课的代码的,它将建立一个非常酷的立体纹理效果. 这一课由Jens Schneider所写,它基本上是由第6课改写而来

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

转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢. NeHe OpenGL第十二课:显示列表 显示列表: 想知道如何加速你的OpenGL程序么?这一课将告诉你如何使用OpenGL的显示列表,它通过预编译OpenGL命令来加速你的程序,并可以为你省去很多重复的代码. 这次我将教你如何使用显示列表,显示列表将

【C++探索之旅】第一部分第十二课:指针一出,谁与争锋

内容简介 1.第一部分第十二课:指针一出,谁与争锋 2.第一部分第十三课预告:第一部分小测验 指针一出,谁与争锋 上一课<[C++探索之旅]第一部分第十一课:小练习,猜单词>中,我们用一个小游戏来总结了之前几课学习的知识点. 现在,终于来到第一部分的最后一个知识点了,也是C++的基础部分的最后一个讲题.之后进入第二部分,就会开始面向对象之旅.因此,这一课也注定不平凡.系好安全带吧,因为马力要加足了! 指针这个C系语言的难点(著名的C语言里也有指针),令无数英雄"尽折腰",也

第三十二课 二维数组及其定义 【项目1-2】

第三十二课  二维数组及其定义 项目一 [折腾二维数组] 创建一个5行4列的二维整型数组,通过初始化,为数组中的前两列的10个元素赋初值,然后: 通过键盘输入,使后两列的10个元素获得值: 按行序优先输出数组元素: 将所有元素值乘以3后保存在数组中: 按列序优先输出(输出的第一行是数组中的第一列--,其实输出的就是"转置"): 将数组"倒"着输出(即最后一行最后一列的最先输出,第0行第0列的最后输出): 输出数组中的所有偶数: 输出所有行列下标之和为3的倍数的元素值

linux就该这么学第十二课

linux就该这么学第十二课 Apache 美国 Nginx 俄罗斯 极限挑战: 128M linux+网站 64M linux+网站 32M linux+网站 网站报错:500 502 硬件资源超负荷 LAMP linux apache mysql php LNMP linux nginx mysql php 光盘永久挂载 /dev/cdrom /media/cdrom iso9660 defaults 0 0 安装httpd服务 即apche服务 网站数据存放路径:/var/www/html

2018-07-30 第三十二课

第三十二次课 shell编程(二) 目录 十五.shell中的函数 十六.shell中的数组 十七.告警系统需求分析 十八.告警系统主脚本 十九.告警系统配置文件 二十.告警系统监控项目 二十一.告警系统邮件引擎 二十二.运行告警系统 十五.shell中的函数 函数就是把一段代码整理到了一个小单元中,并给这个小单元起一个名字,当用到这段代码时直接调用这个小单元的名字即可.定义函数必须要放在最前面.定义好的函数相当于是命令. 语法格式 //name属性定义了赋予函数的唯一名称.脚本中定义的每个函数

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

12.1  优化目标 12.2  大边界的直观理解 12.3  数学背后的大边界分类(可选) 12.4  核函数 1 12.5  核函数 2 12.6  使用支持向量机 12.1  优化目标 到目前为止,你已经见过一系列不同的学习算法.在监督学习中,许多学习算法的性能都非常类似,因此,重要的不是你该选择使用学习算法 A 还是学习算法 B,而更重要的是, 应用这些算法时,所创建的大量数据在应用这些算法时,表现情况通常依赖于你的水平.比 如:你为学习算法所设计的特征量的选择,以及如何选择正则化参数,