【ROS2指南-7】理解ROS2的Action

这篇具有很好参考价值的文章主要介绍了【ROS2指南-7】理解ROS2的Action。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目标: 理解并学习ROS 2 中的Action通信方式。

教程级别:初学者

时间: 15分钟

内容

  • 背景

  • 先决条件

  • 任务

    • 1 设置

    • 2 使用动作

    • 3 ros2节点信息

    • 4 ros2 动作列表

    • 5 ros2 动作信息

    • 6 ros2界面展示

    • 7 ros2 动作 send_goal

  • 概括

  • 下一步

  • 相关内容

背景

动作是 ROS 2 中的一种通信类型,用于长时间运行的任务。它们由三部分组成:目标、反馈和结果。

操作基于主题和服务。它们的功能类似于服务,除了操作是可抢占的(您可以在执行时取消它们)。他们还提供稳定的反馈,而不是返回单一响应的服务。

操作使用客户端-服务器模型,类似于发布者-订阅者模型(在主题教程中描述)。“动作客户端”节点将目标发送到“动作服务器”节点,该节点确认目标并返回反馈流和结果。

【ROS2指南-7】理解ROS2的Action

先决条件

本教程建立在之前教程中涵盖的概念之上,例如nodes和topics 。

本教程使用turtlesim 包。

任务

1 设置

启动两个 turtlesim 节点,/turtlesim/teleop_turtle

打开一个新的终端并运行:

ros2 run turtlesim turtlesim_node

打开另一个终端并运行:

ros2 run turtlesim turtle_teleop_key

2 使用动作

启动/teleop_turtle节点时,您将在终端中看到以下消息:

Use arrow keys to move the turtle.
Use G|B|V|C|D|E|R|T keys to rotate to absolute orientations. 'F' to cancel a rotation.

让我们关注第二行,它对应于一个动作。(第一条指令对应于之前在主题教程中讨论的“cmd_vel”主题。)

请注意,字母键在键盘上的键G|B|V|C|D|E|R|T周围形成一个“框” 。F每个键的位置都F对应于 turtlesim 中的那个方向。例如,E会将乌龟的方向旋转到左上角。

注意节点/turtlesim运行的终端。每次按下其中一个键时,您都会将一个目标发送到作为节点一部分的动作服务器/turtlesim。目标是旋转海龟以面向特定方向。一旦海龟完成旋转,就会显示一条传达目标结果的消息:

[INFO] [turtlesim]: Rotation goal completed successfully

F键将在执行过程中取消目标,展示动作的可抢占特性。

尝试按下C键,然后F在海龟完成旋转之前按下 键。在节点运行的终端中/turtlesim,您将看到消息:

[INFO] [turtlesim]: Rotation goal canceled

不仅客户端(您在远程操作中的输入)可以抢占目标,服务器端(节点/turtlesim)也可以。当服务器端抢占一个动作时,它会“中止”目标。

尝试敲击D键,然后G在第一次旋转完成之前按下键。在节点运行的终端中/turtlesim,您将看到消息:

[WARN] [turtlesim]: Rotation goal received before a previous goal finished. Aborting previous goal

服务器端中止了第一个目标,因为它被中断了。

3 ros2节点信息

要查看/turtlesim节点的操作,请打开一个新终端并运行以下命令:

ros2 node info /turtlesim

这将返回 的订阅者、发布者、服务、动作服​​务器和动作客户端的列表/turtlesim

/turtlesim
  Subscribers:
    /parameter_events: rcl_interfaces/msg/ParameterEvent
    /turtle1/cmd_vel: geometry_msgs/msg/Twist
  Publishers:
    /parameter_events: rcl_interfaces/msg/ParameterEvent
    /rosout: rcl_interfaces/msg/Log
    /turtle1/color_sensor: turtlesim/msg/Color
    /turtle1/pose: turtlesim/msg/Pose
  Services:
    /clear: std_srvs/srv/Empty
    /kill: turtlesim/srv/Kill
    /reset: std_srvs/srv/Empty
    /spawn: turtlesim/srv/Spawn
    /turtle1/set_pen: turtlesim/srv/SetPen
    /turtle1/teleport_absolute: turtlesim/srv/TeleportAbsolute
    /turtle1/teleport_relative: turtlesim/srv/TeleportRelative
    /turtlesim/describe_parameters: rcl_interfaces/srv/DescribeParameters
    /turtlesim/get_parameter_types: rcl_interfaces/srv/GetParameterTypes
    /turtlesim/get_parameters: rcl_interfaces/srv/GetParameters
    /turtlesim/list_parameters: rcl_interfaces/srv/ListParameters
    /turtlesim/set_parameters: rcl_interfaces/srv/SetParameters
    /turtlesim/set_parameters_atomically: rcl_interfaces/srv/SetParametersAtomically
  Action Servers:
    /turtle1/rotate_absolute: turtlesim/action/RotateAbsolute
  Action Clients:

请注意,/turtle1/rotate_absolute对于的操作/turtlesim在 下。这意味着响应并为操作提供反馈。Action Servers/turtlesim/turtle1/rotate_absolute

/teleop_turtle节点的名称/turtle1/rotate_absolute表示它为该操作名称发送目标。Action Clients

ros2 node info /teleop_turtle

哪个将返回:

/teleop_turtle
  Subscribers:
    /parameter_events: rcl_interfaces/msg/ParameterEvent
  Publishers:
    /parameter_events: rcl_interfaces/msg/ParameterEvent
    /rosout: rcl_interfaces/msg/Log
    /turtle1/cmd_vel: geometry_msgs/msg/Twist
  Services:
    /teleop_turtle/describe_parameters: rcl_interfaces/srv/DescribeParameters
    /teleop_turtle/get_parameter_types: rcl_interfaces/srv/GetParameterTypes
    /teleop_turtle/get_parameters: rcl_interfaces/srv/GetParameters
    /teleop_turtle/list_parameters: rcl_interfaces/srv/ListParameters
    /teleop_turtle/set_parameters: rcl_interfaces/srv/SetParameters
    /teleop_turtle/set_parameters_atomically: rcl_interfaces/srv/SetParametersAtomically
  Action Servers:

  Action Clients:
    /turtle1/rotate_absolute: turtlesim/action/RotateAbsolute

4 ros2 动作列表

要识别 ROS 图中的所有操作,请运行以下命令:

ros2 action list

将返回:

/turtle1/rotate_absolute

这是目前 ROS 图中唯一的动作。正如您之前看到的,它控​​制海龟的旋转。您还已经通过使用命令知道此操作有一个操作客户端(部分/teleop_turtle)和一个操作服务器(部分) 。/turtlesimros2 node info <node_name>

4.1 ros2动作列表-t

动作有类型,类似于主题和服务。要查找/turtle1/rotate_absolute的类型,请运行命令:

ros2 action list -t

将返回:

/turtle1/rotate_absolute [turtlesim/action/RotateAbsolute]

在每个动作名称(在本例中仅为 )右侧的括号中/turtle1/rotate_absolute是动作类型,turtlesim/action/RotateAbsolute。当您想要从命令行或代码执行操作时,您将需要它。

5 ros2 动作信息

/turtle1/rotate_absolute您可以使用以下命令进一步检查操作:

ros2 action info /turtle1/rotate_absolute

会返回

Action: /turtle1/rotate_absolute
Action clients: 1
    /teleop_turtle
Action servers: 1
    /turtlesim

这告诉我们之前在每个节点上运行时学到的东西:节点有一个动作客户端,节点有一个用于动作的动作服务器。

ros2 node info/teleop_turtle/turtlesim/turtle1/rotate_absolute

6 ros2界面展示

在自己发送或执行操作目标之前,您还需要了解操作类型的结构。

回想一下您/turtle1/rotate_absolute在运行命令时确定的类型。在终端中输入带有操作类型的以下命令:ros2 action list -t

ros2 action show turtlesim/action/RotateAbsolute

将返回:

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

此消息的第一部分,在 之上---,是目标请求的结构(数据类型和名称)。下一部分是结果的结构。最后一部分是反馈的结构。

7 ros2 动作 send_goal

现在让我们使用以下语法从命令行发送一个动作目标:

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}"

您应该看到海龟在旋转,并在您的终端中看到以下消息:

Waiting for an action server to become available...
Sending goal:
   theta: 1.57

Goal accepted with ID: f8db8f44410849eaa93d3feb747dd444

Result:
  delta: -1.568000316619873

Goal finished with status: SUCCEEDED

所有目标都有一个唯一的 ID,显示在返回消息中。您还可以看到结果,一个名为 的字段delta,它是到起始位置的位移。

要查看此目标的反馈,请添加--feedback到您运行的最后一个命令。首先,确保更改 的值theta。运行上一个命令后,乌龟将已经处于1.57弧度方向,因此除非您传递一个新的 ,否则它不会移动theta

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

您的终端将返回消息:

Sending goal:
   theta: -1.57

Goal accepted with ID: e6092c831f994afda92f0086f220da27

Feedback:
  remaining: -3.1268222332000732

Feedback:
  remaining: -3.1108222007751465

…

Result:
  delta: 3.1200008392333984

Goal finished with status: SUCCEEDED

您将继续收到反馈,剩余的弧度,直到目标完成。

概括

操作就像服务一样,允许您执行长时间运行的任务、提供定期反馈并且是可取消的。

机器人系统可能会使用动作进行导航。行动目标可以告诉机器人前往某个位置。当机器人导航到该位置时,它可以沿途发送更新(即反馈),然后在到达目的地后发送最终结果消息。

Turtlesim 有一个动作服务器,动作客户端可以将目标发送到该动作服务器以旋转海龟。在本教程中,您反省了该操作,/turtle1/rotate_absolute以更好地了解操作是什么以及它们如何工作。

下一步

现在您已经了解了所有核心 ROS 2 概念。“用户”集中的最后几篇教程将从使用 rqt_console开始,向您介绍一些工具和技术,这些工具和技术将使 ROS 2 的使用更加容易。文章来源地址https://www.toymoban.com/news/detail-414904.html

到了这里,关于【ROS2指南-7】理解ROS2的Action的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ubutu下ros2实现小车仿真建模与目标检测

    1.安装ros2 这里使用小鱼的一键安装,根据自己的喜好安装,博主用的是ros2的foxy版本 2.下载代码(这里使用的是古月居的代码) https://book.guyuehome.com/ 可以结合古月居的B站视频来自己一步一步操作,里面有讲解基础理论与一些环境的配置 https://www.bilibili.com/video/BV16B4y1Q7jQ?p=1

    2024年02月04日
    浏览(39)
  • 从ROS1到ROS2无人机编程实战指南

    亲爱的读者们,我今天非常荣幸地向大家推荐一本本人的全新力作——《从ROS1到ROS2无人机编程实战指南》。这本书站在初学者的角度,从入门到进阶,再到实战,循序渐进,是学习ROS1和ROS2的最佳选择。如今已在全国范围内上市,购书即可享受次日达的快捷服务! 本书的创

    2024年02月10日
    浏览(44)
  • 【ROS2指南-8】入门Launch启动脚本

    目标: 创建launch文件以运行复杂的 ROS 2 系统。 教程级别: 初学者 时间: 10分钟 内容 背景 先决条件 任务 1 设置 2 编写启动文件 3 ros2发射 4 使用 rqt_graph 反省系统 概括 下一步 在到目前为止的教程中,您一直在为您运行的每个新节点打开新终端。随着越来越多的节点同时运

    2024年02月15日
    浏览(69)
  • 【ROS2指南-19】使用Launch启动/监控多个节点

    ROS 2 中的启动系统负责帮助用户描述他们系统的配置,然后按照描述执行。系统的配置包括要运行的程序、运行它们的位置、传递给它们的参数以及 ROS 特定约定,这些约定通过为它们提供不同的配置,使得在整个系统中重用组件变得容易。它还负责监视已启动流程的状态,

    2023年04月15日
    浏览(67)
  • 【ROS2指南-14】创建自定义的消息和服务

    目标: 自定义接口文件( .msg 和 .srv )并将它们与 Python 和 C++ 节点一起使用。 教程级别: 初学者 时间: 20分钟 内容 背景 先决条件 任务 1 创建一个新包 2 创建自定义定义 3个CMakeLists.txt 4个package.xml 5 构建tutorial_interfaces包 6 确认 msg 和 srv 创建 7 测试新接口 概括 下一步 在之

    2023年04月12日
    浏览(31)
  • 【ROS2指南-9】Bag的record和play操作

    目标: 记录在某个话题上发布的数据,以便您可以随时回放和检查它。 教程级别: 初学者 时间: 10分钟 内容 背景 先决条件 任务 1 设置 2 选择一个主题 3 ros2包记录 4 ros2 包信息 5 ros2包玩 概括 下一步 相关内容 ros2 bag 是一个命令行工具,用于记录系统中主题发布的数据。它

    2024年02月08日
    浏览(36)
  • ROS2 学习--新建ros2工作空间和功能包

    简介:如何建立ros2的工作空间和功能包。 1. 创建新的工作空间 2. 新建功能包 功能包名:cpp_header 编译类型:build-type 编译工具:ament_cmake 3. 新建节点头文件 4. 头文件中类的定义 5. 新建ROS发布节点 6. 修改 package.xml文件 7. 修改配置文件 CMakeLists.txt 8. 安装相关依赖 参数rosdist

    2024年02月01日
    浏览(35)
  • ROS2系统学习番外篇2---用VSCode开发ROS2程序

    在ROS2系统学习3—第一个“Hello World”程序—即工作空间创建与包创建中已经介绍了如何创建ROS的工作空间以及包。在开发大型工程时,往往需要在IDE下面进行开发,因此本篇介绍使用VSCode来搭建ROS2开发环境的方法。 首先用VSCode打开ROS2的工作空间。 按Ctrl+shift+P进入命令模式

    2024年02月13日
    浏览(43)
  • ROS2学习(一):Ubuntu 22.04 安装 ROS2(Iron Irwini)

    一、ROS2(Iron Irwini)介绍 官方文档 Iron Irwini版本支持的平台如下: 二、ROS2(Iron Irwini)安装 1.设置编码 2.使能代码库 现在用apt添加带ROS 2 GPG 将存储库添加到源列表中 3.安装ROS2 Iron 三、ROS2测试 在terminal 1 运行下面的指令: 在terminal 2 运行下面的指令: 四、ROS2卸载 删除RO

    2024年02月10日
    浏览(42)
  • ROS2 学习(五)接口,动作

    通信双方统一规定好接口。比如图像 img,控制运动的线速度和角速度…… 我们也不用了解具体实现,基本就是了解接口会去用就行。 添加接口 不是说我们写一个接口文件就算添加好了,我们也要通过读取文件。 在 CMakeList.txt 中可以看到: 指从相应的相对目录文件中找接口

    2024年02月11日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包