ROS2之接口概述

接口

在通信过程中,需要传输数据,就必然涉及到数据载体,也即要以特定格式传输数据。在 ROS2 中,数据载体称之为接口(interfaces)

  • 但是在使用接口之前,需要先弄清楚为什么需要接口?因为虽然ROS2里面存在std_msgs但是也仅仅包括的是下面的基础类别:
1
2
3
4
5
6
7
 int8, int16, int32, int64 (或者无符号类型: uint*)
 float32, float64
 string
 time, duration
 其他 msg 文件
 变长数组和定长数组
ROS 中还有一种特殊类型:Header,标头包含时间戳和 ROS2 中常用的坐标帧信息。许多接口文件的第一行包含 Header 标头。

在实际使用的时候,根据任务的不同需求,我们自己来创建和定义自己的数据载体。

通信时使用的数据载体一般需要使用接口文件定义。常用的接口文件有三种:msg 文件srv 文件action文件(分别对应三种通信方式:话题通信、服务通信和动作通信)。每种文件都可以按照一定格式定义特定数据类型.(简单来说就是使用基本类型以及其他类型(比如输入可能是Image类型,输出是这个Image中人脸的位置)来创建对应的接口文件)的“变量”。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
1.msg 文件:msg 文件是用于定义话题通信中数据载体的接口文件,一个典型的.msg 文件示例如下。
int64 num1
int64 num2

2.srv 文件
srv 文件是用于定义服务通信中数据载体的接口文件,一个典型的.srv 文件示例如下。
int64 num1
int64 num2
---
int64 sum

文件中声明的数据被---分割为两部分,上半部分用于声明请求数据,下半部分用于声明响应数据。

3.action 文件
action 文件使用用于定义动作通信中数据载体的接口文件,一个典型的.action 文件示例如下。
int64 num
---
int64 sum
---
float64 progress
文件中声明的数据被---分割为三部分,上半部分用于声明请求数据,中间部分用于声明响应数据,下半部分用于声明连续反馈数据。

PS: 在创建接口文件的时候,一般建议创建专门的接口功能包定义接口文件,然后在其他功能包中去依赖这个自定义接口的功能包(需要注意的是,目前为止无法在 Python 功能包中定义接口文件)