1. msg

•msg:msg文件是简单的文本文件,用于描述ROS中消息(消息的各个参数项)。用于为不同的编程语言生成有关消息的源代码。

•srv:描述服务的文件,由两部分组成:请求和反馈;

msg文件放置在功能包的msg目录下,srv文件放置在srv目录下。

msgs只是一些每行带有类型和名字的文本文件,可以使用的类型如下:
•        int8, int16, int32, int64 (plus uint*)
•        float32, float64
•        string
•        time, duration
•        other msg files
•        variable-length array[] and fixed-length array[C]

ROS中有一个比较特殊的类型:Header,它包含ROS系统中常用的时间戳和坐标信息。一般在msg文件的第一行会指定为Header header。

下面为msg的例子,这个例子使用了Header,string字符串及两个其他类型的msgs。
  Header header
  string child_frame_id
  geometry_msgs/PoseWithCovariance pose
  geometry_msgs/TwistWithCovariance twist

srv文件非常类似于msg文件,他们包含两个部分,请求和反馈,这两个部分被“---”分隔开,下面为srv的一个例子。
int64 A
int64 B
---
int64 Sum

在上面的例子中,A和B是用于请求的变量,而Sum是反馈的结果变量。

2. Using msg
2.1 Creating a msg

我们在前面课程中创建的功能包里定义一个新的msg。

$ cd ~/catkin_ws/src/beginner_tutorials
$ mkdir msg
$ echo "int64 num" > msg/Num.msg

在上面例子中,*.msg文件只是简单的包含一行(定义信息)。如果必要,可以如下所示添加多个元素来生成一个复杂的文件:
string first_name
string last_name
uint8 age
uint32 score

还有一点需要确认的是,msg文件需要转换为C++,Python和其他编程语言的源代码。

打开package.xml文件,确保文件中存在下面两行定义:

<build_depend>message_generation</build_depend>
<run_depend>message_runtime</run_depend>

注意,在编译时,需要依赖“message_generation”,而在运行时,只需要依赖“message_runtime”。

利用你喜欢的文本编辑器(前面课程学习的rosed是一个不错的选择)打开CMakeLists.txt文件。

在CMakeLists.txt文件中添加message_generation到功能包查找项,以便于(节点)调用它们生成消息。只需简单的添加message_generation到COMPONENTS列表中即可,如下所示:
# Do not just add this line to your CMakeLists.txt, modify the existing line
find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs message_generation)

你也许注意到即使没有调用find_package中全部的依赖项,你的工程也可以正常编译。这是因为catkin集成了所有的工程,也许前期别的工程调用了find_package,而你的工程使用了同样的配置。但是如果单独编译时忘记添加,则将导致编译失败。

同样,需要确保运行时的依赖项添加进来:
catkin_package(
  ...
  CATKIN_DEPENDS message_runtime ...
  ...)

查找如下的代码区:
# add_message_files(
#  FILES
#  Message1.msg
#  Message2.msg
# )

去掉每行前面的注释符号“#”,并用你自己的.msg替换Message*.msg文件,替换后如下所示:
add_message_files(
  FILES
  Num.msg
)

通过手动添加.msg文件,确保了CMake在重新配置时知道这些新添加的.msg文件。

2.2 Using rosmsg

上面的介绍就可以产生一个msg文件了。借助于rosmsg show命令可以判断ROS是否能检测到它:

用法:

$ rosmsg show [message type]

示例:

[html] view plaincopyprint?$ rosmsg show beginner_tutorials/Num

$ rosmsg show beginner_tutorials/Num

得到执行结果:
•        int64 num

在前面的示例中,指令参数包含如下两个部分:
•        beginner_tutorials -- the package where the message is defined
•        Num -- The name of the msg Num.

如果你记不起msg文件存在于哪个功能包内,可以空缺功能包的名字:

$ rosmsg show Num

执行结果如下所示:
•        [beginner_tutorials/Num]:
•        int64 num

创建一个ROS msg的更多相关文章

  1. 创建一个ROS包

    先前笔者不知道catkin到底是个什么东东,后来终于在官方网站上找到了答案,原来catkin是ROS的一个官方的编译构建系统,是原本的ROS的编译构建系统rosbuild的后继者.catkin的来源有 ...

  2. 创建一个ROS工作空间(ROS Workspace)

    详细参照 http://wiki.ros.org/ROS/Tutorials/InstallingandConfiguringROSEnvironment1.mkdir -p ~/catkin_ws/ ...

  3. 建立一个ROS msg and srv

    msg是一个描述ROS消息字段的简单的文本文件,它们经常用来为消息产生不同语言的源代码. srv文件描述一个服务,它由请求和响应两部分组成. msg文件被存储在一个包的msg目录下,srv文件被存储在 ...

  4. ROS笔记1 安装及创建一个ROS Package

    安装 跟着官方的安装指引来就行了.安装前要先确定自己的ros版本和ubuntu版本.这二者是一一对应的. http://wiki.ros.org/ROS/Installation 主要是package ...

  5. ROS的初步学习--创建一个工作空间和一个程序包

    快速开始 创建工作区(workspace) 工作区可以作为一个独立的项目进行编译,存放ROS程序的源文件.编译文件和执行文件.建立工作区的方法如下: mkdir -p ~/catkin_ws/src ...

  6. 7、创建ROS msg和srv

    一.msg和srv介绍 msg: msg文件使用简单的文本格式声明一个ROS message的各个域. 仅须要创建一个msg文件,就能够使用它来生成不同语言的message定义代码. srv:srv文 ...

  7. ROS学习手记 - 7 创建ROS msg & srv

    至此,我们初步学习了ROS的基本工具,接下来一步步理解ROS的各个工作部件的创建和工作原理. 本文的详细文档:http://wenku.baidu.com/view/623f41b3376baf1ff ...

  8. ROS学习笔记五:创建和使用ROS msg和srv

    1 msg和srv简介 1.1 msg文件 msg文件就是一个简单的text文件,其中每行有一个类型和名称,可用的类型如下: int8, int16, int32, int64 (plus uint* ...

  9. (转)-编写第一个ROS(创建工作空间workspace和功能包package)

    原文网址:http://www.cnblogs.com/liuamin/p/5704281.html 刚接触ROS,学着写了第一个程序,怕以后忘记,就将其步骤记录下来.. 首先你必须保证你电脑已安装配 ...

随机推荐

  1. Python学习笔记3—字符串

    原始字符串 使用\转义或者r,这种方法在网站设置网站目录结构的时候非常管用. >>> dos="c:\news" >>> print dos c ...

  2. 使用Ant打包工具 基本介绍

    由于使用java,javac,jar等工具进行编译打包,即繁琐低效又容易出错,因此Ant出现了. Ant的出现就是专门为了打包编译java代码的,使用之前得稍微学一下.Ant的运行起来主要是依靠配置文 ...

  3. js object(对象)

    http://www.cnblogs.com/pingchuanxin/p/5773326.html Object(对象)是在所有的编程语言中都十分重要的一个概念,对于事物我们可以把他们看作是一个对象 ...

  4. Virtualbox虚拟机安装CentOS6.5图文详细教程(zhuan)

    http://www.2cto.com/os/201407/318477.html ************************************************* 什么是Virtu ...

  5. Python标准库06 子进程 (subprocess包)

    这里的内容以Linux进程基础和Linux文本流为基础.subprocess包主要功能是执行外部的命令和程序.比如说,我需要使用wget下载文件.我在Python中调用wget程序.从这个意义上来说, ...

  6. Redis常用的基本命令整理

    SET key value [EX seconds] [PX milliseconds] [NX|XX] 设置缓存 K-V,如果 key 已经存在,则重写 EX seconds -- 设置过期时间, ...

  7. IE6/IE7下:inline-block解决方案

    IE6/IE7下对display:inline-block的支持性不好. 1.inline元素的display属性设置为inline-block时,所有的浏览器都支持: 2.block元素的displ ...

  8. Azure平台 对Twitter 推文关键字进行实时大数据分析

    Learn how to do real-time sentiment analysis of big data using HBase in an HDInsight (Hadoop) cluste ...

  9. SharePoint Web service and template

    SharePoint Web service对应的映射列表 WSS Web   Services Web Reference Administration   Service http://<s ...

  10. android入门之: SharedPreferences

    读取数据: 保存数据: +++++++++++++++++++方法详解++++++++++++++++++++++++++++++ SharedPreferences综述: 使用getSharedPr ...