CyberRT-其他主线内容

消息和数据

Message  用Message实现模块间通信,其实现基于protobuf
   cyber/message/message_traits.h
   cyber/message/raw_message_traits.h
   cyber/message/raw_message.h
   cyber/message/arena_message_wrapper.h
   cyber/message/protobuf_factory.h
 
 
cyber/data  data 
    cyber/data/data_visitor.h
	   class DataVisitor : public DataVisitorBase {
	   DataVisitor在Component::Initialize和Reader::Init中都会创建,是实际环境中获取数据的方式。
	     它最终会调用到AllLatest::Fusion函数。
		 每个 DataVisitor 的每个消息种类都会有一个缓存 ChannelBuffer,
	     在初始化的时候这些 ChannelBuffer 都会被加入到 DataDispatcher 中的一张map中。
		 而所有种类的消息还会有一个消息整合体的 ChannelBuffer 
	   
    cyber/data/data_visitor_base.h
	    class DataVisitorBase {

    cyber/data/fusion/all_latest.h
	   #include "cyber/data/channel_buffer.h"
       #include "cyber/data/fusion/data_fusion.h"

    cyber/data/fusion/data_fusion.h
       class DataFusion { 
	cyber/data/cache_buffer.h
	     class CacheBuffer {
	cyber/data/data_dispatcher.h
         class DataDispatcher {		

	cyber/data/channel_buffer.h	
       class ChannelBuffer {
	   
	   
	cyber/data/data_notifier.h   

    有多个种类消息的DataVisitor还是只有一个Notifier对应M0,也就是说只有当M0消息来的时候协程会被唤醒并通过DataFusion来获取整合所有种类的信息
	 DataDispatcher 也是一个全局单例,记录了一个channel_id对应vector<std::weak_ptr<CacheBuffer<std::shared_ptr>>>的map   

基础

 #include "cyber/base/macros.h"		  cyber/base/arena_queue.h   cyber/base/bounded_queue.h  cyber/base/signal.h
 #include "cyber/common/macros.h"    cyber/common/environment.h  cyber/common/file.h cyber/common/log.h
 #include "cyber/io/poll_data.h"	  cyber/io/session.h 
 #include "cyber/time/time.h"
 
common模块 ,是整个cyber的重要的基础模块之一,其他模块基本都对其有所依赖 
cyber/base 
	BoundedQueue,用于实现一个固定大小的线程安全队列,该队列支持多个线程同时进行出队和入队操作 
	signal.h。这份文件中,实现了一个简单的信号-槽机制,也是一种观察者模式的设计,信号-槽机制是一种用于组件之间的事件驱动编程的设计模式

包和tool

cyber/record/record_base.h
cyber/tools/cyber_recorder/recorder.h

性能记录

1.log日志
     基于glog
	cyber/logger/logger.h 
	   class Logger : public google::base::Logger {
	 
2.Event	: 代码插桩+文件打印
  cyber/event/perf_event_cache.h
       class PerfEventCache { 
      PerfEventCache::PerfEventCache() {
      PerfEventCache::AddSchedEvent
      PerfEventCache::AddTransportEvent(
  cyber/event/perf_event.h
        enum class EventType { SCHED_EVENT = 0, TRANS_EVENT = 1, TRY_FETCH_EVENT = 3 };
        event::PerfEventCache::Instance () ==> 创建perf对象 
    	
    	class SchedEvent : public EventBase {
    	class TransportEvent : public EventBase {
		
	Blocker里注册 的回调函数应该都是管理员注册的监控函数
     Blocker是Reader的一个成员,BlockerManager保存了全局的一张channel_name对应Blocker的map		
3.cyber/statistics/statistics.h
#include "third_party/var/bvar/bvar.h"
 #include "third_party/var/bvar/bvar.h
      :bvar是多线程环境下的计数器类库,方便记录和查看用户程序中的各类数值,它利用了thread local存储减少了cache bouncing
    using LatencyVarPtr = std::shared_ptr<::bvar::LatencyRecorder>;
    using StatusVarPtr = std::shared_ptr<::bvar::Status<uint64_t>>;
    using AdderVarPtr = std::shared_ptr<::bvar::Adder<int32_t>>;
    bvar中很重要的一个组件,bvar除了是一个性能优秀的计数器,设计的最重要的使用场景就是监控,
       通过了解bvar::Adder和bvar::LatencyRecorder两个类,	
	百度开源RPC框架brpc源码解析
	
4.cyber/blocker/blocker_manager.h
  Blocker是 Reader的一个成员,BlockerManager保存了全局的一张channel_name对应Blocker的map
  cyber/blocker/blocker.h
     class BlockerBase {	

cyber/blocker/blocker_manager.h
     class BlockerManager {	


 cyber/blocker/intra_reader.h	
 cyber/blocker/intra_writer.h	

proto数据

 两部分proto ,
   一部分放在了 cyber/proto/,
   另外一部分放在了各个模块
      modules/common_msgs/sensor_msgs/pointcloud.proto
	  modules/common_msgs/sensor_msgs/sensor_image.proto
      modules/data/proto/frame.proto	 
cyber/proto/cyber_conf.proto
message CyberConfig {
  optional SchedulerConf scheduler_conf = 1;
  optional TransportConf transport_conf = 2;
  optional RunModeConf run_mode_conf = 3;
  optional PerfConf perf_conf = 4;
}

cyber/proto/component_conf.proto
      ComponentConfig
	  TimerComponentConfig {
cyber/proto/dag_conf.proto
     ComponentInfo  TimerComponentInfo
	  ModuleConfig  DagConfig
cyber/proto/qos_profile.proto	  
	 
cyber/proto/transport_conf.proto	 
	 
cyber/proto/role_attributes.proto
cyber/proto/topology_change.proto

cyber/proto/scheduler_conf.proto
cyber/proto/choreography_conf.proto
cyber/proto/classic_conf.proto

cyber/proto/run_mode_conf.proto
cyber/proto/record.proto

cyber/proto/proto_desc.proto
cyber/proto/parameter.proto
cyber/proto/perf_conf.proto

自动驾驶

 Apollo的bridge模块UDP数据的格式。
    Apollo的bridge模块通过UDP协议发送的基本数据被称为帧,其由首部和数据组成。
	   在UDPBridgeSenderComponent<T>::Proc函数当中,
	    protobuf数据首先进行序列化,然后将其根据参数FRAME_SIZE分割为一个个大小相同的数据块,
		为每个数据块添加首部后,就组成了一个个的帧,然后将所有的帧发送发送
    cyber_launch start /apollo/modules/bridge/launch/bridge_receiver.launch		 

参考

苯苯的嗷呜-CyberRt 源码解读(十六  https://zhuanlan.zhihu.com/p/656700246	 
posted @   辰令  阅读(13)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
历史上的今天:
2022-01-20 大数据-工作流调度引擎
点击右上角即可分享
微信分享提示