From ce5abacb3b147317a2468e8d0f476db73ad21879 Mon Sep 17 00:00:00 2001 From: SebastianEbert <sebastian.ebert@tu-dresden.de> Date: Fri, 31 Jul 2020 10:22:11 +0200 Subject: [PATCH] code for service tutorial --- CMakeLists.txt | 8 ++++++++ src/add_two_ints_client.cpp | 30 ++++++++++++++++++++++++++++++ src/add_two_ints_server.cpp | 23 +++++++++++++++++++++++ 3 files changed, 61 insertions(+) create mode 100644 src/add_two_ints_client.cpp create mode 100644 src/add_two_ints_server.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index abbea0b..ed78eda 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,3 +26,11 @@ add_dependencies(talker tutorial_ros_pub_sub_generate_messages_cpp) add_executable(listener src/listener.cpp) target_link_libraries(listener ${catkin_LIBRARIES}) add_dependencies(listener tutorial_ros_pub_sub_generate_messages_cpp) + +add_executable(add_two_ints_server src/add_two_ints_server.cpp) +target_link_libraries(add_two_ints_server ${catkin_LIBRARIES}) +add_dependencies(add_two_ints_server tutorial_ros_pub_sub_generate_gencpp) + +add_executable(add_two_ints_client src/add_two_ints_client.cpp) +target_link_libraries(add_two_ints_client ${catkin_LIBRARIES}) +add_dependencies(add_two_ints_client tutorial_ros_pub_sub_generate_gencpp) diff --git a/src/add_two_ints_client.cpp b/src/add_two_ints_client.cpp new file mode 100644 index 0000000..31da5a8 --- /dev/null +++ b/src/add_two_ints_client.cpp @@ -0,0 +1,30 @@ +#include "ros/ros.h" +#include "tutorial_ros_pub_sub/AddTwoInts.h" +#include <cstdlib> + +int main(int argc, char **argv) +{ + ros::init(argc, argv, "add_two_ints_client"); + if (argc != 3) + { + ROS_INFO("usage: add_two_ints_client X Y"); + return 1; + } + + ros::NodeHandle n; + ros::ServiceClient client = n.serviceClient<tutorial_ros_pub_sub::AddTwoInts>("add_two_ints"); + tutorial_ros_pub_sub::AddTwoInts srv; + srv.request.a = atoll(argv[1]); + srv.request.b = atoll(argv[2]); + if (client.call(srv)) + { + ROS_INFO("Sum: %ld", (long int)srv.response.sum); + } + else + { + ROS_ERROR("Failed to call service add_two_ints"); + return 1; + } + + return 0; +} diff --git a/src/add_two_ints_server.cpp b/src/add_two_ints_server.cpp new file mode 100644 index 0000000..f053439 --- /dev/null +++ b/src/add_two_ints_server.cpp @@ -0,0 +1,23 @@ +#include "ros/ros.h" +#include "tutorial_ros_pub_sub/AddTwoInts.h" + +bool add(tutorial_ros_pub_sub::AddTwoInts::Request &req, + tutorial_ros_pub_sub::AddTwoInts::Response &res) +{ + res.sum = req.a + req.b; + ROS_INFO("request: x=%ld, y=%ld", (long int)req.a, (long int)req.b); + ROS_INFO("sending back response: [%ld]", (long int)res.sum); + return true; +} + +int main(int argc, char **argv) +{ + ros::init(argc, argv, "add_two_ints_server"); + ros::NodeHandle n; + + ros::ServiceServer service = n.advertiseService("add_two_ints", add); + ROS_INFO("Ready to add two ints."); + ros::spin(); + + return 0; +} -- GitLab