C++入门 ros服务通信

一、 开发环境

ubuntu20.04
ros版本noetic
参考视频
https://www.bilibili.com/video/BV1Ci4y1L7ZZ/?p=52&spm_id_from=333.1007.top_right_bar_window_history.content.click&vd_source=4cd1b6f268e2a29a11bea5d2568836ee

二、 编写srv文件

在功能包下面创建srv文件夹(srv文件夹和src文件夹并列),在srv文件夹中创建AddInt.srv文件
AddInt.srv

int32 num1
int32 num2
---
int32 sum

三、 编写服务端

smain.cpp

#include "ros/ros.h"
#include "/home/leon/project/ros/helloworld/ws/devel/include/addserver/AddInt.h"
#include <sstream>

bool doNums(addserver::AddInt::Request &request,addserver::AddInt::Response &response)
{
   
    int num1 = request.num1;
    int num2 = request.num2;

    ROS_INFO("收到:%d,%d",num1,num2);

    int sum = num1 + num2;
    response.sum = sum;

    ROS_INFO("反馈:%d",sum);
    return true;
}

//服务端
int main(int argc,char *argv[])
{
   
    //中文支持
    setlocale(LC_ALL,"");

    //初始化ros节点
    //指定节点名称
    ros::init(argc,argv,"server");

    //创建ros节点句柄
    ros::NodeHandle n;

    //创建服务对象
    ros::ServiceServer server = n.advertiseService("add",doNums);

    ros::spin();
    return 0;
}
//
//通过ros工具打印话题消息
//rostopic echo fang

//通过命令方式调用服务
//rosservice call add "num1: 5 num2: 2"

四、 编写客户端

cmain.cpp

#include "ros/ros.h"
#include "/home/leon/project/ros/helloworld/ws/devel/include/addserver/AddInt.h"
#include <sstream>

bool doNums(addserver::AddInt::Request &request,addserver::AddInt::Response &response)
{
   
    int num1 = request.num1;
    int num2 = request.num2;

    ROS_INFO("收到:%d,%d",num1,num2);

    int sum = num1 + num2;
    response.sum = sum;

    ROS_INFO("反馈:%d",sum);
    return true;
}

//服务调用端
int main(int argc,char *argv[])
{
   
    //中文支持
    setlocale(LC_ALL,"");

    if(argc != 3)
    {
   
        ROS_INFO("参数个数不对");
        return 1;
    }

    //初始化ros节点
    //指定节点名称
    ros::init(argc,argv,"client");

    //创建ros节点句柄
    ros::NodeHandle n;

    //创建服务对象
    ros::ServiceClient client = n.serviceClient<addserver::AddInt>("add");

    addserver::AddInt to;
    to.request.num1 = atoi(argv[1])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值