ROS的action通信——实现阶乘运算(三)

在ROS中除了常见的话题(topic)通信、服务(server)通信等方式,还有action通信这一方式,由于可以实时反馈任务完成情况,该通信方式被广泛运用于机器人导航等任务中。本文将通过三个小节的分享,实现基于action通信的阶乘运算。
第一节:自定义action文件
第二节:基于C++实现action通信的服务端
第三节:基于C++实现action通信的客户端

本节为第三节:基于C++实现action通信的客户端

详细步骤如下:

步骤1:在action_ws/src/factorial_pkg/src下创建factorial_client.cpp文件

cd action_ws/src/factorial_pkg/src
touch factorial_client.cpp

步骤2: 编写factorial_client.cpp文件

作者已在代码中进行了详细注释

#include "ros/ros.h"
// 导入自定义action头文件
#include "factorial_pkg/FactorialAction.h"
// 用于创建一个简单的行为服务器客户端
#include "actionlib/client/simple_action_client.h"typedef actionlib::SimpleActionClient<factorial_pkg::FactorialAction> ac;// 当任务完成时被调用,可以用来处理返回的结果
void doneCB(const actionlib::SimpleClientGoalState &goal_state, const factorial_pkg::FactorialResultConstPtr &result)
{if(goal_state.state_ == goal_state.SUCCEEDED){ROS_INFO("The task has succeeded");ROS_INFO("result: %ld", result->result);}else{ROS_INFO("The task failure");}
}// 这个回调函数在目标开始执行并变为“活动”(Active)状态时被调用。
// 在这里,你可以执行一些操作,比如更新用户界面,表示任务正在进行等。
void activeCB()
{ROS_INFO("Goal just went active");
}// 这个回调函数会在目标执行期间接收到反馈信息时被调用。
// 这通常用来获取目标执行的进度、状态更新等。
void feedbackCB(const factorial_pkg::FactorialFeedbackConstPtr &feedback)
{ROS_INFO("feedback: %.2f", feedback->feedback_num);
}   int main(int argc, char *argv[])
{ros::init(argc, argv, "factorial_client");ros::NodeHandle nh_;ac ac_(nh_, "factorial_action", true);// 等待服务器启动ac_.waitForServer();// 发送goal;factorial_pkg::FactorialGoal goal;goal.goal = 10;ac_.sendGoal(goal, &doneCB, &activeCB, &feedbackCB);ros::spin();return 0;
}

步骤3:编写factorial_pkg下的CMakeLists.txt文件

add_executable(factorial_client src/factorial_client.cpp)
target_link_libraries(factorial_client ${catkin_LIBRARIES})

步骤四:客户端和服务端联调

在终端中编译文件
打开一个终端,输入roscore
新开一个终端,输入rosrun factorial_pkg factorial_server
新开一个终端,输入rosrun factorial_pkg factorial_client
如果没有问题,则可以得到最终结果
在这里插入图片描述

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

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

相关文章

四款 AI 协作办公工具,AI工具库革新办公效率

在数字化办公时代&#xff0c;AI 技术正深刻改变着我们的工作方式。AIDH.NETAI工具库汇聚了众多先进的工具&#xff0c;今天我们来了解 AI协作办公工具&#xff0c;探索它们如何助力企业和团队在办公场景中脱颖而出。 Taskade&#xff1a;智能工作流的领航者 Taskade 是一款将…

vue2 h5 画高德地图电子围栏

使用前请先申请高德地图key JavaScript API | 腾讯位置服务 npm install lodash-es效果图 子组件代码 <template><div class"fence-container"><div v-if"loading" class"map-loading"><div class"loader">…

unity学习54:图片+精灵+遮罩mask,旧版文本 text 和新的TMP文本

目录 1 图片 image 1.1 如果直接导入image 1.2 图片 image 和精灵 sprite 1.2.1 继续修改上面的格式 texture type 是default 1.2.2 再次关联到UI的 image 物体上就可以了 1.3 图片和遮罩 mask 1.3.1 创建1个父物体和1个子物体&#xff0c;分别都是image 1.3.2 如果父…

Spring Data JPA vs MyBatis:ORM框架如何选择?

在选择ORM框架时&#xff0c;Spring Data JPA和MyBatis是两个常见的选择&#xff0c;它们各有优缺点&#xff0c;适用于不同的场景。以下是两者的对比&#xff0c;帮助你做出选择&#xff1a; 1. Spring Data JPA 优点&#xff1a; 开发效率高&#xff1a;通过简单的接口定义和…

Selenium 与 Coze 集成

涵盖两者的基本概念、集成步骤、代码示例以及相关注意事项。 基本概念 Selenium:是一个用于自动化浏览器操作的工具集,支持多种浏览器(如 Chrome、Firefox 等),能够模拟用户在浏览器中的各种操作,如点击、输入文本、选择下拉框等,常用于 Web 应用的自动化测试。Coze:它…

在线骑行|基于SpringBoot的在线骑行网站设计与实现(源码+数据库+文档)

在线骑行网站系统 目录 基于SpringBoot的在线骑行设计与实现 一、前言 二、系统设计 三、系统功能设计 5.1用户信息管理 5.2 路线攻略管理 5.3路线类型管理 5.4新闻赛事管理 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取…

[深度学习]基于C++和onnxruntime部署yolov12的onnx模型

基于C和ONNX Runtime部署YOLOv12的ONNX模型&#xff0c;可以遵循以下步骤&#xff1a; 准备环境&#xff1a;首先&#xff0c;确保已经下载后指定版本opencv和onnruntime的C库。 模型转换&#xff1a; 安装好yolov12环境并将YOLOv12模型转换为ONNX格式。这通常涉及使用深度学习…

Imagination DXTP GPU IP:加速游戏AI应用,全天候畅玩无阻

日前&#xff0c;Imagination 推出了最新产品——Imagination DXTP GPU IP&#xff0c;在智能手机和其他功耗受限设备上加速图形和AI工作负载时&#xff0c;保证全天候的电池续航。它是我们最新D系列GPU的最终产品&#xff0c;集成了自2022年发布以来引入的一系列功能&#xff…

(python)Arrow库使时间处理变得更简单

前言 Arrow库并不是简单的二次开发,而是在datetime的基础上进行了扩展和增强。它通过提供更简洁的API、强大的时区支持、丰富的格式化和解析功能以及人性化的显示,填补了datetime在某些功能上的空白。如果你需要更高效、更人性化的日期时间处理方式,Arrow库是一个不错的选择…

pandas中的数据结构+数据查询

pandas 数据结构 Series Series是一种类似于一维数组的对象&#xff0c;它由一组数据&#xff08;不同数据类型&#xff09;以及一组与之相关的数据标签&#xff08;即索引&#xff09;组成。 列表创建 仅有数据列表即可产生最简单的Series s1 pd.Series([1,a,5.2,7]) 左侧…

使用前端 html css 和js 开发一个AI智能平台官网模板-前端静态页面项目

最近 AI 人工智能这么火&#xff0c;那必须针对AI 做一个 AI方面的 官方静态网站练手。让自己的前端技术更上一层楼&#xff0c;哈哈。 随着人工智能技术的不断发展&#xff0c;越来越多的AI应用开始渗透到各行各业&#xff0c;为不同领域的用户提供智能化解决方案。本网站致力…

React + TypeScript 数据模型驱动数据字典生成示例

React TypeScript 数据模型驱动数据字典生成示例 引言&#xff1a;数据字典的工程价值 在现代化全栈开发中&#xff0c;数据字典作为业务实体与数据存储的映射桥梁&#xff0c;直接影响系统可维护性与团队协作效率。传统手动维护字典的方式存在同步成本高和版本管理混乱两大痛…

MySQL八股整理

1. 如何定位慢查询&#xff1f; 慢查询一般发生在联表查询或者表中数据量较大时&#xff0c;当响应时间较长或者压测时间超过2s时&#xff0c;就认为是慢查询。定位慢查询的话一般有两种方法&#xff0c;一种是使用专门的分析工具去定位。另一种也是我们项目中之前使用过的方法…

ShardingSphere Proxy 配置

在使用 ShardingSphere Proxy 模式时&#xff0c;结合 主从复制架构 实现 读写分离&#xff0c;并按照 用户ID哈希算法 确定库、时间范围 确定表的场景下&#xff0c;配置文件需要做一些调整以支持分片、读写分离以及主从复制。 以下是如何配置 ShardingSphere Proxy 模式的详…

Redis集群机制及一个Redis架构演进实例

Replication&#xff08;主从复制&#xff09; Redis的replication机制允许slave从master那里通过网络传输拷贝到完整的数据备份&#xff0c;从而达到主从机制。为了实现主从复制&#xff0c;我们准备三个redis服务&#xff0c;依次命名为master&#xff0c;slave1&#xff0c;…

Qt QScrollArea 总结

Qt QScrollArea 总结 1. 功能概述 滚动容器&#xff1a;用于显示超出视口&#xff08;Viewport&#xff09;范围的内容&#xff0c;自动提供滚动条。子部件管理&#xff1a;可包裹单个子部件&#xff08;通过 setWidget()&#xff09;&#xff0c;当子部件尺寸 > 视口时&a…

Windows系统编程项目(一)进程管理器

本项目将通过MFC实现一个进程管理器&#xff0c;如下图详细信息页所示&#xff1a; 一.首先创建一个基于对话框的MFC项目&#xff0c;在静态库中使用MFC 二.在项目默认的对话框中添加一个列表 三.列表添加变量 四.初始化列表 1.设置列表风格和表头 2.填充列表内容 我们需要在…

RAG-202502

目录 RAG场景的坑知识等级金字塔 初级RAG存在的问题高级RAG索前优化检索优化检索后优化 优化经验总结参考 RAG场景的坑 晦涩的专业术语 误区&#xff1a;在专业领域中。许多文献和资料中充满了专业术语&#xff0c;这些术语对于非专业人士&#xff08;甚至是大模型&#xff0…

CDN与群联云防护的技术差异在哪?

CDN&#xff08;内容分发网络&#xff09;与群联云防护是两种常用于提升网站性能和安全的解决方案&#xff0c;但两者的核心目标和技术实现存在显著差异。本文将从防御机制、技术架构、适用场景和代码实现等方面详细对比两者的区别&#xff0c;并提供可直接运行的代码示例。 一…

STM32-智能小车项目

项目框图 ST-link接线 实物图&#xff1a; 正面&#xff1a; 反面&#xff1a; 相关内容 使用L9110S电机模块 电机驱动模块L9110S详解 | 良许嵌入式 测速模块 语音模块SU-03T 网站&#xff1a;智能公元/AI产品零代码平台 一、让小车动起来 新建文件夹智能小车项目 在里面…