百度Apollo系统学习-Cyber RT 概览

本文介绍了百度Apollo的Cyber RT,一个专为自动驾驶设计的runtime框架,旨在实现高并发、低延迟和高吞吐。主要内容包括其架构、调度和通信机制。Cyber RT的架构包括基础库、服务发现、Publish-Subscribe通信、数据融合层和计算模型。调度层使用协程进行高效调度,通信层则自动选择适配的通信机制。后续博客将深入解析Cyber RT的代码和调度器。
摘要由CSDN通过智能技术生成

百度Apollo系统学习-Cyber RT 概览

简介

Cyber RT是一个runtime framework,可以理解为百度针对ROS 1在自动驾驶环境下的一些天生缺陷做的一套自己的框架(很多缺陷在ROS 2中得到了解决但ROS 2迟迟不见稳定版本),它介于底层的RTOS和上层算法之间。Cyber RT的目标是做到高并发,低延迟以及高吞吐,这些特性都是自动驾驶任务所必须的。

架构

架构图
以下为Cyber RT最主要的软件模块

  1. Apollo实现了最下层的基础库,比如Lock-Free的对象池,Lock-Free的队列等。这么做的目的一个是提高效率,另一个就是减少依赖。
  2. 通信机制(从下往上第2,3层),包括服务发现和Publish-Subscribe通信机制。Cyber RT也支持跨进程、跨机通信,上层业务逻辑无需关心,通信层会根据算法模块的部署,自动选择相应通信机制。
  3. 通信层之上的数据缓存/融合层(第4层)。不同算法模块之间需要有一个数据桥梁,数据层起到了这个模块间通信的桥梁的作用。
  4. 再往上是计算模型,包括调度层和任务。
  5. 最上面是提供给开发者的接口层。
    结构
    上面这张图更清晰地展现了整个cyber的结构,之后连载的文章会大体按照模块-调度-通信的顺序来解析cyber代码。下面这张图是另外一位博主画的,链接在参考里给出,可以作为整体代码结构参照。
    all

调度

  • 将调度、任务从内核空间放到了用户空间,在原生的thread上加了一层协程(Coroutine),Cyber RT主要调度的就是协程。空间
  • 调度编排策略,很好的结合了业务逻辑、数据共享和算力的平衡。并且任务不会在不同CPU上随机的调度来调度去,具有非常好的Cache友好性。通过多队列减少并发瓶颈,并且集成了一些独占的策略。策略经典策略
  • 协程,即线程更上一层的载体,Cyber RT调度器调度有状态的协程在各个线程上运行。协程不仅切换快,而且调度有着高确定性,不像线程的调度完全依赖操作系统。协程

通信

上层业务逻辑无需关心,通信层会根据算法模块的部署,自动选择相应通信机制。通信

预告

本系列有关cyber的后续博客写作时间为2019年末至2020年,Apollo的版本是5.0。在阅读文章时为了便于理解需要同时对照cyber的代码(全粘到文章里实在太多了)。

参考

  1. Apollo 3.5 计算框架(Cyber RT)设计分享
  2. 直播回顾 | Apollo 3.5 计算框架(Cyber RT)设计分享
  3. 【架构分析】Apollo CyberRT Framework分析 - Scheduler调度器
  4. Apollo 3.5 Cyber - 基本架構入門
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值