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

news2024/11/16 23:33:13

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

教程级别:初学者

时间: 15分钟

内容

  • 背景

  • 先决条件

  • 任务

    • 1 设置

    • 2 使用动作

    • 3 ros2节点信息

    • 4 ros2 动作列表

    • 5 ros2 动作信息

    • 6 ros2界面展示

    • 7 ros2 动作 send_goal

  • 概括

  • 下一步

  • 相关内容

背景

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

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

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

先决条件

本教程建立在之前教程中涵盖的概念之上,例如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 的使用更加容易。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/410430.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

敏捷开发项目如何做好中长期规划

在一次与客户的方案交流中&#xff0c;我们的团队意识到研发软件产品和建造房屋是比较相似的工作&#xff0c;两者都是长期项目&#xff0c;需要多个团队相互协调&#xff0c;都会有验收方进行确认。并且在项目进行过程中&#xff0c;想法总是在变化&#xff0c;不断会有新的需…

易点易动固定资产管理系统如何解决固定资产管理中的个性化需求

随着企业规模的扩大和企业管理需求的多样化&#xff0c;固定资产管理已经成为企业日常运营的重要环节。然而&#xff0c;传统的固定资产管理方式在满足企业个性化需求方面表现出明显的不足。在这种背景下&#xff0c;易点易动固定资产管理系统应运而生&#xff0c;为企业提供了…

代码随想录Day51

今天继续学习动规解决相关问题。 337.打家劫舍||| 小偷又发现了一个新的可行窃的地区。这个地区只有一个入口&#xff0c;我们称之为 root 。 除了 root 之外&#xff0c;每栋房子有且只有一个“父“房子与之相连。一番侦察之后&#xff0c;聪明的小偷意识到“这个地方的所有…

【RabbitMQ学习日记】—— 初识RabbitMQ

一、消息队列 1.1 MQ的相关概念 1.1.1 什么是MQ MQ(message queue)&#xff0c;从字面意思上看&#xff0c;本质是个队列&#xff0c;FIFO 先入先出&#xff0c;只不过队列中存放的内容是 message 而已&#xff0c;还是一种跨进程的通信机制&#xff0c;用于上下游传递消息。…

MinIO从信息泄漏到RCE

文章目录信息泄露漏洞利用漏洞分析漏洞修复RCE漏洞分析参考文章信息泄露 漏洞利用 如果MinIO以集群方式部署&#xff0c;存在信息泄露漏洞&#xff0c;攻击者可以通过HTTP请求获取目标进程的所有环境变量&#xff0c;包括MINIO_SECRET_KEY和MINIO_ROOT_PASSWORD. vulhub有环…

paddle实现手写数字识别模型继续解读

要点&#xff1a; 手写数字识别用简单的线性进行分类效果比较差&#xff0c;添加卷积层和池化层效果会相对较好。参考文档&#xff1a;百度官方文档 一 网络结构 前几节我们尝试使用与房价预测相同的简单神经网络解决手写数字识别问题&#xff0c;但是效果并不理想。原因是手…

ROS开发之如何使用常用可视化工具?

文章目录0、引言1、rqt工具2、RViz工具3、Gazebo工具0、引言 笔者因研究课题涉及ROS开发&#xff0c;学习了古月居出品的ROS入门21讲&#xff0c;为巩固可视化工具的知识&#xff0c;本文将ROS的常用可视化工具使用一讲内容进行总结。    1、rqt工具 在终端输入&#xff1a;…

图解二叉搜索树

gitee代码:https://gitee.com/WangZihao64/data-structure-and-algorithm/tree/master/BST 一、概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树: 若它的左子树不为空&#xff0c;则左子树上所有节点的值都小于根节点的值…

网站怎么接入chatGPT来自动写文章

用chatGPT写文章接入网站 将ChatGPT集成到网站中&#xff0c;可以让用户在网站上快速、简便地生成文章&#xff0c;并且可以提高用户体验。以下是一些用ChatGPT写文章接入网站的方法&#xff1a; 使用ChatGPT API接口&#xff1a;OpenAI提供了GPT-3 API接口&#xff0c;您可以…

c++11 常用新特性大总结

1.统一的初始化列表 在c98中我们经常会用{}初始化数组&#xff0c;而为了更近一步初始化我们在c11中采用{}的形式&#xff0c;代替等于号来帮助我们初始化的进行 举个例子&#xff1a; struct Point {int _x;int _y; }; int main() {int array1[] { 1, 2, 3, 4, 5 };int ar…

2023年七大最佳勒索软件解密工具

勒索软件是目前最恶毒且增长最快的网络威胁之一。作为一种危险的恶意软件&#xff0c;它会对文件进行加密&#xff0c;并用其进行勒索来换取报酬。 幸运的是&#xff0c;我们可以使用大量的勒索软件解密工具来解锁文件&#xff0c;而无需支付赎金。如果您的网络不幸感染了勒索软…

【MySQL】实验七 视图

文章目录 1. 建立city值为上海、北京的顾客视图2. 建立城市为上海的客户2016年的订单信息视图3. SQL视图:建立视图AVG_CJ4. SQL视图:建立视图IS_STUDENT5. SQL视图:建立视图CJ_STUDENT6. SQL视图:根据视图CJ_STUDENT创建视图CJ_TJ1. 建立city值为上海、北京的顾客视图 建立…

webgl-画一个彩色矩形

html <!DOCTYPE html> <head> <style> *{ margin: 0px; padding: 0px; } </style> </head> <body> <canvas id webgl> 您的浏览器不支持HTML5,请更换浏览器 </canvas> <script src"./main.js"></script&g…

基于七牛云和PicGo的图床搭建

第一次搭建的博客因为误操作且没有备份导致无法访问和恢复。第二次搭建吸取了第一次的错误&#xff0c;并且准备用图床进行图片的访问。 需要用到的&#xff1a; 七牛云&#xff0c; PicGo&#xff0c; Typora&#xff0c; 已备案域名。 七牛云和域名 进入七牛云的页面&…

Nginx 服务器 SSL 证书安装部署

工具&#xff1a;WinSCP、putty 1.下载证书 cloud.tencent.com_bundle.crt 证书文件cloud.tencent.com_bundle.pem 证书文件&#xff08;可忽略该文件&#xff09;cloud.tencent.com.key 私钥文件cloud.tencent.com.csr CSR 文件 2.上传证书到服务器 通过WinSCP将已获取到的…

Linux宝塔面板搭建Discuz论坛, 并公网远程访问【内网穿透】

文章目录前言1.安装基础环境2.一键部署Discuz3.安装cpolar工具4.配置域名访问Discuz5.固定域名公网地址6.配置Discuz论坛前言 Crossday Discuz! Board&#xff08;以下简称 Discuz!&#xff09;是一套通用的社区论坛软件系统&#xff0c;用户可以在不需要任何编程的基础上&…

paddle实现手写数字识别终章

要点&#xff1a; 资源配置训练调试恢复训练模型部署参考文档&#xff1a; paddle官方文档 一 资源配置 1 概述 从前几节的训练看&#xff0c;无论是房价预测任务还是MNIST手写字数字识别任务&#xff0c;训练好一个模型不会超过10分钟&#xff0c;主要原因是我们所使用的神…

T 级数据量迁移!知名云巨头如何从 Jira 切换至 ONES?

2021 年&#xff0c;Atlassian 旗下 Jira&Confluence 等系列产品 Server 版&#xff08;本地私有化部署版&#xff09;全面停售&#xff0c;并将在 2024 年停止维护&#xff0c;Server 版客户必须迁移至 Cloud&#xff08;云&#xff09;或 Data Center&#xff08;数据中心…

最新阿里、腾讯、华为、字节等大厂的薪资和职级对比,看看你差了多少...

互联网大厂新入职员工各职级薪资对应表(技术线)~ 最新阿里、腾讯、华为、字节跳动等大厂的薪资和职级对比 上面的表格不排除有很极端的收入情况&#xff0c;但至少能囊括一部分同职级的收入。这个表是“技术线”新入职员工的职级和薪资情况&#xff0c;非技术线(如产品、运营、…

Unicode 编码表

正则查找: 中文文字中文符号表情符号... [^\x00-\xff] 其中 \x00-\xff 匹配 ASCII 代码中十六进制代码为 00-ff 的字符&#xff0c; 加个取反 ^ &#xff0c;则就表示表示匹配非单字节的字符&#xff0c;例如汉字&#xff0c;汉字符号等字符集。 中文文字&#xff08;简体繁…