機器人是一個復雜的智能系統(tǒng),并不僅僅是鍵盤遙控運動、識別某個目標這么簡單,我們需要實現(xiàn)的是送餐、送貨、分揀等滿足具體場景需求的機器人。
在這些應(yīng)用功能的實現(xiàn)中,另外一種ROS通信機制也會被常常用到——那就是動作。從這個名字上就可以很好理解這個概念的含義,這種通信機制的目的就是便于對機器人某一完整行為的流程進行管理。
通信模型
舉個例子,比如我們想讓機器人轉(zhuǎn)個圈,這肯定不是一下就可以完成的,機器人得一點一點旋轉(zhuǎn),直到360度才能結(jié)束,假設(shè)機器人并不在我們眼前,發(fā)出指令后,我們根本不知道機器人到底有沒有開始轉(zhuǎn)圈,轉(zhuǎn)到哪里了?
OK,現(xiàn)在我們需要的是一個反饋,比如每隔1s,告訴我們當前轉(zhuǎn)到多少度了,10度、20度、30度,一段時間之后,到了360度,再發(fā)送一個信息,表示動作執(zhí)行完成。
這樣一個需要執(zhí)行一段時間的行為,使用動作的通信機制就更為合適,就像裝了一個進度條,我們可以隨時把控進度,如果運動過程當中,我們還可以隨時發(fā)送一個取消運動的命令。
客戶端/服務(wù)器模型
動作和服務(wù)類似,使用的也是客戶端和服務(wù)器模型,客戶端發(fā)送動作的目標,想讓機器人干什么,服務(wù)器端執(zhí)行動作過程,控制機器人達到運動的目標,同時周期反饋動作執(zhí)行過程中的狀態(tài)。
客戶端發(fā)送一個運動的目標,想讓機器人動起來,服務(wù)器端收到之后,就開始控制機器人運動,一邊運動,一邊反饋當前的狀態(tài)。
如果是一個導航動作,這個反饋可能是當前所處的坐標,如果是機械臂抓取,這個反饋可能又是機械臂的實時姿態(tài)。當運動執(zhí)行結(jié)束后,服務(wù)器再反饋一個動作結(jié)束的信息。整個通信過程就此結(jié)束。
一對多通信
和服務(wù)一樣,動作通信中的客戶端可以有多個,大家都可以發(fā)送運動命令,但是服務(wù)器端只能有一個,畢竟只有一個機器人,先執(zhí)行完成一個動作,才能執(zhí)行下一個動作。
同步通信
既然有反饋,那動作也是一種同步通信機制,之前我們也介紹過,動作過程中的數(shù)據(jù)通信接口,使用.action文件進行定義。
由服務(wù)和話題合成
大家再仔細看下上邊的動圖,是不是還會發(fā)現(xiàn)一個隱藏的秘密。
動作的三個通信模塊,竟然有兩個是服務(wù),一個是話題,當客戶端發(fā)送運動目標時,使用的是服務(wù)的請求調(diào)用,服務(wù)器端也會反饋一個應(yīng)帶,表示收到命令。
動作的反饋過程,其實就是一個話題的周期發(fā)布,服務(wù)器端是發(fā)布者,客戶端是訂閱者。
沒錯,動作是一種應(yīng)用層的通信機制,其底層就是基于話題和服務(wù)來實現(xiàn)的。
-
機器人
+關(guān)注
關(guān)注
211文章
28423瀏覽量
207140 -
服務(wù)器
+關(guān)注
關(guān)注
12文章
9165瀏覽量
85437 -
通信模型
+關(guān)注
關(guān)注
0文章
10瀏覽量
7827 -
ROS
+關(guān)注
關(guān)注
1文章
278瀏覽量
17010
發(fā)布評論請先 登錄
相關(guān)推薦
評論