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. (二)程序中的内存&&栈

    一.程序运行为什么需要内存?基本概念? 内存是程序运行的立足之地,程序需要用内存来存储一些变量. 内存管理最终是由操作系统完成的,内存在本质上是一个硬件器件,由硬件系统提供:内存由操作系统统一管理,为 ...

  2. Eclipse上安装springsource-tool-suite(zhuan)

    http://jingyan.baidu.com/article/1612d5005fd087e20f1eee10.html *********************************** s ...

  3. Ramdisk文件系统无法启动

    当kernel是使用ramdisk时,bootm命令有两种使用方式: 1.bootm ${kernel_addr} 此种方式要求bootargs变量包含ramdisk的地址和大小,ramdisk的格式 ...

  4. unity3d magnitude的意义

    http://blog.csdn.net/fzhlee/article/details/8663564   magnitude (Read Only) 返回向量的长度,也就是点P(x,y,z)到原点( ...

  5. c++相关的类型推导

    c++11和boost库增加许多关于类型推导(编译期)的关键字和类型, 用好这些机制, 对于编写项目的一些组件帮助颇大.正所谓工欲善其事,必先利其器. 1.初始化某种类型的变量 auto var = ...

  6. 有关mipmaps

    Mipmaps的作用是什么,仅仅是为了使屏幕三角形和纹理三角形的差异变小?有没有以空间换时间的理念? Mipmaps在生成一系列小的纹理样本时, 是如何从原始纹理采样的?即如何生成这些小的纹理样本.

  7. 【bzoj1052】覆盖问题

    [bzoj1052]覆盖问题 分析 考虑二分\(L\)的值,然后判断3个\(L*L\)能否覆盖所有的点. 这时候出现了两种可能的思路. 思路1 首先,3是一个很小的常数. 我们想:假如能探究出1和2的 ...

  8. 【bzoj1043】下落的圆盘

    [bzoj1043]下落的圆盘 题意 有n个圆盘从天而降,后面落下的可以盖住前面的.求最后形成的封闭区域的周长.看下面这副图, 所有的红色线条的总长度即为所求. \(1\leq n\leq 1000\ ...

  9. Flask+mongodb 实现简易个人博客

    最近学习完了<flask-web开发>,实现了一个简易的个人博客网站,由flask+mongodb+bootstrap做成, 这个软件是在阅读<Flask-Web开发>后写的一 ...

  10. fatal error: openssl/sha.h: No such file or directory 解决方案

    出现这个或者fatal error: openssl/名单.h: No such file or directory.都是没有安装libssl-dev- libssl-dev包含libraries, ...