1.1写一个ServiceNode
这里我们会创建一个service(“add_two_ints_server”)node,,它会接受两个整形数据并且返回它们的和.
进入你在之前教程中创建的catkin工作空间的beginner_tutorialspackage目录.
cd~/catkin_ws/src/beginner_tutorials
1.111代码
在beginner_tutorialspackage中src目录下创建一个名add_two_ints_server.cpp文件,并且把下面的代码粘贴上去:
#include"beginner_tutorials/AddTwoInts.h"
booladd(beginner_tutorials::AddTwoInts::Request&req,
beginner_tutorials::AddTwoInts::Response&res)
{
res.sum=req.a+req.b;
ROS_INFO("request:x=%ld,y=%ld",(longint)req.a,(longint)req.b);
ROS_INFO("sendingbackresponse:[%ld]",(longint)res.sum);
returntrue;
}
intmain(intargc,char**argv)
{
ros::init(argc,argv,"add_two_ints_server");
ros::NodeHandlen;
ros::ServiceServerservice=n.advertiseService("add_two_ints",add);
ROS_INFO("Readytoaddtwoints.");
ros::spin();
return0;
}
1.1.2代码解释
现在我们分解代码:
#include"ros/ros.h"
beginner_tutorials/AddTwoInts.h是由我们之前创建的srv文件中产生的头文件.
beginner_tutorials::AddTwoInts::Response&res)
{
ROS_INFO("sendingbackresponse:[%ld]",(longint)res.sum);
}
1.2写一个ClientNode
1.2.1代码
在beginner_tutorialspackage中src目录下创建一个叫add_two_int_client.cpp文件,并且把下面的代码粘贴上去:
#include"ros/ros.h"
#include<cstdlib>
intmain(intargc,char**argv)
ros::init(argc,argv,"add_two_ints_client");
if(argc!=3)
{
ROS_INFO("usage:add_two_ints_clientXY");
return1;
ros::ServiceClientclient=n.serviceClient<beginner_tutorials::AddTwoInts>("add_two_ints");
if(client.call(srv))
ROS_INFO("Sum:%ld",(longint)srv.response.sum);
}
else
ROS_ERROR("Failedtocallserviceadd_two_ints");
return1;
}
return0;
1.2.2代码解释
现在,我们分解代码
这里为add_two_intsservice创建了一个client.ros::ServiceClient对象被用来之后调用service.
beginner_tutorials::AddTwoIntssrv;
srv.request.b=atoll(argv[2]);
这里我们示例了一个自动产生的servcie类,并且给它的request成员分配值.一个service类包含两个成员,request和response.它也包含两个类的定义,Request和Response.
if(client.call(srv))
想要成功,就一定要和成功的人在一起,不然反之