iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 13
0
Software Development

ROS進階學習筆記系列 第 13

Day 13 - ROS Action

  • 分享至 

  • xImage
  •  

在之前的文章裡有提到ros的三大傳遞data的方式: topic, service和action。然而筆者通常只用到前兩項,action卻從來沒用到過,因此決定透過鐵人賽來練習一下這個action的實作。
action的原理跟service很像,不過service只會送一個request出去然後等待response回傳,action可以在執行該request時進行timeout、callback等計算,讓action在執行的過程中可以被中斷或是回傳任務狀態。

action的執行分為action serveraction client,API統一包在ros actionlib內,如圖:
https://ithelp.ithome.com.tw/upload/images/20200927/2011234869oqXXSplW.png
action client和action server串接的方式是透過ros .action file定義action的protocol,主要分為三個部分:Goal, Feedback和Result,以官網的洗碗機功能為例:

in action/DoDishes.action:

# Define the goal
uint32 dishwasher_id
---
# Define the result
uint32 total_dishes_cleaned
---
# Define a feedback message
float32 percent_complete

.srv file會用三個折線---把request和response分開一樣,.action也是用一樣的方式區分Goal, Feedback和Result,三者的定義分別是:

  • Goal: 執行的目標(指令),以洗碗機為例,就是先定義要使用的洗碗機id
  • Result: 執行的結果,也就是洗完碗了沒
  • Feedback: 執行期間的一些反饋值,例如現在洗碗的進度是幾%

上述的.action檔定義完以後,跟.srv一樣需要修改CMackList.txt和package.xml,編譯此.action檔以後就可以拿來用在程式碼內囉!
in CMakeLists.txt:

find_package(catkin REQUIRED genmsg actionlib_msgs actionlib)
add_action_files(DIRECTORY action FILES DoDishes.action)
generate_messages(DEPENDENCIES actionlib_msgs)

in package.xml:

<build_depend>actionlib</build_depend>
<build_depend>actionlib_msgs</build_depend>
<exec_depend>actionlib</exec_depend>
<exec_depend>actionlib_msgs</exec_depend>

編譯完成以後會生出一堆.msg檔:

  • DoDishesAction.msg
  • DoDishesActionGoal.msg
  • DoDishesActionResult.msg
  • DoDishesActionFeedback.msg
  • DoDishesGoal.msg
  • DoDishesResult.msg
  • DoDishesFeedback.msg

這些msg就是用來讓action clientaction server 進行串接的protocol,至於action clientaction server怎麼寫呢? 礙於時間與篇幅關係,就留待明天好好講解吧!

Reference

http://wiki.ros.org/actionlib
http://wiki.ros.org/actionlib/Tutorials
http://wiki.ros.org/actionlib/DetailedDescription
https://blog.csdn.net/weicao1990/article/details/80322110


上一篇
Day 12 - 大型專案共用ros master
下一篇
Day 14 - ROS Action Server / Client
系列文
ROS進階學習筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言