Cyber RT 服务通信

场景: 用户乘坐无人出租车过程中,可能临时需要切换目的地,用户可以通过车机系统完成修改,路径规划模块需要根据新的目的地信息重新规划路径,并反馈修正后的结果给用户,那么用户的修正请求数据与修正结果是如何被传输的呢?
上述场景下便可以使用服务通信实现数据传输。

概念
以请求响应的方式实现不同节点之间数据交互的通信模式。

作用
用于偶然的、对实时性有要求、有一定逻辑处理需求的数据传输场景。

需求
客户端发送请求提交两个整型数字,服务端处理请求提取两个数字求和,并将结果响应回客户端。

流程
1.编写消息载体(protobuf文件)并配置;
2.编写服务端配置;
3.编写客户端配置;
4.编译执行。

准备
在 demo_base_proto 目录下,新建文件 addints.proto,内容如下:

syntax = "proto2";package apollo.cyber.demo_basee_proto;message AddInts_Request {required int64 num1 = 1;required int64 num2 = 2;
}message AddInts_Reponse {required  int64 sum = 1;
}

上述文件中,包含两种消息类型,AddInts_Request 是用于客户端向服务端发送请求的数据类型,AddInts_Response 是用于服务端向客户端发送响应的数据类型。

BUILD 文件添加如下内容:

proto_library(name="addints_proto",srcs=["addints.proto"]
)cc_proto_library(name = "addints_cc",deps = [":addints_proto"],
)py_proto_library(name = "addints_py",deps = [":addints_proto"]
)

验证文件编写是否正确,先编译:

bazel build cyber/demo_base_proto/...

在这里插入图片描述

C++ 实现

1.服务端实现
demo_cc 目录下新建 C++ 文件 demo03_server.cc,输入如下内容:

BUILD文件:

cc_binary(name="demo03_server",srcs=["demo03_server.cc"],deps=["//cyber","//cyber/demo_base_proto:addints_cc"]
)

2.客户端实现
在 demo_cc 目录下新建 C++ 文件 demo04_client.cc,输入如下内容:

#include "cyber/cyber.h"
#include "cyber/demo_base_proto/addints.pb.h"using apollo::cyber::demo_base_proto::AddInts_Request;
using apollo::cyber::demo_base_proto::AddInts_Reponse;int main(int argc,char const *argv[]){apollo::cyber::Init(argv[0]);if(3 != argc){AINFO <<"请提交2个整型参数。。。";return 1;}auto client_node = apollo::cyber::CreateNode("addIntsClient_node");auto client = client_node->CreateClient<AddInts_Request, AddInts_Reponse>("addints");auto req = std::make_shared<AddInts_Request>();req->set_num1(atoll(argv[1]));req->set_num2(atoll(argv[2]));AINFO <<"请求数据为 num1: " << req->num1() << " and num2: "<<req->num2();auto reponse = client -> SendRequest(req);AINFO<<"reponse -->sum = "<< reponse ->sum();apollo::cyber::WaitForShutdown();return 0;
}

BUILD文件:

cc_binary(name="demo04_client",srcs=["demo04_client.cc"],deps=["//cyber","//cyber/demo_base_proto:addints_cc"]
)

3.执行
在这里插入图片描述

python 实现

1.服务端实现
demo_py 目录下新建 python 文件 demo03_server_py.py,输入:

#!/usr/bin/env python3from cyber.python.cyber_py3 import cyber
from cyber.demo_base_proto.addints_pb2 import AddInts_Request
from cyber.demo_base_proto.addints_pb2 import AddInts_Reponsedef  cb(req):num1 = req.num1num2 = req.num2print("num1: %d, num2: %d"%(num1,num2))sum = num1 + num2response = AddInts_Reponse()response.sum  = sumreturn responseif __name__ == "__main__":cyber.init()print("server------")server_node = cyber.Node("addIntsServer_node_py")server = server_node.create_service("addints", AddInts_Request,AddInts_Reponse, cb)server_node.spin()cyber.shutdown()

BUILD 文件

py_binary(name = "demo03_server_py",srcs = ["demo03_server_py.py"],deps = ["//cyber/python/cyber_py3:cyber","//cyber/demo_base_proto:addints_py"],
)

2.客户端实现
demo_py 目录下新建 python 文件 demo03_client_py.py,输入:

#!/usr/bin/env python3from cyber.python.cyber_py3 import cyber
from cyber.demo_base_proto.addints_pb2 import AddInts_Request
from cyber.demo_base_proto.addints_pb2 import AddInts_Reponse
import sysif __name__ == "__main__":if len(sys.argv) != 3:print("input two numbers:")sys.exit(1)cyber.init()print("client------")client_node = cyber.Node("client_node_py")client = client_node.create_client("addints", AddInts_Request,AddInts_Reponse)req = AddInts_Request()req.num1 = int(sys.argv[1])req.num2 = int(sys.argv[2])response = client.send_request(req)print("reponse sum = %d"%response.sum)cyber.shutdown()

BUILD 文件

py_binary(name = "demo04_client_py",srcs = ["demo04_client_py.py"],deps = ["//cyber/python/cyber_py3:cyber","//cyber/demo_base_proto:addints_py"],
)

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

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

相关文章

使用STM32的SPI接口实现与外部传感器的数据交互

一、引言 外部传感器是嵌入式系统中常用的外设&#xff0c;用于检测环境参数、采集数据等。通过STM32微控制器的SPI接口&#xff0c;可以与外部传感器进行数据交互&#xff0c;从而实现数据的采集和控制。本文将介绍如何使用STM32的SPI接口实现与外部传感器的数据交互&#xff…

常用芯片学习——HC245芯片

HC245三态输出八路总线收发器 使用说明 这些八路总线收发器专为数据总线之间的异步双向通信而设计。控制功能实现可更大限度地减少外部时序要求。根据方向控制 (DIR) 输入上的逻辑电平&#xff0c;此类器件将数据从 A 总线发送至 B 总线&#xff0c;或者将数据从 B 总线发送至…

Windows安装Anaconda教程

windows环境搭建专栏&#x1f517;点击跳转 win系统环境搭建&#xff08;十八&#xff09;——Windows安装Anaconda教程 本文是我实践后写的&#xff0c;无脑跟随安装即可 在我看来&#xff0c;Anaconda的图标如同一只灵蛇咬住了自己的尾巴&#xff0c;优美而神秘。 全称&…

网络安全全栈培训笔记(55-服务攻防-数据库安全RedisHadoopMysqla未授权访问RCE)

第54天 服务攻防-数据库安全&Redis&Hadoop&Mysqla&未授权访问&RCE 知识点&#xff1a; 1、服务攻防数据库类型安全 2、Redis&Hadoop&Mysql安全 3、Mysql-CVE-2012-2122漏洞 4、Hadoop-配置不当未授权三重奏&RCE漏洞 3、Redis-配置不当未授权…

JVM的组成部分(类加载器、运行时数据区、执行引擎、本地库接口)

目录 JVM作用 JVM构成 1.类加载器 类加载子系统&#xff1a; 类加载器的分类&#xff1a; 双亲委派机制&#xff1a; 2.运行时数据区 程序计数器 虚拟机栈 本地方法栈 堆 方法区 3.执行引擎 4.本地库接口 JVM作用 jvm是将字节码文件加载到虚拟机中&#xff0c;…

2024年【广东省安全员B证第四批(项目负责人)】新版试题及广东省安全员B证第四批(项目负责人)作业模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 广东省安全员B证第四批&#xff08;项目负责人&#xff09;新版试题参考答案及广东省安全员B证第四批&#xff08;项目负责人&#xff09;考试试题解析是安全生产模拟考试一点通题库老师及广东省安全员B证第四批&…

一.Winform使用Webview2(Edge浏览器核心) 创建demo(Demo1)实现回车导航到指定地址

Winform使用Webview2创建demo1实现回车导航到指定地址 往期目录参考文档实现1.安装visual studio2.创建单窗口应用3.修改项目中的窗体名称MainForm4.添加按钮5.添加窗口Demo16.在Demo1中添加WebView2 SDK7.在Demo1窗体中选择添加textbox和webview28.在MainForm.cs窗体中添加but…

[ComfyUI进阶教程] lcm+Lora+Controlnet工作流工作流

这是一个使用了LCMlora加载器CN&#xff08;depthtile&#xff09;的工作流。 工作流特性&#xff1a; LCM lora加载器&#xff0c;加快生成图片的时间。 配置了3个lora加载器&#xff0c;用来进行人物和风格设定。 提示词编辑器&#xff0c;预制了默认的动态提示词。 使用了…

【RabbitMQ】交换机详解看这一篇就够了

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《RabbitMQ实战》。&#x1f3af;&#x1f3af; &am…

每个人都可以是架构师,每个人都需要培养架构思维

您好&#xff0c; 如果喜欢我的文章或者想上岸大厂&#xff0c;可以关注公众号「量子前端」&#xff0c;将不定期关注推送前端好文、分享就业资料秘籍&#xff0c;也希望有机会一对一帮助你实现梦想 什么是架构 “架构”&#xff0c;即架设、构建。完成对于平台的合理架设&am…

VMware安装Linux-Redhat7.9 详细步骤

目录 一、安装准备二、安装步骤 一、安装准备 Redhat 7.9 镜像下载 VMware安装步骤可查看文章&#xff1a;https://blog.csdn.net/a2279338659/article/details/126346345 可去官网下载&#xff0c;或者加群下载镜像资源。 二、安装步骤 创建新的虚拟机&#xff1a; 我这边…

语音模块学习——LSYT201B模组(深圳雷龙科技)

目录 引子 处理器 外设 音频 蓝牙 模组展示 引子 关注我的老粉们应该知道我之前用过语音模块做东西&#xff0c;那个比较贵要50多。 今天这个淘宝20元左右比那个便宜&#xff0c;之前那个内核是51的&#xff0c;一个8位机。 后面我做东西的时候语音模块可能会换成这个&…

【计算机网络】Socket的TCP_NODELAY选项与Nagle算法

TCP_NODELAY是一个套接字选项&#xff0c;用于控制TCP套接字的延迟行为。当TCP_NODELAY选项被启用时&#xff0c;即设置为true&#xff0c;就会禁用Nagle算法&#xff0c;从而实现TCP套接字的无延迟传输。这意味着每次发送数据时都会立即发送&#xff0c;不会等待缓冲区的填充或…

代码随想录算法训练营DAY24|回溯1

算法训练DAY24|回溯1 第77题. 组合 力扣题目链接 给定两个整数 n 和 k&#xff0c;返回 1 ... n 中所有可能的 k 个数的组合。 示例: 输入: n 4, k 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ] 上面我们说了要解决 n为100&#xff0c;k为50的情况&#xff0…

vscode连不上虚拟机,一直密码错误

最近在做毕设&#xff0c;但是vscode使用连接不上虚拟机&#xff0c;我以为是网络配置的问题&#xff0c;一顿查阅没找到原因。 后来查了一下ssh的日志&#xff0c;发现ssh有消息&#xff0c;但是也提示密码错误。 没找到密码配置格式什么的&#xff0c;经查看sshd配置文件发现…

工业相机与镜头参数及选型

文章目录 1、相机成像系统模型1.1 视场1.2 成像简化模型 2、工业相机参数2.1 分辨率2.2 靶面尺寸2.3 像元尺寸2.4 帧率/行频2.5 像素深度2.6 动态范围2.7 信噪比2.8 曝光时间2.9 相机接口 3、工业镜头参数3.1 焦距3.2 光圈3.3 景深3.4 镜头分辨率3.5 工作距离&#xff08;Worki…

微信小程序入门,学习全局配置与页面配置

目录 一、微信小程序 二、微信小程序的全局配置 三、微信小程序的页面配置 四、全局配置与页面配置的区别 一、微信小程序 微信小程序是一种基于微信平台的应用程序&#xff0c;它可以在微信内部直接运行&#xff0c;无需下载安装。微信小程序具有以下特点和优势&#xff…

Spring Boot自动配置原理

1.SpringBootApplication注解 springboot是基于spring的新型的轻量级框架&#xff0c;最厉害的地方当属**自动配置。**那我们就可以根据启动流程和相关原理来看看&#xff0c;如何实现传奇的自动配置 SpringBootApplication//标注在某个类上&#xff0c;表示这个类是SpringBo…

<蓝桥杯软件赛>零基础备赛20周--第15周--快速幂+素数

报名明年4月蓝桥杯软件赛的同学们&#xff0c;如果你是大一零基础&#xff0c;目前懵懂中&#xff0c;不知该怎么办&#xff0c;可以看看本博客系列&#xff1a;备赛20周合集 20周的完整安排请点击&#xff1a;20周计划 每周发1个博客&#xff0c;共20周。 在QQ群上交流答疑&am…

【设计模式】张一鸣笔记:责任链接模式怎么用?

我将通过一个贴近现实的故事——请假审批流程&#xff0c;带你了解和掌握责任链模式。 什么是责任链模式&#xff1f; 责任链模式是一种行为设计模式&#xff0c;它让你可以避免将请求的发送者与接收者耦合在一起&#xff0c;让多个对象都有处理请求的机会将这个对象连成一条…