日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ROS 2行动-actions-

發布時間:2024/3/12 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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案例如下:

  • ros2 run turtlesim turtlesim_node
  • ros2 run turtlesim turtle_teleop_key
  • 3.1 小試牛刀

    啟動/teleop_turtle節點時,在終端中看到以下消息:

    專注于第二行,它對應于一個行動。 (第一條指令對應于主題教程中先前討論的“ cmd_vel”主題。)

    請注意,字母鍵G | B | V | C | D | E | R | T在鍵盤上的F鍵周圍形成一個“框”。 F周圍每個鍵的位置都對應于turtlesim中的方向。 例如,E會將烏龜的方向旋轉到左上角。

    ERT
    DFG
    CVB

    注意節點/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,否則它不會移動。

    ros2 action send_goal /turtle1/rotate_absolute turtlesim/action/RotateAbsolute {"theta: -1.57"} --feedback

    過程1:

    過程2:

    將繼續收到剩余弧度值的反饋,直到完成目標。

    4. 小結

    行動類似服務,實現執行長時間運行的任務,提供定期反饋并可以取消。

    機器人系統可能會使用行動進行導航。 一個行動目標可以告訴機器人去某個位置。 機器人導航到該位置時,可以沿途發送更新(即反饋),一旦到達目的地,它就會發送最終結果消息。

    Turtlesim有一個行動服務器,行動客戶端可以將目標發送給旋轉的烏龜。 在本教程中,對行動/turtle1/rotate_absolute進行了分析,更好地了解什么是行動以及它們如何工作。


    ?

    總結

    以上是生活随笔為你收集整理的ROS 2行动-actions-的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。