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

news2024/9/9 6:17:19

在之前我学着如何建立一个话题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.coloradmin.cn/o/1212918.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

kubernetes集群编排(12)

目录 istio 部署 部署示例应用 部署遥测组件 流量管理 熔断 istio 官网:https://istio.io/latest/zh/about/service-mesh/ 部署 demo专为测试准备的功能集合 [rootk8s2 ~]# tar zxf istio-1.19.3-linux-amd64.tar.gz [rootk8s2 ~]# cd istio-1.19.3/ [rootk8s2 isti…

Playwright UI 自动化测试实战

📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢交流讨论:欢迎加入我们一起学习!📢资源分享:耗时200小时精选的「软件测试」资…

中国人民大学与加拿大女王大学金融硕士帮你打开选择学校的正确方式

随着社会对人才需求量的加大,对人才教育水平要求的攀升,越来越多的人意识到学历的重要性,于是每年攻读硕士和博士的人开始居高不下。例如大家对中国人民大学与加拿大女王大学金融硕士的选择。面对众多高校,如何选择合适的学校成为…

云原生下GIS服务规划与设计

作者:lisong 目录 背景云原生环境下GIS服务的相关概念GIS服务在云原生环境下的规划调度策略GIS服务在云原生环境下的调度手段GIS服务在云原生环境下的服务规划调度实践 背景 作为云原生GIS系统管理人员,在面对新建的云GIS系统时,通常需要应对…

2023/11/15JAVA学习

如何多开一个程序

python自动化第一篇—— 带图文的execl的自动化合并

简述 最近接到一个需求,需要为公司里的一个部门提供一个文件上传自动化合并的系统,以供用户稽核,谈到自动化,肯定是选择python,毕竟python的轮子多。比较了市面上几个用得多的python库,我最终选择了xlwings…

python 基础语法 (常常容易漏掉)

同一行显示多条语句 python语法中要求缩进,但是同一行可以显示多条语句 在 Python 中,可以使用分号 (;) 将多个语句放在同一行上。这样可以在一行代码中执行多个语句,但需要注意代码的可读性和维护性。 x 5; y 10; z x y; print(z) 在…

Redis Hotkey?3招定位+5招解决

作者总结分享 Redis Hotkey 定位和解决方法的优缺点。 作者:贲绍华,爱可生研发中心工程师,负责项目的需求与维护工作。其他身份:柯基铲屎官。 爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系…

贪吃蛇小游戏代码

框架区 package 结果;import java.awt.Color; import java.awt.EventQueue; import java.awt.Font; import java.awt.Frame; import java.awt.Graphics; import java.awt.Image; import java.util.ArrayList; import java.util.List; import java.util.Random;import javax.s…

什么是CSV文件,以及如何打开CSV文件格式

​CSV代表Comma Separated Values。CSV文件是一种纯文本文件,用于存储表格和电子表格信息。内容通常是由文本、数字或日期组成的表格。使用将数据存储在表中的程序可以轻松导入和导出CSV文件。 CSV文件格式 通常CSV文件的第一行包含表格列标签。后面的每一行表示表…

virtualbox基本配置

全屏模式调出热键 右边的 ctrl home 键 安装增强功能 注意:virtualbox 自带那个安装增强功能点击后是没有效果的 1、启动虚拟机 2、设备 3、分配虚拟光驱 4、选择虚拟盘 5、选择对应iso文件,文件下载路径 6、双击对应文件安装,默认配置…

指针传2

几天没有写博客了,怎么说呢?这让我总感觉缺点什么,心里空落落的,你懂吧! 好了,接下来开始我们今天的正题! 1. ⼆级指针 我们先来看看代码: 首先创建了一个整型变量a,将…

Vue 简单的语法

1.插值表达式 1.插值表达式的作用是什么? 利用表达式进行插值,将数据渲染到页面中; 2.语法结构? {{表达式}} 3.插值表达式的注意点是什么? (1)使用的数据要存在,在data中&…

Java基础(第七期):Java面向对象和类 类的封装 Java构造器 JavaBean标准

Java基础专栏 Java基础(第七期) 面相对象 面向对象(Object-oriented)是一种编程思想和方法,它将程序的设计和组织建立在对象的概念上。在Java中,每个对象都是类的一个实例,而类定义了相同类型对…

【机器学习6】概率图模型

用观测结点表示观测到的数据, 用隐含结点表示潜在的知识, 用边来描述知识与数据的相互关系, 最后基于这样的关系图获得一个概率分布 。 概率图中的节点分为隐含节点和观测节点, 边分为有向边和无向边。 从概率论的角度&#xff0c…

使用pixy计算群体遗传学统计量

1 数据过滤 过滤参数:过滤掉次等位基因频率(minor allele frequency,MAF)低于0.05、哈达-温伯格平衡(Hardy– Weinberg equilibrium,HWE)对应的P值低于1e-10或杂合率(heterozygosit…

想买GPT4会员却只能排队?来看看背后的故事!

文章目录 🧐 为什么要进候选名单?🔍 究竟发生了什么?😮 IOS端还能买会员!🤔 网页端为啥不能订会员?第一点:防止黑卡消费第二点:当技术巨头遇上资源瓶颈&#…

2023.11.16-hive sql高阶函数lateral view,与行转列,列转行

目录 0.lateral view简介 1.行转列 需求1: 需求2: 2.列转行 解题思路: 0.lateral view简介 hive函数 lateral view 主要功能是将原本汇总在一条(行)的数据拆分成多条(行)成虚拟表,再与原表进行笛卡尔积&#xff0c…

Uniapp导出的iOS应用上架详解

目录 Uniapp导出的iOS应用上架详解 摘要 引言 苹果审核标准 苹果调试 注意事项和建议 总结 摘要 本文将探讨Uniapp导出的iOS应用能否成功上架的问题。我们将从苹果审核标准、性能影响、调试流程等多个方面进行深入分析,以及向开发者提供相关注意事项和建议。…