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

news/2025/2/26 15:27:25

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

本节为第一节:自定义action文件

自定义action文件的流程与自定义msg,自定义srv文件十分相似,主要包括编写action文件、配置CMakeLists文件、编译生成三个步骤。详细步骤如下:

步骤1:在工作空间action_ws下的src文件夹中创建package(factorial_pkg):

依赖项为 rospy roscpp std_msgs actionlib actionlib_msgs message_generation

cd ${当前路径}/action_ws/src
catkin_create_pkg factorial_pkg rospy roscpp std_msgs actionlib actionlib_msgs message_generation

步骤2:在action_ws/src/factorial_pkg下创建action文件夹,并在action文件夹下创建Factorial.action文件(文件名首字母建议大写)

在这里插入图片描述

步骤3:编辑action文件,主要包括目标值、结果值、反馈值三个部分,每个部分之间用"—"隔开

# goal definition
int64 goal
---
# result definition
int64 result
---
# feedback
float64 feedback_num

步骤4:配置 factorial_pkg 下的 CMakeLists.txt 文件

cmake_minimum_required(VERSION 3.0.2)
project(factorial_pkg)

find_package(catkin REQUIRED COMPONENTS
  actionlib
  actionlib_msgs
  message_generation
  roscpp
  rospy
  std_msgs
)

## Generate actions in the 'action' folder
add_action_files(
  FILES
  Factorial.action
)

## Generate added messages and services with any dependencies listed here
generate_messages(
  DEPENDENCIES
  actionlib_msgs
  std_msgs
)

catkin_package(
#  INCLUDE_DIRS include
#  LIBRARIES factorial_pkg
 CATKIN_DEPENDS actionlib actionlib_msgs message_generation roscpp rospy std_msgs
#  DEPENDS system_lib
)

步骤5:配置package.xml 下的 CMakeLists.txt 文件

主要是检查52行后面一大段代码中,有无<build_depend>message_generation</build_depend>
<exec_depend>message_generation</exec_depend>
没有的话补上。

  <buildtool_depend>catkin</buildtool_depend>
  <build_depend>actionlib</build_depend>
  <build_depend>actionlib_msgs</build_depend>
  <build_depend>message_generation</build_depend>
  <build_depend>roscpp</build_depend>
  <build_depend>rospy</build_depend>
  <build_depend>std_msgs</build_depend>
  <build_export_depend>actionlib</build_export_depend>
  <build_export_depend>actionlib_msgs</build_export_depend>
  <build_export_depend>roscpp</build_export_depend>
  <build_export_depend>rospy</build_export_depend>
  <build_export_depend>std_msgs</build_export_depend>
  <exec_depend>actionlib</exec_depend>
  <exec_depend>actionlib_msgs</exec_depend>
  <exec_depend>roscpp</exec_depend>
  <exec_depend>rospy</exec_depend>
  <exec_depend>std_msgs</exec_depend>
  <exec_depend>message_generation</exec_depend>

步骤6:编译文件

在action_ws下进行编译,如果没有报错,即表明action文件编写无误。

source ./devel/setup.bash
catkin_make

http://www.niftyadmin.cn/n/5868885.html

相关文章

PXE 安装ubuntu22.04自动判断UEFI或者Legacy引导

UEFI引导安装&#xff1a;https://blog.csdn.net/qq_50247813/article/details/145777563 Legacy引导安装&#xff1a;https://blog.csdn.net/qq_50247813/article/details/145730754 本篇根据上两篇快速部署pxe服务器&#xff0c;并自动判断uefi或者legacy引导 一、服务器必要…

C/C++后端开发面试表述、技术点摸底——基础组件篇

前端时间笔者系统学习了基础组件中的池式结构&#xff08;包括线程池、内存池、连接池&#xff09;&#xff0c;原子操作&#xff0c;锁&#xff0c;无锁队列&#xff0c;网络缓冲区&#xff0c;定时器设计&#xff0c;分布式锁&#xff0c;有些内容笔者已经总结整理成了相关技…

linux centos8 安装redis 卸载redis

准备环境 系统&#xff1a;linux CentOS8 安装步骤 一、下载redis 1.进入官网找到下载地址 https://redis.io/download 2.右键点击复制链接地址 3.进入到Xshell控制台(默认当前是root根目录)&#xff0c;&#xff0c;输入wget 加你复制的地址 &#xff08;示例 &#xff…

爱普生汽车用显示控制器IC:ScalerIC,汽车接口IC,相机接口IC

爱普生汽车显示控制器IC&#xff0c;汽车显示控制器芯片可以分为三类&#xff1a;爱普生显示控制芯片Scaler IC &#xff0c;爱普生汽车接口IC&#xff0c;爱普生相机接口IC。下面就给大家分别介绍下这三类芯片的具体型号的特征及用途。 爱普生显示控制芯片 Scaler IC Scaler…

在 JMeter 中使用 Python 脚本

JMeter本身基于Java开发,但可以借助JSR223元件编写Python脚本实现更灵活的功能,以下为你详细介绍具体实现方式: 1. 配置Python环境 在使用Python脚本前,需要确保你的系统已经安装了Python环境,同时还需要安装jpype1库,它允许Python程序调用Java代码,这对于在JMeter中使…

DeepSeek-R1 满血版和蒸馏版鉴别方法

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于大模型算法的研究与应用。曾担任百度千帆大模型比赛、BPAA算法Q大赛评委,编写微软OpenAI考试认证指导手册。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第名。授权多项发明专利。对机器学…

《Flink学习攻略:从入门到进阶的奇妙之旅》

《Flink学习攻略&#xff1a;从入门到进阶的奇妙之旅》 嘿&#xff0c;各位小伙伴&#xff01;今天咱们来聊聊怎么学习Flink这个在大数据领域超火的玩意儿。相信很多小伙伴都对它感兴趣&#xff0c;但又不知道从哪儿下手&#xff0c;别担心&#xff0c;咱一步步来。 一、学习…

Redisson 分布式锁底层原理实现详解

1、概述 Redisson 是基于 Redis 实现的分布式锁&#xff0c;其核心思想是利用 Redis 的 SET NX&#xff08;SET if Not eXists&#xff09; PX(过期时间) 来实现锁的互斥性&#xff0c;同时通过 Lua 脚本 处理加锁、解锁、续期等原子操作&#xff0c;保证分布式环境下的安全性…