iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 15
0
Software Development

ROS進階學習筆記系列 第 15

Day 15 - ROS Action APIs

沒想到action我居然要拆成3天寫...不過這真的是一個比較深的應用,在ROS官網的tutorial更是將action獨立一個章節出來寫,所以我也盡量將我能理解的部分寫出來了~~如果未來有更深的體悟,再來補充吧XD

昨天簡介了Action的應用範例,基本上就是call 一些actionlib內的API來用,因此覺得今天可以來稍微寫一下actionlib內還有哪些API可以使用。

action其實可以透過protocol傳遞下列資訊:
https://ithelp.ithome.com.tw/upload/images/20200929/20112348eAfizKpjBG.png

  • goal - client端傳送給server端要執行的任務
  • cancel - 若任務進行時間過長,可以傳送取消該任務的指令(由client端發送)
  • status - server端發給client關於此server的狀態(pending, active, recalling等)
  • feedback - server定期發給client任務的進行狀況
  • result - server發給client端任務完成的結果

看到這邊不曉得大家會不會跟筆者當初看到的時候感到一樣的混亂,阿前兩天的文章不是message只定義了goal, feedback和result嗎,怎麼突然多兩個出來!!! 原來是因為cancel和status都是API內定義好的功能,因此只需要在需要用的時候呼叫就好囉!
下面列出一些跟cancel 和status有關的APIs,可以根據不同的情況下不同的指令:

in action client:

// 可以一鍵取消所有進行中的任務
void cancelAllGoals () 

// 取消特定某任務
void cancelGoal () 

// 取消在指定時間之前的所有任務
void cancelGoalsAtAndBeforeTime (const ros::Time &time) 

in action server:

// 設定目標為終止狀態
void setAborted (const Result &result=Result(), const std::string &text=std::string(""))
 	
// 設定目標為取消但是還沒確認的狀態
void setPreempted (const Result &result=Result(), const std::string &text=std::string(""))

// 設定目標為已完成的狀態
void setSucceeded (const Result &result=Result(), const std::string &text=std::string(""))

關於狀態的部分,server端其實有分為下列幾種狀態:

  • Pending - 任務已從client端發送,但是尚未被發送至server端
  • Active - 正在執行中的任務狀態
  • Recalling - 任務已被server接收,但是尚未執行就又被發送取消的指令,而server還未確認已取消的狀態
  • Preempting - 任務已被server接收並正在執行中,但是client發送取消的指令過來,而server還未處裡取消的狀態
  • Rejected - 此任務發送過來server端就被拒絕執行,即使client並未發送取消的指令
  • Succeeded - 任務成功完成的狀態
  • Aborted - 任務被server端中止的狀態
  • Recalled - 任務已被server接收,但是尚未執行就又被發送取消的指令,而server確認已取消的狀態
  • Preempted - 任務已被server接收並正在執行中,但是client發送取消的指令過來,而server確認已取消的狀態

狀態機的部分有點深奧,看圖應該比較好理解:

https://ithelp.ithome.com.tw/upload/images/20200929/20112348aSGXW7tfi6.png
基本上就是本來server在某些狀態,會因為server或client端打了什麼API而進行的狀態轉換的示意圖。

Reference

http://wiki.ros.org/actionlib
http://wiki.ros.org/actionlib/DetailedDescription
https://docs.ros.org/api/actionlib/html/classactionlib_1_1SimpleActionClient.html
https://docs.ros.org/api/actionlib/html/classactionlib_1_1SimpleActionServer.html


上一篇
Day 14 - ROS Action Server / Client
下一篇
Day 16 - ROS Topic / Service / Action 比較
系列文
ROS進階學習筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言