Apollo 3.5 Cyber data_visitor 分析

本文介绍了Apollo 3.5中的Cyber组件Data Visitor和Data Fusion的功能。Data Visitor为内部模块提供接口获取channel消息,Data Notifier在接收到新数据时通知对应的Data Visitor。Data Fusion负责决定在特定时刻从各个channel缓冲区获取哪个时间的数据。目前的融合策略主要是针对M0通道的数据。同时,文章提到了Data Visitor与Transport模块的协作,解释了数据来源和Component的处理流程。
摘要由CSDN通过智能技术生成

簡介

cyber/data是message data相關的folder, 主要給其他內部模塊用的就是DataVisitor

DataVisitor 在cyber中是負責提供一個內部(不是外部)接口去直接拿channel的message數據, 在這我們先不管數據是所那兒來。用法就提供一個config給DataVisitor, 按其中列出的channel_name去儲存數據。當被調用TryFetch時,把數據返回

Data Visitor

overall flow

  • 每一個component都有一個data visitor, 負責接觸其他數據部件
  • 而data notifier就是負責當有新數據時,找對應的data visitor, 調其callback
  • DataDispatcher就是把新數據放到對應的data visitor的CacheBuffer
  • 個人覺得DataDispatcherDataNotifier的工作應該直接合一起會比較直觀
  • 綠線就是新數據來時的調用關係。

DataVisitor主要的function就是TryFetch

template <typename T>
using BufferType = CacheBuffer<std::shared_ptr<T>>;

template <typename M0, typename M1 = NullType, typename M2 = NullType,
          typename M3 = NullType>
class DataVisitor : public DataVisitorBase {
   
 public:
  explicit DataVisitor(const std::vector<VisitorConfig>& configs)
      : buffer_m0_(configs[0].channel_id,
                   new BufferType<M0>(configs[0].queue_size)),
        buffer_m1_(configs[1].channel_id,
                   new BufferType<M1>(configs[1].queue_size)),
        buffer_m2_(configs[2].channel_id,
                   new BufferType<M2>(configs[2].queue_size)),
        buffer_m3_(configs[3].channel_id,
                   new BufferType<M3>(configs[3
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值