ROS机器人之动作(一)
前面我们探讨了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机器人之动作(一)的更多相关文章
- ros机器人之动作(二)
前面我们实现了动作的定义,接下来实现动作的功能 实现一个基本的动作服务器 准备好所需的动作定义后就可以开始编写代码了.动作和话题一样,都是使用回调机制,即回调函数会在收到消息时被唤醒和调用. 例:si ...
- ros机器人开发概述
1. ROS项目开发流程? 参照古月大神写的ROS探索总结系列:http://blog.exbot.net/archives/619 具体项目设计可看看<程序员>杂志的最新一篇 ...
- Learning ROS for Robotics Programming - Second Edition(《学习ROS机器人编程-第二版》)
Learning ROS for Robotics Programming - Second Edition <学习ROS机器人编程-第二版> ----Your one-stop guid ...
- ROS机器人程序设计(原书第2版)补充资料 教学大纲
ROS机器人程序设计(原书第2版) 补充资料 教学大纲 针对该书稍后会补充教学大纲.教案.多媒体课件以及练习题等. <ROS机器人程序设计>课程简介 课程编号:XXXXXX 课程名称:RO ...
- ROS机器人程序设计-学习小结-
ROS官网 |易科 |虞坤林 |古月居 |ROSClub 学习ROS相关书籍推荐:http://blog.csdn.net/zhangrelay/article/details/52244746 RO ...
- ROS机器人程序设计(原书第2版)补充资料 (拾) 第十章 使用MoveIt!
ROS机器人程序设计(原书第2版)补充资料 (拾) 第十章 使用MoveIt! 书中,大部分出现hydro的地方,直接替换为indigo或jade或kinetic,即可在对应版本中使用. MoveIt ...
- ROS机器人程序设计(原书第2版)补充资料 (玖) 第九章 导航功能包集进阶 navigation
ROS机器人程序设计(原书第2版)补充资料 (玖) 第九章 导航功能包集进阶 navigation 书中,大部分出现hydro的地方,直接替换为indigo或jade或kinetic,即可在对应版本中 ...
- ROS机器人程序设计(原书第2版)补充资料 (零) 源代码、资料和印刷错误修订等 2017年01月01日更新
ROS机器人程序设计(原书第2版)补充资料 (零) 源代码等 ROS官网 版)部分内容修订 页:第1行,删去$ 页:第6行,float64 y 前面加一个空格 页:中间创建主题:下面程序不用换行,(& ...
- ROS机器人程序设计(原书第2版)学习镜像分享及使用说明
ROS机器人程序设计(原书第2版)学习镜像分享及使用说明 系统用于ROS爱好者学习交流,也可用于其他用途,并不局限于ROS. 这款镜像文件是基于一年前的Ubuntu ROS Arduino Gazeb ...
随机推荐
- libcurl库的简单使用
#include <stdio.h> #include <tchar.h> #include <windows.h> #include <process.h& ...
- 洛谷$P4126\ [AHOI2009]$最小割 图论
正解:网络流+$tarjan$ 解题报告: 传送门$QwQ$ $umm$最小割的判定问题$QwQ$,因为并不会做是看的题解才会的,所以也没什么推导过程直接放结论趴$QwQ$ 首先跑个最大流,然后有. ...
- $Poj3714/AcWing\ Raid$ 分治/平面最近点对
$AcWing$ $Sol$ 平面最近点对板子题,注意要求的是两种不同的点之间的距离. $Code$ #include<bits/stdc++.h> #define il inline # ...
- DataX-MysqlWriter 插件文档
:first-child{margin-top:0!important}.markdown-body>:last-child{margin-bottom:0!important}.markdow ...
- IntelliJ IDEA的常用设置及快捷键
IntelliJ IDEA的常用设置及快捷键 基本设置 打开设置:ctrl+alt+s 修改主题.字体.字号 快捷键设置 创建项目和模块 标记源码文件 标记资源文件 设置jdk版本号 配置Tomcat ...
- 小白学 Python 爬虫(34):爬虫框架 Scrapy 入门基础(二)
人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...
- 微信小程序---自定义三级联动
在开发的很多电商类型的项目中,免不了会遇到三级联动选择地址信息,如果单纯的使用文本框给用户选择,用户体检可能就会差很多.今天我给大家整理了关于小程序开发利用picker-view组件和animatio ...
- 为什么说ArrayList是线程不安全的?
一.概述 对于ArrayList,相信大家并不陌生.这个类是我们平时接触得最多的一个列表集合类. 面试时相信面试官首先就会问到关于它的知识.一个经常被问到的问题就是:ArrayList是否是线程安全的 ...
- CDH安装详细测试正确
1. CDH简介 简单来说,Cloudera Manager是一个拥有集群自动化安装.中心化管理.集群监控.报警功能的一个工具(软件),使得安装集群从几天的时间缩短在几个小时内,运维人员从数十人降低到 ...
- org.springframework.core.type.classreading.ClassMetadataReadingVisitor 异常
今天项目启动的时候发现了一个异常: Exception in thread "main" org.springframework.beans.factory.BeanDefinit ...