创建一个ROS msg

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

时间: 2024-10-05 07:12:40

创建一个ROS msg的相关文章

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

详细参照 http://wiki.ros.org/ROS/Tutorials/InstallingandConfiguringROSEnvironment1.mkdir -p ~/catkin_ws/src解析:在 /home/你的用户名目录/ 下创建一个ROS工作空间,即文件夹catkin_ws,然后在工作空间 catkin_ws 下创建一个文件夹 src你也可以将工作空间 catkin_ws 起成其他名字,例如:mkdir -p ~/tutorial/src ,那么下面的所有命令中的catk

创建一个ROS包

先前笔者不知道catkin到底是个什么东东,后来终于在官方网站上找到了答案,原来catkin是ROS的一个官方的编译构建系统,是原本的ROS的编译构建系统rosbuild的后继者.catkin的来源有点复杂,我们可以慢慢的讲一下其中的渊源.ROS来源于Willow Garage这个公司,他们希望借助开源的力量,使ROS发扬光大.而在英语中,willow的意思是柳树,catkin是柳絮的意思,为了纪念的作用吧,因而为这个软件命名为catkin.      这篇博客的主要内容是介绍如何使用catki

建立一个ROS msg and srv

msg是一个描述ROS消息字段的简单的文本文件,它们经常用来为消息产生不同语言的源代码. srv文件描述一个服务,它由请求和响应两部分组成. msg文件被存储在一个包的msg目录下,srv文件被存储在srv目录下.msg是简单的文本文件,它的每一行由一个字段的类型和字段的名称组成. 你可以使用的字段的类型有: int8, int16, int32, int64 (plus uint*) float32, float64 string time, duration other msg files

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

快速开始 创建工作区(workspace) 工作区可以作为一个独立的项目进行编译,存放ROS程序的源文件.编译文件和执行文件.建立工作区的方法如下: mkdir -p ~/catkin_ws/src #创建文件夹 cd ~/catkin_ws/src #定位到src catkin_init_workspace #对工作空间进行初始化 虽然这时候工作区是空的,但是我们依然可以进行编译: cd ~/catkin_ws/ catkin_make 这时候,会在当前文件夹下生成devel,build这两个

7、创建ROS msg和srv

一.msg和srv介绍 msg: msg文件使用简单的文本格式声明一个ROS message的各个域.仅需要创建一个msg文件,就可以使用它来生成不同语言的message定义代码. srv:srv文件则声明了一个服务,包括request(请求)和response(响应). msg文件和srv文件分别存储在包的msg目录和srv目录下. 1.msg文件 msgs是简单的txt文件,每行定义一个信息域,每行的格式为: 信息域的名称 信息域的类型 信息域的类型有以下几种: int8, int16, i

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

刚接触ROS,学着写了第一个程序,怕以后忘记,就将其步骤记录下来.. 首先你必须保证你电脑已安装配置好ROS. 1.创建工作空间(workspace) 我们所创建功能包package,应该全部放到一个叫做工作空间(workspace)的目录中 .你可以把目录存储在你账号的任何位置例如,我所创建的工作空间的是路径/home,同时你可以用任何你喜欢的名字命名你的工作空间,我的工作空间名为 test,现在请使用标准的mkdir命令行去创建一个工作空间.我首先建立一个工作空间,名字为test, 此处创建

Ros使用Arduino 2 使用rosserial创建一个publisher

1 启动arduino 将arduino开发板连接到电脑的usb口,在arduino IDE中进行设置. 选择Tools->Board,选择你所使用的arduino开发板的类型,所使用的arduino开发板是arduino pro min. 设置好开发板之后,继续选择Tools->Serial Port->/dev/ttyUSB1. 2 打开ROS例程 设置完成以后,在arduino IDE中,选择File->Examples->ros_lib->HelloWorld,

Ros使用Arduino 3用rosserial创建一个subscriber

在前面的一节中,我们已经使用arduino创建了一个publisher节点,接下来将会用arduino来创建一个subscriber,接收电脑传去的信息并做出相应的反应. 1启动Arduino 将arduino开发板连接到电脑的usb口,在arduino IDE中进行设置. 选择Tools->Board,选择你所使用的arduino开发板的类型,所使用的arduino开发板是arduino pro min. 设置好开发板之后,继续选择Tools->Serial Port->/dev/tt

ROS学习随笔二(创建一个简单的ROS package)

本人在学习过程中,参见了如下几个博客及网站: ROS操作官网:http://wiki.ros.org/ROS/Tutorials 博客:http://blog.sina.com.cn/s/articlelist_1712413141_7_1.html 以及:http://blog.csdn.net/column/details/ros-explore.html 在创建package之前,需要先创建一个工作空间,本人安装的ROS版本是Fuerte. 1.Creating a ROS WorkSpa