日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ROS2学习(八).ROS概念 - ROS 2接口(Ros2 interface)

發布時間:2023/12/15 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ROS2学习(八).ROS概念 - ROS 2接口(Ros2 interface) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ROS 2接口

  • 背景
  • 消息描述規范
    • Fields*字段*
      • Fields type*字段類型*
      • Fields name*字段名稱*
      • Fields default value*字段默認值*
    • Constant*常量*
  • 服務描述規范
  • ROS 2的新功能

背景

ROS應用程序通過消息、服務和操作三種類型的接口來進行通信。
ROS2使用即接口定義語言(IDL)來描述這些接口,這種接口定義語言非常簡單。
IDL使得ROS工具可以較輕易地自動生成多種目標語言接口類型的源代碼。

接口包括

  • msg消息: .msg文件是描述ROS消息字段的簡單文本文件。 它們用于為不同語言的消息生成源代碼。
  • srv服務:.srv文件是用于描述服務的。 它們由請求和響應兩部分組成。 請求和響應都是一個消息聲明。
  • action操作: .action文件描述操作。 它們由目標、結果和反饋三個部分組成。 每個部分都是一個消息聲明。

消息描述規范

消息被定義于ROS包的msg/目錄下的.msg文件中,.msg由fields字段和constants常量兩部分構成。

Fields字段

每個field由一個type類型和一個name名稱組成,由空格隔開,格式如下:

fieldtype1 fieldname1
fieldtype2 fieldname2
fieldtype3 fieldname3

例如:

int32 my_int
string my_string

Fields type字段類型

字段類型包括

  • 內置類型
  • 自定義的消息描述名稱,例如“geometry_msgs/PoseStamped”

內置類型:

Type nameC++PythonDDS type
boolboolbuiltins.boolboolean
byteuint8_tbuiltins.bytes*octet
charcharbuiltins.str*char
float32floatbuiltins.float*float
float64doublebuiltins.float*double
int8int8_tbuiltins.int*octet
uint8uint8_tbuiltins.int*octet
int16int16_tbuiltins.int*short
uint16uint16_tbuiltins.int*unsigned short
int32int32_tbuiltins.int*long
uint32uint32_tbuiltins.int*unsigned long
int64int64_tbuiltins.int*long long
uint64uint64_tbuiltins.int*unsigned long long
stringstd::stringbuiltins.strstring
wstringstd::u16stringbuiltins.strwstring

內置類型均可支持數組如下:

Type nameC++PythonDDS type
static arraystd::array<T, N>builtins.list*T[N]
unbounded dynamic arraystd::vectorbuiltins.listsequence
bounded dynamic arraycustom_class<T, N>builtins.list*sequence<T, N>
bounded stringstd::stringbuiltins.str*string

如下例:

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

Fields name字段名稱

字段名稱必須是小寫字母、數字和字符,用下劃線用于分隔單詞。須以字母字符開始,不能以下劃線結束,并且不能有兩個連續的下劃線。

Fields default value字段默認值

消息類型中的任意字段均可設置默認值。
目前尚不支持字符串數組和復雜類型的默認值。

定義默認值是通過向字段定義行添加第三個元素來實現的,即:

fieldtype fieldname fielddefaultvalue

例:

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

注意

  • 字符串值需要以單引號’或雙引號"進行定義
  • 目前字符串不支持轉義符

Constant常量

常量定義使用類似帶有默認值的字段描述的方式來定義。這個值永遠無法通過編程方式更改。常量采用等號’ = '表示進行賦值:

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 2的新功能

ROS 2 IDL與ROS 1 IDL密切相關。大多數現有的ROS 1 .msg和.srv文件在ROS 2可以繼續使用。 在ROS 1現有功能集的基礎上,ROS 2 IDL引入了一些新功能,即:

  • 有界數組 : 盡管ROS 1 IDL允許無界數組(如int32[] foo)和固定大小的數組(如int32[5] bar), ROS 2 IDL進一步允許有界數組(如int32[<=5] bat)。
    有界數組能夠為數組的大小設置一個上限(例如在一個實時系統中,你需要預先分配在執行期間將使用的所有內存)。
  • 有界字符串:ROS1 IDL允許無限制的字符串(例如字符串foo), ros2 IDL進一步允許有界字符串(例如字符串<=5 bar)。
  • 默認值:盡管ROS 1 IDL允許常量字段(例如,int32 X=123), ROS 2 IDL進一步允許指定默認值(例如,int32 X 123)。 默認值在構造消息/服務對象時使用,隨后可以通過賦值給字段來重寫。 您還可以為action部分指定默認值。

總結

以上是生活随笔為你收集整理的ROS2学习(八).ROS概念 - ROS 2接口(Ros2 interface)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。