当前位置: 首页 > article >正文

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
如果没有问题,则可以得到最终结果
在这里插入图片描述

相关文章:

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

在ROS中除了常见的话题(topic&#xff09;通信、服务(server)通信等方式&#xff0c;还有action通信这一方式&#xff0c;由于可以实时反馈任务完成情况&#xff0c;该通信方式被广泛运用于机器人导航等任务中。本文将通过三个小节的分享&#xff0c;实现基于action通信的阶乘运…...

007:Cesium.ScreenSpaceEventHandler 知识详解,示例代码

查看本专栏目录 - 本文是第 007个API内容详解 vue+cesium 示例教程200+目录 文章目录 一、ScreenSpaceEventHandler 的基本概念初始化 ScreenSpaceEventHandler二、注册事件**常见事件类型**三、注销事件四、示例代码:鼠标移动时显示坐标信息五、示例代码:鼠标左键点击拾取地…...

期权帮|股指期货基差和价差有什么区别?

锦鲤三三每日分享期权知识&#xff0c;帮助期权新手及时有效地掌握即市趋势与新资讯&#xff01; 股指期货基差和价差有什么区别&#xff1f; 一、股指期货基差 股指期货基差是指股指期货价格与其对应的现货指数价格之间的差额。 股指期货基差计算公式&#xff1a;基差 现…...

WebSocketHandler 是 Spring Framework 中用于处理 WebSocket 通信的接口

WebSocketHandler 是 Spring Framework 中用于处理 WebSocket 通信的接口&#xff0c;其主要作用是定义了如何处理 WebSocket 的各种事件和消息。以下是 WebSocketHandler 的主要作用和功能&#xff1a; ### 1. 处理 WebSocket 生命周期事件 WebSocketHandler 定义了多个方法来…...

内网渗透测试-Vulnerable Docker靶场

靶场来源&#xff1a; Vulnerable Docker: 1 ~ VulnHub 描述&#xff1a;Down By The Docker 有没有想过在容器中玩 docker 错误配置、权限提升等&#xff1f; 下载此 VM&#xff0c;拿出您的渗透测试帽并开始使用 我们有 2 种模式&#xff1a; - HARD&#xff1a;这需要您将 d…...

一键导出数据库表到Excel

工作中&#xff0c;我们经常需要将数据库表导出到Excel&#xff0c;通常我们会用数据库编辑器之类的工具提供的导出功能来导出&#xff0c;但是它们的导出功能通常都比较简单。 这篇文章将介绍一种简单易用并且功能强大的导出方法。 新增导出 打开的卢导表工具&#xff0c;新…...

2025年电气工程与智能系统国际学术会议(IC2EIS 2025)

重要信息 官网&#xff1a;www.ic2eis.org(点击了解参会投稿等) 时间&#xff1a;2025年3月14-16日 地点&#xff1a;中国河南省郑州市 简介 2025年电气工程与智能系统国际学术会议&#xff08;IC2EIS 2025&#xff09;将于2025年3月14-16日在中国郑州举行。会议旨在为电气…...

Activiti 5 + Spring Boot全流程开发指南

目录 一、环境搭建&#xff08;Spring Boot 2.x&#xff09; 1.1 依赖配置 1.2 配置文件 二、流程定义与部署 2.1 创建BPMN文件&#xff08;leave.bpmn&#xff09; 2.2 流程部署服务 三、流程操作核心实现 3.1 启动流程实例 3.2 查询待办任务 四、审批流程处理 4.1 …...

docker安装etcd:docker离线安装etcd、docker在线安装etcd、etcd镜像下载、etcd配置详解、etcd常用命令、安装常见问题总结

官方网站 官方网址&#xff1a;etcd 二进制包下载&#xff1a;Install | etcd GitHub社区项目&#xff1a;etcd-io GitHub GitHub社区项目版本历史&#xff1a;Releases etcd-io/etcd GitHub 一、镜像下载 1、在线下载 在一台能连外网的linux上执行docker镜像拉取命令…...

【云安全】云原生-Docker(六)Docker API 未授权访问

Docker API 未授权访问 是一个非常严重的安全漏洞&#xff0c;可能导致严重的安全风险。 什么是 Docker API &#xff1f; Docker API 是 Docker 容器平台提供的一组 RESTful API&#xff0c;用于与 Docker 守护程序进行通信和管理 Docker 容器。通过 Docker API&#xff0c;…...

【人工智能顶刊合集】CCF-A/B/C类推荐所有期刊目录,中科院1区审稿极速,81天录用!

本期盘点【人工智能】领域CCF-A/B/C类中科院1-2区期刊最新影响因子、分区、审稿周期参考&#xff01; CCF-A类 Artificial Intelligence • 影响因子&#xff1a;5.1 • 期刊分区&#xff1a;JCR1区&#xff0c;中科院2区 • 年发文量&#xff1a;126 • 自引率&#xff1…...

C#实战:基于腾讯云大模型知识引擎原子能力提供的文档解析API快速提取图片信息为MD文档

目录 一、大模型知识引擎 LKE介绍 1.1 如何开通服务? 1.2 大模型知识引擎组成 二、案例实战 2.1、创建项目 2.2、引入腾讯大模型知识引擎 LKE调用SDK依赖库 2.3、代码编写 2.4、界面设计 三、总结 今天借助腾讯云大模型知识引擎原子能力提供的文档解析API快速提取图片…...

第7章_将应用程序与 Keycloak 集成

将应用程序与 Keycloak 集成 到目前为止&#xff0c;您已经了解了 Keycloak 中的主要概念和配置选项。在本章中&#xff0c;您将学习如何应用它们&#xff0c;以便您可以配置您的应用程序并将它们与 Keycloak 集成。 通过选定的集成场景和编码示例&#xff0c;您将根据应用程…...

kotlin的lateinit声明 的变量可能为null吗?

kotlin的lateinit声明 的变量可能为null吗&#xff1f; DeepSeek R1 思考 26 秒 思考过程 嗯&#xff0c;用户问的是Kotlin中的lateinit变量是否可能为null。首先&#xff0c;我需要回顾一下lateinit的作用和特性。lateinit用于延迟初始化一个非空类型的变量&#xff0c;这样…...

千峰React:案例一

做这个案例捏 因为需要用到样式&#xff0c;所以创建一个样式文件&#xff1a; //29_实战.module.css .active{text-decoration:line-through } 然后创建jsx文件&#xff0c;修改main文件&#xff1a;导入Todos&#xff0c;写入Todos组件 import { StrictMode } from react …...

ChatGPT入驻Safari,AI搜索时代加速到来

2月25日&#xff0c;人工智能领域巨头OpenAI宣布了一项重磅更新&#xff1a;为其广受欢迎的ChatGPT应用新增Safari浏览器扩展功能&#xff0c;并支持用户将ChatGPT设置为Safari地址栏的默认搜索引擎。这一举措标志着OpenAI在将ChatGPT整合进用户日常网络浏览体验方面迈出了重要…...

协方差(Covariance)与得分函数:从Fisher信息矩阵看统计关联

协方差与得分函数&#xff1a;从Fisher信息矩阵看统计关联 协方差&#xff08;Covariance&#xff09;是统计学中一个基础但强大的概念&#xff0c;它描述了两个随机变量之间的关系。在Fisher信息矩阵中&#xff0c;协方差以一种特别的形式出现&#xff1a;得分函数的协方差。…...

【错误记录】Arrays.asList 的坑

文章目录 概要原因小结 概要 最近在写一个需求的时候用到了这个方法生成一个 List&#xff0c;接着再往里面添加数据的时候就报错了&#xff0c;比如下面的例子。 public class Main {public static void main(String[] args) {List<Integer> res Arrays.asList(1, 2,…...

JConsole远程连接错误解决

个人博客地址&#xff1a;JConsole远程连接错误解决 | 一张假钞的真实世界 程序启动命令及参数如下&#xff1a; $ java -Dcom.sent.jmxremote.sslfalse -jar math-game.jar 防火墙已经放开30000端口访问&#xff0c;如下&#xff1a; $ telnet 192.168.72.156 30000 Tryin…...

CineMaster: 用于电影文本到视频生成的 3D 感知且可控的框架。

CineMaster是一种 3D 感知且可控的文本到视频生成方法允许用户在 3D 空间中联合操纵物体和相机&#xff0c;以创作高质量的电影视频。 相关链接 论文&#xff1a;cinemaster-dev.github.io 论文介绍 CineMaster是一种用于 3D 感知和可控文本到视频生成的新型框架。目标是让用…...

解决后端跨域问题

目录 一、什么是跨域问题&#xff1f; 1、跨域问题的定义 2、举例 3、为什么会有跨域问题的存在&#xff1f; 二、解决跨域问题 1、新建配置类 2、编写代码 三、结语 一、什么是跨域问题&#xff1f; 1、跨域问题的定义 跨域问题&#xff08;Cross-Origin Resource Sh…...

防爆手机科普:与普通手机的区别?在危险作业场景扮演什么角色?

在易燃易爆的工业环境中&#xff0c;如石油化工、矿山开采等领域&#xff0c;一款具备特殊安全性能的通讯工具显得尤为重要。这就是我们今天要深入探讨的主题——防爆手机。那么&#xff0c;什么是防爆手机&#xff1f;它与普通手机有何区别&#xff1f;防爆手机在这些危险作业…...

12.MySQL版题目设计|创建用户并赋权|MySQLWorkbench创建表结构|测试录题功能(mysql)

在数据库中设计可以远程登陆的MySQL用户&#xff0c;并给他赋权 oj_client设计表结构 数据库&#xff1a;oj&#xff0c; 表&#xff1a;oj_questions开始编码 连接访问数据库 创建用户并赋权 mysql -uroot -p进入mysql use mysql;select User, Host from user;create user…...

鸿蒙-状态管理V2其他方法

文章目录 前言makeObservedgetTargetObservedV2的类实例不支持JSON.stringify序列化双向绑定 前言 除了之前介绍的状态管理装饰器&#xff0c;在 V2 中还有其他新增的方法。 makeObserved 开发过程中我们经常会用到从服务器获取到数据(一般是 json 字符串)&#xff0c;转化为…...

Linux基础30-C语言篇之冒泡排序【入门级】

数组的典型应用&#xff1a;冒泡排序 向后冒泡 思想&#xff1a; 一次只排好一个数&#xff0c;针对n个数&#xff0c;最差情况需要n-1次就可以排好每次排序将相邻数据两两比较&#xff0c;将较大或者较小的数据向后交换&#xff0c;等所有数据比较完成&#xff0c;较大或者较…...

FFmpeg+vvenc实现H.266的视频编解码教程

Linux系统&#xff1a;FFmpegvvenc实现H.266的视频编解码教程&#xff08;视频压缩&#xff09; 关键网址 ffmpeg目前支持libvvenc&#xff0c;因此配置好libvvenc只会在一些make、sudo make install命令时遇到问题&#xff0c;例如默认安装或配置路径指定错误、ffmpeg版本、v…...

0x01 html和css

css 对于三种css使用方式&#xff1a; 第一种&#xff1a;行内样式 <span style"color: grey;">2024年05月15日 20:07</span>第二种&#xff1a;内部样式 <!DOCTYPE html> <html lang"en"> <head>...<style>span{…...

【大模型】量化、剪枝、蒸馏

大模型的量化、剪枝和蒸馏是三种常用的模型优化技术&#xff0c;旨在减少模型的复杂性&#xff0c;降低计算资源消耗&#xff0c;并加速推理过程。下面是每种技术的详细介绍&#xff1a; 1. 量化&#xff08;Quantization&#xff09; 量化是将浮点数表示的模型参数&#xff…...

Imagination GPU 3D Graphics Wrokload

本次分享Imagination GPU 的3D 图像处理负载流程。 总的分为两个阶段 第一阶段&#xff1a;Geometry Processing Phase 1.Input Assembly 输入装配。读取原始图元 2.Vertex Shading 顶点着色。对单个顶点输入运行shader 3.Geometry Shading 几何着色。对所有原始数据&…...

excel单、双字节字符转换函数(中英文输入法符号转换)

在Excel中通常使用函数WIDECHAR和ASC来实现单、双字节字符之间的转换。其中 WIDECHAR函数将所有的字符转换为双字节&#xff0c;ASC函数将所有的字符转换为单字节 首先来解释一下单双字节的含义。单字节一般对应英文输入法的输入&#xff0c;如英文字母&#xff0c;英文输入法…...