Cyber RT学习笔记 --- 1.Cyber RT框架介绍

1.Cyber RT框架介绍

1.1 Cyber RT简介

Apollo Cyber是首个专为自动驾驶定制的高性能且开源的实时通信框架,于2019年与Apollo 3.5开放平台同期发布,它主要解决了自动驾驶系统的高并发、低延迟、高吞吐、任务调度等问题,同时还提供了多种通信机制和用户级的协程,在资源有限的情况下会根据任务的优先级来进行调度处理。

如下图所示,Cyber RT通过Component来封装每个算法模块,通过有向无环图(DAG)来描述Components之间的逻辑关系。对于每个算法模块,都有其优先级、运行时间、使用资源等方面的配置。系统启动时,系统会结合DAG文件、调度配置等信息,创建相应的任务,从框架内部来讲,就是协程,然后图中间的调度器把任务放到各个处理器的队列中,最后由左上角Sensor输入的数据,驱动整个系统运转。
在这里插入图片描述

(1)Cyber RT定义

Cyber RT是百度Apollo推出的代替ROS的消息中间件,他是一个开源、高性能的运行实时框架。

(2) Cyber RT的应用背景

Apollo 3.5以前使用的系统为ROS,各节点之间的通信方式为进程间的通信。在实际的应用中,ROS在自动驾驶
领域遇到很多挑战:

首先ROS的算法模块以独立进程的形式存在,独立进程的节点的运行顺序无法确定,因此业务逻辑的调度顺序无法保证。

其次,ROS是一个分布式的系统,存在通信的开销。

此外,ROS系统中还存在其他很多不确定的地方,比如内存的动态申请。ROS的资源分配时不确定的,

(3) Cyber RT主要作用

Cyber主要的作用就是一个消息中间件,它们需要管理不同的模块,并让它们互相之间可以高效通信。在Apollo6.0中,它作为RTOS和自动驾驶各个模块的中间通信接口。

(4) Cyber RT 主要功能

Cyber是一个分布式收发消息,和调度的框架,同时对外提供一系列的工具和接口来辅助开发和定位问题。Cyber提供的功能主要包括一下方面:

消息队列: 主要作用是接收和发送各个节点的消息,涉及到消息的发布、订阅以及消息的buffer缓存等。
实时调度: 主要作用是调度处理上述消息的算法模块,保证算法模块能够实时调度处理消息。
用户接口: Cyber提供了灵活的用户接口
开发工具: 提供了一系列的工具包括消息监控(Cyber_monitor),消息可视化(Cyber_visualizer),录制/回放工具(Cyber_recorder), ros包录制(rosbag_to_recorder)。

1.1.1 框架优势

Apollo Cyber框架的优点主要有以下几点:

* 高性能:Apollo Cyber是专为自动驾驶定制的高性能运行时框架,能够处理高并发、低延迟、高吞吐等自动驾驶系统中的复杂任务。
* 灵活性:Apollo Cyber提供了多种通信机制和用户级的协程,可以根据任务的优先级来进行调度处理,能够灵活地应对各种自动驾驶场景。
* 可靠性:Apollo Cyber通过Component来封装每个算法模块,通过有向无环图(DAG)来描述Components之间的逻辑关系,能够确保系统各个模块之间的稳定性和可靠性。
* 扩展性:Apollo Cyber的架构可以支持各种不同类型和不同层次的自动驾驶任务,并且可以方便地扩展和升级。
*

1.1.2 框架结构

(1)粗略划分

在这里插入图片描述
Cyber RT的框架可以粗略的分为以上几个模块:

消息队列:主要作用是接收和发送各个节点的消息,涉及到消息的发布、订阅以及消息的缓存等
实时调度:主要是调度处理上述消息的算法模块,保证算法模块能够实时调度处理消息
用户接口:提供相关接口,将算法模块接入CyberRT的框架之内。
Log+Tool:提供高效的日志打印,以及一系列的工具,比如bag包播放,点云可视化,消息监控灯

总结起来就是,cyber是一个分布式收发消息,和调度框架,同时对外提供一系列的工具和接口来辅助开发和定位问题。

(2)详细划分

在这里插入图片描述详细一点的框架结构如上图所示:

* 第一层:主要是Apollo实现的基础库,比如有Lock-Free的对象池,Lock-Free的队列等。实现基础库可以减少相关的依赖并提高运行效率。
* 第二层、三层:主要是负责管理Cyber的通信机制,包括服务发现(负责管理通信中的Node节点)和Publish-Subscribe通信机制。并且Cyber也支持跨机、进程间、进程内通信,而且会根据不同的数据传输和业务逻辑自动选择效率最高最匹配的通信方式来进行通信。
* 第四层:主要是对传输过后的数据进行缓存,并会根据不同传感器得到的数据进行融合得到一个可处理可读的数据发送给另一个模块。
* 第五、六层:主要是管理每一个任务的调度和数据处理。
* 第七层:提供给开发者的一些API接口,让开发者有更多可操作性,提高开发效率。

1.2 框架各部分数据处理流程

我们先看下cyber中整个的数据处理流程,通过理解数据流程中各个模块如何工作,来搞清楚每个模块的作用。
在这里插入图片描述
如上图所示,cyber的数据流程可以分为6个过程:

Node节点中的Write往通道里面写数据
通道中的Transmitter发布消息,通道中的Receiver接收消息
Receiver接收到消息之后,触发回调,触发DataDispather进行消息分发
DataDispather接收到消息之后,把消息放入CacheBuffer中,并且触发Notifier,通知对应的DataVisitor处理消息
DataVisitor把数据从CacheBuffer中读出,并且进行融合,然后通过notifier_唤醒对应的协程
协程执行对应的注册回调函数,进行数据处理,处理完成之后进入睡眠状态

1.3 运行流程

在这里插入图片描述
上图为Cyber RT在开发过程中的运行流程:

算法模块通过有向无环图(DAG),配置任务之间的逻辑关系。对于每个算法,也有其优先级,运行时间,使用资源等方面的配置。
系统启用时,结合而dag,调度配置等,创建相应的任务,从框架内部来讲,就是协程,调度器把任务放到各个Processor队列中
然后,由Sensor输入数据,驱动整个系统运转

1.4 Scheduler调度器简介

ROS 的主要挑战之一是没有调度,为了解决 ROS 遇到的问题,Cyber RT 的核心设计将调度、任务从内核空间搬到了用户空间,在原生的thread上加了一层协程(Coroutine),Cyber RT主要调度的就是协程。调度可以和算法业务逻辑紧密结合。

从 Cyber RT 角度,OS 的 Native thread 相当于物理 CPU。在 OS 中,是内核中的调度器负责调度任务(进程、线程…)到物理 CPU 上运行。而在 Cyber RT 中,Cyber RT 中的调度器调度协程(Coroutine)在 Native Thread 上有序运行。

上面设计到的Native Thread与Processer是相同的概念。

1.4.1 调度策略

在这里插入图片描述
在这里插入图片描述

1.4.2 协程

协程,即线程更上一层的载体,Cyber RT调度器调度有状态的协程在各个线程上运行。协程不仅切换快,而且调度有着高确定性,不像线程的调度完全依赖操作系统。
在这里插入图片描述

1.4.3 调度

如何能够有效分配计算资源,是调度主要解决的问题。Cyber的调度主要是基于任务优先级来并行运行,主要的目的就是保证系统在资源有限的情况下来提高运行效率。如图所示是一个任务调度的示意图,首先在系统初始化时,会对每一个模块的Component进行创建并初始化,每个Component都会有一个proc()函数,proc函数主要是描述了每个需要处理的数据和数据处理的方法。在运行时,每当生成新的数据时,调度器会将数据和对应的proc函数绑定程一个可执行的task,然后放到Task queue中执行,Task queue是一个有序的列表,每当任务入队的时候,会根据任务本身的优先级和周期状态对Task queue里的人物进行重新排序,以确保高优先级的任务能被第一时间执行,Thread Pool是实际执行任务的线程池,根据不同的硬件配置会有固定数量的Worker,每个Worker会持续得从Task queue中读取可执行的任务并进行执行。

在这里插入图片描述

1.5 代码框架与层级简介

在这里插入图片描述
核心类是:
(1)Component和TimerComponent
(2)支撑component的是Node,Scheduler,Timer,DataVisitor
(3)Reader,Writer,ChannelImple,TimerTask

1.5.1 启动顺序

从代码启动顺序上来说如下图所示:
在这里插入图片描述

1.5.2 开发流程

从开发流程上来说,可以分为以下几个层级:
在这里插入图片描述

1.6 总结

(1)CyberRT 是基于 Fast-RTPS 进行消息驱动的,所以业务模块可以基于此进行数据通讯,这个和 ROS2 没有多大差别;

(2)CyberRT 通过 Node 节点进行通信的底层对接,而 Component 则负责具体业务相关的逻辑;CRoutine 基于消息驱动的基础上,将 Component 中的 Proc 回调作为基础的协程执行单元,然后根据 Sheduler 相应的调度策略进行调度,它保证了多任务的执行顺序;

(3)TimerComponent 依靠 Timer 进行定时触发,它的 proc 方法被封装成为 TimeTask 中的回调,TimingWheel 根据调度策略进行定时任务执行;

(4)CyberRT 强大之处在于它的 3 个拓扑网络,基于 fast-rtps 通过服务发现,能够快速找到相应的 Node 状态,也因为这个特性,这在我之前分析的系统监控 Monitor 中,能够轻松监控每个模块的健康状态。

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

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

相关文章

Gof23设计模式之策略模式

1.概述 该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,…

Xilinx UltraScale架构之可配置逻辑块CLB

目录 一、概览 二、UltraScale架构 2.1 UltraScale/UltraScale特点 2.2 与7系列CLB差异 三、 CLB结构 3.1 LUT 3.2 FF 3.3 多路选择器Multiplexers 3.4 进位链Carry Chain 四、应用 4.1 分布式RAM 4.2 移位寄存器 4.3 进位链Carry Chain 五、参考资料 一、概览 二…

Linux--进程概念

1.什么是程序?什么是进程?有什么区别? 程序:是静态的概念,gcc xxx.c -o pro 磁盘中生成的pro文件,叫做程序。 进程:是程序的一种与运行活动,通俗的意思是程序跑起来了,系…

若依tab-content面板失效、使用load的解决方法(附详细步骤)

【版权所有,文章允许转载,但须以链接方式注明源地址,否则追究法律责任】【创作不易,点个赞就是对我最大的支持】 前言 仅作为学习笔记,供大家参考 总结的不错的话,记得点赞收藏关注哦! 思路&…

2023.09.03 学习周报

文章目录 摘要文献链接题目亮点本文工作 题目亮点本文工作 题目亮点本文工作 大气污染物传输的相关内容总结 摘要 本周阅读了三篇论文,第一篇文章的核心为改进PageRank算法和标签传播算法实现大气污染物传输分析模型,第二篇文章的核心为将SOD、VGG和LST…

备战9月9日C/C++青少年等级考试(1~8级)

由中国电子学会举办的《全国青少年软件编程等级考试》将于9月9日(周六)举行,你准备的怎么样了?我在这里列举了1~8级的历届真题及解析,希望能助你考试通过!!! C/C编程一级 一级标准 …

Mock 基本使用

mock解决的问题 开发时,后端还没完成数据输出,前端只好写静态模拟数据。数据太长了,将数据写在js文件里,完成后挨个改url。某些逻辑复杂的代码,加入或去除模拟数据时得小心翼翼。想要尽可能还原真实的数据&#xff0c…

【pytest】tep环境变量、fixtures、用例三者之间的关系

tep是一款测试工具,在pytest测试框架基础上集成了第三方包,提供项目脚手架,帮助以写Python代码方式,快速实现自动化项目落地。 在tep项目中,自动化测试用例都是放到tests目录下的,每个.py文件相互独立&…

Jmeter的自动化测试实施方案

前言: Jmeter是目前最流行的一种测试工具,基于此工具我们搭建了一整套的自动化方案,包括了脚本添加配置、本地配置和运行、服务器配置等内容,完成了自动化测试闭环,通过这种快捷简便高效的方式,希望可以解…

Java反序列化漏洞复现(weblogic和s2)

文章目录 weblogic启动环境漏洞扫描漏洞复现 S2-045启动环境漏洞复现 前提条件: 1.安装docker docker pull medicean/vulapps:j_joomla_22.安装docker-compose docker run -d -p 8000:80 medicean/vulapps:j_joomla_23.下载vulhub weblogic 启动环境 到下面路径下…

PHP8内置函数中的变量函数-PHP8知识详解

在php8中,与变量相关的内置函数比较多,本文说一些比较重要的、常见的内置函数。今日着重讲解了5个,分别是:检测变量是否为空的函数empty()、判断变量是否定义过的函数isset()、销毁指定的变量的函数unset()、获取变量的类型的函数…

数学建模--三维图像绘制的Python实现

目录 1.绘制三维坐标轴的方法 2.绘制三维函数的样例1 3.绘制三维函数的样例2 4.绘制三维函数的样例3 5.绘制三维函数的样例4 6.绘制三维函数的样例5 1.绘制三维坐标轴的方法 #%% #1.绘制三维坐标轴的方法 from matplotlib import pyplot as plt from mpl_toolkits.mplot3…

Linux之修改服务端口号

本次演示以SSH服务为例,SSH默认监听端口是22,先保留了22端口,所以我们要进入ssh的配置文件添加新端口并注释或删掉原有端口。 1、使用vi编辑器修改文件 sshd_config,路径是/etc/ssh/sshd_config,找到“#Port 22”,添加新的端口号10086。 2、如果你关闭了…

2019CVPR Semantic Graph Convolutional Networks for 3D Human Pose Regression

基于语义图卷积网络的三维人体姿态回归 源码 https://github.com/garyzhao/SemGCN 摘要 在本文中,我们研究了学习图卷积网络(GCN)回归的问题。GCN的当前体系结构受限于卷积滤波器和共享的变换矩阵为的小感受野。为了解决这些限制&#xff…

时序预测 | MATLAB实现PSO-LSSVM粒子群算法优化最小二乘支持向量机时间序列预测未来

时序预测 | MATLAB实现PSO-LSSVM粒子群算法优化最小二乘支持向量机时间序列预测未来 目录 时序预测 | MATLAB实现PSO-LSSVM粒子群算法优化最小二乘支持向量机时间序列预测未来预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.Matlab实现PSO-LSSVM时间序列预测未…

GPT引领前沿与应用突破之GPT-4科研实践技术与AI绘图

查看原文>>>GPT引领前沿与应用突破之GPT4科研实践技术与AI绘图 目录 专题一、AIGC概述 专题二、人工智能算法介绍 专题三、大语言模型Prompt提示词使用技巧 专题四、让GPT成为你的生活助理(动手练习) 专题五、让GPT成为你的工作秘书&…

【Redis专题】Redis持久化、主从与哨兵架构详解

目录 前言课程目录一、Redis持久化1.1 RDB快照(Snapshot):二进制文件基本介绍开启/关闭方式触发方式bgsave的写时复制(COW,Copy On Write)机制优缺点 1.2 AOF(append-only file)&…

成都瀚网科技有限公司:抖店怎么开通直播?

随着互联网和移动支付的快速发展,越来越多的人选择开设自己的抖音商店。抖音作为国内最受欢迎的短视频平台之一,拥有庞大的用户基础,成为众多创业者青睐的平台。那么,如何经营自己的抖音店铺呢?下面将从几个方面为您介…

算法训练day36|贪心算法 part05(重叠区间三连击:LeetCode435. 无重叠区间763.划分字母区间56. 合并区间)

文章目录 435. 无重叠区间思路分析 763.划分字母区间思路分析代码实现思考总结 56. 合并区间思路分析 435. 无重叠区间 题目链接🔥🔥 给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。 注意: 可以认为区间的…

JVM基础面试题

JDK、JRE、JVM的关系 JVM Java虚拟机,它只识别.class类型文件,它能将class文件中的字节码指令进行识别并调用操作系统向上的API完成动作。 JRE Java运行时环境。它主要包含两部分:Jvm的标准实现和Java的一些基本类库。相对于JVM来说,JRE多出来…