ROS學習之服務

2021-09-19 02:55:14 字數 1735 閱讀 8820

ros學習之服務

1)服務是點對點的,乙個節點傳送訊息,還需要等待接受節點的響應。而訊息發布後沒有響應之說,誰訂閱了這個話題,誰就可以讀取到此訊息。

2)服務是一對一的,訊息可以多對多。

0.1服務專業術語

客戶端:用來向伺服器傳送請求的。

伺服器:接受伺服器請求,並採取一定處理回饋給客戶端。

服務資料型別:資料傳輸的型別。

0.2命令列指令

0.2.1服務列表

rosservice list顯示當前所有服務

0.2.2查詢提供服務的節點

要完成這個反向查詢,即查詢提供給定服務的節點,可以使用這條指令:

rosservice node service-name

正如期望的,當查詢關於任意由 rosnode info /turtlesim 指令列出的服務時,這條指令將給出/turtlesim; 而查詢其他兩條服務時,返回的節點是/rosout。

查詢服務的資料型別 可以利用下面的指令來確定乙個服務的資料型別:

rosservice info service-name

例如,在終端中輸入下面這條命令

rosservice info /spawn

得到的結果是:

node: /turtlesim

uri: rosrpc://donatello:47441

type: turtlesim/spawn

args: x y theta name

可以看到,/spawn 服務的資料型別是 turtlesim/spawn。同訊息型別類似,服務資料型別有兩個部分,其一宣告擁有此資料型別的包,其二宣告型別本身。

0.2.3查詢服務資料型別

當服務的資料型別已知時,我們可以使用rossrv 指令來獲得此服務資料型別的詳情:

rossrv show service-data-type-name

例如:rossrv show turtlesim/spawn

輸出如下結果:

float32 x

float32 y

float 32 theta

string name

---string name

在這裡,短橫線(---)之前的資料是請求項,這是客戶節點傳送到服務節點的資訊。短橫線之後的所有欄位是響應項,或者說是服務節點完成請求後發送回請求節點的資訊。

0.2.4呼叫服務

為了直觀地觀察服務是如何工作的,你可以使用下面這條指令,從命令列中呼叫它們:

rosservice call service-name request-content

請求內容部分應該列出請求每乙個域的值,正如 rossrv show指令所展示的。下面是乙個例子:

rosservice call /spawn 3 3 0 mikey

這條服務呼叫的效果是在現有**器中,位置 ( x , y ) = (3,3) 處建立乙個名為「mikey」的新海龜,其朝向角度 θ = 0 。

0.3客戶端程式

0.3.1

0.3.2

0.4伺服器程式

收藏

ros學習筆記 ros的服務

服務 services 是節點之間通訊的另一種方式。服務允許節點傳送請求 request 並獲得乙個響應 response rosservice 可以很輕鬆的使用 ros 客戶端 伺服器框架提供的服務。rosservice 提供了很多可以在 topic 上使用的命令,如下所示 使用方法 rosser...

ROS學習之 cpp引數伺服器

wiki鏈結 wiki.ros.org roscpp overview parameter 20server ros的引數伺服器可以儲存字串,整型,浮點型,布林型,列表,字典,iso8601資料,64基編碼資料.字典資料要有字串鍵.roscpp的引數api支援所有這些,儘管在使用中常使用string...

(3)ROS學習 建立ROS訊息和ROS服務

2 srv 服務 乙個srv檔案描述乙個服務。它由兩部分組成 請求 request 和響應 response 3 msg檔案存放在軟體包的msg目錄下,srv檔案則存放在srv目錄下。下面,我們將在之前建立的軟體包裡定義乙個新的訊息。1 在 catkin ws src learning commun...