From 34ee817550e24af84e137ef2248d65a5d6abde7e Mon Sep 17 00:00:00 2001 From: jieshoudaxue <1641395022@qq.com> Date: Thu, 26 Oct 2023 21:21:57 +0800 Subject: [PATCH] [up] action sample --- action_sample/launch/start.launch | 19 ++++++++++++++++ action_sample/src/DoDishes_client.cpp | 32 +++++++++++++++++++++++++++ action_sample/src/DoDishes_server.cpp | 29 ++++++++++++++++++++++++ 3 files changed, 80 insertions(+) create mode 100644 action_sample/launch/start.launch diff --git a/action_sample/launch/start.launch b/action_sample/launch/start.launch new file mode 100644 index 0000000..d52d21d --- /dev/null +++ b/action_sample/launch/start.launch @@ -0,0 +1,19 @@ + + + + + + + \ No newline at end of file diff --git a/action_sample/src/DoDishes_client.cpp b/action_sample/src/DoDishes_client.cpp index 9c493eb..173df76 100644 --- a/action_sample/src/DoDishes_client.cpp +++ b/action_sample/src/DoDishes_client.cpp @@ -1,6 +1,38 @@ #include #include "action_sample/DoDishesAction.h" +void doneCb(const actionlib::SimpleClientGoalState& state, + const action_sample::DoDishesResultConstPtr& result) { + ROS_INFO("%d dishes is clean, state is %s", result->total_dishes_cleaned, state.toString().c_str()); + ros::shutdown(); +} + +void activeCb() { + ROS_INFO("job is active"); +} + +void feedbackCb(const action_sample::DoDishesFeedbackConstPtr& feedback) { + ROS_INFO("percent is %f", feedback->percent_complete); +} + + int main(int argc, char** argv) { + ros::init(argc, argv, "do_dishes_client"); + + actionlib::SimpleActionClient client("do_dishes", true); + + ROS_INFO("waiting for action server to start."); + client.waitForServer(); + ROS_INFO("action server started, sending goal."); + + action_sample::DoDishesGoal goal; + goal.dishwasher_id = 1; + + client.sendGoal(goal, &doneCb, &activeCb, &feedbackCb); + + ros::spin(); + + + return 0; } \ No newline at end of file diff --git a/action_sample/src/DoDishes_server.cpp b/action_sample/src/DoDishes_server.cpp index 34068e1..054238a 100644 --- a/action_sample/src/DoDishes_server.cpp +++ b/action_sample/src/DoDishes_server.cpp @@ -2,6 +2,35 @@ #include #include "action_sample/DoDishesAction.h" +void execute(const action_sample::DoDishesGoalConstPtr& goal, actionlib::SimpleActionServer* server) { + ros::Rate rate(1); + + action_sample::DoDishesFeedback feedback; + + ROS_INFO("dishwasher %d is working", goal->dishwasher_id); + + for (int i = 0; i < 10; i++) { + feedback.percent_complete = i * 10; + server->publishFeedback(feedback); + rate.sleep(); + } + + action_sample::DoDishesResult result; + result.total_dishes_cleaned = 188; + + ROS_INFO("dishwasher %d finish working", goal->dishwasher_id); + server->setSucceeded(result); +} + int main(int argc, char** argv) { + ros::init(argc, argv, "do_dishes_server"); + ros::NodeHandle nh; + + actionlib::SimpleActionServer server(nh, "do_dishes", std::bind(&execute, std::placeholders::_1, &server), false); + + server.start(); + + ros::spin(); + return 0; } \ No newline at end of file