zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

ROS机器人程序设计(原书第2版)2.1.4 消息

2023-03-14 10:19:24 时间

2.1.4 消息

ROS使用了一种简化的消息类型描述语言来描述ROS节点发布的数据值。通过这样的描述语言,ROS能够使用多种编程语言生成不同类型消息的源代码。

ROS提供了很多预定义消息类型。如果你创建了一种新的消息类型,那么就要把消息的类型定义放到功能包的msg/文件夹下。在该文件夹中,有用于定义各种消息的文件。这些文件都以.msg为扩展名。

消息类型必须具有两个主要部分:字段和常量。字段定义了要在消息中传输的数据类型,例如int32、float32、string或之前创建的新类型,如叫做type1和type2的新类型。常量用于定义字段的名称。

一个msg文件的示例如下:

 

我们能够在下表中找到很多ROS消息所使用的标准数据类型:

基本类型     序列化  C++     Python

bool(1) unsigned 8-bit int     uint8_t(2)    bool

int8 signed 8-bit int   int8_t    int

uint8     unsigned 8-bit int     uint8_t  int(3)

int16     signed 16-bit int int16_t  int

uint16   unsigned 16-bit int    uint16_t int

int32     signed 32-bit int int32_t  int

uint32   unsigned 32-bit int    uint32_t int

int64     signed 64-bit int int64_t  long

uint64   unsigned 64-bit int    uint64_t long

float32  32-bit IEEE float float     float

float64  64-bit IEEE float double  float

string    ascii string (4)    std::string    string

time     secs/nsecs signed 32-bit ints ros::Time    rospy.Time

duration secs/nsecs signed 32-bit ints ros::Duration     rospy.Duration

 

ROS消息中的一种特殊数据类型是报文头,主要用于添加时间戳、坐标位置等。报文头还允许对消息进行编号。通过在报文头内部附加信息,我们可以知道是哪个节点发出的消息,或者可以添加一些能够被ROS处理的其他功能。

报文头类型包含以下字段:

 

可以通过下面命令查看消息的结构:

 

我们将在后续的章节中看到,正是通过报文头才能够记录当前机器人运行的时间戳和坐标位置。

在ROS中有一些处理消息的工具。例如rosmsg命令行工具能够输出消息定义信息,并可以找到使用该消息类型的源文件。

在后面的章节中,我们将会学习如何使用正确的工具创建消息。