《ROS机器人操作系统基础》 课件 项目六 服务通信机制的实现.pptx

《ROS机器人操作系统基础》 课件 项目六 服务通信机制的实现.pptx

  1. 1、本文档共26页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

任务一服务通信机制基础概述;任务一

服务通信机制基础概述;1.?掌握服务通信机制的原理和特点

2.?了解服务数据的类型

3.?了解服务通信机制在机器人系统中的应用;一、服务通信机制的原理和特点

服务通信机制采用请求—响应模型,其中一个节点充当服务的提供者,称为服务服务器,而另一个节点则充当服务的请求者,称为服务客户端。服务服务器负责接收和处理来自服务客户端的请求消息。它执行特定的任务或提供特定的功能,并根据收到的请求消息生成相应的响应消息,以回应服务客户端的需求。;175;176;二、服务数据的类型

在ROS中使用服务通信机制时,需要定义特定的服务数据类型。服务数据类型定义了服务请求消息和服务响应消息的结构和内容:服务请求消息是由服务客户端发送给服务服务器的消息,它描述了服务客户端希望服务服务器执行的特定任务或提供的服务;服务响应消息是服务服务器对服务请求消息的回应,它包含了服务服务器执行任务后产生的结果或提供的服务。服务请求消息和服务响应消息的结构和内容均应根据具体的应用场景而定,可以包含不同的字段和数据类型。;178;179;三、服务通信机制在机器人系统中的应用

服务通信机制在机器人控制、感知数据处理、数据查询与管理、分布式任务协作、系统状态检测与管理等方面都有实际使用场景。以感知数据处理为例,服务服务器可以接收来自服务客户端的感知数据,如图像或激光扫描数据,服务服务器会对接收到的数据进行分析和处理,并生成响应消息以提供处理结果。;相比于话题通信机制,服务通信机制更适用于需要明确请求和响应的场景、需要传递参数和获取结果的操作以及需要数据交互和函数调用的任务。此外,服务通信机制具有同步操作和阻塞等待的能力,能够确保顺序性和依赖关系,更适合需要同步操作和结果等待的场景。;任务二

创建并编译自定义服务数据;1.?掌握自定义服务数据的创建方法

2.?掌握自定义服务数据的编译方法

3.?能创建并编译自定义服务数据;一、自定义服务数据的创建

在使用服务通信机制之前,应对程序需要的服务数据进行定义。服务数???通常会被定义在功能包的srv文件夹中,服务数据文件的后缀为“.srv”,名称可以根据需求确定,服务数据文件如图所示。;服务数据的请求和响应应与希望实现的程序功能相对应。例如,若客户端节点发送两个整数到服务器端,希望得到这两个整数的累加值,则服务数据中的请求为两个整数,响应为一个整数。将以下内容添加到服务数据文件中并保存,即可完成服务数据的创建。

int64a

int64b

---

int64sum

服务数据文件通过定义请求消息和响应消息的结构、数据类型和字段,确保响应能够按照预期进行。;二、自定义服务数据的编译

由于需要在程序中调用自定义的服务数据,所以需要将服务数据的依赖添加到功能包清单中,并将服务数据添加到编译选项文件中。

打开功能包中的package.xml文件,添加以下两行内容:

build_export_dependmessage_generation/build_export_depend#服务数据生成器

exec_dependmessage_runtime/exec_depend;打开功能包中的CMakeLists.txt文件,添加以下内容:;添加完成后,编译功能包时系统将自动根据创建的服务数据文件生成对应的头文件(包含代码声明的文件,用于在源代码文件中引入函数、类、变量等声明。头文件通常以“.h”或“.hpp”为扩展名,并通过#include指令在源代码中引入),这些文件存放在工作空间的devel/include目录下,如图所示。;任务三

使用服务通信机制实现节点通信;1.?掌握服务器节点程序相关函数

2.?掌握客户端节点程序相关函数

3.?能使用服务通信机制实现节点通信;一、服务器节点程序

若要在程序中使用曾定义过的服务数据,需要在程序的开头添加代码,用于从头文件中导入服务数据类型,代码如图所示。;rospy.Service()函数用于创建服务器,服务器有三个主要参数:服务名称、服务数据类型以及处理函数。例如,创建一个服务名称为“sum_ints”、服务数据类型为“Sum-Ints”、处理函数为“handle_sum_ints”的服务器,代码如图所示。;服务通信机制中的处理函数与话题通信机制中订阅者的回调函数的作用相似,当接收到数据时会自动执行并处理数据。另外,处理函数的返回值就是发送给客户端的响应消息,需要按照服务数据定义的类型填写变量。例如,编写一个用于计算从一个数累加到另一个数的处理函数,如图所示。;二、客户端节点程序

由于客户端也需要使用服务数据,因此要在程序的开头导入新建的服务类型,代码如图所示。;当编写客户端节点程序时,只需等待并连接服务器

文档评论(0)

lai + 关注
实名认证
内容提供者

精品资料

版权声明书
用户编号:7040145050000060

1亿VIP精品文档

相关文档