1.
#include "ros/ros.h"
#include "my_package/AddTwoInts.h"
using namespace ros;
bool add(my_package::AddTwoInts::Request &req,
my_package::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){
init(argc, argv, "add_two_ints_serve");
NodeHandle n;
//广播服务:服务名字为add_two_ints, 收到服务请求调用 add 函数
ServiceServer service = n.advertiseService("add_two_ints", add);
ROS_INFO("Ready to add two ints.");
spin();
return 0;
}
#include "ros/ros.h"
#include "my_package/AddTwoInts.h"
#include <cstdlib>
using namespace ros;
int main(int argc, char** argv){
init(argc, argv, "add_two_ints_client");
if(argc != 3){
ROS_INFO("usage:add_two_ints_client X Y");
return 1;
}
NodeHandle n;
ServiceClient client = n.serviceClient<my_package::AddTwoInts>("add_two_ints");
my_package::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;
}