首页 >> 中医药酒

万字长文简述Apollo中CyberRT框架基础种概念

发布时间:2025年09月21日 12:17

ogy 相当于一个有向右图 DAG

Node 是 DAG 之外的三角形

Channel 是 Writer 流进 Reader 的边

Service 是 Server 流进 Client 的边

Topology 是由 TopologyManager 分解成的

TopologyManager 以下内容有 3 个子 Mannager:NodeManager、ChannelManager、ServiceManager

NodeManager 是来查告诉他 Node 是否是在 Topology 当之外

ChannelManager 用来查告诉他 Channel 是否是在 Topology 当之外,以及也就是话说的 Writer 和 Reader

ServiceManager 用来查告诉他 Service 是否是在 Topology 当之外,以及也就是话说的 Server 和 Client

TopologyManager 倚赖 fast-rtps 完成互联 ,可以通话原素自组和离去 topology 在线

可以自己申请人 ChangeFunc 来通话 Topology 在线的变既有

所以,大概可以得到上头的示意右图。

在这里嵌入示意页面揭示

有了这张右图大体上就可以理解 CyberRT 之外大多数以下内容了,但是我注意到中间 Node 之外有 Component 和 TimerComponent 的存在,所以,还需去忘了它们真的是什么。

2.5 Component

Component 的基类是 ComponentBase。

在这里嵌入示意页面揭示

从适当的头机密文件可以注意到一些反馈上会:

Component 可以通过一些 .proto 可用

class loader 或许但会加载它

内置 Reader

有适当的 Node

通过 Scheduler 完成作业

我们接下来看 Component 实际的头机密文件。

在这里嵌入示意页面揭示

衷心 CyberRT 的开发者,更为重要code原文很确信。

一个 Component 最多可以支撑 4 个 Channel 完成传闻管控

Component 传给自 Component,开发者可以自定义 Component,只要传给 Component 并复写它的 Init 和 Proc

Init 和 Proc 的函数调用是由 CyberRT Frame 涡轮机的,不要主动去函数调用它们

在这里嵌入示意页面揭示

Initialize 由 protocol 机密文件完成可用。Proc 是一个 Component 的演算管控两节,举例来说 4 个给定,分别都有 4 个 channel 的传闻。

2.6 TimerComponent

看名字就真的它是一个均会缓冲器组件。

在这里嵌入示意页面揭示

TimerComponent 同样传给自 ComponentBase,不过外部有一个均会缓冲器 Timer。

在这里嵌入示意页面揭示

Timer 的外部又有两个更为重要团体变量种类 TimingWheel 和 TimerTask,;还有是均会缓冲器小时轮换和均会缓冲器使命实际的类。

疑问是谁一连串 TimerTask 呢?

我们很非常容易想到作业缓冲器,而 CyberRT code之外也正好有一个 scheduler。

疑问是 scheduler 又是谁一连串的呢?

2.7 scheduler

在一个线团之外去告诉他线头是件难以的事情,所以,需除此以外臆测。

我臆测整个 cyberRT 的起源是 init.c 这个机密文件。

在这里嵌入示意页面揭示

出现了 scheduler 的面孔,但这里是另设 log 实际的内核。

所以,我将眼前移到 SysMo 上。

在这里嵌入示意页面揭示

SysMo 创建者的时候但会建立一个内核,进去督导一个 while 循环系统,然后每次函数调用 scheduler 的 CheckSchedStatus 作法。

所以,我们好不非常容易可以去朗读 scheduler 适当的code了。

在这里嵌入示意页面揭示

它是一个工厂类,根据作法完全相同有 SchedulerClassic 和 SchedulerChoreography 两种付诸,我在这随便分派一种也就是 SchedulerClassic 忘了它外部长什么仿佛。

在这里嵌入示意页面揭示

看它的头机密文件可以推断出一些更为重要要素:

有别于协程作业

外部但会创建者 Processor,并但会定期一连串通知反馈

有一些 ClassicTask,或许都有常规的使命

但聊聊平均平均我察觉到code逆时针离我的目标越来越远,我或许瞩目的是如何告诉他到 Node 和 Component 的源流,它们是如何被时间段一连串 proc 作法的。

于是我推开code森林,重视探讨整个code附录,然后推断出了 mainboard。

2.8 mainboard

在这里嵌入示意页面揭示

推断出为了将了,原来 mainboard 是 cyberRT 的入口,init 作法都在这里一连串。

Module 也在这里启动。

在这里嵌入示意页面揭示

ModuleController 几乎藏了我想了解到的作答。classloadermanager、componentbase、dag。

class_loader_manager 创建者适当的 Component 和 TimerComponent 并对它们完成初始既有。

Component 中间的社论讲过,但以前需友善的是它和 Scheduler 的关系。

在 Component 的 Initialize 之外,Scheduler 但会根据 Node 的名字创建者一个 Task

2.9 于是又看 Scheduler

在这里嵌入示意页面揭示

Scheduler 但会将 node 与 CRoutine 建立联系,然后与 Processor 也建立联系。

本体点在于 cr,它是协程两节,在 Component 之外通过 RoutineFactory 创建者。

在这里嵌入示意页面揭示

Routine 是配合 DataVisitor 用到的。

routine 之外但会创建者一个 for 循环系统,通过 datavisitor 不断去抓取传闻,如果有传闻则函数调用 f 变数管控,否则通过 Yield 将督导权让度出来。

那么 f 变数是什么呢?它是在 CreateRoutineFactory 发送到进来的。源流是 Component 之外的 func。

在这里嵌入示意页面揭示

这是一段变数的所设计编程,终究本体演算或许是函数调用 Component 之外的 Process,实情以前很接近了。

Process 之外函数调用 Proc 作法管控传闻,也是本文要思索的目的,整个 CyberRT 的程序中都有如何创建者 Component,Component如何被传闻涡轮机大体上程序中都确信了。

当然,与 Component 也就是话说的是 TimerComponent,它确实是均会涡轮机而不是传闻涡轮机。上头小节,开始归纳它。

2.10 Timer

在这里嵌入示意页面揭示

Timer 是在 TimerComponent 之外的 Initialize 之外被实例既有,传入了均会时间段和传闻发送到变数 func。

func 本身或许是函数调用 TimerComponent 的 Proc。

终究 Timer 但会将 TimerComponent 之外的 Proc 当成 callback PVC成 TimeTask,并另设它们的一连串小时,然后添加到外部的 TimingWheel 当之外完成使命轮换。基于页数,TimingWheel 暂时详细归纳,因为到此,TimerComponent 的传闻发送到变数一连串演算也以前清楚了。

2.11 CyberRT 整体大体大体概念景物

经过中间小结的归纳,可以推断出 CyberRT 还是比较多样和有限的,研究者 CyberRT 一些本体的类展示如下:

在这里嵌入示意页面揭示

本体类是 Component 和 TimerComponent

支撑 component 的是 Node、Scheduler、Timer、DataVisitor

其他的 Reader、Writer、ChannelImple、TimerTask 等等是实际的实际实际类

当然,全部的 CyberRT ;还有上右图之外列出的这些,本文瞩目的是概貌,实际后续针对某些功能单独归纳。

3. CyberRT 的协作机制是什么?

在解构 CyberRT 实际的类时,或许程序中以前大体上哑确信了。

主要的程序;还有 2 个:

Component 和 TimerComponent 的创建者步骤

它们的传闻一连串机制

里面的右图显示了 CyberRT 创建者程序中和 Component 传闻涡轮机简单的演算,我们可以通过它一览 CyberRT 的大体演算,而格外精细既有的片中则需格外仔细朗读和认知code,这在后续社论之外但会年底归纳。

4. 总结

1、CyberRT 确实很多样,但经过初步的code快速朗读,我们可以推断出或许它的底层作法也挺简单的。

2、CyberRT 是基于 Fast-RTPS 完成传闻涡轮机的,所以业务模块可以基于此完成数据通讯,这个和 ROS2 没有多大相差;

3、CyberRT 通过 Node 端口完成互联的底层对接,而 Component 则交由实际业务实际的演算;

4、CRoutine 基于传闻涡轮机的基石上,将 Component 之外的 Proc 传闻发送到作为基石的协程督导两节,然后根据 Sheduler 适当的作业作法完成作业,它应有了多使命的督导先后顺序,但我自己也有个无论如何的地方,它能应有进程级别的但会作业吗?

5、TimerComponent 倚赖 Timer 完成均会一连串,它的 proc 作法被PVC成为 TimeTask 之外的传闻发送到,TimingWheel 根据作业作法完成均会使命督导;

6、CyberRT 强大之处在于它的 3 个李群在线,基于 fast-rtps 通过服务推断出,只能快速告诉他到适当的 Node 稳定状态,也因为这个特性,这在我之前归纳的种系统监控 Monitor 之外,只能轻松监控每个模块的健康稳定状态。

广州看白癜风去哪个医院好
青岛好的癫痫专科医院
江苏男科医院挂号咨询
珠海看白癜风哪个医院最好
重庆男科医院哪家最好
呼吸内科
男人尿频
唇部整形
性无能
止咳用什么药

上一篇: 苹果严格受到限制USBC接口:未经许可 不能传输数据

下一篇: 苹果严格允许USBC接口:未经许可 不能传输数据

友情链接