ROS服务编程::2,创建server

#include"ros/ros.h"
#include"my_package/AddTwoInts.h"

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)
{
    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;
}

 代码解析:

1,头文件

#include"ros/ros.h"
#include"my_package/AddTwoInts.h"

使用ros中的服务必须包含的头文件,其中“my_package/AddTwoInts.h"由之前创建的服务文件AddTwoInts.srv自动生成。

2,主函数

ros::init(argc, argv, "add_two_ints_server");

ros节点初始化,add_two_ints_server是节点名称,在ros的运行中必须独一无二,

 ros::ServiceServer service = n.advertiseService("add_two_ints",add);

创建一个服务的Sever,指定服务的名称add_two_ints,以及收到数据的回调函数 add.然后循环等待服务请求,一旦有服务请求,Sever就跳入回调函数进行处理。

3,回调函数部分

bool add(my_package::AddTwoInts::Request &req,
         my_package::AddTwoInts::Response &res)

回调函数是实现服务功能的部分,add()完成两个函数相加的功能,其传入参数便是我们在服务数据类型描述文件(srv)声明的数据结构。

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;

完成加法运算后,求和结果会放入到应答数据中,反馈到Client,回调函数返回true。

服务中的Server类似于话题中的Subscriber,流程如下:

1,初始化ros节点

2,创建Server实例

3,循环等待服务请求,进入回调函数

4,在回调函数中完成服务功能的处理并反馈应答数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值