【ros学习】10.ros服务通讯之Server与Client的c++实现

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;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值