ROS python教程-actionlib-編寫簡單的action客戶端及服務器

適用環境

ROS中的服務service是一問一答的形式,你來查詢了,我就返給你要的信息。
action也有服務的概念,但是它不一樣的地方是:不是一問一答,而多了一個反饋,它會不斷反饋項目進度。如navigation下的move_base package,你設定了目標點,反饋信息可能是機器人在規劃路徑上的即時位姿,直到機器人到達目標點,返回SUCCEEDED消息。

所以action lib適用於無法及時返回結果,處理時間較長的場合。還有需要實時獲取進度的場合。

步驟一:創建action文件

action消息和msg和srv很像,

其中包括了三個部分:1. goal;2. result; 3.feedback message

image.png

步驟二:修改CMakelist.txt和package.xml

CMakelist.txt

image.png

 

image.png

package.xml

catkin_make
在第二步之後進行catkin_make,如果去devel下面msg查看,可以看到7個消息文件。

image.png

如果action文檔的名字是DoDishes,那麼這7個文檔分別是

DoDishesAction
DoDishesActionFeedback
DoDishesActionGoal
DoDishesActionResult
DoDishesFeedback
DoDishesGoal
DoDishesResult

步驟三:創建client

image.png

這裏引入了7個msg中的兩個:DoDishesAction 和 DoDishesGoal

有3個回調函數:

  1. action激活後回調
  2. 完成之後回調
  3. 過程中反饋的回調

步驟四:創建server

image.png

這裏引入了三個msg:DoDishesAction、DoDishesGoal 和 DoDishesResult

有一個回調函數:

  1. 有action goal 到來時的執行回調函數

創建了兩個重要變量:

image.png

用了兩個函數來發送這兩個變量:

遺留問題

至此我們用到了7個msg中的4個,而其餘的不知道怎麼用:
大致上明白了,

DoDishesActionFeedback
DoDishesActionGoal
DoDishesActionResult

DoDishesFeedback
DoDishesGoal
DoDishesResult

再往上封裝了一層,比如:

goal = DoDishesActionGoal
goal1 = DoDishesGoal

goal.goal 的類型就是DoDishesGoal

對於actionlib,有兩個狀態機,我們看一下
server端狀態機:

image.png

client狀態機

image.png

其中有些操作在SimpleActionServer和SimpleActionClient是沒有的,但是大部分用simple這個類就足夠了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章