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…

Web 安全之水坑攻击(Watering Hole Attack)详解

目录 什么是水坑攻击&#xff08;Watering Hole Attack&#xff09; 水坑攻击的原理 水坑攻击的实施案例 水坑攻击的防范方法 小结 什么是水坑攻击&#xff08;Watering Hole Attack&#xff09; 水坑攻击&#xff08;Watering Hole Attack&#xff09;是一种精心策划的网…

常用芯片学习——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;…

lc11 盛最多水的容器

问题&#xff1a;给一个整数数组&#xff0c;数组中的元素值为高&#xff0c;数组元素之间的距离为边&#xff0c;计算任意两个元素之间的面积&#xff08;以元素值低的为高&#xff09;&#xff0c;求最大面积 题解&#xff1a;双指针题解 //设计算法&#xff1a;先计算索引…

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…

PointNet系列【语义分割】自定义数据的模型训练

目录 一、平台 二、数据 三、代码 3.1 文件组织结构 3.2 lasDataLoader.py 读取数据 3.3 修改原始模型的通道数量 3.4 lasTrainSS.py【训练】 3.5 lasTestSS.py【预测】 一、平台 Windows 10 GPU RTX 3090 CUDA 11.1 cudnn 8.9.6 Python 3.9 Torch 1.9.1 cu111…

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

您好&#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; 我这边…

Java学习(二十二)--正则表达式

介绍 为什么需要 正则表达式是处理文本的利器&#xff1b; 基本介绍 正则表达式&#xff0c;又称规则表达式,&#xff08;Regular Expression&#xff0c;在代码中常简写为regex、regexp或RE&#xff09;。它是一个强大的字符串处理工具&#xff0c;可以对字符串进行查找、提…

语音模块学习——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配置文件发现…

DLL注入技术

源地址 注入程序 #include <Windows.h> #include <iostream> #include <Tlhelp32.h> #include <stdio.h> #include <tchar.h> #include <iostream>using namespace std;BOOL getProcess32Info(PROCESSENTRY32 *info, const TCHAR proces…