【Apollo CyberRT】源码分析之 “component” 模块

本文介绍了自动驾驶系统中Apollo的CyberRT框架下,Component的概念、分类(消息驱动与定时调用)、使用示例,以及Component类(包括Component和TimerComponent)的代码结构和功能。重点讲述了如何通过protobuf配置文件初始化组件,以及Component的初始化和执行逻辑。

代码位置

apollo/cyber/component

功能

在自动驾驶系统中,模块(如感知、定位、控制系统等)在 Cyber ​​RT 下以 Component 的形式存在。不同 Component 之间通过 Channel 进行通信。Component 概念不仅解耦了模块,还为将模块拆分为多个子模块提供了灵活性。

Component类是各个组件的基类实现,组件类似与ros里的node,每个算法模块都可以自己实现为一个Component的基类,从而加入到CyberRT的框架中。

实际上Component分为2类:

  • 一类是消息驱动的Component,
  • 第二类是定时调用的TimerComponent。

定时调度模块没有绑定消息收发,需要用户自己创建reader来读取消息,如果需要读取多个消息,可以创建多个reader。

使用示例

使用可以参考cyber的示例程序:cyber/examples/common_component_example/

也可以看具体某个模块,比如感知模块的激光障碍物检查的componentimage.png
可以看到对外的接口只有 Init() 和 Proc() 用于初始化组件以及执行组件的核心功能。
使用源码中的一句话:
The Init & Proc functions need to be overloaded, but don’t want to be called. They are called by the CyberRT Frame.

代码结构

image.png
代码事实上并不多

源码分析

类图关系

在这里插入图片描述

ComponentBase

  • Component类和TimerComponent类的基类
  • 非模板类,无需模板参数
  • 定义了接口函数和几个基础功能函数(比如LoadConfigFiles)

Component

继承ComponentBase,有四个模板参数, 每个模板参数表示一个消息,即一个component最多可以处理 4 个消息信道,
这些信道,即 Reader 对象,最后都会被放入到 ComponentBase::readers_ 变量中

 * @tparam M0 the first message.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值