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

发布于:2025-02-27 ⋅ 阅读:(17) ⋅ 点赞:(0)

在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