当前位置: 首页 > news >正文

ROS理论与实践学习笔记——2 ROS通信机制之服务通信

        服务通信也是ROS中一种极其常用的通信模式,服务通信是基于请求响应模式的,是一种应答机制。也即: 一个节点A向另一个节点B发送请求,B接收处理请求并产生响应结果返回给A,用于偶然的、对时时性有要求、有一定逻辑处理需求的数据传输场景。

2.1 服务通信理论模型

        服务通信较之于话题通信更简单些,理论模型如下图所示,该模型中涉及到三个角色:

        ROS master(管理者)

        Server(服务端)

        Client(客户端)

        ROS Master 负责保管 Server 和 Client 注册的信息,并匹配话题相同的Server与Client ,帮助 Server与Client 建立连接,连接建立后,Client 发送请求信息,Server 返回响应信息。

0)Server注册Server 启动后,会通过RPC在ROS Master中注册自身信息,其中包含提供的服务的名称。ROS Master会将节点的注册信息加入到注册表中。1)Client注册Client 启动后,也会通过RPC在ROS Master中注册自身信息,包含需要请求的服务的名称。ROS Master会将节点的注册信息加入到注册表中。2)ROS Master实现信息匹配ROS Master 会根据注册表中的信息匹配Server和Client,并通过RPC向Client发送Server的TCP地址信息。3)Client发送请求Client 根据步骤2响应的信息,使用TCP与Server建立网络连接,并发送请求数据。4)Server发送响应Server接收、解析请求的数据,并产生响应结果返回给Client。注意:1.客户端请求被处理时,需要保证服务器已经启动;2.服务端和客户端都可以存在多个。

 2.2 服务通信自定义srv

2.2.1 定义srv文件

        服务通信中,数据分成两部分,请求与响应,在 srv 文件中请求和响应使用---分割,具体实现如下:

        功能包下新建 srv 目录,添加 xxx.srv 文件,内容:

客户端请求时发送的两个数字
int32 num1
int32 num2
---
服务器响应发送的数据
int32 sum

 2.2.2 编辑配置文件

        package.xml中添加编译依赖与执行依赖

<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>

        CMakeLists.txt编辑 srv 相关配置  

find_package(catkin REQUIRED COMPONENTSroscpprospystd_msgsmessage_generation)
需要加入 message_generation,必须有 std_msgs

配置 msg 源文件
add_message_files(FILESPerson.srv)

生成消息时依赖于 std_msgs
generate_messages(DEPENDENCIESstd_msgs)

执行时依赖
catkin_package(
#  INCLUDE_DIRS include
#  LIBRARIES demo02_talker_listenerCATKIN_DEPENDS roscpp rospy std_msgs message_runtime
#  DEPENDS system_lib)
注意: 官网没有在 catkin_package 中配置 message_runtime,经测试配置也可以

2.2.3 编译

编译后的中间文件查看:C++ 需要调用的中间文件(.../工作空间/devel/include/包名/xxx.h)Python 需要调用的中间文件(.../工作空间/devel/lib/python3/dist-packages/包名/srv)
后续调用相关 srv 时,是从这些中间文件调用的

2.3 服务通信自定义srv调用(C++)

        vscode配置:将前面生成的 head 文件路径配置进 c_cpp_properties.json 的 includepath属性;

 

 2.4 服务通信自定义srv调用(Python)

        vscode配置:将前面生成的 python 文件路径配置进 settings.json的extraPaths的属性;

相关文章:

ROS理论与实践学习笔记——2 ROS通信机制之服务通信

服务通信也是ROS中一种极其常用的通信模式&#xff0c;服务通信是基于请求响应模式的&#xff0c;是一种应答机制。也即: 一个节点A向另一个节点B发送请求&#xff0c;B接收处理请求并产生响应结果返回给A&#xff0c;用于偶然的、对时时性有要求、有一定逻辑处理需求的数据传输…...

技术成神之路:设计模式(十八)适配器模式

介绍 适配器模式&#xff08;Adapter Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许接口不兼容的类可以协同工作&#xff0c;通过将一个类的接口转换成客户端所期望的另一个接口&#xff0c;使得原本由于接口不兼容而不能一起工作的类可以一起工作。 1.定义 适配…...

图神经网络:处理复杂关系结构与图分类任务的强大工具

创作不易&#xff0c;您的打赏、关注、点赞、收藏和转发是我坚持下去的动力&#xff01; 图神经网络&#xff08;Graph Neural Network, GNN&#xff09;是针对图数据的一类神经网络模型。图数据具有节点&#xff08;节点代表实体&#xff09;和边&#xff08;边代表节点之间的…...

LeetCode: 1971. 寻找图中是否存在路径

寻找图中是否存在路径 原题 有一个具有 n 个顶点的 双向 图&#xff0c;其中每个顶点标记从 0 到 n - 1&#xff08;包含 0 和 n - 1&#xff09;。图中的边用一个二维整数数组 edges 表示&#xff0c;其中 edges[i] [ui, vi] 表示顶点 ui 和顶点 vi 之间的双向边。 每个顶点…...

mysql 查询表所有数据,分页的语句

在 MySQL 中&#xff0c;若要从表中查询所有数据并实现分页&#xff0c;你可以使用 SELECT 语句结合 LIMIT 和 OFFSET 子句。LIMIT 用于指定返回的记录数&#xff0c;而 OFFSET 则用于指定从哪一条记录开始返回&#xff08;即跳过的记录数&#xff09;。 以下是一个基本的分页…...

TI DSP TMS320F280025 Note13:CPUtimer定时器原理分析与使用

TMS320F280025 CPUtimer定时器原理分析与使用 ` 文章目录 TMS320F280025 CPUtimer定时器原理分析与使用框图分析定时器中断定时器使用CPUtimers.cCPUtimers.h框图分析 定时器框图如图所示 定时器有一个预分频模块和一个定时/计数模块, 其中预分频模块包括一个 16 位的定时器分…...

Australis 相機率定軟體說明

概要 課堂中使用Australis這套軟體&#xff0c;順帶記錄操作過程 內容以老師口述及我測試的經過 照片為老師課堂提供之 說明 執行 Step1. 匯入照片 注意&#xff01;&#xff01;如果是Mac的作業系統&#xff0c;將資料夾移到Windows上的時候&#xff0c;建議創一個新的資料…...

C++入门(有C语言基础)

string类 string类初始化的方式大概有以下几种&#xff1a; string str1;string str2 "hello str2";string str3("hello str3");string str4(5, B);string str5[3] {"Xiaomi", "BYD", "XPeng"};string str6 str5[2];str…...

第四届高性能计算与通信工程国际学术会议(HPCCE 2024)

目录 大会简介 主办单位&#xff0c;承办单位 征稿主题 会议议程 参会方式 大会官网&#xff1a;www.hpcce.net 大会简介 第四届高性能计算与通信工程国际学术会议&#xff08;HPCCE 2024&#xff09;将于2024年11月22-24日在苏州召开。HPCCE 2024将围绕“高性能计算与通信工…...

负载均衡架构解说

负载均衡架构是一种设计模式&#xff0c;用于在多个服务器之间分配网络或应用流量&#xff0c;以提高资源利用率、最大化吞吐量、减少响应时间&#xff0c;并确保高可用性。 负载均衡架构的关键组件和概念&#xff1a; 关键组件 1.负载均衡器&#xff08;Load Balancer&…...

【异常数据检测】孤立森林算法异常数据检测算法(数据可视化 Matlab语言)

摘要 本文研究了基于孤立森林算法的异常数据检测方法&#xff0c;并在MATLAB中实现了该算法的可视化。孤立森林是一种无监督的异常检测算法&#xff0c;主要通过构建决策树来区分正常数据和异常数据。本文使用真实数据集&#xff0c;通过二维可视化展示了检测结果。实验结果表…...

MKV转MP4丨FFmpeg的简单命令使用——视频格式转换

MKV是一种视频封装格式&#xff0c;很好用&#xff0c;也是OBS的默认推荐录制格式&#xff0c;因为不会突然断电关机而导致整个视频录制文件丢失。 但是MKV无法直接导入PR中剪辑&#xff0c;最直接的方法是将MKV转换为MP4格式&#xff0c;最方便且安全无损的转换方法便是用FFmp…...

git使用“保姆级”教程4——版本回退及分支讲解

一、版本回退 1、历史回退(版本回退)——命令行git reset --hard 版本编号 注意&#xff1a;当前命令会让工作区的内容发生改变&#xff0c;可以理解成历史区(master分支)直接回到工作区比如&#xff1a;从版本4回到版本3&#xff0c;则工作区只会显示版本3的代码内容 1.1、指…...

spring cache,Spring data redis

本项目使用Redis存储缓存数据&#xff0c;如何通过Java去访问Redis&#xff1f; 常用的有Jedis和Lettuce两个访问redis的客户端类库 &#xff0c;Jedis和Lettuce都是redis提供的。其中Lettuce的性能和并发性要好一些&#xff0c;Spring Boot 默认使用的是 Lettuce 作为 Redis …...

10.数据结构与算法-线性表的应用(线性表与有序表的合并)

线性表的合并 有序表的合并 顺序表 链表...

GAN|对抗| 生成器更新|判别器更新过程

如上图所示&#xff0c;生成对抗网络存在上述内容&#xff1a; 真实数据集&#xff1b;生成器&#xff1b;生成器损失函数&#xff1b;判别器&#xff1b;判别器损失函数&#xff1b;生成器、判别器更新&#xff08;生成器和判别器就是小偷和警察的关系&#xff0c;他们共用的…...

day01——登录功能

逻辑&#xff1a; 前端将登录信息通过报文的形式&#xff0c;发送给后端。后端进行登陆验证 2.1 根据接受的用户名&#xff0c;查询数据表。 若不存在该用户的记录&#xff0c;返回用户不存在。 若用户存在&#xff0c;判断数据库中的密码和接收的是否一致&#xff0c;不一致则…...

Flutter中使用FFI的方式链接C/C++的so库(harmonyos)

Flutter中使用FFI的方式链接C/C库&#xff08;harmonyos&#xff09; FFI plugin创建和so的配置FFI插件对so库的使用 FFI plugin创建和so的配置 首先我们可以根据下面的链接生成FFI plugin插件&#xff1a;开发FFI plugin插件 然后在主项目中pubspec.yaml 添加插件的依赖路径&…...

【C++】二义性

在C中&#xff0c;二义性&#xff08;ambiguity&#xff09;通常指的是编译器无法确定使用哪个函数、变量或类成员的情况。这种不确定性通常是由于继承和多态特性导致的。下面是一些常见的产生二义性的场景以及如何解决它们的方法&#xff1a; 1. 多重继承中的二义性 当一个类…...

高并发内存池(五):ThreadCache、CentralCache和PageCache的内存回收机制、阶段性代码展示和释放内存过程的调试

目录 ThreadCache的内存回收机制 补充内容1 补充内容2 补充内容3 补充内容4 ListTooLong函数的实现 CentralCache的内存回收机制 MapObjectToSpan函数的实现 ReleaseListToSpans函数的实现 PageCache的内存回收机制 补充内容1 补充内容2 ReleaseSpanToPageCache函…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

EtherNet/IP转DeviceNet协议网关详解

一&#xff0c;设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络&#xff0c;本网关连接到EtherNet/IP总线中做为从站使用&#xff0c;连接到DeviceNet总线中做为从站使用。 在自动…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...

20个超级好用的 CSS 动画库

分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码&#xff0c;而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库&#xff0c;可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画&#xff0c;可以包含在你的网页或应用项目中。 3.An…...

Linux系统部署KES

1、安装准备 1.版本说明V008R006C009B0014 V008&#xff1a;是version产品的大版本。 R006&#xff1a;是release产品特性版本。 C009&#xff1a;是通用版 B0014&#xff1a;是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存&#xff1a;1GB 以上 硬盘&#xf…...

破解路内监管盲区:免布线低位视频桩重塑停车管理新标准

城市路内停车管理常因行道树遮挡、高位设备盲区等问题&#xff0c;导致车牌识别率低、逃费率高&#xff0c;传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法&#xff0c;正成为破局关键。该设备安装于车位侧方0.5-0.7米高度&#xff0c;直接规避树枝遮…...

高防服务器价格高原因分析

高防服务器的价格较高&#xff0c;主要是由于其特殊的防御机制、硬件配置、运营维护等多方面的综合成本。以下从技术、资源和服务三个维度详细解析高防服务器昂贵的原因&#xff1a; 一、硬件与技术投入 大带宽需求 DDoS攻击通过占用大量带宽资源瘫痪目标服务器&#xff0c;因此…...