实验目的:
自定义动作接口,要求动作客户端发送一个整型数据给服务端,动作服务端进行累加求和,在累加过程中连续反馈进度,最后反馈结果给客户端。
1、创建工作空间和自定义接口功能包
请参考:ROS2 话题通信——自定义消息类型(C++)-优快云博客
2、自定义动作接口
在interface_pkg功能包中新建action文件夹,用于存放动作接口文件,在action目录中创建Progress.action文件
mkdir -p ./text_w/src/interface_pkg/action
touch ./text_w/src/interface_pkg/action/Progress.action
在Progress.action文件定义以下数据格式
int32 num
---
int32 sum
---
float64 progress
修改interface_pkg中的CMakeLists.txt文件
修改interface_pkg中的package.xml文件
<!--action构建工具依赖-->
<buildtool_depend>rosidl_default_generators</buildtool_depend>
<depend>action_msgs</depend>
保存然后编译
cd text_w/
colcon build --packages-select interface_pkg
在install目录下面生成了我们所需要的文件,即编译成功
创建动作功能包action_pkg,新建动作服务端和动作客户端节点
cd ./text_w/src/
ros2 pkg create action_pkg --build-type ament_cmake --dependencies rclcpp rclcpp_action interface_pkg --node-name action_server
touch ./action_pkg/src/action_client.cpp
编写动作服务端节点
//1.包含头文件;
#include "rclcpp/rclcpp.hpp"
#include "rclcpp_action/rclcpp_action.hpp"
#include "interface_pkg/action/progress.hpp"
using namespace std::placeholders;
using interface_pkg::action::Progress;
using GoalHandleProgress =