新建消息类型

流程点这里

添加头文件

请输入图片描述 修改配置文件 修改CmakeList.txt 请输入图片描述

服务端实现

#include  "ros/ros.h"
#include "pub_sub_server/add.h"
//数据处理函数
bool donum(pub_sub_server::add::Request &request,pub_sub_server::add::Response &response)
{
    //对于参数赋值
int num1=request.num1;
int num2=request.num2;
ROS_INFO("num1=%d,num2=%d",num1,num2);
response.sum=num1+num2;
ROS_INFO("sum=%d",response.sum);
return true;
}
int main(int argc, char  *argv[])
{
    //防止中文乱码
    setlocale(LC_ALL,"");
    //初始化ros
    ros::init(argc,argv,"hei");
    //创建句柄
    ros::NodeHandle nh;
    //发布服务端
    ros::ServiceServer server=nh.advertiseService("add",donum);
    //输出日志
     ROS_INFO("server_start");
     //回调函数
    ros::spin();
    return 0;
}

客户端实现

#include  "ros/ros.h"
#include "pub_sub_server/add.h"
//数据处理函数
int main(int argc, char  *argv[])
{
    //防止中文乱码
    setlocale(LC_ALL,"");
    //初始化ros
    ros::init(argc,argv,"shui");
    //创建句柄
    ros::NodeHandle nh;
    //创建客户端
   ros::ServiceClient client=nh.serviceClient<pub_sub_server::add>("add");
    //数据处理
    pub_sub_server::add ai;
    ai.request.num1=100;
    ai.request.num2=200;
    bool flag=client.call(ai);
    if (flag)
    {
      ROS_INFO("响应的结果为:%d",ai.response.sum);
    }else
    {
        ROS_INFO("响应失败!");
    }
    return 0;
}

修改配置文件

注意修改 add_dependencies

请输入图片描述 实验结果

请输入图片描述

最后修改:2023 年 11 月 22 日
如果觉得我的文章对你有用,请随意赞赏