在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