小白能看懂的CyberRT学习笔记

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的框架如下图所示:

  1. 基础库:Cyber RT为了高性能和减少依赖,实现了自己的基础库。(Lock-free的对象池,队列)
  2. 通信层:Publish/Subscribe机制,Service/Client机制,服务自发现,自适应的通信机制(共享内存、Socket、进程内存)
  3. 数据缓存/融合层:数据缓存与融合。多路传感器之间数据需要融合,而且算法可能需要缓存一定的数据。比如典型的仿真应用,不同算法模块之间需要有一个数据桥梁,数据层起到了这个模块间通信的桥梁的作用
  4. 计算层:计算模型,任务以及任务调度
  5. 接口: Cyber RT为开发者提供了component类,开发者的算法业务模块只需要继承该类,实现其中的proc接口即可。该接口类似于ROS的callback,消息通过参数的方式传递。此外Cyber RT也提供了并行计算的相关接口以及用于开发调试、录制回放的工具。

3. CyberRT的运行流程

  1. 算法模块:算法模块通过有向无环图(DAG, Directed Acyclic Graph)配置任务间的逻辑关系。每个算法都可以进行优先级、运行时间、使用资源等方面的配置。
  2. 创建任务:Cyber RT可以结合DAG创建任务,任务的实现方式不是thread,而是协程(coroutine)。
  3. 调度器:调度器根据调度、任务配置将任务放入相关Processor的队列中。
  4. 数据输入: 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学习笔记 - 古月居 可查看全文

  • 26
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Apollo Cyber RT是Apollo自动驾驶系统中的一个关键组件。它是在Apollo v3.0之后引入的,用于替代之前版本中使用的ROS框架。\[3\]Apollo Cyber RT提供了一套开发工具,包括rosbag_to_record工具,支持多个channel,如/perception/obstacles、/planning、/prediction等等。\[1\]通过使用Apollo Cyber RT,开发人员可以更好地满足商业化自动驾驶解决方案对稳健性和性能的需求。\[3\]如果你想了解更多关于Apollo Cyber RT的信息,可以参考Apollo Cyber RT Developer Tools、CyberRT介绍、百度Apollo Cyber RT简介、基本概念以及与ROS对照、Cyber RT Documents documentation和Apollo6.0学习002:Cyber RT框架等文档。\[2\] #### 引用[.reference_title] - *1* *2* [【Apollo 6.0学习笔记】Apollo Cyber RT介绍](https://blog.csdn.net/Travis_X/article/details/120965138)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [自动驾驶Apollo源码分析系统,CyberRT篇(一):简述CyberRT框架基础概念](https://blog.csdn.net/briblue/article/details/123432580)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值