news 2026/8/2 11:23:23

ros1服务通信如何保证消息对应

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ros1服务通信如何保证消息对应

1. 你们用的是「同一份合同」—— .srv 文件

你有一个文件:AddTwoInts.srv

plaintext

int64 a

int64 b

---

int64 sum

这个文件就是 双方的约定:

- 客户端 必须发 a、b

- 服务端 必须收 a、b

- 服务端 必须回 sum

- 客户端 必须收 sum

谁都不能乱改。

2. 系统根据合同,自动生成两套“固定格式”

编译后,ROS 自动给你生成两个东西:

客户端用的格式:

cpp

struct AddTwoInts {

Request request; // 固定!

Response response; // 固定!

};

服务端用的格式:

cpp

struct Request {

int64 a; // 固定!

int64 b; // 固定!

};

struct Response {

int64 sum; // 固定!

};

注意:

- request、response、a、b、sum 全是固定名字

- 你改不了,系统强制认识

3. 客户端只能往「规定位置」放数据

你在客户端写:

cpp

srv.request.a = 10;

srv.request.b = 20;

这句话的意思:

- srv = 整个包裹

- .request = 系统规定的发送区(只能放要发的数据)

- a 、 b = 合同里写死的两个位置

你没有别的地方可以放!

只能放这里。

4. 服务端只能从「规定位置」拿数据

服务端代码:

cpp

bool add(Request &req, Response &res)

{

res.sum = req.a + req.b;

}

- Request 类型 = 系统规定的接收格式

- 里面 只有 a 和 b

- 服务端 只能读 a 和 b,没有别的东西可读

5. 服务名一样 → 系统只把你们俩配对

客户端:

cpp

serviceClient("add_two_ints");

服务端:

cpp

advertiseService("add_two_ints");

- 名字一样 → ROS 只把你们两个连起来

- 别人收不到,你也发不到别人那

6. 最终保证:四层锁死

我给你总结成4 条铁律,你马上通透:

1. 合同一样(同一个 .srv)

2. 格式一样(自动生成的结构体)

3. 位置固定(只能放 request 里的 a、b)

4. 名字一样(同一个服务名)

最直白的比喻

客户端和服务端 = 两个人传纸条

- .srv = 提前约定好的纸条格式

- request = 纸条的正面(写问题)

- response = 纸条的反面(写答案)

- a、b = 正面必须写的两个空

- sum = 反面必须写的一个空

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/2 11:20:24

【研报239】全球贸易变局中的印度汽车零部件产业研究报告

本报告提供限时下载,请查看文后提示以下仅为报告部分内容:摘要:本报告系统分析了全球贸易变局下印度汽车零部件产业的发展机遇、挑战及战略路径,让行业从业者与投资者深入了解其核心竞争力与增长逻辑。印度凭借成本优势、人才红利…

作者头像 李华
网站建设 2026/8/2 11:23:22

PostgreSQL 技术日报 (3月18日)|从 MD5 到 SCRAM:PG 的安全转变

🔔 关注【IvorySQL开源数据库社区】公众号即可获取 PostgreSQL 一手干货与最新动态⚙️ PostgreSQL技术文章 🧩 询问您的工厂车间任何问题:为AI代理构建工业数据结构本文解释了PostgreSQL与TimescaleDB如何解决Unified Namespace (UNS)架构中…

作者头像 李华
网站建设 2026/7/14 15:03:10

【设计模式】依赖注入控制反转

依赖注入 (Dependency Injection, DI) 作为一种设计模式,其核心思想是通用的,可以应用于多种编程语言和环境。虽然“依赖注入”这个术语在某些框架(如 Spring for Java, ASP.NET Core for C#)中被高度形式化和自动化,但…

作者头像 李华
网站建设 2026/7/14 15:03:10

分支与循环

分支if 语句语法形式:表达式为真,执行语句,为假则不执行if (表达式)语句;if else语句语法形式:表达式为真,执行语句1,否则执行语句2if (表达式)语句1;else …

作者头像 李华
网站建设 2026/7/14 15:03:12

拖延症福音!全领域适配的降AI率工具 —— 千笔·专业降AIGC智能体

在AI技术深度渗透学术写作的今天,越来越多的学生、研究人员和职场人士开始依赖AI工具提升写作效率。然而,随着查重系统对AI生成内容的识别能力不断提升,论文中的“AI率超标”问题逐渐成为困扰众多作者的难题。无论是知网、维普还是Turnitin&a…

作者头像 李华
网站建设 2026/7/14 15:03:14

查重率 30% 降至 3%:别再用 Gemini 3 玩“改词换句”的低级游戏了!

01. 这种“改了白改”的绝望,你一定懂深夜一点,当你把精心打磨的初稿传上查重系统,几分钟后跳出的那一抹刺眼的“深红色”,足以让任何科研人瞬间破防。最让人绝望的是,你明明已经对着那些红字,把“因为”改…

作者头像 李华