消息模型理解

业务与数据

在现有的模型中,我们通常都是Node与Node节点进行数据的传递。

在一些应用场景中,例如机械臂抓取过程中,摄像头对应的节点会将数据发送给机械臂,机械臂根据数据来实现逻辑。

这里的数据是需要有一定的数据规范格式的,例如这种情况下数据应该是图片数据。

例如无人驾驶过程中,激光雷达给汽车控制中心发送数据,这里的数据也是需要一定的规范的,这种情况下的数据应该是描述和障碍物的距离和位置情况的。

在ROS中对于数据的类型都是有定义规范的,系统也通过了很多数据类型供我们使用。

查询所有的消息类型

1
rosmsg list

Tip

可以查询出当前支持的所有消息类型。例如我们用到过的std_msgs/Stringgeometry_msgs/Twist

查询消息类型的数据结构

我们还可以对一个消息的数据结构进行查询。

1
rosmsg show std_msgs/String

Tip

结果显示为string data,说明了std_msgs/String这种消息类型的数据,内部包含了一个叫做data类型为string的数据。

我们也可以看看geometry_msgs/Twist包含了什么数据

1
rosmsg show geometry_msgs/Twist

结果显示为:

1
2
3
4
5
6
7
8
geometry_msgs/Vector3 linear
  float64 x
  float64 y
  float64 z
geometry_msgs/Vector3 angular
  float64 x
  float64 y
  float64 z

Tip

geometry_msgs/Twist包含了 linearangular两个数据。

linear的数据类型为geometry_msgs/Vector3

angular的数据类型为geometry_msgs/Vector3

我们发现在linear下面的x,y,z是有缩进的,这个缩进表示的是,geometry_msgs/Vector3这种类型的数据下面包含了三个数据xyz,他们的类型都是float64

发散与探讨

我们在前面可以发现,ros系统还是提供了大量的数据类型供我们使用。但是数据类型再多,很有可能也满足不了我的实际业务场景,这个时候,我们就需要定制自己的数据类型了。

后面我们会着重讲到如何是定制自己的数据类型。