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

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

  • 简介
  • 架构
  • 调度
  • 通信
  • 预告
  • 参考

简介

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

架构

百度Apollo系统学习-Cyber RT 概览_第1张图片
以下为Cyber RT最主要的软件模块

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

调度

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

通信

上层业务逻辑无需关心,通信层会根据算法模块的部署,自动选择相应通信机制。百度Apollo系统学习-Cyber RT 概览_第7张图片

预告

本系列有关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 - 基本架構入門

你可能感兴趣的:(百度Apollo学习,自动驾驶,c++,linux)