机器人操作系统ROS Indigo 入门学习(14)

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))

想要成功,就一定要和成功的人在一起,不然反之

机器人操作系统ROS Indigo 入门学习(14)

相关文章:

你感兴趣的文章:

标签云: