cyberRT调用流程
cyberRT调用流程1 概述2 publisher2.1 创建2.2 enable2.3 发送3 subscriber3.1 创建3.2 enable3.3 Sub rtps消息流向3 可优化的点1 概述cyberRT数据通信方式有Intra/SHM/Rtps三种。下面图中均以Rtps通信方式来展开介绍2 publisher2.1 创建Transmitter继承于Endpoint所以里面包含了一个idIdentity类型。这个Identity中有两个关键成员变量char data_[ID_SIZE] 它是将进程名hostchannelnode一起hash得到的。Endpoint::Endpoint(constRoleAttributesattr):enabled_(false),attr_(attr),id_(true,common::GlobalData::Instance()-GetEndpointHash(common::GlobalData::Instance()-GetExeName(),common::GlobalData::Instance()-HostIp(),attr.node_name(),attr.channel_name(),false,0)){if(!attr_.has_host_name()){attr_.set_host_name(common::GlobalData::Instance()-HostName());}Identity::Identity(boolneed_generate,uint64_tid){if(need_generate){set_data(id);}else{std::memset(data_,0,ID_SIZE);}Update();}// use Little-Endianvoidset_data(uint64_tid){/* Different platform may have different implicit conversion to deal char. For example: * regard as unsigned char on Qualcomm 8155 android; * regard as signed char on Horizon J5 linux. * Therefore, minus sign is discarded at here. */for(inti0;iID_SIZE;i){data_[i](id(8*i))127;}}uint64_t hash_value_ 是将通过data转换得到的其中动态服务发现的情况下会再将data_进行一次hash得到voidIdentity::Update(){if(!common::GlobalData::Instance()-StaticDiscoveryEnabled())hash_value_common::Hash(std::string(data_,ID_SIZE));elsememcpy(hash_value_,data_,sizeof(uint64_t));}Transmitter::Transmitter()中会调用msg_info_.set_sender_id(this-id_) 将Transmitter的id填到msg_info_中。在Transmit中发送每个消息发出去的时候都会将id的二进制内容拷贝到消息中。memcpy(ptr, msg_info.sender_id().data(), ID_SIZE);接收端对收到的二进制数据进行一次hash得到发送端的hash值。2.2 enableHybridTransmitter::Enable中会先通过GetRelation()来获取发送端跟接收端的关系然后enable特定的ransmitterIntraTransmitter/ShmTransmitter/RtpsTransmitter2.3 发送3 subscriber3.1 创建3.2 enableHybridReceiver::Enable中会先通过GetRelation()来获取发送端跟接收端的关系然后enable特定的ReceiverIntraReceiver/ShmReceiver/RtpsReceiverlistener_adapter保存在msg_listeners_这个map中的ListenerHandler后面调度线程会通过ListenerHandler::Run来调用listener_adapterRtpsDispatcher::AddListener的listener_adapter会先调用ParseFromString进行反序列化然后再调用RtpsReceiver::OnNewMessagevoid Dispatcher::AddListener(const RoleAttributes self_attr,const RoleAttributes opposite_attr,const MessageListener listener)会调用handler-Connect并将self_attr.id()跟opposite_attr.id()传入self_attr.id()跟opposite_attr.id()分别是发送端跟接收端Endpoint中id的hashValue。ListenerHandler::Connect(uint64_t self_id, uint64_t oppo_id,const Listener listener)signals_[oppo_id] std::make_shared()将回调函数存到signals_中并跟oppo_id发送端的id的hashValue绑定。3.3 Sub rtps消息流向SubListener::on_data_available中从收到的消息中获取二进制数据填到msg_info.sender_id中。ListenerHandler::Run中通过msg_info.sender_id().HashValue()来找到对应的回调函数并执行。(*signals_[oppo_id])(msg, msg_info);3 可优化的点Identity中的data_就已经是hash后得到的hash_value_没有必要再进行一次hash。Writer::OnChannelChange中每个writer都会收到所有的reader的变化的通知可以改成只有相同channel的reader变化才触发这个callback同理Reader::OnChannelChange也是如此。

相关新闻

怎么用 SteamEmulator 快速搭建局域网多人联机

怎么用 SteamEmulator 快速搭建局域网多人联机

怎么用 SteamEmulator 快速搭建局域网多人联机 【免费下载链接】SteamEmulator MIRROR REPO - Credits : Mr. Goldberg. Steam emulator that emulates Steam online features. Lets you play games that use the Steam multiplayer APIs on a LAN without steam or an interne…

2026/8/24 13:48:34 阅读更多 →
潜在代理:一种将多智能体辩论内化的LLM后训练新范式

潜在代理:一种将多智能体辩论内化的LLM后训练新范式

1. 从“显式辩论”到“潜在代理”:为什么我们需要一种新的微调范式?如果你最近在关注大语言模型(LLM)的前沿进展,尤其是多智能体协作与辩论这个方向,可能会发现一个有趣的现象:大多数研究都聚焦…

2026/8/24 13:48:34 阅读更多 →
AI智能体在心脏磁共振诊断中的多模态融合与推理技术解析

AI智能体在心脏磁共振诊断中的多模态融合与推理技术解析

1. 项目概述:当AI智能体遇上心脏磁共振 最近在医学影像AI圈子里,一个名为“BAAI Cardiac Agent”的项目引起了不小的讨论。简单来说,这是一个专门为心血管疾病打造的“智能多模态诊断代理”。它不是一个简单的图像分类模型,而是一…

2026/8/24 13:48:34 阅读更多 →

最新新闻

EM算法九层境界:从高斯混合模型到变分推断的优化哲学

EM算法九层境界:从高斯混合模型到变分推断的优化哲学

1. 从“黑箱”到“白盒”:为什么EM算法值得你投入九层心力 如果你在数据科学、机器学习或者统计建模领域摸爬滚打过一段时间,大概率听说过EM算法(Expectation-Maximization Algorithm)。很多教材和博客会告诉你,它是用…

2026/8/24 16:32:01 阅读更多 →
AigoTools高并发截图实践:Playwright浏览器池设计与sharp压缩的性能优化之道

AigoTools高并发截图实践:Playwright浏览器池设计与sharp压缩的性能优化之道

AigoTools高并发截图实践:Playwright浏览器池设计与sharp压缩的性能优化之道 【免费下载链接】aigotools AigoTools can help users quickly create and manage website directory, with built-in site auto-crawling features, and also provides internationaliza…

2026/8/24 16:32:01 阅读更多 →
C++纯虚函数与抽象基类:从接口设计到回调机制实战解析

C++纯虚函数与抽象基类:从接口设计到回调机制实战解析

1. 从“抽象”到“约定”:C接口设计的核心思想在C社区里待久了,你会发现一个有趣的现象:很多从Java或C#转过来的开发者,初期总会带着一丝“焦虑”去寻找C里那个叫“interface”的关键字。当他们发现C标准里并没有这个玩意儿时&…

2026/8/24 16:32:01 阅读更多 →
no-defender 完全使用指南:快速禁用 Windows Defender 与防火墙,附故障排查手册

no-defender 完全使用指南:快速禁用 Windows Defender 与防火墙,附故障排查手册

no-defender 完全使用指南:快速禁用 Windows Defender 与防火墙,附故障排查手册 【免费下载链接】no-defender A slightly more fun way to disable windows defender firewall. (through the WSC api) 项目地址: https://gitcode.com/GitHub_Trendin…

2026/8/24 16:32:01 阅读更多 →
Squirrel-RIFE:免费开源RIFE视频补帧,2GB显存插帧30fps,速度达DAIN的20倍

Squirrel-RIFE:免费开源RIFE视频补帧,2GB显存插帧30fps,速度达DAIN的20倍

Squirrel-RIFE:免费开源RIFE视频补帧,2GB显存插帧30fps,速度达DAIN的20倍 【免费下载链接】Squirrel-RIFE 效果更好的补帧软件,显存占用更小,是DAIN速度的10-25倍,包含抽帧处理,去除动漫卡顿感 …

2026/8/24 16:32:01 阅读更多 →
IDM 激活脚本使用指南:免费激活或永久冻结 30 天试用,三步跑通

IDM 激活脚本使用指南:免费激活或永久冻结 30 天试用,三步跑通

IDM 激活脚本使用指南:免费激活或永久冻结 30 天试用,三步跑通 【免费下载链接】IDM-Activation-Script-ZH IDM激活脚本汉化版 项目地址: https://gitcode.com/gh_mirrors/id/IDM-Activation-Script-ZH 这个项目就是 IDM 激活脚本(IAS…

2026/8/24 16:31:00 阅读更多 →

日新闻

前端内容安全与依赖审计实践

前端内容安全与依赖审计实践

前端内容安全与依赖审计实践 前端安全依赖分层防护。没有任何单一配置能替代输出编码、权限校验和依赖更新。 把不可信内容当作数据 默认使用框架的转义能力;确需渲染 HTML 时,先在服务端或可信的客户端库中进行白名单过滤。避免把用户输入直接赋给 inne…

2026/8/24 1:08:15 阅读更多 →
Windows登录密码存储机制全解析:从哈希算法到安全加固实战

Windows登录密码存储机制全解析:从哈希算法到安全加固实战

1. 项目概述:Windows登录密码的“黑匣子”每次你按下CtrlAltDel,输入密码,然后看到那个熟悉的桌面,这背后发生了一系列复杂而精密的操作。作为一名长期与Windows系统打交道的从业者,我经常被问到:“我的密码…

2026/8/24 1:08:15 阅读更多 →
AI面试系统安全挑战与解决方案

AI面试系统安全挑战与解决方案

1. 项目概述:AI面试系统的安全挑战去年参与某跨国企业AI面试系统部署时,遇到一个典型案例:候选人在视频面试中无意提到竞争对手产品名称,系统竟自动将该信息关联到企业知识库并生成竞品分析报告。这个看似"智能"的功能&…

2026/8/24 1:08:15 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/24 0:06:02 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/24 0:20:20 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/24 0:14:11 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/23 18:47:06 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/23 12:10:44 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/24 11:20:22 阅读更多 →