7.ROS编程学习:自定义服务数据c++调用

目录

一、准备工作——配置vscode

二、服务端创建

1.创建文件demo01_server.cpp

2.服务端的CMakeList.txt配置

3.测试服务端

三、客户端实现

1.创建domo01_client.cpp

2.客户端的CMakeList.txt配置

3.测试客户端

4.优化客户端


学习参考:赵虚左的ROS课程与古月的ROS机器人开发实践书籍。

一、准备工作——配置vscode

为了vscode在调用自定义服务数据时不报假错同时能够补全代码,需要对vscode进行配置。

c_cpp_properties.json(注意逗号)

            "includePath": [
                --snip--
                "/home/rosmelodic/catkin_ws/devel/include/**"
            ],

也就是刚刚创建自定义服务数据,catkin_make后中间文件的目录。

二、服务端创建

1.创建文件demo01_server.cpp

在src中创建demo01_server.cpp文件。

#include "ros/ros.h"
#include "server_client/AddInts.h"

bool huidiao(server_client::AddInts::Request &request,
                            server_client::AddInts::Response &response){

    int num11 = request.num1;
    int num22 = request.num2;
    ROS_INFO("收到的请求数据为:num11 =%d,num22=%d",num11,num22);
    int sum12 = num11 + num22;
    response.sum = sum12;
    ROS_INFO("求和结果:sum = %d",sum12);
    //ros::spin();//这是一次尝试
    return true;
}

int main(int argc, char *argv[])
{
    setlocale(LC_ALL,"");
    ros::init(argc,argv,"jiafa_server");
    ros::NodeHandle n;
    ros::ServiceServer service = n.advertiseService("add_ints",huidiao);
    ROS_INFO("准备好加入两个整数");
    ros::spin();
    return 0;
}
#include "ros/ros.h"
#include "server_client/AddInts.h"

头文件:调用roscpp和刚刚创建的自定义服务数据类型。调用形式为功能包名/通过编译生成的自定义头文件名

bool huidiao(server_client::AddInts::Request &request,
                            server_client::AddInts::Response &response){

    int num11 = request.num1;
    int num22 = request.num2;
    ROS_INFO("收到的请求数据为:num11 =%d,num22=%d",num11,num22);
    int sum12 = num11 + num22;
    response.sum = sum12;
    ROS_INFO("求和结果:sum = %d",sum12);

    ros::spin();
    return true;
}

首先先声明了函数输入参数的数据类型,其中数据类型为刚刚创建的自定义服务数据类型,需要注意的是,自定义服务数据类型创建时通过“---”的符号将上下两部分分为了请求和应答数据类型,如下图。其中调用方法为

server_client::AddInts::Request(Response)——功能包名::创建的自定义数据类型文件名::Request(Response)——请求(应答)

    in
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值