ros應用程式通常通過以下兩種型別之一的介面進行通訊:訊息和服務。ros使用簡化的描述語言來描述這些介面。此描述使ros工具可以輕鬆地為多種目標語言中的介面型別自動生成源**。
在本文件中,我們將介紹支援的型別以及如何建立自己的msg / srv檔案。
訊息描述在ros包中msg/
目錄下.msg字尾
的檔案中定義。.msg
檔案由兩部分組成:欄位和常量。
每個欄位由乙個型別和乙個名稱組成,用空格分隔,即:
fieldtype1 fieldname1
fieldtype2 fieldname2
fieldtype3 fieldname3
例如:
int32 my_int
string my_string
2.1.1欄位型別
字段型別可以是:
目前支援的內建型別:
型別名稱
c ++
python
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
每個內建型別都可用於定義陣列:
型別名稱
c++python
static array
std::array
builtins.list*
t[n]
unbounded dynamic array
std::vector
builtins.list
sequence
bounded dynamic array
custom_class
builtins.list*
sequence
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欄位名稱
欄位名稱必須是帶有下劃線的小寫字母數字字元,用於分隔單詞。它們必須以字母字元開頭,它們不能以下劃線結尾,也不能有兩個連續的下劃線。
2.1.3欄位預設值
可以將預設值設定為訊息型別中的任何字段。當前字串陣列和複雜型別(即上面的內建型別表中不存在的型別,不適用於所有巢狀訊息)不支援預設值
通過向字段定義行新增第三個元素來完成定義預設值,即:
fieldtype fieldname fielddefaultvalue
例如:
uint8 x 42
int16 y -2000
string full_name "john doe"
int32 samples [-200, -100, 0, 100, 200]
注意:
每個常量定義類似於具有預設值的字段描述,但該值永遠不能以程式設計方式更改。通過使用等於'='的符號來指示該值賦值,例如
constanttype constantname=constantvalue
例如:
int32 x=123
int32 y=-123
string foo="foo"
string example='bar'
注意:常量名稱必須為大寫
服務描述在ros包srv/
目錄中的.srv
的檔案中定義。
服務描述檔案由請求和響應訊息型別組成,由'---'分隔。與'---'連線在一起的任何兩個.msg檔案都是合法的服務描述。
這是乙個非常簡單的服務示例,它接受乙個字串並返回乙個字串:
string str
---string str
我們當然可以變得更複雜(如果你想引用來自同乙個包的訊息,你不用提到包名):
#request constants
int8 foo=1
int8 bar=2
#request fields
int8 foobar
another_pkg/anothermessage msg
---#response constants
uint32 secret=123456
#response fields
another_pkg/yetanothermessage val
custommessagedefinedinthispackage value
uint32 an_integer
您無法在服務中嵌入其他服務。 建立ROS訊息和ROS服務
1.1在工作空間下的功能包下新建名為msg的資料夾 新建person.msg檔案 int64 num1.2為確保msg檔案被轉換成python或者其他語言的源 需要修改功能包下package.xml檔案,以新增功能包依賴 message generation build depend message...
ROS 服務 訊息傳遞
定義服務的訊息型別與自定義話題的訊息型別類似 1 首先在軟體包目錄下 新建乙個 srv資料夾,並且新建乙個訊息型別檔案 mkdir roswork space src hello ros srv cd roswork space src hello ros srv touch my srv.srv ...
ROS入門教程 (建立ROS訊息和ROS服務)
參考中文官網 description 本教程詳細介紹如何建立並編譯ros訊息和服務,以及rosmsg,rossrv和roscp命令列工具的使用。01.訊息 msg 和服務 srv 介紹 msg檔案存放在package的msg目錄下,srv檔案則存放在srv目錄下。msg檔案實際上就是每行宣告乙個資料...