Action(動作)
定義
動作(Action)是 ROS2 裡專為「需要一段時間才能完成、過程中可能需要回報進度或被中途取消」的任務設計的通訊模式,底層用一組主題與服務組合實作,對外提供 Goal(目標)、Feedback(進度回饋)、Result(最終結果)三段式的標準互動流程。
關鍵特性
- Goal Handle 狀態機:一個動作目標被接受後會進入一連串明確狀態(Accepted、Executing、Canceling、Succeeded 等),伺服器與客戶端都要正確處理狀態轉換。
- 需要 ReentrantCallbackGroup:Action Server 如果要能正確回應取消請求,處理 Goal 執行與處理 Cancel 請求的 callback 不能用預設的互斥 callback group,否則取消請求會被卡住,永遠等不到執行機會。
- 跟 Service 的差異:Service 適合瞬間完成的操作,Action 適合像「導航到某個點」「移動機械手臂」這種持續數秒到數分鐘、且過程中有意義的中間狀態值得回報的任務。
使用情境
- Nav2 的
NavigateToPose、MoveIt2 的MoveGroup都是動作介面的典型應用。 - 需要讓使用者能中途取消一個長時間任務時,動作是標準做法。