系统环境:Ubuntu16.04
实现一个服务器:
1.初始化ROS节点
2.创建Server实例
3.循环等待服务请求,进入回调函数
4.在回调函数中完成服务功能的处理,并反馈应答数据
在功能包/src下新建文件server.cpp,输入以下内容并保存退出。
例程:
/**
- AddTwoInts Server
*/
#include “ros/ros.h”
//由编译系统自动根据我们先前创建的srv文件生成的对应该srv文件的头文件。
#include “learning_communication/AddTwoInts.h”
// service回调函数,输入参数req,输出参数res
//这个函数提供两个int值求和的服务,int值从request里面获取,而返回数据装入response内,
//这些数据类型都定义在srv文件内部,函数返回一个boolean值。
bool add(learning_communication::AddTwoInts::Request &req,
learning_communication::AddTwoInts::Response &res)
{
// 将输入参数中的请求数据相加,结果放到应答变量中
//现在,两个int值已经相加,并存入了response。然后一些关于request和response的信息被记录下来。
//最后,service完成计算后返回true值。
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节点初始化
ros::init(argc, argv, “add_two_ints_server”);
// 创建节点句柄
ros::NodeHandle n;
// 创建一个名为add_two_ints的server,注册回调函数add()
//service已经建立起来,并在ROS内发布出来。
ros::ServiceServer service = n.advertiseService(“add_two_ints”, add);
// 循环等待回调函数
ROS_INFO(“Ready to add two ints.”);
ros::spin();
return 0;
}