ROS 2 index翻譯(四)——關於ROS 2接口

1.背景
ROS應用程序一般經過如下兩種類型之一的接口進行通訊:消息和服務。ROS使用簡化的描述語言來描述這些接口。這些描述使ROS工具能夠輕鬆地爲多種目標語言的接口類型自動生成源代碼。編程

在本文檔中,咱們將描述支持的類型以及如何建立本身的消息/服務文件。數組

2.消息描述說明
消息描述在ROS文件包中的"msg/"目錄下的".msg"文件中定義。 .msg文件由兩部分組成:字段和常量。
2.1字段
每一個字段由一個類型和一個名稱組成,用空格分隔,即:bash

fieldtype1 fieldname1
fieldtype2 fieldname2
fieldtype3 fieldname3

例如:工具

int32 my_int
string my_string

2.2.1字段類型
字段類型能夠是:ui

  • 內置式類型
  • 消息描述自身定義的名稱,例如「geometry_msgs / PoseStamped」

目前支持的內置類型:
 spa

類型名稱  C++ Python DDS 類型
bool bool builtins.bool boolean
byte uint8_t builtins.bytes* octet
char char builtins.str* char
float32 float builtins.float* float
float64 double builtins.float* double
int8 int8_t builtins.int* octet
uint8 uint8_t builtins.int* octet
int16 int16_t builtins.int* short
uint16 uint16_t builtins.int* unsigned short
int32 int32_t builtins.int* long
uint32 uint32_t builtins.int* unsigned long
int64 int64_t builtins.int* long long
uint64 uint64_t builtins.int* unsigned long long
string std::string builtins.str string

每一個內置類型均可以用來定義數組:
 code

類型名稱 C++ Python DDS類型
static array std::array<T,N> builtins.list* T[N]
unbounded dynamic array std::vector builtins.list* sequence
bounded dynamic array custom_class<T,N> builtins.list* sequence<T,N>
bounded string std::string builtins.str* string

全部比ROS定義更寬鬆的類型都經過軟件強制執行ROS範圍和長度約束。
使用數組和有界類型的消息定義示例:接口

int32[] unbounded_integer_array
int32[5] five_integers_array
int32[<=5] up_to_five_integers_array

string string_of_unbounded_size
string<=10 up_to_ten_characters_string

string[<=5] up_to_five_unbounded_strings
string<=10[] unbounded_array_of_string_up_to_ten_characters each
string<=10[<=5] up_to_five_strings_up_to_ten_characters_each

2.1.2字段名稱
字段名稱必須是小寫字母和數字,可用下劃線分隔。它們必須以字母開頭,不能如下劃線結尾,也不能有兩個連續的下劃線。ip

2.1.3字段默認值
消息類型中的任何字段均可以設置爲默認值。當前字符串數組和複雜類型(即上面內置類型表中不存在的類型,運用於全部嵌套消息)不支持默認值。ci

經過向字段定義行添加第三個元素來定義默認值,即:

fieldtype fieldname fielddefaultvalue

例如:

uint8 x 42
int16 y -2000
string full_name "John Doe"
int32[] samples [-200, -100, 0, 100, 200]

注意:

  • 字符串值必須用單引號‘’或雙引號「」定義
  • 當前字符串值不會被轉義

2.2常量
每一個常量定義相似於具備默認值的字段描述,但該值永遠不能以編程方式更改。經過使用等於'='的符號來指示該值賦值,例如

constantype CONSTANTNAME=constantvalue

例如

int32 X=123
int32 Y=-123
string FOO="foo"
string EXAMPLE='bar'

注意:
常量名稱必須用大寫字母。

3.服務描述(Service Description)規範

服務描述在ROS包中的srv/目錄下.srv文件中定義。

服務描述文件由請求和響應消息類型組成,以「 - 」分隔。任何兩個.msg文件用' - '聯繫在一塊兒,就是合法的服務描述。

下面是一個很是簡單的服務示例,它接受一個字符串並返回一個字符串:

string str
---
string str

咱們固然能夠變得更復雜(若是你想引用來自同一個包的消息,你就不能提到包名):

#請求常量
int8 FOO=1
int8 BAR=2
#請求字段
int8 foobar
another_pkg/AnotherMessage msg
---
#迴應常量
uint32 SECRET=123456
#迴應字段
another_pkg/YetAnotherMessage val
CustomMessageDefinedInThisPackage value
uint32 an_integer

不能在服務中嵌套服務。

英文原文:https://index.ros.org/doc/ros2/Concepts/About-ROS-Interfaces/

相關文章
相關標籤/搜索