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