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就会出现一下错误。

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ruoyi若依前端请求接口超时,增加响应时长

问题: 前端查询请求超时 解决: 找到request.js的timeout属性由10秒改成了20秒,因为默认是10秒,请求肯定是超出了10秒 祝您万事顺心,没事点个赞呗,关注一下也行啊,有啥要求您评论哈

矢量绘图软件 Sketch mac中文版介绍

Sketch mac是一款为用户提供设计和创建数字界面的矢量编辑工具。它主要用于UI/UX设计师、产品经理和开发人员,帮助他们快速设计和原型各种应用程序和网站。 Sketch具有简洁直观的界面,以及丰富的功能集,使得用户可以轻松地创建、编辑和共享精…

全域旅游“一机游”智慧旅游平台解决方案:PPT全文48页,附下载

关键词:智慧文旅解决方案,智慧旅游解决方案,智慧旅游平台建设方案,智慧文旅综合运营平台,智慧文旅建设方案 一、智慧文旅一机游定义 智慧文旅一机游是一种新型的旅游方式,它通过智能化的设备和系统&#…

高防IP是什么?如何隐藏源站IP?如何进行防护?

高防IP是针对互联网服务器遭受大流量的DDoS攻击后导致服务不可用的情况下,推出的付费增值服务。用户在数据不转移的情况下,就可以通过配置高防IP , 将攻击流量引流到高防|P,确保源站的稳定可靠。高防IP采用的技术手段包括DDoS防护、WAF ( Web应用程序防火墙)等,它能够有效抵御来…

大语言模型概述|亚马逊这些互联网公司为什么花巨资训练自己的模型?

2023年可谓是大语言模型元年,OpenAI、亚马逊、谷歌等互联网公司争先恐后推出了自己的大语言模型:GPT-4、Titan、PaLM 2,还有亚马逊即将推出的第二个大语言模型Olympus等等。这一革命性技术如今已经在全球范围内引发了广泛的讨论和关注&#x…

Path Aggregation Network for Instance Segmentation(2018.9)

文章目录 Abstract1. IntroductionOur FindingsOur Contributions 3. Framework3.1. Bottom-up Path AugmentationMotivationAugmented Bottom-up Structure 3.2. Adaptive Feature PoolingMotivationAdaptive Feature Pooling Structure 3.3. Fully-connected FusionMask Pred…

深入跨域 - 从初识到入门 | 京东物流技术团队

前言 跨域这两个字就像一块狗皮膏药一样黏在每一个前端开发者身上,无论你在工作上或者面试中无可避免会遇到这个问题。如果在网上搜索跨域问题,会出现许许多多方案,这些方案有好有坏,但是对于阐述跨域的原理和在什么情况下需要用…

Android问题笔记四十五:解决SeekBar操作thumb周围产生的圆形阴影/灰色阴影/白色圆圈的解决办法

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列点击跳转>ChatGPT和AIGC 👉关于作者 专…

Spring-boot Mybatis-plus 实战应用

文章目录 前言一、springBoot 集成mybatis-plus1.1 maven 引入依赖:1.2 配置数据源:: 二、使用:2.1 mysql 打印执行的sql 设置:2.2 分页查询:2.3 条件构造器:2.3.1 QueryWrapper 查询:2.3.2 Upd…

【寒武纪(7)】MLU的cntoolkit:Cambricon-BANG架构和使用分析,MLU并行计算的硬件抽象、编程模型以及调优思路

文章目录 硬件抽象1存储1.1.1 存储层次访存一致 计算模型1 Core核内同步和并行2 核间并行和同步 编程模型1、Kernel计算规模 任务类型执行示例 性能调优性能调优实践参考 cambricon BANG架构是基础的,高度抽象的,向用户暴露统一编程模型和编程接口&#…

Kerberos认证系统

文章目录 前提知识原理第一次对话第二次对话第三次对话 总结发现 前提知识 KDC:由AS、TGS,还有一个Kerberos Database组成。 Kerberos Database用来存储用户的密码或者其他所有信息,请求的时候需要到数据库中查找。 AS:为客户端提…

语音识别芯片在产品应用上的难点列举

语音识别技术,作为人工智能领域中的一颗璀璨明珠,已经广泛应用于用户交互、智能家居、语音助手等多个领域。它为我们的生活带来了诸多便利,使得我们可以更加高效地与电子设备进行互动。然而,语音识别技术的实现,依赖于…