ROS 2边学边练(7)-- 何为动作(actions)

news2024/11/27 16:45:21

概念

        我们先来看一张动图,下文再围绕这张图对动作作简单阐释和说明。

如上图所示,动作的复杂度比之前提到的几种通信方式(主题、服务)要大一点,但是几者之间也有着千丝万缕的关系,动作糅合了主题和服务的机制,可以看作是主题和服务孕育出的结晶。首先,动作遵循的也是C/S架构,有动作客户端节点(action client node),对应的有动作服务端节点(action server node)。其次,每个动作节点内一般由三部分组成:【目标服务客户端/服务端】 + 【反馈订阅者/发布者】 + 【结果服务客户端/服务端】,动作过程由三要素组成:【目标 + (不断地)反馈+ 结果】,【目标】是客户端通过目标服务发向服务端的(比如让小海龟移动到某个位置),【反馈】是由动作服务端不断通过反馈主题发布给客户端的,【结果】是由服务端通过结果服务回复给客户端的。最后,动作有个特点,可以随时取消之前设定的目标值。一个完整的流程是:

1.动作客户端(之目标服务客户端)通过目标服务向动作服务端(之目标服务服务端)发送目标值;

2.动作服务端(之目标服务服务端)收到目标请求后通过目标服务向动作客户端(之目标服务客户端)回复确认;

3.动作客户端收到动作服务端(之目标服务服务端)的回复后又通过结果服务向动作服务端(之结果服务服务端)请求执行的结果;

4.动作服务端收到结果请求后,通过反馈主题,不断发布反馈消息给动作客户端(之反馈订阅者);

5.最后,当达到目标值时,反馈消息不再发布,取而代之的是动作服务端(之结果服务服务端)通过结果服务回复给动作客户端(之结果服务客户端)一个最终的结果值。

大概是这么个流程,不够简练(大家还是自己看图领悟吧),没关系,下面我们可以通过具体的例子来加深理解。

动动手

启动小海龟

$ros2 run turtlesim turtlesim_node
$ros2 run turtlesim turtle_teleop_key

体验动作(action)

在启动控制节点的时候,可以看见有提示一句话“Use G|B|V|C|D|E|R|T keys to rotate to absolute orientations. 'F' to cancel a rotation.”,这里面就涉及到了动作相关内容,我们通过围绕F周围的一圈按键来给动作服务端节点发送目标值,后者会返回“Rotation goal completed successfully”信息来回复目标完成的结果。

我们再来体验下临时取消之前目标的功能(考验你们手速的时刻到了),先随便在控制节点终端让小海龟沿某个方向游动(目标值),然后马上摁下F键,看看turtlesim节点返回什么。

最后一行打印出了“Rotation goal canceled”的字样,代表动作目标取消成功。

        不仅我们的动作客户端节点(teleop_key)可以取消动作目标,我们的动作服务端节点(turtlesim)也能主动取消动作目标,但是返回的内容会不一样,我们来试试。我们在控制终端先摁下d键,然后立即摁下g键,返回了aborting,意思是在前一个目标还未完成的情况下又收到了一个目标,我们停止上一个目标值(但是会执行最后的那个目标,所以后面才有目标完成的信息)。

节点信息

        在前面的章节里面我们通过ros2 node info <node_name>命令查看了各节点的详细信息,我们再来回顾下:

$ros2 node info /turtlesim

先看/turtlesim节点,

最后几行可以看到,/turtlesim节点是充当动作服务端(该节点的部分)的,其关联的动作是/turtle1/rotate_absolute,其动作数据类型是turtlesim/action/RotateAbsolute,它会提供反馈和回复给动作/turtle1/rotate_absolute(再由该动作将消息传给动作客户端)。

再来看看另外一个节点/teleop_turtle,

$ros2 node info /teleop_turtle

从最后几行可以看出,该节点是充当动作客户端(该节点的部分)的,其关联了同样的动作/turtle1/rotate_absolute(动作数据类型保持一致)。

动作列表

$ros2 action list

小海龟例子当前只有一种动作/turtle1/rotate_absolute,其中/turtlesim节点的部分充当该动作的服务端,/teleop_turtle节点的部分充当该动作的客户端。

动作数据类型列表

        既然是一种通信方式,那么肯定有其对应的通信数据类型咯(其实上面查看节点信息的时候就已经罗列出来了),

$ros2 action list -t

[turtlesim/action/RotateAbsolute]就是动作/turtle1/rotate_absolute的数据类型,当我们需要从命令行或代码里面控制某些目标时是得了解对应的数据类型的。

数据类型详情

        既然数据类型都列出来了,我们得继续深入了解这个数据类型长啥样啊,继续我们的interface show命令:

$ros2 interface show turtlesim/action/RotateAbsolute

一共三段内容(---分开),首先是float32 theta目标值,中间的是float32 delta,与开始角度之间的差值,也即结果值,最后是过程中的反馈值。

动作信息

        根据查询到的动作名称反查下关联该动作的客户端及服务端情况,此处不再过多赘述。

$ros2 action info /turtle1/rotate_absolute

发送动作目标

        既然动作过程、动作名称及动作数据类型我们都能查到了解了,那我们是不是可以通过命令行的形式发送一个动作目标给动作服务端节点呢(之前通过键盘是另一种动作发送目标的方式)?答案是毋庸置疑的。

$ros2 action send_goal <action_name> <action_type> <values>

        上面这个命令即可办到,国际惯例,<values>这个得符合YAML语法规则。

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

再试试上面的命令控制下小海龟 ,我们只用负责发送一个目标值即可(theta,单位为弧度),同时观察下小海龟的游动情况,

可以看到小海龟在收到动作目标值之后旋转了方向,目标成功完成,返回结果里面有出现一个目标接收端的ID号以及结果delta值。theta和delta都出场了,还有个反馈值remaining不知道猫在哪,我们让它现身,通过追加--feedback(目标值theta我们逆时针再转回去,方便观察),

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

...

不断有Feedback刷新在终端信息里(精度还挺高),直到到达目标值了,Feedback才停止发布,由动作服务端回复给动作客户端结果信息。

        根据上面的体验,我们可以看出,动作方式适用于那种需要灵活处理实时情况的场景,比如导航和机械臂,从A点到B点,中间如遇到障碍物,那么要随时取消上一个目标,并发送一个新目标让其执行,此过程不断反复直到抵达目标。

本篇完。

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

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

相关文章

【MySQL】DQL-排序查询-语法&排序方式&注意事项&可cv例题语句

前言 大家好吖&#xff0c;欢迎来到 YY 滴MySQL系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C Linux的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的…

常用技术-Stream流

目录 Stream流是什么&#xff1f; 认识Stream流 流和集合的区别 Stream流的操作 中间操作 Filter(过滤) Map(转换) Sorted(排序) Distinct(去重) Limit(限制) Skip(跳过) Peek(展示) 终止操作 forEach(循环) Collect(收集) Count(计数) Reduce(聚合) 使用Strea…

我爱DFS序列搜索

什么是DFS&#xff1f; DFS算法&#xff0c;即深度优先搜索&#xff08;Depth-First Search&#xff09;算法&#xff0c;是一种用于遍历或搜索图或树的算法。DFS算法可以解决诸如路径查找、图的连通性、拓扑排序以及树结构中的深度遍历等问题。然而&#xff0c;需要注意的是&…

C++基础12:标准模板库

此专栏为移动机器人知识体系下的编程语言中的 C {\rm C} C从入门到深入的专栏&#xff0c;参考书籍&#xff1a;《深入浅出 C {\rm C} C》(马晓锐)和《从 C {\rm C} C到 C {\rm C} C精通面向对象编程》(曾凡锋等)。 11.标准模板库 11.1 泛型化编程与STL简介 泛型化编程思想是一…

实践笔记-harbor搭建(版本:2.9.0)

harbor搭建 1.下载安装包&#xff08;版本&#xff1a;2.9.0&#xff09;2.修改配置文件3.安装4.访问harbor5.可能用得上的命令: 环境&#xff1a;centos7 1.下载安装包&#xff08;版本&#xff1a;2.9.0&#xff09; 网盘资源&#xff1a;https://pan.baidu.com/s/1fcoJIa4x…

垃圾回收机制--GC 垃圾收集器--JVM调优-面试题

1.触发垃圾回收的条件 新生代 Eden区域满了&#xff0c;触发young gc (ygc)老年代区域满了&#xff0c;触发full gc (fgc)通过ygc后进入老年代的平均大小大于老年代的可用内存,触发full gc(fgc).程序中主动调用的System.gc()强制执行gc,是full gc&#xff0c;但是不必然执行。…

KUKA机器人调整示教器灵敏度(校屏)

KUKA机器人KRC4的示教器升级后&#xff0c;示教器屏幕由之前的电阻屏改为电容屏&#xff0c;不仅在外观上有所变化&#xff0c;屏幕校准的方法也有所不同。通过以下方法分别对新旧两款示教器进行屏幕校正&#xff0c;调整示教器屏幕灵敏度。 对新款示教器而言&#xff1a; 一…

热烈祝贺阿里云PolarDB登顶2024最新一期中国数据库流行榜

热烈祝贺阿里云PolarDB登顶2024最新一期中国数据库流行榜 墨天轮墨天轮国产数据库流行度排行PolarDB首度夺魁关于话题的讨论数据库流行度排行榜会影响你的数据库选型吗&#xff1f;对于 PolarDB 的本次登顶&#xff0c;你认为关键因素是什么&#xff1f;PolarDB“三层分离”新版…

LeetCode-331. 验证二叉树的前序序列化【栈 树 字符串 二叉树】

LeetCode-331. 验证二叉树的前序序列化【栈 树 字符串 二叉树】 题目描述&#xff1a;解题思路一&#xff1a;看提示主要是栈和树。这题其实不是二叉树的遍历题&#xff0c;而是检验二叉树基础知识的题&#xff0c;也许有些难想。第一种解法是&#xff1a;把有效的叶子节点使用…

【OceanBase实战之路】第3篇:多租户架构实现资源隔离

码到三十五 &#xff1a; 个人主页 心中有诗画&#xff0c;指尖舞代码&#xff0c;目光览世界&#xff0c;步履越千山&#xff0c;人间尽值得 ! 目录 一、什么是OceanBase的多租户二、兼容模式2.1 MySQL 模式2.2 Oracle 模式三、租户介绍3.1 系统租户3.2 用户租户3.3 Meta 租…

强化基础-Java-泛型基础

什么是泛型&#xff1f; 泛型其实就参数化类型&#xff0c;也就是说这个类型类似一个变量是可变的。 为什么会有泛型&#xff1f; 在没有泛型之前&#xff0c;java中是通过Object来实现泛型的功能。但是这样做有下面两个缺陷&#xff1a; 1 获取值的时候必须进行强转 2 没有…

计算机网络-TCP/IP 网络模型

TCP/IP网络模型各层的详细描述&#xff1a; 应用层&#xff1a;应用层为应用程序提供数据传输的服务&#xff0c;负责各种不同应用之间的协议。主要协议包括&#xff1a; HTTP&#xff1a;超文本传输协议&#xff0c;用于从web服务器传输超文本到本地浏览器的传送协议。FTP&…

Linux 设备树: 设备树节点与属性在 dtb 文件中的存储

前言 当前新版本的 Linux 内核 设备驱动框架&#xff0c;与设备树&#xff08;Device Tree&#xff09;结合密切&#xff0c;整体 设备树的设备驱动框架&#xff0c;比较的庞大&#xff0c;但又非常的经典。 一个个的 设备树解析函数&#xff0c;都是前人【智慧】的结晶&#…

微服务监控:确保分布式系统的可观察性与稳定性

码到三十五 &#xff1a; 个人主页 心中有诗画&#xff0c;指尖舞代码&#xff0c;目光览世界&#xff0c;步履越千山&#xff0c;人间尽值得 ! 目录 一、前言二、微服务监控的重要性三、关键监控指标四、常用监控工具五、最佳实践六、结论 一、前言 在当前的软件开发领域&a…

2.快速排序

快速排序 思想&#xff1a;双指针法&#xff08;左右指针法&#xff09; 时间复杂度&#xff1a;O(n log n)&#xff08;最理想的情况下&#xff09; 最坏的情况&#xff1a;输入的数组已经是有序的或者接近有序时 快速排序的性能会退化到O(n^2) 我们的快速排序其实就是让两…

Wezterm配置

Windows 的图形界面目前来说在有图形界面的系统中&#xff0c;表现最稳定 linux 的终端最方便 和 tui 程序也多 我建议winodws安装 wsl 既可以使用 linux的环境和可以使用windows的桌面 关键 neovide --wsl 的表现很棒 如果项目的历史提交很多而且&#xff0c;工程很大&#xf…

C++STLmap,set

我最近开了几个专栏&#xff0c;诚信互三&#xff01; > |||《算法专栏》&#xff1a;&#xff1a;刷题教程来自网站《代码随想录》。||| > |||《C专栏》&#xff1a;&#xff1a;记录我学习C的经历&#xff0c;看完你一定会有收获。||| > |||《Linux专栏》&#xff1…

吴恩达2022机器学习专项课程(一) 4.4 学习率

问题预览/关键词 学习率太小有什么影响&#xff1f;学习率太大有什么影响&#xff1f;如果成本函数达到局部最小值&#xff0c;使用梯度下降还能继续最小化吗&#xff1f;为什么学习率固定&#xff0c;而最小化成本函数的步幅却越来越缓&#xff1f;如何选择合适的学习率&…

前端学习<二>CSS基础——12-CSS3属性详解:动画详解

前言 本文主要内容&#xff1a; 过渡&#xff1a;transition 2D 转换 transform 3D 转换 transform 动画&#xff1a;animation 过渡&#xff1a;transition transition的中文含义是过渡。过渡是CSS3中具有颠覆性的一个特征&#xff0c;可以实现元素不同状态间的平滑过渡…

2024 MCM数学建模美赛2024年A题复盘,思路与经验分享:资源可用性与性别比例 | 性别比例变化是否对生态系统中的其他生物如寄生虫提供优势(五)

审题 第四问让我们探究性别比例变化是否对生态系统中的其他生物如寄生虫提供优势。这里我们可以把问题简化一下&#xff0c;只探究性别比例会不会对寄生虫提供优势。因为考虑太多生物&#xff0c;会使模型更复杂&#xff0c;我这个水平处理不了这么复杂的问题&#xff0c;是我…