创建Persom.srv

新建srv文件夹

在srv文件夹中创建Persom.srv,编辑文件

string name
uint8  age
uint8  sexuint8 unknown = 0
uint8 male    = 1
uint8 female  = 2---
string result

修改package,xml

add_service_files(FILESPerson.srv
)generate_messages(DEPENDENCIESstd_msgs
)

修改cmake

find_package(catkin REQUIRED COMPONENTSgeometry_msgsroscpprospystd_msgsturtlesimmessage_generation #查找依赖
)add_service_files(FILESPerson.srv
)generate_messages(DEPENDENCIESstd_msgs
)catkin_package(
#  INCLUDE_DIRS include
#  LIBRARIES learning_serviceCATKIN_DEPENDS geometry_msgs roscpp rospy std_msgs turtlesim message_runtime
#  DEPENDS system_lib
)

编译

catkin_make

编辑person_client.cpp

/*** 该例程将请求/show_person服务,服务数据类型learning_service::Person*/#include <ros/ros.h>
#include "learning_service/Person.h"int main(int argc, char** argv)
{// 初始化ROS节点ros::init(argc, argv, "person_client");// 创建节点句柄ros::NodeHandle node;// 发现/spawn服务后,创建一个服务客户端,连接名为/spawn的serviceros::service::waitForService("/show_person");ros::ServiceClient person_client = node.serviceClient<learning_service::Person>("/show_person");// 初始化learning_service::Person的请求数据learning_service::Person srv;srv.request.name = "Tom";srv.request.age  = 20;srv.request.sex  = learning_service::Person::Request::male;// 请求服务调用ROS_INFO("Call service to show person[name:%s, age:%d, sex:%d]", srv.request.name.c_str(), srv.request.age, srv.request.sex);person_client.call(srv);// 显示服务调用结果ROS_INFO("Show person result : %s", srv.response.result.c_str());return 0;
};

编辑person_server.cpp

/*** 该例程将执行/show_person服务,服务数据类型learning_service::Person*/#include <ros/ros.h>
#include "learning_service/Person.h"// service回调函数,输入参数req,输出参数res
bool personCallback(learning_service::Person::Request  &req,learning_service::Person::Response &res)
{// 显示请求数据ROS_INFO("Person: name:%s  age:%d  sex:%d", req.name.c_str(), req.age, req.sex);// 设置反馈数据res.result = "OK";return true;
}int main(int argc, char **argv)
{// ROS节点初始化ros::init(argc, argv, "person_server");// 创建节点句柄ros::NodeHandle n;// 创建一个名为/show_person的server,注册回调函数personCallbackros::ServiceServer person_service = n.advertiseService("/show_person", personCallback);// 循环等待回调函数ROS_INFO("Ready to show person informtion.");ros::spin();return 0;
}

修改cmake

add_executable(person_server src/person_server.cpp)
target_link_libraries(person_server ${catkin_LIBRARIES})
add_dependencies(person_server ${PROJECT_NAME}_gencpp)add_executable(person_client src/person_client.cpp)
target_link_libraries(person_client ${catkin_LIBRARIES})
add_dependencies(person_client ${PROJECT_NAME}_gencpp)

编译:

catkin_make

运行:

rosrun service_example person_client

rosrun service_example person_server

ros(7)自定义service数据相关推荐

  1. ROS 学习笔记(三):自定义服务数据srv+server+client 示例运行

    ROS 学习笔记(三):自定义服务数据srv+Server+Client 示例运行 一.自定义服务数据: 1.向功能包添加自定义服务文件(AddTwoInts.srv) cd ~/catkin_ws/ ...

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

    目录 一.准备工作--配置vscode 二.服务端创建 1.创建文件demo01_server.cpp 2.服务端的CMakeList.txt配置 3.测试服务端 三.客户端实现 1.创建domo01 ...

  3. ros自定义service消息.srv文件中增加自定义.msg消息

    先制作msg文件 1. 在disinfect_msg包下创建 :testInfo.msg 文件 int32 Id string TargetName string X string Y string ...

  4. ROS中自定义复杂数据类型

    ROS中自定义复杂数据类型 先说一下需求,想要服务的请求数据为一个point(x,y,z)的数组.具体的形式表示如: [point1,point2,...] geometry_msgs::Point ...

  5. ROS入门-13.服务数据的定义与使用

    前面我们已经学习到了spawn和Trigger两种在ROS中已经定义好的服务数据类型的使用方式,当已经定义好的服务数据不能满足我们需求时,就需要根据自己需求来定义一个服务数据的类型并使用 之前在自定义 ...

  6. ROS中自定义带有header的消息文件

    ROS中自定义带有header的消息文件 为什么需要header? 在发布端发布的数据或者在订阅端订阅数据时,数据通常是连续发布或者被订阅的,这些信息没有特定的标识,搞得我们发和收了很多消息,都不知道 ...

  7. ROS实现串口GPS数据的解析与通信(这篇文章所用的代码和我买的带有ROS功能包的GPS模块的功能包的代码一样)

    我发现这篇文章所用的代码和我买的带有ROS功能包的GPS模块的功能包的代码一样!!! https://gitee.com/maxibooksiyi/gps_driver 转载自:https://blo ...

  8. R语言ggplot2可视化:可视化箱图、在箱图中添加抖动数据点(Dot + Box Plot)、自定义抖动数据点的大小、颜色、数据点分布在箱图中间、添加主标题、副标题、题注信息

    R语言ggplot2可视化:可视化箱图.在箱图中添加抖动数据点(Dot + Box Plot).自定义抖动数据点的大小.颜色.数据点分布在箱图中间.添加主标题.副标题.题注信息 目录

  9. R语言ggplot2可视化:自定义函数在箱图(boxplot)上添加分组样本个数(count)、分组均值(mean)、箱体填充色自定义、数据标签色彩自定义

    R语言ggplot2可视化:自定义函数在箱图(boxplot)上添加分组样本个数(count).分组均值(mean).箱体填充色自定义.数据标签色彩自定义 目录

最新文章

  1. BZOJ1833:[ZJOI2010]数字计数——题解
  2. php快排,网址快排 快速排名软件 thinkphp快排源码 网站快排程序 百度排名
  3. linux系统实用脚本,常用linux系统命令及简单小脚本
  4. win10浏览器_Win10系统中ie浏览器的证书错误应该如何解决?
  5. Lodop 打印控件
  6. Go 语言学习笔记(一):基础知识
  7. 抓取页面图片元素并保存到本机电脑
  8. SQL数据分析实战:好用的窗口函数
  9. 【前端就业课 第一阶段】HTML5 零基础到实战(九)列表
  10. 插座上的Linux充电器.不..Marvell Plug Computer
  11. python中读取指定的行和列_Python怎么获取excle中指定行和列的值?
  12. 自定义注解 相关知识汇总(转)
  13. java每天定时任务
  14. CentOS6.4 Install Nginx 1.4.4 到特定目录
  15. 【Less-9】基于SQLI的SQL时间盲注
  16. 中功率继电器行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  17. Scrum电子看板工具
  18. C++内存耗尽怎么办?
  19. JavaScript基础函数的配置对象Configuration Objects(020)
  20. ERP如何才能实施成功:ERP成功率为0现象 从具体实施层面剖析

热门文章

  1. 网页挂码方式html css,CSS代码 解决网页挂马问题
  2. Java设计模式之迭代器模式
  3. 【LeetCode笔记】139. 单词拆分(Java、动态规划、字符串、哈希表)
  4. 安卓软件错误log_Android编程实现捕获程序异常退出时的错误log信息功能详解
  5. leetcode 6 --- convertZ
  6. 计算ln_钢筋工程算量培训-钢筋工程量计算公式
  7. javawed商店商品结算_微信小商店搭建
  8. 卡扇区数据教程_分享一款硬盘分区和数据恢复软件
  9. 直博5年!叹我年少轻狂!头4年一篇1作SCI也没有...
  10. 上午写了一段代码,下午就被开除了,奇怪的知识又增加了