ROS 学习应用篇(五)服务Server学习之自定义服务与调用

在之前我学着如何建立一个话题Topic的消息类型,那时候建立了一个msg文件,包括,消息名称和消息数据类型(int还是什么之类的。),将其链接到CMakeList,.xml文件补录需要的依赖,CMakeList文件也模块的补充依赖,包括编译依赖和执行依赖。catkin_make一下就会生成一个.h的头文件,这个头文件就像一个消息类型库一样,需要在编译代码之前引入库,而cpp代码链接到CMakeList文件的时候多了句反馈代码。这就是话题消息数据类型定义的详细过程。

接下来是service服务的数据类型自定义

自定义服务类型的定义

Person.srv文件的定义(数据接口文件的定义)

创建srv文件

定义.srv文件内容

老规矩,定义变量名称,变量数据类型,不同的是消息是单项的不需要回馈,只需要订阅,但是服务是需要售后回馈的,在之前我们知道服务是有req和res的,也就是要求和回应,二者通过---来间隔,所以srv文件的定义也是如此。(所以我猜服务也是可以订阅的,课后问题3

package.xml文件的编译

这里需要的依赖和消息的自定义是一样的。

build_depend

build_depend是编译依赖,message_generation是一个消息的编译依赖。

exec_depent 

exec_depent是执行依赖,message_runtime是一个消息的动态执行依赖。

CMakeList.txt文件的修改

添加依赖包

 链接Person.srv文件

链接ROS中已有的依赖

链接执行依赖

编译头文件

编译生成Person.h头文件

编译好的头文件.h在如下目录中

自定义服务的调用

客户端建立

这一部分可以参照(二)的内容,其实是一样的。区别在于主循环段服务内容不一样,特别的是req段C++中的result是string字符串所以需要.c_str()一下。

c++                                                                                python  

服务端配置

跟之前的一模一样。

c++                                                                                python   

注意反馈数据result会在客户端的代码中输出,但是实际上反馈什么样的数据实在服务端的代码中送入,书写的,不过是在客户端中打印出来而已。其实就是客户端需要反馈数据,但是反馈的是什么是由服务的结果来决定的。

头文件调用

订阅与发布的主要调用方式,就在代码开始的地方输入头文件,这个Person.h头文件是catkin_make编译功能包后存放在工作空间devel/include下对应的功能包名文件夹下的。

c++                                                                                python  

CMakeList.txt文件

该文件的修改和已有的服务类型的区别在于最后一行代码,最后一行代码是将这个可执行文件与srv文件产生一个依赖的关系,而原有的消息类型则不需要加入这一行代码也是可以运作的。

最后一行代码和话题不同的最后那里,服务是_gencpp,消息是_generate_messages_cpp

编译

catkin_make

roscore

新开终端_客户端(1)

新开终端_服务端(2) 

服务端输出

客户端输出

题外话

之前我们说话题Topic构建链接后,roscore就可以关闭了,但是服务不行,服务里关闭roscore就会出现一下错误。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/149888.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

十九章总结

一.Java绘图类 1.Graphics类 Graphics类是所有图形上下文的抽象基类,它允许应用程序在组件以及闭屏图像上进行绘制。Graphics类封装了Java支持的基本绘图操作所需的状态信息,主要包括颜色、字体、画笔、文本、图像等。 2.Graphics2D类 Graphics2…

Vue3问题:如何实现拼图验证+邮箱登录功能?前后端!

前端功能问题系列文章,点击上方合集↑ 序言 大家好,我是大澈! 本文约3500字,整篇阅读大约需要5分钟。 本文主要内容分三部分,第一部分是需求分析,第二部分是实现步骤,第三部分是问题详解。 …

「软件设计」权威领域驱动设计(DDD)简介

「软件设计」权威领域驱动设计(DDD)简介 今天的企业应用程序无疑是复杂的,并依赖一些专门技术(持久性,AJAX,Web服务等)来完成它们的工作。作为开发人员,我们倾向于关注这些技术细节是可以理解的。但事实是…

一键将CSDN博客文章如何转为Markdown

文章目录 1.在CSDN博文页面点击右键,选择“检查”(Google浏览器为例)。2.在查看器中搜索article_content,找到对应内容,点击…复制为outerHTML。3.打开网址https://tool.lu/markdown/,点击HTML2MD&#xff…

准备搞OpenStack了,先装一台最新的Ubuntu 23.10

正文共:1113 字 25 图,预估阅读时间:2 分钟 依稀记得前面发了一篇Ubuntu的安装文档(66%的经验丰富开发者和69%的学生更喜欢的Ubuntu的安装初体验),当时安装的是20.04.3的版本,现在看来已经是非常…

第一百七十三回 如何创建线性渐变背景

文章目录 1. 概念介绍2. 实现方法3. 代码与效果3.1 示例代码3.2 运行效果 4. 内容总结 我们在上一章回中介绍了"SegmentedButton组件"相关的内容,本章回中将介绍" 如何创建线性渐变背景"。闲话休提,让我们一起Talk Flutter吧。 1. …

医学图像 开源数据整理合集1

本文为医学图像 开源数据整理合集,为科研数据提供方便和检索。 目录 1 NIH database of 100000 Chest X-rays 2 The Cancer Imaging Archive (TCIA) 3 National Institute for Mental Healths (NIMHs) OpenNeuro.org 4 RSNAs Quantitative Imaging Data Wareh…

Git目录不对,即当前文件夹不对应git仓库

报错信息是: fatal: not a git repository (or any of the parent directories): .git 如: 是当前文件夹不对应git仓库,一般在git clone之后,需要进入下一级文件夹才对应仓库。 在文件夹看,本层中没有.git文件夹&…

动画短片怎么制作gif?一个方法简单又好用

网络上常常能看到动画短片,虽然时长短但是内容很丰富。当我们想要将这种动画短片做成gif格式图片的时候,应该怎么办呢?很简单,通过使用在线制作动画(https://www.gif.cn/)网站,无需下载软件上传…

Django模版层

解析: forloop内置对象:运行结果解析 counter0: 从0开始计数 counter : 从1开始计数 first: True,判断循环的开始 last : Tues,判断循环的结束模版变量的书写 我们可以在html中编写python代码。 演示: {{ 填写变量 }}{% 填写类的 %}{{ d.0 }} {{ d.1 }…

全年无休、随时更新, RPA在执行工作中的智能化创新

为深化政法智能化建设,加强“智慧治理”“智慧法院”“智慧检务”“智慧警务”“智慧司法”等信息平台建设,深入实施大数据战略,实现科技创新成果同政法工作深度融合。法制日报社于今年3月继续举办了2023政法智能化建设创新案例及论文征集宣传…

计算机视觉基础(8)——齐次坐标系与相机内外参

前言 本节我们将学习到透视投影、齐次坐标系等基础知识,在这些基础知识上,进一步了解到相机的参数,相机参数分为相机外参和相机内参,相机外参是从世界坐标系到相机坐标系,相机内参是从相机坐标系到图像坐标系。 一、透…

今年副业比主业赚得多...

我是从20年开始接触副业的,主要是在程序员外包平台上接单。从一开始的月入0到几百,到现在每个月稳定有小一万的收入。这个月接了一个比较大的项目,结款之后发现今年的副业已经比主业赚得多了,简直美滋滋~ 今年主业收入8w&#xff…

Qt QWebSocket实现JS调用C++

目录 前言1、QWebChannel如何与网页通信2、QWebSocketQWebChannel与网页通信2.1 WebSocketTransport2.2 WebSocketClientWrapper2.3 初始化WebSocket服务器2.4 前端网页代码修改 总结 前言 本篇主要介绍实现JS调用C的另一种方式,即QWebSocketQWebChannel。与之前的…

C#开发的OpenRA游戏之世界存在的属性RenderDebugState(5)

C#开发的OpenRA游戏之世界存在的属性RenderDebugState(5) 前面分析过一个调试的属性,在这里分析另外一个属性,这个属性就是RenderDebugState,它就是用来显示渲染的信息。 跟前面的分析规则可知,属性都是有一个信息类和操作类组成。 在这里信息类叫RenderDebugStateInfo…

Spring6(一):入门案例

文章目录 1. 概述1.1 Spring简介1.2 Spring 的狭义和广义1.3 Spring Framework特点1.4 Spring模块组成 2 入门2.1 构建模块2.2 程序开发2.2.1 引入依赖2.2.2 创建java类2.2.3 创建配置文件2.2.4 创建测试类测试 2.3 程序分析2.4 启用Log4j2日志框架2.4.1 引入Log4j2依赖2.4.2 加…

win10配置单一python版本的sublime运行环境

①新建test.py输入下面代码 import sys print ("Python Version {}".format(str(sys.version).replace(\n, ))) ②Ctrlshiftp选择python ③按下CtrlB

AC修炼计划(AtCoder Regular Contest 162)

传送门:AtCoder Regular Contest 162 - AtCoder A题签到 B - Insertion Sort 2 我们可以从头开始一个一个排序,把1通过操作放到第一个,把2通过操作放到第二个。。。以此类推。但会出现一种情况,如果我们所要排的数字在最后一位&…

面试经典(6/150)轮转数组

面试经典(6/150)轮转数组 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 以下为自己的思路,我不明白最终的返回值为什么有误,好像是题目里要求原地解决问题,而我创…

基于鸽群算法优化概率神经网络PNN的分类预测 - 附代码

基于鸽群算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于鸽群算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于鸽群优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神经网络的光滑…