1.服务模型(服务端/客户端)

2.自定义服务数据

2.1定义srv文件

服务是有response的,所以需要上下分割。三个横线以上,是request数据,横线以下,是response数据。

创建一个srv文件夹:

在该文件夹下创建Person.srv文件:

在Person.srv文件中添加内容:

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

2.2 编译配置

在package.xml中添加功能包依赖:

  <build_depend>message_generation</build_depend><exec_depend>message_runtime</exec_depend>

在CMakeLists.txt添加编译选项:

 2.3 编译

在~/catkin_ws目录下运行终端,输入   catkin_make命令

编译之后,生成三个头文件。

3.创建服务器和客户端

在catkin_ws/src/learning_service/src路径下创建两个文件:

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;//发现/show_person服务后,创建一个服务客户端,连接名为/show_person的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 = "Tommy";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;//创建一个名为/service_person的server,注册回调函数personCallbackros::ServiceServer person_service = n.advertiseService("/show_person",personCallback);//循环等待函数ROS_INFO("Ready to show person information.");ros::spin();return 0;}

4.配置服务器/客户端代码编译规则

在CMakeLists.txt文件中:

  • 设置需要编译的代码和生成的可执行文件
  • 设置链接库
  • 添加依赖项
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_clientr  ${catkin_LIBRARIES} )
add_dependencies(person_client ${PROJECT_NAME}_gencpp)

5.编译

在~/catkin_ws目录下运行终端,运行指令:

catkin_make

编译成功。

6.运行

roscorerosrun learning_service person_serverrosrun learning_service person_client 

第十三弹 服务数据的定义与使用相关推荐

  1. 【RK3399Pro学习笔记】十一、ROS服务数据的定义与使用

    目录 自定义服务数据 定义srv文件 在package.xml中添加功能包依赖 在CMakeLists.txt添加编译选项 编译生成语言相关文件 使用 C++ 编写程序 person_server.c ...

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

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

  3. ROS应用开发入门 服务数据的定义和使用

    ROS是机器人操作系统的简称,本文介绍ROS应用开发入门,服务数据的定义和使用.客户端和服务端 之间通讯都使用服务数据(service data).本文先定义一个服务数据,编译成功后,用一个服务端和一 ...

  4. ROS系统 服务数据的定义与使用

    如何自定义服务数据 定义srv文件 在package.xml中添加功能包依赖 在CMakeLists.txt添加编译选项 编译生成语言相关文件 cd ~/catkin_ws/src/learning_ ...

  5. 【ROS学习笔记】(八)服务数据的定义与使用

    一.目的 Client每Request一次数据请求,Server发送一次数据.数据格式为个人信息,如姓名.性别等. 二.自定义服务数据 此步骤与话题消息的定义与使用过程类似 1. 定义srv文件 再l ...

  6. 【ROS学习笔记】11.服务数据(srv)的定义与使用

    基于B站ROS公开课:[古月居]古月·ROS入门21讲 基于Ubuntu 20.04.1.Noetic版本 修正错误,并详述Python版本部署 文章目录 1 模型图 2 创建功能包 3 自定义服务数 ...

  7. ROS:服务数据(srv)的定义与使用

    目录 一.服务模型 二.创建功能包 三.自定义服务数据 3.1定义srv文件 3.2在package.xml中添加功能包依赖 3.3在CMakeLists.txt中添加编译选项 3.4编译生成语言相关 ...

  8. 网络云存储技术Windows server 2012 (项目二十三 远程异地数据实时同步)

    网络云存储技术Windows server 2012 (项目二十三 远程异地数据实时同步) 前言 网络存储技术,是以互联网为载体实现数据的传输与存储,它采用面向网络的存储体系结构,使数据处理和数据存储 ...

  9. java发布WCS服务到GeoServer服务器并解析XML生成可下载的WCS服务数据url(2022.2.14)

    GeoServer上的WCS服务发布调用及解析生成可下载为Tif的WCSUrl 2022.2.14 所用软件环境(Java.Tomcat.GeoServer.Google Browser.Eclips ...

最新文章

  1. 一次linux服务器load高达600多的异常处理过程
  2. linux mysql授权外部访问权限,Linux中安装Mysql授权远程访问
  3. Python 从零学起(纯基础) 笔记 (二)
  4. 重庆科技学院c语言程序设计报告,2020年重庆科技学院《911程序设计综合》硕士研究生招生复试大纲...
  5. mlfviewer_语音识别ASR - HTK(HResults)计算字错率WER、句错率SER
  6. ZOJ 3761 Easy billiards 月赛E DFS
  7. [转载] python基础:面向对象-封装
  8. 关键路径 - 数据结构和算法67
  9. sessionStorage跨标签取值
  10. Android应用开发之统计App时长
  11. docker学习系列:设置阿里云容器加速器
  12. 计算机上缺少vsix安装程序,使用MSI安装程序部署VSIX
  13. 关于python数据的纬度_Python插值时间,纬度和经度
  14. 独立产品灵感周刊 DecoHack #033 - 免费的博客主题推荐
  15. 谷歌chrome浏览器ERR_SPDY_PROTOCOL_ERROR错误
  16. 机电系统计算机设计试题,东大20年7月考试《机电一体化系统设计》考核作业【标准答案】...
  17. 2019 秋招前端面试总结
  18. 中职微课计算机应用基础,高职计算机应用基础微课设计
  19. CSS元素的显示和隐藏
  20. 2022汽车驾驶员(初级)考试题库及模拟考试

热门文章

  1. 生死看淡,不服就GAN(八)----WGAN的改进版本WGAN-GP
  2. php创建数组教程,PHP中使用array函数新建一个数组
  3. JAVA实现诗词_基于jsp的古诗词网站-JavaEE实现古诗词网站 - java项目源码
  4. VUE.js组件通信精髓归纳(基础篇)
  5. 移动端开发使用rem时动态设置html的字体大小
  6. Android App 性能优化之图片优化
  7. Android 检测键盘是否显示及隐藏键盘
  8. 第二章 软件测试基础
  9. 人工智能 知识表示方法:谓词逻辑和语义网络 题目练习
  10. 如何做好线上活动策划及执行的思路与框架