消息模型理解

业务与数据

在Service通讯模型中,我们通常都是Client将数据发送给Server,Server经过业务逻辑处理,将结果返回给client。如下图:

在此处,我们需要特别关注的就是传输过程中的RequestResponse,这两个都是数据,一个是请求的数据,一个是响应的数据。从数据的角度来说,数据由业务所产生,但不应该与业务无关,应该与规范相关,其实就是定义规范来限制数据类型,来规范业务间的通讯。

在此,ROS提供的是srv数据来做此操作,如下图:

Tip

在数据交互过程中的请求阶段,我们将整个包当成一个srv,包含了requestresponse,这个阶段交给client端去填充request的数据。

在数据交互过程中的server处理阶段,server拿到client发送的srv包,从中获得request数据,根据业务逻辑来去处理操作数据。

在数据交互过程中的响应阶段,将server操作的结果填充到srvresponse,将srv返回。

在这三个阶段中,srv自始至终就是一个数据包,规范了client的数据填充,也规范了server的数据填充。

在ROS中对于Service通讯模式的数据类型,系统提供了一些现成的类型供我们参考和使用。

查询所有的消息类型

Tip

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

查询消息类型的数据结构

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

1
rossrv show roscpp_tutorials/TwoInts

显示的结果为:

Tip

结果显示分为两个部分,中间用---分隔。

上面部分是request的数据规范。

下面部分是response的数据规范。

发散与探讨

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

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