Ros2中动作通信的goal_handle类型在不同回调函数中的区别

在进行Ros2学习和进行项目的开发途中,准确来说实在动作通信项目的实战中,我给出了以下示例的ActionServer端初始化,并且使用goal_handle进行下一步操作。

        self.server = ActionServer(self,Nav,"nav",execute_callback=self.execute,goal_callback=self.handle_goal,cancel_callback=self.handle_cancel,handle_accepted_callback=self.handle_accepted,)

以下是我的Nav.action,简而言之,是我的动作接口,当我在使用goal_handle的goal_x = goal_handle.request.goal_x方法来获取客户端传来的数据时,竟然报错了,而且错误是Nav_Goal没有request这个方法,但是goal_handle明明是ServerGoalHandle类型,且是有request这个方法的,为什么会这样呢?

float32 goal_x
float32 goal_y
float32 goal_theta
---
float32 turtle_x
float32 turtle_y
float32 turtle_theta
---
float32 distance

在经过我查看源码后我发现,在default_goal_callback()函数中给出的是goal_request,在default_cancel_callback()函数中给出的是cancel_request,只有在执行函数过度的default_handle_accepted_callback()中才给出了goal_handle这一类型的指定,所以并不能直接认为这些函数给出的handle是相同的,换言之,将每个函数中的参数都写成goal_handle是不准确的,也不应该这么做。

def default_goal_callback(goal_request):"""Accept all goals."""return GoalResponse.ACCEPTdef default_cancel_callback(cancel_request):"""No cancellations."""return CancelResponse.REJECTdef default_handle_accepted_callback(goal_handle):"""Execute the goal."""goal_handle.execute()

即以下写法不准确,不应全写成goal_handle

    def handle_goal(self, goal_handle):passdef handle_cancel(self, goal_handle):passdef handle_accepted(self, goal_handle):passdef execute(self, goal_handle):pass

经过查询和尝试得知:Nav_Goal是一个数据类,通常包含目标动作的请求数据。包含目标的具体字段 goal_x,goal_y,goal_theta等。在处理目标时,Nav_Goal是接收和发送的实际数据。于是通过查看源码发现handle有一个take_data()方法,试了发现Nav_Goal没有这个方法,于是就直接访问其内部的数据,发现可行。

    def handle_goal(self, goal_handle):self.get_logger().info(f"请求坐标: ({goal_handle.goal_x:.2f}, {goal_handle.goal_y:.2f}), 航向: {goal_handle.goal_theta:.2f}")if (goal_handle.goal_x < 0or goal_handle.goal_x > 11.1or goal_handle.goal_y < 0or goal_handle.goal_y > 11.1):return GoalResponse.REJECTreturn GoalResponse.ACCEPT

而下方的执行部分,不出所料地肯定是ServerGoalHandle类型,于是继续是用老方法就行了

        goal_x = goal_handle.request.goal_xgoal_y = goal_handle.request.goal_y

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

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

相关文章

APP渗透-android12夜神模拟器+Burpsuite实现

一、夜神模拟器下载地址&#xff1a;https://www.yeshen.com/ 二、使用openssl转换证书格式 1、首先导出bp证书 2、将cacert.der证书在kali中转换 使用openssl生成pem格式证书,并授予最高权限 openssl x509 -inform der -in cacert.der -out cacert.pem chmod 777 cacert…

七、MyBatis-Plus高级用法:最优化持久层开发-个人版

七、MyBatis-Plus高级用法&#xff1a;最优化持久层开发 目录 文章目录 七、MyBatis-Plus高级用法&#xff1a;最优化持久层开发目录 一、MyBatis-Plus快速入门1.1 简介1.2 快速入门回顾复习 二、MyBatis-Plus核心功能2.1 基于Mapper接口CRUDInsert方法Delete方法Update方法Se…

加入运动健康数据开放平台,共赢鸿蒙未来

HarmonyOS SDK运动健康服务&#xff08;Health Service Kit&#xff09;是为华为生态应用打造的基于华为帐号和用户授权的运动健康数据开放平台。在获取用户授权后&#xff0c;开发者可以使用运动健康服务提供的开放能力获取运动健康数据&#xff0c;基于多种类型数据构建运动健…

伯克利、斯坦福和CMU面向具身智能端到端操作联合发布开源通用机器人Policy,可支持多种机器人执行多种任务

不同于LLM或者MLLM那样用于上百亿甚至上千亿参数量的大模型&#xff0c;具身智能端到端大模型并不追求参数规模上的大&#xff0c;而是指其能吸收大量的数据&#xff0c;执行多种任务&#xff0c;并能具备一定的泛化能力&#xff0c;如笔者前博客里的RT1。目前该领域一个前沿工…

51单片机基础11——蓝牙模块控制亮灭

串口初试——蓝牙模块 蓝牙模块的使用1. 软硬件条件2. 蓝牙模块3. 代码(分文件处理之后的代码) 蓝牙模块的使用 1. 软硬件条件 单片机型号&#xff1a;STC89C52RC开发环境&#xff1a;KEIL4烧录软件串口通信软件&#xff1a;stc-isp蓝牙模块&#xff1a;HC-04LED模块(高电平点…

【unity实战】Unity中使用A*寻路+有限状态机制作一个俯视角敌人AI

最终效果 文章目录 最终效果前言A*寻路插件介绍下载导入AI插件生成寻路网格节点的类型障碍物寻路测试A*只打印报错信息 代码控制寻路动画配置敌人状态机各种状态脚本效果完结 前言 前面做过有限状态机制作一个敌人AI&#xff1a;【unity实战】在Unity中使用有限状态机制作一个…

通过代理服务器连接 huggingface下载数据集或模型

有些huggingface的数据集或者模型在镜像网站("https://hf-mirror.com"&#xff09;上不存在&#xff0c;因此在国内只能通过代理服务器来下载&#xff0c;下面是下载的代码示例&#xff1a; import os os.environ["http_proxy"] "http://127.0.0.1:…

improved-diffusion-main代码理解

目录 一、 TimestepEmbedSequential二、PyTorch之Checkpoint机制三、AttentionBlock四、use_scale_shift_norm 和nanoDiffusion-main相比&#xff0c;improved-diffusion-main代码是相似的&#xff0c;但有几个不是很好理解的地方记录一下。 一、 TimestepEmbedSequential 代码…

【C++题解】1413. 切割绳子

问题&#xff1a;1413. 切割绳子 类型&#xff1a;贪心&#xff0c;二分&#xff0c;noip2017普及组初赛 题目描述&#xff1a; 有 n 条绳子&#xff0c;每条绳子的长度已知且均为正整数。绳子可以以任意正整数长度切割&#xff0c;但不可以连接。现在要从这些绳子中切割出 m…

Open3D 在点云中构建八叉树

目录 一、概述 二、代码实现 2.1关键函数 2.2完整代码 三、实现效果 3.1原始点云 3.2构建后点云 一、概述 八叉树&#xff08;Octree&#xff09;是一种树状数据结构&#xff0c;用于递归地将3D空间分割成较小的立方体。八叉树特别适用于3D计算机图形学、点云处理和空间…

TreeMap、HashMap 和 LinkedHashMap 的区别

TreeMap、HashMap 和 LinkedHashMap 的区别 1、HashMap2、LinkedHashMap3、TreeMap4、总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在 Java 中&#xff0c;TreeMap、HashMap 和 LinkedHashMap 是三种常用的集合类&#xff0c;它们在…

昇思Mindspore学习25天打卡Day16:热门LLM及其他AI应用|基于MindeNLP+MusicGen生成自己的个性化音乐

昇思Mindspore学习25天打卡Day16&#xff1a;热门LLM及其他AI应用|基于MindeNLPMusicGen生成自己的个性化音乐 1 下载模型2 生成音乐2.1 无提示生成2.2 文本提示生成2.3 音频提示生成 3 生成配置 &训练结束打上标签和时间 MusicGen是来自Meta Al的Jade Copet等人提出的基于…

连锁店收银系统源码

千呼新零售2.0系统是零售行业连锁店一体化收银系统&#xff0c;包括线下收银线上商城连锁店管理ERP管理商品管理供应商管理会员营销等功能为一体&#xff0c;线上线下数据全部打通。 私有化独立部署/全开源源码&#xff0c;系统开发语言&#xff1a; 核心开发语言: PHP、HTML…

hnust 1816: 算法10-9:简单选择排序

hnust 1816: 算法10-9&#xff1a;简单选择排序 题目描述 选择排序的基本思想是&#xff1a;每一趟比较过程中&#xff0c;在n-i1(i1,2,…,n-1)个记录中选取关键字最小的记录作为有序序列中的第i个记录。 在多种选择排序中&#xff0c;最常用且形式最为简单的是简单选择排序。…

ingress-nginx控制器证书不会自动更新问题

好久没更新了&#xff0c;正好今天遇到了一个很有意思的问题&#xff0c;在这里给大家分享下&#xff0c;同时也做下记录。 背景 最近想做个实验&#xff0c;当k8s集群中secret更新后&#xff0c;ingress-nginx控制器会不会自动加载新的证书。我用通义千问搜了下&#xff0c;…

windows 7 安装IPP协议,支持Internet打印

1 windows 7 安装IPP协议,支持Internet打印 #控制面板--打开或关闭Windows功能 3 复制Printers 文件夹 到 c:\inetpub\wwwroot\,复制msw3prt.dll到c:\windows\system32\ 4 打开IIs管理器 #报错:模块列表中不存在此处理程序所需的指定模块。如果您添加脚本映射处理程序映射&…

AndroidKille不能用?更新apktool插件-cnblog

AndroidKiller不更新插件容易报错 找到apktool管理器 填入apktool位置&#xff0c;并输入apktool名字 选择默认的apktool版本 x掉&#xff0c;退出重启 可以看到反编译完成了

网络基础:IS-IS协议

IS-IS&#xff08;Intermediate System to Intermediate System&#xff09;是一种链路状态路由协议&#xff0c;最初由 ISO&#xff08;International Organization for Standardization&#xff09;为 CLNS&#xff08;Connectionless Network Service&#xff09;网络设计。…

数据结构——(双)链表

文章目录 1. 定义 2. 双链表和单链表的区别 3. 代码示例 3.1 双链表节点和结构定义 3.2 初始化双链表 3.3 返回双链表的长度 3.4 在指定位置插入元素 3.5 在末尾插入元素 3.6 删除指定位置的元素并返回被删除的元素 3.7 删除末尾元素 3.8 获取指定位置的元素 3.9 修…

磁盘分区工具 -- 傲梅分区助手 v10.4.1 技术员版

软件简介 傲梅分区助手是一款功能强大的磁盘分区工具&#xff0c;它专为Windows系统设计&#xff0c;帮助用户更高效地管理他们的硬盘。该软件支持多种分区操作&#xff0c;包括创建、格式化、调整大小、移动、合并和分割分区。此外&#xff0c;它还提供了复制硬盘和分区的功能…