前面我们探讨了ros的两种通信方式,话题和服务,服务机制常用于同步的请求/响应交互方式。

话题则是单工通信,尤其是接收方有多时(比如传感器数据流),然而,当需要完成的任务比较复杂时,

服务和话题都不是一个很好的选择,为了解决这些问题,ros引入了动作机制,ros的动作机制非常适合作为时间

不确定,目标导向型的操作的接口,服务是同步的,动作是异步的,与服务的请求/响应结构类似,从原理上来看,

动作使用话题来实现,其本质相当于一个规定了一系列话题(目标,结果,反馈)的组合使用方法的高层协议。

动作的定义

创建一个动作,首先要在动作文件中定义目标,结果和反馈的消息格式。动作定义文件的后缀名为.action。其组成与服务的.srv文件非常类似。只是多了一个消息项。

在编译的过程中,.action文件也会打包为一个消息类型。

为了方便,我们定义一个行为类似定时器的动作。

例:定义一个人满足定时器要求的动作(Timer.action)

  # This is an action definition file, which has three parts: the goal,
#the
# result, and the feedback.
#
# Part : the goal, to be sent by the client
#
# The amount of time we want to wait
duration time_to_wait
---
# Part : the result, to be sent by the server upon completion
#
# How much time we waited
duration time_elapsed
# How many updates we provided along the way
uint32 updates_sent
---
# Part : the feedback, to be sent periodically by the server during
# execution.
#
# The amount of time that has elapsed from the start
duration time_elapsed
# The amount of time remaining until we're done
duration time_remaining

就像定义服务文件一样,我们用三个短划线表示不同部分的分隔符,动作文件有三个部分(目标,结裹,和反馈)。动作定义文件Timer.action应该ROS包的目录下。位于basic包下。

编写好定义文件后,下一步就是运行catkin_make,创建该动作实际使用的代码和类定义。需要在CMakeLists.txt中和package.xml中添加一些内容。

首先在CMakeLists.txt中添加如下

将actionlib_msgs附加在包下

 find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
#other packages are aleardy listed here
actionlib_msgs

确保你已经在generate_message()中列出所有的消息依赖。

  generate_messages(
DEPENDENCIES
std_msgs
actionlib_msgs
)

最后在catkin_package中添加actionlib_msg依赖

 catkin_package(
# INCLUDE_DIRS include
# LIBRARIES basic
CATKIN_DEPENDS roscpp rospy std_msgs message_runtime actionlib_msgs
# DEPENDS actionlib_msgs

其次在package.xml中添加依赖如下

<build_depend>actionlib_msgs</build_depend>
<build_export_depend>actionlib_msgs</build_export_depend>

一定要添加不然没有依赖就运行不了

上述所有工作到位后,在catkin工作区的顶层目录运行catkin_make.动作被正确编译后会生成一些消息文件,包括Timer.action ,TimerActionFeedback.msg ,TimerActionGoal.msg ,TimerActionResult.msg ,TimerFeedback.msg ,TimerGoal.msg和TimerResult.msg。这些消息文件就会被用于实现动作的client/server协议。

这样就完成了动作的定义。

ROS机器人之动作(一)的更多相关文章

  1. ros机器人之动作(二)

    前面我们实现了动作的定义,接下来实现动作的功能 实现一个基本的动作服务器 准备好所需的动作定义后就可以开始编写代码了.动作和话题一样,都是使用回调机制,即回调函数会在收到消息时被唤醒和调用. 例:si ...

  2. ros机器人开发概述

    1.       ROS项目开发流程? 参照古月大神写的ROS探索总结系列:http://blog.exbot.net/archives/619 具体项目设计可看看<程序员>杂志的最新一篇 ...

  3. Learning ROS for Robotics Programming - Second Edition(《学习ROS机器人编程-第二版》)

    Learning ROS for Robotics Programming - Second Edition <学习ROS机器人编程-第二版> ----Your one-stop guid ...

  4. ROS机器人程序设计(原书第2版)补充资料 教学大纲

    ROS机器人程序设计(原书第2版) 补充资料 教学大纲 针对该书稍后会补充教学大纲.教案.多媒体课件以及练习题等. <ROS机器人程序设计>课程简介 课程编号:XXXXXX 课程名称:RO ...

  5. ROS机器人程序设计-学习小结-

    ROS官网 |易科 |虞坤林 |古月居 |ROSClub 学习ROS相关书籍推荐:http://blog.csdn.net/zhangrelay/article/details/52244746 RO ...

  6. ROS机器人程序设计(原书第2版)补充资料 (拾) 第十章 使用MoveIt!

    ROS机器人程序设计(原书第2版)补充资料 (拾) 第十章 使用MoveIt! 书中,大部分出现hydro的地方,直接替换为indigo或jade或kinetic,即可在对应版本中使用. MoveIt ...

  7. ROS机器人程序设计(原书第2版)补充资料 (玖) 第九章 导航功能包集进阶 navigation

    ROS机器人程序设计(原书第2版)补充资料 (玖) 第九章 导航功能包集进阶 navigation 书中,大部分出现hydro的地方,直接替换为indigo或jade或kinetic,即可在对应版本中 ...

  8. ROS机器人程序设计(原书第2版)补充资料 (零) 源代码、资料和印刷错误修订等 2017年01月01日更新

    ROS机器人程序设计(原书第2版)补充资料 (零) 源代码等 ROS官网 版)部分内容修订 页:第1行,删去$ 页:第6行,float64 y 前面加一个空格 页:中间创建主题:下面程序不用换行,(& ...

  9. ROS机器人程序设计(原书第2版)学习镜像分享及使用说明

    ROS机器人程序设计(原书第2版)学习镜像分享及使用说明 系统用于ROS爱好者学习交流,也可用于其他用途,并不局限于ROS. 这款镜像文件是基于一年前的Ubuntu ROS Arduino Gazeb ...

随机推荐

  1. Mysql 最全查询语句

    基本查询语句及语法: select distinct from where group by having limit 一.单表查询 前期表与数据准备: # 创建一张部门表 create table ...

  2. 【题解】剪纸条(dp)

    [题解]剪纸条(dp) HRBUST - 1828 网上搜不到题解?那我就来写一篇吧哈哈哈 最优化问题先考虑\(dp\),设\(dp(i)\)表示将前\(i\)个字符(包括\(i\))分割成不相交的回 ...

  3. 洛谷$P3308\ [SDOI2014]LIS$ 网络流

    正解:网络流 解题报告: 传送门$QwQ$ 恩先不考虑关于那个附加属性的限制,考虑这题怎么做? 首先这题从名字开始就让人忍不住联想起网络流24题里的那个最长不下降子序列?于是同样考虑预处理一个$f$呗 ...

  4. 输入URI,按下回车发生了什么?

    当我们输入URL,按下回车发生了什么? 这个题目很俗套- -但是是面试经常出现的题目了.今天听尼古拉斯•屌•大斌哥介绍关于从URI到浏览器呈现给我们页面发生了什么.感觉收获颇多.索性就翻阅了一些其他资 ...

  5. X-Admin&ABP框架开发-租户管理

    软件即服务概念的推动,定制化到通用化的发展,用一套代码完成适应不同企业的需求,利用多租户技术可以去做到这一点.ABP里提供了多租户这一概念并且也在Zero模块中实现了这一概念. 一.多租户的概念 单部 ...

  6. 【原创】快速失败机制&失败安全机制

    这是why技术的第29篇原创文章 之前在写<这道Java基础题真的有坑!我求求你,认真思考后再回答.>这篇文章时,我在8.1小节提到了快速失败和失败安全机制. 但是我发现当我搜索" ...

  7. 原生JavaScript实现评分效果

    一.实现原理: 1.要设置一个“大总管变量”,用于记录点击时的星星下标,只声明不赋值. 2.移入每个星星时,先把所有的星星恢复到默认状态:再把当前星星及在它之前的星星设为选中状态. 3.移出每个星星时 ...

  8. Scala实践2

    一.Scala基本类型和操作 1.1  基本类型 Scala的基本类型与Java基本类型相同,都是byte.short.int.long.char.string.float.double.boolea ...

  9. 【开源】后台权限管理系统升级到aspnetcore3.1

    *:first-child { margin-top: 0 !important; } .markdown-body>*:last-child { margin-bottom: 0 !impor ...

  10. HttpClient工具类的使用

    package com.hourui.gmall.util; import org.apache.http.HttpEntity; import org.apache.http.HttpStatus; ...