ROS 2行动-actions-
前序:ROS 2參數-parameters-
視頻教程(Linux):https://www.bilibili.com/video/BV1St4y197MP/
本節詳細介紹行動action。
1. 如何理解行動action:
行動action是ROS 2中用于長時間運行任務的通信類型之一。 它由三部分組成:目標,結果和反饋。
行動基于主題和服務。 它們的功能與服務相似,但行動是可搶占的模式(即,可以在執行時將其取消)。 與返回單個響應的服務不同,它們還提供穩定的反饋(過程狀態反饋)。
行動使用客戶端-服務器端模型,類似于發布者-訂閱者模型(已經在主題教程中進行了介紹)。 “行動客戶端”節點將目標發送到“行動服務器”節點,該節點確認目標并返回反饋流和一個結果。
2. 行動action有哪些命令功能:
ros2 action -h?
命令如下:
- info:顯示行動具體信息
- list:輸出行動名列表
- send_goal:發送行動目標
- show:顯示行動類型定義
行動消息格式如下:
# The desired heading in radians float32 theta --- # The angular displacement in radians to the starting position float32 delta --- # The remaining rotation in radians float32 remaining- 主題消息,沒有---
- 服務消息,一個---
- 行動消息,兩個---
3. 行動命令實踐
啟動turtesim案例如下:
3.1 小試牛刀
啟動/teleop_turtle節點時,在終端中看到以下消息:
專注于第二行,它對應于一個行動。 (第一條指令對應于主題教程中先前討論的“ cmd_vel”主題。)
請注意,字母鍵G | B | V | C | D | E | R | T在鍵盤上的F鍵周圍形成一個“框”。 F周圍每個鍵的位置都對應于turtlesim中的方向。 例如,E會將烏龜的方向旋轉到左上角。
| E | R | T |
| D | F | G |
| C | V | B |
注意節點/turtlesim正在運行的終端。 每次按這些鍵之一,就向一個目標服務器發送目標,該服務器是/ turtlesim節點的一部分。 目標是旋轉烏龜以使其朝向特定方向。 烏龜完成旋轉后,將顯示一條有關目標結果的消息:
E:
V:
F鍵將取消目標的中間執行,表明行動具有可搶占的功能。
嘗試按C鍵,在烏龜完成旋轉之前按F鍵。 在/turtlesim節點運行的終端中,將看到以下消息:
客戶端(在Teleop中的輸入)不僅可以搶占目標,而且服務器端(/turtlesim節點)也可以搶占目標。 當服務器端搶占一個行動時,它“中止”了目標。
嘗試先按D鍵,在完成第一次旋轉之前按G鍵。 在/turtlesim節點運行的終端中,將看到以下消息:
服務器端中止了前一個目標,因為它被中斷了。
3.2 節點信息(行動)
要查看/turtlesim節點的行動,請打開一個新終端并運行以下命令:
ros2 node info /turtlesim這將返回/turtlesim的訂閱者,發布者,服務,行動服務器和行動客戶端的列表:
?請注意,/turtlesim的行動/turtle1/rotate_absolute位于行動服務器端下。 這意味著/turtlesim會響應行動/turtle1/rotate_absolute并提供反饋。
節點/teleop_turtle在“行動客戶端”下具有名稱/turtle1/rotate_absolute,這表示它發送該目標行動的名稱。
ros2 node info /teleop_turtle通俗一點:
- 節點turtlesim為行動服務器端
- 節點teleop_turtle為行動客戶端
3.3 行動列表
顯示ROS圖中的所有行動,運行以下命令:
ros2 action list返回值:
/turtle1/rotate_absolute?
這是目前ROS圖中唯一的行動。 如先前所見,它控制著烏龜的旋轉。 使用ros2節點信息<node_name>命令可以為該操作提供一個行動客戶端(/teleop_turtle的一部分)和一個行動服務器(/turtlesim的一部分)。
3.4 行動信息
使用以下命令進一步查詢/turtle1/rotate_absolute行動:
ros2 action info /turtle1/rotate_absolute返回:
運行ros2節點信息:/teleop_turtle節點有一個行動客戶端,/turtlesim節點有一個針對/turtle1/rotate_absolute行動服務器。
3.5 行動接口
發送或執行目標行動之前,需要知道是行動的結構類型。
回想一下,在運行ros2行動列表-t時,已經確定了/turtle1/rotate_absolute的類型。 在終端中輸入以下命令和行動類型:
ros2 interface show turtlesim/action/RotateAbsolute.action返回:
該消息的位于---上方的第一部分,是目標請求結構(數據類型和名稱)。中間部分是結果的結構。 最下面一部分是反饋的結構。
3.6 命令行發布行動
現在,使用以下語法從命令行發送一個目標行動:
ros2 action send_goal <action_name> <action_type> <values><values>必須為YAML格式。
密切注意turtlesim窗口,并在終端中輸入以下命令:
ros2 action send_goal /turtle1/rotate_absolute turtlesim/action/RotateAbsolute {"theta: 1.57"}顯示如下:
所有目標都有唯一的ID,如返回消息所示。 還可以看到結果,一個名為delta的字段,它是到起始位置的位移。
要查看此目標的反饋,請將--feedback添加到運行的最后一個命令。 首先,請確保更改theta的值。 運行上一條命令后,烏龜將已經處于1.57弧度的方向,因此除非傳遞新的theta,否則它不會移動。
過程1:
過程2:
將繼續收到剩余弧度值的反饋,直到完成目標。
4. 小結
行動類似服務,實現執行長時間運行的任務,提供定期反饋并可以取消。
機器人系統可能會使用行動進行導航。 一個行動目標可以告訴機器人去某個位置。 機器人導航到該位置時,可以沿途發送更新(即反饋),一旦到達目的地,它就會發送最終結果消息。
Turtlesim有一個行動服務器,行動客戶端可以將目標發送給旋轉的烏龜。 在本教程中,對行動/turtle1/rotate_absolute進行了分析,更好地了解什么是行動以及它們如何工作。
?
總結
以上是生活随笔為你收集整理的ROS 2行动-actions-的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软件技术发展历程
- 下一篇: openjudge 拯救行动