1.Server
#include <ros/ros.h>
#include <service_demo/Greeting.h>
bool handle_function(service::demo::Greeting::Request &req, service::demo::Greeting::Response &res){
//显示请求信息
ROS_INFO("Request from %s with age %d", req.name.c_str(), req.age);
//处理请求,结果写入response
res.feedback = "Hi" + req.name + ".I'm server!";
//返回true,正确处理了请求
return true;
}
int main(int argc, char** argv){
ros::init(argc, argv, "greeting_server"); //解析参数,命名结点
ros::NodeHandle nh; //创建句柄,实例化node
ros::ServiceServer service = nh.advertiseService("greetings", handle_function); //提供服务
ros::spin();
return 0;
}
2.Client
#include <ros/ros.h>
#include <service_demo/Greeting.h>
int main(int argc, char** argv){
ros::init(argc, argv, "greeting_client"); //解析参数,节点命名为"greetings_client"
ros::NodeHandle nh; //创建句柄,实例化node
// 定义service客户端,service名字为“greetings”,service类型为Service_demo
//往greeting_server这个节点的greetings这个server服务端接口发送service_demo::Greeting类型的请求
ros::ServiceClient client = nh.advertiseClient<service_demo::Greeting>("greetings");
// 实例化srv,设置其request消息的内容,这里request包含两个变量,name和age,见Greeting.srv
service_demo::Greeting srv;
srv.request.name = "HAN";
srv.request.age = "20";
if(client.call(srv)){
// 注意我们的response部分中的内容只包含一个变量response,另,注意将其转变成字符串
ROS_INFO("Feedbak from server: %s.", srv.response.feedback);
}else{
ROS_ERROR("Failed to call service greeting.");
return 1;
}
return 0;
}
3.Param
ros有两个API可以操控param
#include <ros/ros.h>
#include <service_demo/Greeting.h>
int main(int argc, char** argv){
ros::init(argc, argv, "greeting_server"); //解析参数,命名结点
ros::NodeHandle nh; //创建句柄,实例化node
int parameter1,parameter2,parameter3,parameter4,parameter5;
//获取参数
ros::param::get("param1",parameter1);
nh.getParam("param2",parameter2);
//尝试去获取param3,获取不到就赋予默认值123
nh.param("param3",parameter3,123);
//设置参数
ros::param::set("param4",parameter4);
nh.setParam("param5",parameter5);
//检查参数是否存在
ros::param::has("param5");
nh.hasParam("param6");
//删除参数
ros::param::del("param5");
nh.deleteParam("param6");
return 0;
}