0. 简介
Apollo Cyber RT 是专为自动驾驶场景设计的开源、高性能运行时框架。 基于中心化计算模型,主要价值是提升自动驾驶系统的高并发、低延迟、高吞吐。
Apollo 并不是一开始就使用 CyberRT,在 v3.0 之前用的都是基于 ROS 框架进行开发。但在之前的版本中发现了很多问题,随着 Apollo 的发展,对最高水平的稳健性和性能的需求, Apollo Cyber RT 应运而生,它满足了一个面向商业化的自动驾驶解决方案的基础需求。
1. CyberRT结构
CyberRT 是一堆庞大复杂的代码,我们从cyber.h入手,可以看到这里面只有一个 CreateNode 方法,返回的是 Node 的引用。根据头文件引用及对代码的敏感性,刨去一些 log、time 之类的辅助类代码,我相信 CyberRT 中这些概念很重要:
- component
- node
- task
- timer
所以,研究 CyberRT 得到 CyberRT 全貌,我们可以从这些概念相应的代码入手。这里就不详述了,frank909大佬的文章讲的非常详细了,
总而言之,核心类是 Component 和 TimerComponent;支撑 component 的是 Node、Scheduler、Timer、DataVisitor;其他的 Reader、Writer、ChannelImple、TimerTask 等等是具体的细节相关类。
2. CyberRT架构
Cyber RT的框架如下图所示:
- 基础库:Cyber RT为了高性能和减少依赖,实现了自己的基础库。(Lock-free的对象池,队列)
- 通信层:Publish/Subscribe机制,Service/Client机制,服务自发现,自适应的通信机制(共享内存、Socket、进程内存)
- 数据缓存/融合层:数据缓存与融合。多路传感器之间数据需要融合,而且算法可能需要缓存一定的数据。比如典型的仿真应用,不同算法模块之间需要有一个数据桥梁,数据层起到了这个模块间通信的桥梁的作用
- 计算层:计算模型,任务以及任务调度
- 接口: Cyber RT为开发者提供了component类,开发者的算法业务模块只需要继承该类,实现其中的proc接口即可。该接口类似于ROS的callback,消息通过参数的方式传递。此外Cyber RT也提供了并行计算的相关接口以及用于开发调试、录制回放的工具。
3. CyberRT的运行流程
- 算法模块:算法模块通过有向无环图(DAG, Directed Acyclic Graph)配置任务间的逻辑关系。每个算法都可以进行优先级、运行时间、使用资源等方面的配置。
- 创建任务:Cyber RT可以结合DAG创建任务,任务的实现方式不是thread,而是协程(coroutine)。
- 调度器:调度器根据调度、任务配置将任务放入相关Processor的队列中。
- 数据输入: Senor输入数据驱动系统的运转。
4. CyberRT模块使用
先介绍下两个容易混淆的概念,module(模块)和component(组件),在Cyber RT中,一个module可以由多个component组成。
首先我们来看一下基于cyber/examples/common_component_example
中的例子,目录下的README.md介绍了如何编译运行该例子。common_component_example
是一个简单的module
,仅包含一个component CommonComponentSample
, 定义在common_component_example.cc中。初始化的时候Init函数会被框架调用,Proc
是消息回调函数,客户端发送的消息到达的时候会被框架自动调用。
在common_component_example.cc
中并没有main函数。没错,它并不是一个完整的可执行程序,编译出来的成果物是动态库libcommon_component_example.so
。 通过下面的命令可以启动该动态库:
mainbooard -d cyber/examples/common_component_example/common.dag
Dag文件是module的配置文件,由protocolbuffers文件cyber/proto/dag_conf.proto
定义,每个module都要有一个配套的dag文件,启动本module时使用。
- module_library指明了要加载的动态库。
- 这个module只有一个component,该component对应的class_name是CommonComponentSample,和common_component_example.h中的定义要一致。
点击小白能看懂的CyberRT学习笔记 - 古月居 可查看全文