前面我们探讨了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库、表、记录的基本操作

    库的操作 ---> 类似于文件夹 - 增: 创建数据库: create database db1; 创建带字符集的数据库: create database db2 charset=utf8; - ...

  2. VS运行速度缓慢卡顿 2020年1月3日23:25:35

    Java中一个类文件对应一个类 C#中一个类文件中可以包含多个类 使用visual studio2017过程中,发现启动调试时,总是会很慢,结束调试也会很慢,在这里可以通过关闭掉IntelliTrac ...

  3. 图解Go语言的context了解编程语言核心实现源码

    基础筑基 基于线程的编程语言中的一些设计 ThreadGroup ThreadGroup是基于线程并发的编程语言中常用的一个概念,当一个线程派生出一个子线程后通常会加入父线程的线程组(未指定线程组的情 ...

  4. 1073 多选题常见计分法 (20分)C语言

    批改多选题是比较麻烦的事情,有很多不同的计分方法.有一种最常见的计分方法是:如果考生选择了部分正确选项,并且没有选择任何错误选项,则得到 50% 分数:如果考生选择了任何一个错误的选项,则不能得分.本 ...

  5. 高效测试框架推荐之Ginkgo

    自2015年开始,七牛工效团队一直使用Go语言+Ginkgo的组合来编写自动化测试用例,积累了大约5000+的数量.在使用和维护过程中,我们觉得Ginkgo的很多设计理念和功能非常赞,因此特分享给大家 ...

  6. 《工具》centos 7.x 下安装 JDK,超详细总结一看就会

    第一步 检查 JDK 查看JDK版本,在命令行输入:java -version [root@test ~]# java -version bash: java: command not found 如 ...

  7. asp.net core 基于 JSON 实现多语言

    asp.net core 基于 JSON 实现多语言 Intro 上次我们提到了,微软默认提供基于资源文件的多语言本地化,个人感觉使用起来不是太方便,没有 json 看起来直观,于是动手造了一个轮子, ...

  8. cogs 886. [USACO 4.2] 完美的牛栏 二分图 匈牙利算法

    886. [USACO 4.2] 完美的牛栏 ★★☆   输入文件:stall4.in   输出文件:stall4.out   简单对比时间限制:1 s   内存限制:128 MB USACO/sta ...

  9. url的分发

    一.分发 补充:通过查看源码:可以通过二级路由include进行二次分发 位置:urls.py urlpatterns = [ path('admin/', admin.site.urls), pat ...

  10. Java单体应用 - Markdown - 01.简介

    原文地址:http://www.work100.net/training/monolithic-markdown.html 更多教程:光束云 - 免费课程 简介 序号 文内章节 视频 1 概述 2 特 ...