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

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

在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.dtcms.com/a/38416.html

相关文章:

  • 数据安全_笔记系列05:数据合规与隐私保护(GDPR、CCPA、中国《数据安全法》)深度解析
  • vite react 项目打包报错处理
  • 矩阵碰一碰发视频的后端源码技术,支持OEM
  • 使用 Containerd 通过 HTTP 协议拉取 Harbor 私有镜像仓库的镜像
  • 使用内置命令查看笔记本电池健康状态
  • Uppy - 免费开源、功能强大的新一代 web 文件上传组件,支持集成到 Vue 项目
  • Modelfile配置说明
  • AI绘画软件Stable Diffusion详解教程(2):Windows系统本地化部署操作方法(专业版)
  • ui设计公司兰亭妙微分享:科研单位UI界面设计
  • c#笔记-基础知识
  • muduo源码阅读:linux timefd定时器
  • 学习Flask:Day 1:基础搭建
  • AI大模型(四)基于Deepseek本地部署实现模型定制与调教
  • Python图像处理入门:如何打开图像文件及常见格式
  • MySQL知识
  • SpringBoot整合sharding-jdbc 实现分库分表操作
  • 实操系列:我用deepseek写sql
  • C++ | 面向对象 | 类
  • 六十天前端强化训练之第二天CSS选择器与盒模型深度解析
  • DeepSeek技术提升,Linux本地部署全攻略
  • 【面试手撕】多线程/并发编程
  • 在 compare-form.vue 中添加 compareDate 隐藏字段,并在提交时自动填入当前时间
  • [OS] 基于RR(Round Robin)算法的CPU调度
  • ubuntu20.04 突破文件数限制
  • 前言:什么是大模型微调
  • 企业级大模型应用的Java-Python异构融合架构实践
  • 本地部署大模型: LM Studio、Open WebUI 与 Chatbox 全面对比以及选型指南
  • 在windows下安装windows+Ubuntu16.04双系统(上)
  • 公共数据授权运营模式研究(总体框架、主要模式及发展趋势)
  • linux下软件安装、查找、卸载