apollo cyber RT初学

本文介绍了百度自动驾驶团队开发的CyberRT,它在ROS的基础上改进了通信效率和资源管理。CyberRT包括高性能的基础库、通信层的多种机制、数据和计算层的设计,以及组件系统和灵活的调度策略。文章详细阐述了Component的使用、通信原理和调度机制,强调了其模块化、分布式和标准化的特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一 初识

ROS无法调度协调,且通信开销大,耗资源。百度自动驾驶团队开发了Cyber RT。

CyberRT从下到上依次为:

基础库:高性能,无锁队列;

通信层:Publish/Subscribe机制,Service/Client机制,服务自发现,自适应的通信机制(共享内存、Socket、进程内);

数据层:数据缓存与融合。多路传感器之间数据需要融合,而且算法可能需要缓存一定的数据。比如典型的仿真应用,不同算法模块之间需要有一个数据桥梁,数据层起到了这个模块间通信的桥梁的作用;

计算层:计算模型,任务以及任务调度;

此外,相比Ros,CyberRT增加了Component组件,组件之间通过 Cyber channel 通信。Cyber RT 中用Message实现模块间通信,其实现基于 protobuf。同时,CyberRT也支持异步计算任务,优化线程使用与系统资源分配,同时支持定义模块拓扑结构的配置文件。

但是CyberRT也存在用户经验少的短板,同时资源也没有Ros全面。

二 组件

早期,没有组件,使用一个公共基类。所有模块都继承此基类。

Component 是 Cyber RT提供的用来构建功能模块的基础类,可以理解为Cyber RT对算法功能模块的封装,配合Component对应的DAG文件,Cyber RT可实现对该功能模块的动态加载。以Apollo为例, Apollo 中所有的模块都由 Component 构建的。

被 Cyber RT加载的 Component 构成了一张去中心化的网络。每一个Component是一个算法功能模块,其依赖关系由对应的配置文件定义,而一个系统是由多个component组成,各个component由其相互间的依赖关系连接在一起,构成一张计算图。

下图是具有3个component,2个channel的简单网络:

2.1 Component 的优点

相较于在 main() 函数中写通信逻辑并编译为单独的可执行文件的方法,Component 有以下优点:

  • 可以通过配置 launch 文件加载到不同进程中,可以弹性部署。
  • 可以通过配置 DAG 文件来修改其中的参数配置,调度策略,Channel 名称。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值