CyberRT_数据解析和处理

CyberRT

01.数据传输
      Apollo项目CyberRT主要包括下面三个方面:
        通信性能优化
        去中心化网络拓扑
        数据兼容性扩展
    ROS系统中,使用msg描述文件定义模块间的消息接口
    Apollo选择了Google的Protocol Buffers格式数据
	
  数据进行传输的时候,是一个二进制相关的流式数据,所以再发送节点发送数据之前会进行一个序列化,
	接收节点从内核态接收消息后会进行反序列化成一个结构化的信息,同时对这个结构化的信息做一些回调处理
02.数据处理
  	  01.如果文件不可阅读,那么会从数据为中心,不自觉的以工具为中心
	    数据可视化的重要以及工具可使用的简单快捷的重要性
	  02.提“模型为中心”转向“数据为中心”的人工智能
	     重点放在构建AI系统所需的数据

设计模式-创建型模式

 工厂模式(factory method pattern)   抽象工厂模式(Abstract factory pattern) 
 生成器模式(Builder pattern)原型模式(prototype pattern)
 单例模式(Singleton pattern) 多例模式(Multition pattern):

CyberRT设计模式

Cyber RT的代码采用工厂模式方法设计
    01.简单工厂
	   简单工厂+配置文件解除耦合
    02.工厂方法模式(Factory Method),又称多态性工厂模式,属于设计模式三大分类中的创建型模式,
	    其在父类中提供一个创建对象的方法,允许子类决定实例化对象的类型
		核心的工厂类不再负责所有的产品的创建,而是将具体的工作交给子类去做。
		该核心类成为一个抽象工厂角色,仅负责给出具体工厂子类必须实现的接口,而不接触哪一个产品应当被实例化这种细节
	03.抽象工厂(AbstractFactory)模式
	    当系统中只存在一个等级结构的产品时,抽象工厂模式将退化到工厂方法模式
		  抽象工厂(Abstract Factory) 具体工厂(Concrete Factory)
		  抽象产品(Product)具体产品(ConcreteProduct) 
   两个总的抽象类,一个工厂基类(Factory),一个产品基类(Product)对每个不同的产品(ProductA/B)都需要给它实现一个工厂(FactoryA/B)
      产品基类
	    Factory:   AbstractClassFactoryBase 子类AbstractClassFactory可以视为Factory (cyber/class_loader/utility/class_factory.h)
		FactoryA/B:ClassFactory 。代码位于(cyber/class_loader/utility/class_factory.h);
	    Product:     ComponentBse,Cyber RT基于这个基类又分为
		          两个子类Component, TimerComponent,这两个子类可以视为Product。(代码位于 cyber/component);
        ProductA/B:modules里不同功能下的各种组件 比如CameraComponent

     ClassLoader 这个类,它是类加载器用来加载动态库和实例化Product,它虽然没有继承ClassFactory	

    start()函数,此函数的主要功能是
      解析XML文件 /apollo/modules/dreamview/launch/dreamview.launch

CyberRT 启动:

      main()位于cyber/mainboard/mainboard.cc
	    初始化Cyber环境,接下来创建  ModuleController类对象controller,之后调用controller.Init()启动相关功能模块
		      ModuleController::Init()函数十分简单,内部调用了ModuleControll::LoadAll()函数
			  dag_conf
		ModuleArgument类解析命令行参数
		等待cyber::WaitForShutdown()返回,清理资源并退出main函数
         cyber/proto/dag_conf.proto

cyber_record

   使用的proto 
    01.cyber/proto/下的所有proto
	  cyber/proto/record.proto
	  cyber/proto/proto_desc.proto
 参考: https://github.com/daohu527/cyber_record

record_msg

参考 https://github.com/daohu527/record_msg	
拿到 Apollo的proto
   使用的proto 
    01.cyber/proto/下的所有proto
	  cyber/proto/record.proto
	  cyber/proto/proto_desc.proto
      cyber/proto/choreography_conf.proto
	02. modules  
	   modules/audio/proto/audio_conf.proto
	   modules/bridge/proto/udp_bridge_remote_info.proto
	   modules/common/adapters/proto/adapter_config.proto
	   modules/common/latency_recorder/proto/latency_record.proto
	   modules/common_msgs/basic_msgs/geometry.proto

bag_convert

bag_convert 
   先读取Rosbag,然后根据不同的消息类型,把Rosmsg转换为proto格式的消息,最后保存为Apollo record格式的数据包
   bag2record
       python通过dir方法可以,通过setattr方法,同时根据名称给对象赋值在python中也是可行的
   record2bag
  ??数据库的方式来访问和检索数据  
参考 https://github.com/daohu527/bag_convert
  There is already 1:1 ros message format for protobuf pb_rosmsg
 rosmsg protobuf format
 https://github.com/daohu527/pb_rosmsg

cyber_record代码解读

 自身的消息描述descriptor和它依赖的所有消息的descriptor,都放入 descriptor_pool,之后就可以根据消息类型来创建消息了。
1.record.proto 
     SingIndex  oneof cache{ ChannekCache ChunkBodyCache ChunkHeaderCache}
  proto_desc.proto
     Channel中的proto_desc反序列化为 Chatter 对象	  
2.proto_desc_pb2
  record_pb2
    record_pb2.ChunkHeader()  .begin_time .end_time  message_number raw_size
	record_pb2.ChunkBody()    SingleMessage  
	          SingleMessage  message.channel_name  message.time  message.content SerializeToString()
3.chunk  <----  cyber.proto
      proto_chunk_header
      proto_chunk_body
4.common  <---  Enum
    class Compression
    Class Section
    Header_length  Section_length
    chunk_interval chunk_raw_size segment_interval segment_raw_size
5. ---> Reader
    google.protobuf
    common
    cyber.proto
    file_object.chunk
    record_exception    ---> Reader
6.---> Write
    google.protobuf
    common
    cyber.proto
    file_object.chunk   ---> Write
7. ---> Record
    google.protobuf
    common
    cyber.proto
    writer
    reader             ---> Record
 8.---> main
    cyber.proto
    Record             ---> main 

华为MDC消息

华为MDC的RTF消息 MDC是ARM架构 Ubuntu Ports 是 Arm64
   华为MDC的rtf消息是自定义的消息格式,是基于AUTOSAR的中间件来录制的
    对通信过程的调试。MDC提供了rtfevent系列工具,对标ros 系列工具,开箱即用	   
华为自主研发Adaptive Autosar符合符合R19-11规范(及以上),
  具备通信管理、执行管理、状态管理、升级管理、健康管理、持久化、时间同步、访问管理、加密能力、诊断服务、网络管理	
 基于Adaptive Autosar的通信方案,可靠,低时延
数据的获取依赖于外部的传感器,而传感器通过接口与MDC连接,通过内部的分布式通信网络,在各个功能模块之间传输数据信息	
	
AUTOSAR 采用 ARXML 格式去制定通讯数据库文件	 arxml本身仍然是一种xml文件
  模拟激光雷达抽象则需要使用MMC配置arxml文件,采用DDS通信,将接收到的激光雷达数据转成lidar_detect检测框架可接收的数据类型
    AUTOSAR AP平台(Adaptive Platform)作为自动驾驶应用的运行时环境,包括通信管理、执行管理、平台健康管理等功能	
    AP 平台(Adaptive Platform)
    EM  执行管理(Execution Management)模块,简称EM,其主要功能是对AP平台和应用程序进行生命周期管理,包括启动、关闭、重启以及解决进程依赖等。
    LOG 模块主要是向AP平台上的应用(Adaptive Application)提供日志服务和接口
    PHM 平台健康管理(Platform HealthManagement)模块其主要功能是对AP应用程序进行健康管理
    CM (Communication Management)组件提供独立于网络和协议的应用间通信服务	
    Tsync  诊断主进程Diagnostic Manager(DM) 状态管理(State Management,简称SM) 网络管理(Network Management, NM)	
数据抽象模块 
   能将传感器原始数据和执行器原始数据进行格式转换,完成封装后发送给上层应用
传感器抽象 
  主要是将接收到的传感器数据解析成固定的抽象数据格式,执行器还负责将车控指令封装成执行器支持的报文格式	
	
 日志包括打印在屏幕上的日志以及保存到amct_log/amct_onnx.log文件中的日志	

参考

 Apollo的启动过程3——Cyber RT如何加载组件
 cyber record包解析工具  https://zhuanlan.zhihu.com/p/499516617
 rosbag record代码分析
 可视化apollo record路径 https://zhuanlan.zhihu.com/p/570877462
 Rosbag格式分析  https://zhuanlan.zhihu.com/p/494474804
 From the Evolution of Rosbag to the Future of AI Tooling https://www.rerun.io/blog/rosbag
 cyber_recorder报文录制简介 https://cloud.tencent.com/developer/article/1796672
 Rosbag格式分析 https://zhuanlan.zhihu.com/p/494474804
 一张图对比Rosbag和cyber record https://zhuanlan.zhihu.com/p/496684194
  Cyber RT与ROS对照 https://gutsgwh1997.github.io/2020/02/08/Cyber-RT%E4%B8%8EROS%E5%AF%B9%E7%85%A7/
 华为MDC相关思考 https://zhuanlan.zhihu.com/p/544718464 
 AUTOSAR笔记2:AP主要模块 https://blog.csdn.net/yinminsumeng/article/details/129425626
 算法在移植到MDC时,要考虑哪些点? https://bbs.huaweicloud.com/forum/thread-97739-1-1.html
 https://www.hiascend.cn/document/detail/zh/canncommercial/62RC1/devtools/auxiliarydevtool/atlasamctonnx_16_0018.html
 【MDC开发者课程】基于AUTOSAR的AP平台的应用开发 https://blog.csdn.net/weixin_43849505/article/details/117792244
posted @ 2024-04-30 16:08  辰令  阅读(119)  评论(0编辑  收藏  举报