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

news2024/11/20 8:27:44

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.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.coloradmin.cn/o/971465.html

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

相关文章

Docker 使用

简介 Docker是一个开源的容器引擎,它有助于更快地交付应用。 Docker可将应用程序和基础设施层隔离,并且能将基础设施当作程序一样进行管理。使用 Docker可更快地打包、测试以及部署应用程序,并可以缩短从编写到部署运行代码的周期。 Docker…

Web前端开发概述

Web(World Wide Web,全球广域网)是指一种基于互联网的信息系统,通过超文本链接将全球各地的文档、图像、视频等资源相互关联起来,并通过Web浏览器进行交互浏览和访问。Web的发展使得人们可以方便地获取和共享各种类型的…

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

GPT对于每个科研人员已经成为不可或缺的辅助工具,不同的研究领域和项目具有不同的需求。如在科研编程、绘图领域:1、编程建议和示例代码: 无论你使用的编程语言是Python、R、MATLAB还是其他语言,都可以为你提供相关的代码示例。2、数据可视化…

SpringMVC入门指南

目录 前言 一、什么是SpringMVC 二、MVC架构模式 三、SpringMVC的工作流程 四、SpringMVC核心组件 五、SpringMVC的优势 六、SpringMVC的配置与常用注解 七、SpringMvc请求处理流程、 控制器的编写 、视图的渲染 1.请求处理流程: 2.控制器的编写&#xff1…

Gin学习记录2——路由

路由 一. 常规路由二. 动态路由三. 带参数的路由3.1 GET3.2 POST3.3 绑定 四. 简单的路由组五. 文件分组 一. 常规路由 package mainimport ("net/http""github.com/gin-gonic/gin" )func index(ctx *gin.Context) {ctx.String(http.StatusOK, "Hell…

模板和STL简介

模板和STL简介 一、泛型编程1、通用交换函数的实现(1)代码(2)总结 2、泛型编程的概念3、模板的概念 二、函数模板1、概念2、格式3、代码4、原理 三、函数模板实例化1、概念2、隐式实例化(1)概念&#xff08…

传输层—TCP原理详解

目录 前言 1.TCP协议 2.TCP协议段格式 3.如何解包如何分用 4.网络协议栈和文件的关系 5.如何理解TCP报头 6.TCP的特点 7.TCP字段 7.1 16位窗口大小 7.2标志位 8.超时重传 9.连接管理机制 10.滑动窗口 11.拥塞控制 12.延迟应答 13.捎带应答 14.理解TCP的面向字…

【算法系列篇】分冶-快排

文章目录 前言什么是分冶1.颜色分类1.1 题目要求1.2 做题思路1.3 Java代码实现 2. 排序数组2.1 题目要求2.2 做题思路2.3 Java代码实现 3.数组中的第k个最大元素3.1 题目要求3.2 做题思路3.3 Java代码实现 4. 最小的k个数4.1 题目要求4.2 做题思路4.3 Java代码实现 总结 前言 …

MYSQL调优之思路----sql语句和索引调优

MySQL数据库性能优化包括综合多方面因素,应根据实际的业务情况制定科学、合理的调优方案进行测试调优 文章目录 MySQL性能优化1 优化介绍1.2 优化要考虑的问题2.1 优化可能带来的问题2.2 优化的需求2.3 优化由谁参与2.4 优化的方向2.5 优化的维度 1.2数据库使用优化…

【SpringMVC】工作流程及入门案例

目录 前言 回顾MVC三层架构 1. SpringMVC简介 …

虹科资讯 | LyoPro 作为领先的冻干验证解决方案获得美国和欧洲两项官方专利!

获得美国和欧洲两项官方专利 我们非常高兴地宣布,虹科LyoPro冻干专用温度验证仪已在美国和欧洲获得两项官方专利,巩固了其作为市场上同类解决方案的唯一地位。有关LyoPro温度记录仪的专利分别是 US11340015B2 和 EP3742095B1,前者于2022年5月…

如何实现MongoDB数据的快速迁移?

作为一种Schema Free文档数据库,MongoDB因其灵活的数据模型,支撑业务快速迭代研发,广受开发者欢迎并被广泛使用。在企业使用MongoDB承载应用的过程中,会因为业务上云/跨云/下云/跨机房迁移/跨地域迁移、或数据库版本升级、数据库整…

【Apollo学习笔记】——规划模块TASK之PIECEWISE_JERK_SPEED_OPTIMIZER

文章目录 前言PIECEWISE_JERK_SPEED_OPTIMIZER功能简介PIECEWISE_JERK_SPEED_OPTIMIZER相关配置PIECEWISE_JERK_SPEED_OPTIMIZER流程QP问题的标准类型定义:优化变量设计目标函数约束条件相关矩阵二次项系数矩阵 H H H一次项系数向量 q q q设定OSQP求解参数 Process设…

第二张微服务的调用与注册

文章目录 工程导入利用RestTemplate调用服务需求创建RestTemplate的实例到Spring容器使用RestTemplate发送请求消费者和提供者 Eureka注册中心服务远程调用会出现的问题Eureka的结构和作用Eureka的配置过程搭建注册中心服务注册服务发现 Ribbon负载均衡负载均衡原理源码跟踪总结…

windows server 2019 一键安装sqlserver2012

准备安装包和脚本 脚本代码 install.bat REM 自动判断权限问题,主动获取管理员权限 >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system" if %errorlevel% NEQ 0 ( goto UACPrompt ) else ( go…

PPT 架构师三板斧

PPT 架构师三板斧 目录概述需求: 设计思路实现思路分析1.多节点上PPT 架构师三板斧2.几张框框组合有组织3.专业词汇4.切记点要点 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy,ski…

使用Jekyll + GitHub Pages搭建个人博客

本文将介绍如何使用Jekyll搭建个人博客,并部署在GitHub Pages上。 1.简介 Jekyll是一个强大的静态网站生成器,可以将Markdown、HTML、Liquid模板等文件转换为静态网站。Jekyll支持模板引擎、主题、插件、集成GitHub Pages等特性,可以帮助用…

GeoServe Web管理界面远程访问GeoServe Web管理界面的最佳工具

文章目录 前言1.安装GeoServer2. windows 安装 cpolar3. 创建公网访问地址4. 公网访问Geo Servcer服务5. 固定公网HTTP地址 前言 GeoServer是OGC Web服务器规范的J2EE实现,利用GeoServer可以方便地发布地图数据,允许用户对要素数据进行更新、删除、插入…

网络编程 day 7

1、将.txt表数据导入数据库中 #include <myhead.h>#define ERR_MSG(msg) do{\fprintf(stderr,"__%d__:",__LINE__);\perror(msg);\ }while(0)int main(int argc, const char *argv[]) {//以只读的方式打开dict.txt文件FILE* fd;if((fdfopen("./dict.txt&q…

C++多态案例2----制作饮品

#include<iostream> using namespace std;//制作饮品的大致流程都为&#xff1a; //煮水-----冲泡-----倒入杯中----加入辅料//本案例利用多态技术&#xff0c;提供抽象类制作饮品基类&#xff0c;提供子类制作茶叶和咖啡class AbstractDrinking {public://煮水//冲水//倒…