第十三弹 服务数据的定义与使用
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
第十三弹 服务数据的定义与使用相关推荐
- 【RK3399Pro学习笔记】十一、ROS服务数据的定义与使用
目录 自定义服务数据 定义srv文件 在package.xml中添加功能包依赖 在CMakeLists.txt添加编译选项 编译生成语言相关文件 使用 C++ 编写程序 person_server.c ...
- ROS入门-13.服务数据的定义与使用
前面我们已经学习到了spawn和Trigger两种在ROS中已经定义好的服务数据类型的使用方式,当已经定义好的服务数据不能满足我们需求时,就需要根据自己需求来定义一个服务数据的类型并使用 之前在自定义 ...
- ROS应用开发入门 服务数据的定义和使用
ROS是机器人操作系统的简称,本文介绍ROS应用开发入门,服务数据的定义和使用.客户端和服务端 之间通讯都使用服务数据(service data).本文先定义一个服务数据,编译成功后,用一个服务端和一 ...
- ROS系统 服务数据的定义与使用
如何自定义服务数据 定义srv文件 在package.xml中添加功能包依赖 在CMakeLists.txt添加编译选项 编译生成语言相关文件 cd ~/catkin_ws/src/learning_ ...
- 【ROS学习笔记】(八)服务数据的定义与使用
一.目的 Client每Request一次数据请求,Server发送一次数据.数据格式为个人信息,如姓名.性别等. 二.自定义服务数据 此步骤与话题消息的定义与使用过程类似 1. 定义srv文件 再l ...
- 【ROS学习笔记】11.服务数据(srv)的定义与使用
基于B站ROS公开课:[古月居]古月·ROS入门21讲 基于Ubuntu 20.04.1.Noetic版本 修正错误,并详述Python版本部署 文章目录 1 模型图 2 创建功能包 3 自定义服务数 ...
- ROS:服务数据(srv)的定义与使用
目录 一.服务模型 二.创建功能包 三.自定义服务数据 3.1定义srv文件 3.2在package.xml中添加功能包依赖 3.3在CMakeLists.txt中添加编译选项 3.4编译生成语言相关 ...
- 网络云存储技术Windows server 2012 (项目二十三 远程异地数据实时同步)
网络云存储技术Windows server 2012 (项目二十三 远程异地数据实时同步) 前言 网络存储技术,是以互联网为载体实现数据的传输与存储,它采用面向网络的存储体系结构,使数据处理和数据存储 ...
- java发布WCS服务到GeoServer服务器并解析XML生成可下载的WCS服务数据url(2022.2.14)
GeoServer上的WCS服务发布调用及解析生成可下载为Tif的WCSUrl 2022.2.14 所用软件环境(Java.Tomcat.GeoServer.Google Browser.Eclips ...
最新文章
- 一次linux服务器load高达600多的异常处理过程
- linux mysql授权外部访问权限,Linux中安装Mysql授权远程访问
- Python 从零学起(纯基础) 笔记 (二)
- 重庆科技学院c语言程序设计报告,2020年重庆科技学院《911程序设计综合》硕士研究生招生复试大纲...
- mlfviewer_语音识别ASR - HTK(HResults)计算字错率WER、句错率SER
- ZOJ 3761 Easy billiards 月赛E DFS
- [转载] python基础:面向对象-封装
- 关键路径 - 数据结构和算法67
- sessionStorage跨标签取值
- Android应用开发之统计App时长
- docker学习系列:设置阿里云容器加速器
- 计算机上缺少vsix安装程序,使用MSI安装程序部署VSIX
- 关于python数据的纬度_Python插值时间,纬度和经度
- 独立产品灵感周刊 DecoHack #033 - 免费的博客主题推荐
- 谷歌chrome浏览器ERR_SPDY_PROTOCOL_ERROR错误
- 机电系统计算机设计试题,东大20年7月考试《机电一体化系统设计》考核作业【标准答案】...
- 2019 秋招前端面试总结
- 中职微课计算机应用基础,高职计算机应用基础微课设计
- CSS元素的显示和隐藏
- 2022汽车驾驶员(初级)考试题库及模拟考试