首页 > 其他分享 >CyberRT_数据解析和处理

CyberRT_数据解析和处理

时间:2024-04-30 16:11:45浏览次数:21  
标签:proto 处理 CyberRT cyber 工厂 record https 解析 com

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系列工具:rtfnode rtfevent rtfbag
华为自主研发Adaptive Autosar符合符合R19-11规范(及以上),
  具备通信管理、执行管理、状态管理、升级管理、健康管理、持久化、时间同步、访问管理、加密能力、诊断服务、网络管理	

数据的获取依赖于外部的传感器,而传感器通过接口与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)	
数据抽象模块 
   能将传感器原始数据和执行器原始数据进行格式转换,完成封装后发送给上层应用
传感器抽象 
  主要是将接收到的传感器数据解析成固定的抽象数据格式,执行器还负责将车控指令封装成执行器支持的报文格式	

参考

 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/
 AUTOSAR笔记2:AP主要模块 https://blog.csdn.net/yinminsumeng/article/details/129425626
 【MDC开发者课程】基于AUTOSAR的AP平台的应用开发 https://blog.csdn.net/weixin_43849505/article/details/117792244

标签:proto,处理,CyberRT,cyber,工厂,record,https,解析,com
From: https://www.cnblogs.com/ytwang/p/18168209

相关文章

  • Go语言系列——Go协程、信道(channel)、缓冲信道和工作池、Select、Mutex、结构体取代类
    文章目录21-Go协程Go协程是什么?Go协程相比于线程的优势如何启动一个Go协程?启动多个Go协程22-信道(channel)什么是信道?信道的声明通过信道进行发送和接收发送与接收默认是阻塞的信道的代码示例信道的另一个示例死锁单向信道关闭信道和使用forrange遍历信道23-缓冲信......
  • 「软件测试面试题集解析课」限时优惠,助你高效备战,一举拿下心仪职位
    面试时常被难倒?不知道如何准备才能脱颖而出?别担心!我们为您整理了一份的软件测试经典面试题视频课,覆盖了操作系统、编程语言、测试用例设计、计算机网络、数据库、算法与数据结构等内容,助您轻松应对软件测试面试挑战。首先,从操作系统与常用命令面试题,让您牢固掌握基础知识;编程语言......
  • Transformers-自然语言处理(七)
    Transformers自然语言处理(七)原文:zh.annas-archive.org/md5/a1e65552fc41f3b5a667f63d9bed854c译者:飞龙协议:CCBY-NC-SA4.0附录V:问题的答案第一章,什么是转换器?我们仍处于第三次工业革命。(True/False)False.历史上的时代确实有重叠。然而,第三次工业革命着眼于使世......
  • Transformers-自然语言处理(二)
    Transformers自然语言处理(二)原文:zh.annas-archive.org/md5/a1e65552fc41f3b5a667f63d9bed854c译者:飞龙协议:CCBY-NC-SA4.0第四章:从头开始预训练RoBERTa模型在本章中,我们将从头开始构建一个RoBERTa模型。该模型将使用我们在BERT模型中所需的Transformers构造工具的......
  • 使用 EasyExcel 进行数据解析
    一、添加pom.xml导入相关依赖<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.12</version></dependency><depende......
  • mu38中ts 文件伪装成png 文件解析~
    正常的文件m3u8应该这样子但是有的却是这个样子于是百度一波我个人任务合理的......
  • js逆向实战之集思录登录参数加密解析
    url:https://www.jisilu.cn/account/login/分析过程输入用户名和密码,抓包。(因为是测试,输入的账号和密码都是123456)可以看到用户名和密码都被加密了,且是被同一种加密算法加密的。搜索关键词user_name,有很多条记录。一个一个看,很快就可以确定加密的位置。打断点,重新......
  • 批处理定时关机
    @echooffREMAuthor:YooooungLeeTEL155-****-9552echo欢迎使用自动关机计划设置脚本!echo.:choose_actionset/p"action_choice=请选择要执行的操作(输入1设置定时关机任务,输入2删除定时关机任务):"if"%action_choice%"=="1"(echo.echo--设置定时关机任......
  • Linux基础——主机域名解析默认使用IPV6路由
    一、问题描述主机访问内网存储网段,发现域名默认解析的IPV6地址。ping访问ipv4地址正常通讯。主机本地解析/etc/resolv.conf的DNS配置正常。#ping域名默认解析IPV6地址Pingnasgroup.xxxx.xxxx.com#pingipv4地址正常ping-4nasgroup.xxxx.xxxx.com#查看本地DNS配......
  • python3解析FreeSWITCH会议室列表信息
    操作系统:CentOS7.6_x64FreeSWITCH版本:1.10.9 Python版本:3.9.12进行FreeSWITCH会议室相关功能开发过程中,会遇到需要解析会议室列表信息并进行特定操作的情况,比如设置特定通道变量、发送dtmf、录音等。今天整理下CentOS7环境下,使用Python3解析FreeSWITCH会议室列表信息然后......