CN115080268B - 面向自动驾驶系统内部模块的消息发布-订阅处理方法 - Google Patents
面向自动驾驶系统内部模块的消息发布-订阅处理方法 Download PDFInfo
- Publication number
- CN115080268B CN115080268B CN202210676004.6A CN202210676004A CN115080268B CN 115080268 B CN115080268 B CN 115080268B CN 202210676004 A CN202210676004 A CN 202210676004A CN 115080268 B CN115080268 B CN 115080268B
- Authority
- CN
- China
- Prior art keywords
- message
- record
- address
- data
- module
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000003672 processing method Methods 0.000 title claims abstract description 16
- 238000003860 storage Methods 0.000 claims abstract description 447
- 238000004519 manufacturing process Methods 0.000 claims abstract description 144
- 238000009826 distribution Methods 0.000 claims abstract description 11
- 238000004891 communication Methods 0.000 claims description 58
- 238000000034 method Methods 0.000 claims description 50
- 238000012545 processing Methods 0.000 claims description 29
- 238000012795 verification Methods 0.000 claims description 10
- 230000008447 perception Effects 0.000 claims description 7
- 238000007792 addition Methods 0.000 claims description 6
- 230000002776 aggregation Effects 0.000 claims description 6
- 238000004220 aggregation Methods 0.000 claims description 6
- 238000010276 construction Methods 0.000 claims description 6
- 239000000284 extract Substances 0.000 claims description 6
- 238000005259 measurement Methods 0.000 claims description 5
- 238000012163 sequencing technique Methods 0.000 claims description 3
- 230000005540 biological transmission Effects 0.000 abstract description 10
- 230000001360 synchronised effect Effects 0.000 abstract description 7
- 238000012544 monitoring process Methods 0.000 abstract 1
- 238000010586 diagram Methods 0.000 description 10
- 230000008569 process Effects 0.000 description 10
- 238000007726 management method Methods 0.000 description 6
- 230000007246 mechanism Effects 0.000 description 6
- 230000008859 change Effects 0.000 description 5
- 241001522296 Erithacus rubecula Species 0.000 description 4
- 125000004122 cyclic group Chemical group 0.000 description 4
- 230000000903 blocking effect Effects 0.000 description 3
- 238000013500 data storage Methods 0.000 description 3
- 230000002093 peripheral effect Effects 0.000 description 3
- 230000015556 catabolic process Effects 0.000 description 2
- 238000004140 cleaning Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 238000011144 upstream manufacturing Methods 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000012790 confirmation Methods 0.000 description 1
- 238000013075 data extraction Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000000802 evaporation-induced self-assembly Methods 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2255—Hash tables
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24552—Database cache management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/548—Queue
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02P—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN THE PRODUCTION OR PROCESSING OF GOODS
- Y02P90/00—Enabling technologies with a potential contribution to greenhouse gas [GHG] emissions mitigation
- Y02P90/02—Total factory control, e.g. smart factories, flexible manufacturing systems [FMS] or integrated manufacturing systems [IMS]
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例涉及一种面向自动驾驶系统内部模块的消息发布‑订阅处理方法,所述方法包括:系统启动时初始化消息记录存储区、环形缓存区和哈希表存储区;对数据生产模块的消息发布指令以及数据消费模块的消息订阅指令进行侦听;收到消息发布指令时提取出发布模式,根据发布模式接收生产数据组成消息记录,对时间戳进行校验,将消息记录写入消息记录存储区,生成缓存记录写入环形缓存区,生成键值对写入哈希表存储区,回发回执;收到消息订阅指令时提取出消息模块名称、消息标识,查询哈希表存储区得到偏移地址,从环形缓存区读取缓存记录,从消息记录存储区读取消息记录回发。通过本发明可以降低各内部模块间的同步传输压力并提高系统整体稳健性。
Description
技术领域
本发明涉及数据处理技术领域,特别涉及一种面向自动驾驶系统内部模块的消息发布-订阅处理方法。
背景技术
自动驾驶系统的内部典型模块包括多种传感器模块、感知模块、预测模块、规划模块和控制模块等,其中多种传感器模块又可基于传感器类型分成多类,诸如超声波传感器模块、激光雷达传感器模块、毫米波传感器模块、惯性测量单元传感器模块、全球定位系统传感器模块、摄像头模块和车辆底盘模块等。在自动驾驶系统运行过程中,内部各模块间的数据传输存在高并发特征,尤其在各种传感器模块与感知模块之间无论是数据传输总量还是数据传输并发量都是巨大的。对于这种内部模块间高数据量、高并发量的数据传输特征,如若在模块间采用同步数据传输方式则极容易导致各模块的数据收发单元发生通信阻塞从而造成数据丢失问题,并且也会造成各模块工作负载不均衡、整体负载过大从而产生系统崩溃问题,这两种问题都会对自动驾驶的安全性带来致命风险。
发明内容
本发明的目的,就是针对现有技术的缺陷,提供一种面向自动驾驶系统内部模块的消息发布-订阅处理方法、电子设备及计算机可读存储介质,在自动驾驶系统中增加一个异步通信模块,并将自动驾驶系统中发送数据的内部模块作为消息发布方即数据生产模块、将接收数据的内部模块作为消息订阅方即数据消费模块,并由异步通信模块创建对应的消息记录存储区、环形缓存区和哈希表存储区来处理数据生产模块和数据消费模块之间的消息发布与订阅查询的操作流程。通过本发明,由异步通信模块为其他内部模块构建起一种基于消息发布-订阅处理流程的异步数据通信机制;基于该异步数据通信机制,不但可以降低各内部模块数据收发单元的同步传输压力、改善通信阻塞状况、降低数据丢失可能,还可以降低各内部模块的实时工作负载、提高各模块工作负载均衡度、降低整体负载的实时峰值从而提高自动驾驶系统的整体稳健性。
为实现上述目的,本发明实施例第一方面提供了一种面向自动驾驶系统内部模块的消息发布-订阅处理方法,所述方法包括:
自动驾驶系统的异步通信模块在系统启动时,对消息记录存储区、环形缓存区和哈希表存储区进行初始化;
所述异步通信模块在所述初始化成功时,对所述自动驾驶系统的各个数据生产模块的消息发布指令进行侦听;并对所述自动驾驶系统的各个数据消费模块的消息订阅指令进行侦听;
所述异步通信模块在接收到任一所述数据生产模块发送的所述消息发布指令时,从指令中提取出发布模式;并根据所述发布模式接收当前数据生产模块发送的生产数据组成对应的第一消息记录;并根据所述发布模式对所述第一消息记录的时间戳进行校验;校验成功则根据所述发布模式将所述第一消息记录写入所述消息记录存储区并获得对应的写入地址记为第一消息地址;并根据所述发布模式、所述第一消息记录和所述第一消息地址进行缓存记录构建生成对应的第一缓存记录;并将所述第一缓存记录写入所述环形缓存区并获得对应的缓存偏移地址记为第一偏移地址;并根据所述第一消息地址和所述第一偏移地址进行哈希表键值对构建生成对应的第一键值对;并将所述第一键值对写入所述哈希表存储区;写入成功则向所述当前数据生产模块回发消息发布成功回执;
所述异步通信模块在接收到任一所述数据消费模块发送的所述消息订阅指令时,从指令中提取出订阅消息模块名称和订阅消息标识;并根据所述订阅消息模块名称和所述订阅消息标识查询所述哈希表存储区得到对应的第二偏移地址;并根据所述第二偏移地址从所述环形缓存区读取对应的第二缓存记录;并根据所述第二缓存记录从所述消息记录存储区读取对应的第二消息记录;并将所述第二消息记录向当前数据消费模块回发。
优选的,所述数据生产模块至少包括超声波传感器模块、激光雷达传感器模块、毫米波传感器模块、惯性测量单元传感器模块、全球定位系统传感器模块、摄像头模块、车辆底盘模块、感知模块、预测模块、规划模块;
所述数据消费模块至少包括感知模块、预测模块、规划模块和控制模块。
优选的,所述消息记录存储区存储多个消息记录;所述消息记录包括消息头和消息体;所述消息头包括模块名称、消息标识、消息长度和消息时间戳,所述消息长度为所述消息记录的数据长度;
所述环形缓存区存储多个缓存记录;所述缓存记录包括消息数据长度和消息地址;
所述哈希表存储区存储多个键值对;所述键值对由关键字名称和关键字属性组成。
优选的,所述对消息记录存储区、环形缓存区和哈希表存储区进行初始化,具体包括:
在系统存储空间,根据预设的消息记录、环形缓存和哈希表存储区大小分配对应的内存连续地址空间或硬盘连续地址空间作为所述消息记录存储区、所述环形缓存区和所述哈希表存储区;
将所述消息记录存储区按预设的消息记录存储块大小sq顺序划分成多个消息记录存储块;并为所述消息记录存储区初始化对应的有效记录结束地址;所述有效记录结束地址初始化为第一个所述消息记录存储块的起始地址;
将所述环形缓存区按预设的缓存记录存储块大小sr顺序划分成多个缓存记录存储块;并为所述环形缓存区初始化对应的起始位置地址、结束位置地址、可读偏移位置地址和可写偏移位置地址;所述起始位置地址和所述可写偏移位置地址均默认初始化为第一个所述缓存记录存储块的起始地址;所述结束位置地址默认初始化为最后一个所述缓存记录存储块的起始地址;所述可读偏移位置地址默认初始化为空;
将所述哈希表存储区按预设的键值对存储块大小sh顺序划分成多个键值对存储块;并为所述消息记录存储区初始化对应的有效键值对结束地址;所述有效键值对结束地址初始化为第一个所述键值对存储块的起始地址。
优选的,所述根据所述发布模式接收当前数据生产模块发送的生产数据组成对应的第一消息记录,具体包括:
对所述发布模式进行识别;
当所述发布模式为第一模式时,接收所述当前数据生产模块发送的生产数据;并从所述生产数据中提取出生产数据长度作为对应的所述消息长度,提取出数据生产模块名称作为对应的所述模块名称,提取出生产数据标识作为对应的所述消息标识,提取出生产数据时间戳作为对应的所述消息时间戳,提取出生产数据包作为对应的所述消息体;并由所述模块名称、所述消息标识、所述消息长度和所述消息时间戳组成对应的所述消息头;并由所述消息头和所述消息体组成对应的所述第一消息记录;
当所述发布模式为第二模式时,从所述消息发布指令中提取出聚合数量N;并对所述当前数据生产模块发送的N个所述生产数据进行接收;每接收一个所述生产数据,就从当前生产数据中提取出所述生产数据长度、所述数据生产模块名称、所述生产数据标识、所述生产数据时间戳和所述生产数据包作为对应的所述消息长度、所述模块名称、所述消息标识、所述消息时间戳和所述消息体,并由得到的所述模块名称、所述消息标识、所述消息长度和所述消息时间戳组成对应的所述消息头,并由所述消息头和所述消息体组成对应的子消息记录;并由得到的N个所述子消息记录组成对应的所述第一消息记录。
优选的,所述根据所述发布模式对所述第一消息记录的时间戳进行校验,具体包括:
对所述发布模式进行识别;
当所述发布模式为第一模式时,从所述第一消息记录中提取出所述消息时间戳;并对所述消息时间戳与当前系统时间的时间差进行计算生成对应的第一时间差;若所述第一时间差满足预设的时延要求则确认所述校验成功;
当所述发布模式为第二模式时,对所述第一消息记录中各个所述子消息记录的所述消息时间戳与当前系统时间的时间差进行计算从而得到多个子记录时间差;若所有所述子记录时间差满足预设的时延要求则确认所述校验成功。
优选的,所述根据所述发布模式将所述第一消息记录写入所述消息记录存储区并获得对应的写入地址记为第一消息地址,具体包括:
对所述消息记录存储区的所述有效记录结束地址是否已经达到所述消息记录存储区的结束地址进行判断;若所述有效记录结束地址未达到所述消息记录存储区的结束地址,则对所述剩余空间大小除以所述消息记录存储块大小sq商进行取整得到对应的剩余消息记录存储块数量;
根据所述发布模式对所述剩余消息记录存储块数量是否满足所述第一消息记录进行确认;当所述发布模式为第一模式时,若所述剩余消息记录存储块数量大于0则确认所述剩余空间大小满足所述第一消息记录;当所述发布模式为第二模式时,若所述剩余消息记录存储块数量不小于所述第一消息记录的子消息记录数量则确认所述剩余空间大小满足所述第一消息记录;
当确认所述剩余空间大小满足所述第一消息记录时,对发布模式进行识别;当所述发布模式为第一模式时,以所述有效记录结束地址为起始写入地址将所述第一消息记录写入所述消息记录存储区并在写入成功后将所述有效记录结束地址更新为原有效记录结束地址与所述消息记录存储块大小sq相加的和;当所述发布模式为第二模式时,以所述有效记录结束地址为起始写入地址将所述第一消息记录的第一个子消息记录写入所述消息记录存储区并在写入成功后将所述有效记录结束地址更新为原有效记录结束地址与所述消息记录存储块大小sq相加的和,再以新的所述有效记录结束地址为起始写入地址将所述第一消息记录的第二个子消息记录写入所述消息记录存储区,依次类推,直到把所述第一消息记录的最后一个子消息记录写入所述消息记录存储区并对所述有效记录结束地址完成更新为止;
将所述第一消息记录的起始写入地址作为对应的所述第一消息地址。
优选的,所述根据所述发布模式、所述第一消息记录和所述第一消息地址进行缓存记录构建生成对应的第一缓存记录,具体包括:
根据所述发布模式和所述第一消息记录确定对应的所述消息数据长度;若所述发布模式为第一模式,则设置所述消息数据长度为所述消息记录存储块大小sq;若所述发布模式为第二模式,则将所述第一消息记录的子消息记录数量作为第一数量,并设置所述消息数据长度为所述消息记录存储块大小sq与第一数量的乘积;
将所述第一消息地址作为对应的所述消息地址;
由所述消息数据长度和所述消息地址组成对应的所述第一缓存记录。
优选的,所述将所述第一缓存记录写入所述环形缓存区并获得对应的缓存偏移地址记为第一偏移地址,具体包括:
以所述可写偏移位置地址为起始写入地址将所述第一缓存记录写入所述环形缓存区;写入成功后,将所述环形缓存区的所述可写偏移位置地址更新为下一个可写缓存记录存储块的起始地址;并将所述第一缓存记录的起始写入地址作为对应的所述第一偏移地址。
优选的,所述根据所述第一消息地址和所述第一偏移地址进行哈希表键值对构建生成对应的第一键值对,具体包括:
将所述第一消息地址作为对应的所述关键字名称,将所述第一偏移地址作为对应的所述关键字属性;并由所述关键字名称和所述关键字属性组成对应的所述第一键值对。
优选的,所述将所述第一键值对写入所述哈希表存储区,具体包括:
对所述哈希表存储区的所述有效键值对结束地址是否已经达到所述哈希表存储区的结束地址进行判断;若未达到则以所述有效键值对结束地址为起始写入地址将所述第一键值对写入到所述哈希表存储区中;写入成功后,将所述有效键值对结束地址更新为原有效键值对结束地址与所述键值对存储块大小sh相加的和。
优选的,所述根据所述订阅消息模块名称和所述订阅消息标识查询所述哈希表存储区得到对应的第二偏移地址,具体包括:
对所述哈希表存储区中处于所述有效键值对结束地址之前的各个所述键值对进行轮询;并将当前被轮询的所述键值对作为当前键值对;并将所述当前键值对的所述关键字名称指向的所述消息记录存储区的存储地址作为当前消息地址;并由所述当前消息地址加上预设的消息标识偏移量得到对应的当前消息标识地址;并在所述消息记录存储区中,从所述当前消息地址开始读取长度为预设的模块名称数据长度的一段连续存储数据作为对应的当前模块名称,从所述当前消息标识地址开始读取长度为预设的消息标识数据长度的一段连续存储数据作为对应的当前消息标识;并对所述当前模块名称和所述当前消息标识是否与所述订阅消息模块名称和所述订阅消息标识全匹配进行确认;若确认不是全匹配则转至下一个所述键值对继续轮询直到最后一个所述键值对轮询结束为止;若确认全匹配则停止轮询并将所述当前键值对的所述关键字属性提取出来作为对应的所述第二偏移地址。
优选的,所述根据所述第二偏移地址从所述环形缓存区读取对应的第二缓存记录,具体包括:
在所述环形缓存区中从所述第二偏移地址开始读取长度为所述缓存记录存储块大小sr的一段连续存储数据作为对应的所述第二缓存记录。
优选的,所述根据所述第二缓存记录从所述消息记录存储区读取对应的第二消息记录,具体包括:
将所述第二缓存记录的所述消息数据长度作为第一数据长度,并将所述第二缓存记录的所述消息地址作为第一读取地址;
在所述消息记录存储区中从所述第一读取地址开始读取长度为所述第一数据长度的一段连续存储数据作为第一数据;
若所述第一数据长度与所述消息记录存储块大小sq相等则从所述第一数据中提取出所述消息长度,并将所述第一数据中靠前的长度为所述消息长度的连续数据提取出来对应的所述第二消息记录;
若所述第一数据长度大于所述消息记录存储块大小sq,则按所述消息记录存储块大小sq将所述第一数据顺序切分成多个等长的第二数据;并将各个所述第二数据的所述消息长度提取出来作为对应的第二数据长度;并将各个所述第二数据中靠前的长度为对应的所述第二数据长度的连续数据提取出来对应的第一子消息记录;并对得到的多个所述第一子消息记录进行排序从而得到对应的所述第二消息记录。
本发明实施例第二方面提供了一种电子设备,包括:存储器、处理器和收发器;
所述处理器用于与所述存储器耦合,读取并执行所述存储器中的指令,以实现上述第一方面所述的方法步骤;
所述收发器与所述处理器耦合,由所述处理器控制所述收发器进行消息收发。
本发明实施例第三方面提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,当所述计算机指令被计算机执行时,使得所述计算机执行上述第一方面所述的方法的指令。
本发明实施例提供了一种面向自动驾驶系统内部模块的消息发布-订阅处理方法、电子设备及计算机可读存储介质,在自动驾驶系统中增加一个异步通信模块,并将自动驾驶系统中发送数据的内部模块作为消息发布方即数据生产模块、将接收数据的内部模块作为消息订阅方即数据消费模块,并由异步通信模块创建对应的消息记录存储区、环形缓存区和哈希表存储区来处理数据生产模块和数据消费模块之间的消息发布与订阅查询的操作流程;在处理消息发布时,异步通信模块接收数据生产模块发送的生产数据并转换为对应的消息记录存入消息记录存储区,并基于当前消息记录的记录长度和存储地址在环形缓存区中构建对应的缓存记录,并基于当前消息记录存储地址和缓存记录偏移地址在哈希表存储区中构建对应的键值对,并在完成上述储存区操作之后确认消息发布成功向数据生产模块回发对应的发布成功回执;在处理订阅查询时,异步通信模块接收数据消费模块发送的订阅参数,并根据订阅参数对哈希表存储区的键值对进行比对获得对应的缓存记录偏移地址,并根据缓存记录偏移地址直接从环形缓存区中定向读出对应缓存记录中的消息记录存储地址和记录长度,并根据消息记录存储地址和记录长度直接从消息记录存储区中定向读出对应的消息记录,并将得到的消息记录作为订阅查询结果向数据消费模块发送。通过本发明,由异步通信模块为其他内部模块构建起了一种基于消息发布-订阅处理流程的异步数据通信机制;基于该异步数据通信机制,不但降低了各内部模块数据收发单元的同步传输压力、改善了通信阻塞状况、降低了数据丢失可能,还降低了各内部模块的实时工作负载、提高了各模块工作负载均衡度、降低了整体负载的实时峰值从而提高了自动驾驶系统的整体稳健性。
附图说明
图1为本发明实施例一提供的一种面向自动驾驶系统内部模块的消息发布-订阅处理方法示意图;
图2a为本发明实施例一提供的消息记录存储区示意图;
图2b为本发明实施例一提供的环形缓存区示意图;
图2c为本发明实施例一提供的哈希表存储区示意图;
图3为本发明实施例二提供的一种电子设备的结构示意图。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部份实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
本发明实施例一在自动驾驶系统中增加一个用于处理异步数据通信的异步通信模块,该异步通信模块通过本发明实施例一提供的一种面向自动驾驶系统内部模块的消息发布-订阅处理方法创建对应的消息记录存储区、环形缓存区和哈希表存储区来处理数据生产模块和数据消费模块之间的消息发布与订阅查询的操作流程;图1为本发明实施例一提供的一种面向自动驾驶系统内部模块的消息发布-订阅处理方法示意图,如图1所示,本方法主要包括如下步骤:
步骤1,自动驾驶系统的异步通信模块在系统启动时,对消息记录存储区、环形缓存区和哈希表存储区进行初始化;
其中,消息记录存储区存储多个消息记录;消息记录包括消息头和消息体;消息头包括模块名称、消息标识、消息长度和消息时间戳,消息长度为消息记录的数据长度;环形缓存区存储多个缓存记录;缓存记录包括消息数据长度和消息地址;哈希表存储区存储多个键值对;键值对由关键字名称和关键字属性组成;
具体包括:步骤11,在系统存储空间,根据预设的消息记录、环形缓存和哈希表存储区大小分配对应的内存连续地址空间或硬盘连续地址空间作为消息记录存储区、环形缓存区和哈希表存储区;
这里,消息记录、环形缓存和哈希表存储区大小为一组预先设定的存储区大小参数,该组参数可根据自动驾驶系统所在车辆的存储介质(内存或硬盘)整体容量进行调整;之所以选择内存或硬盘的连续地址空间,是为了减少数据读写时的选址复杂度,减少消息记录存储区、环形缓存区和哈希表存储区的地址检索复杂度,提高异步通信模块的数据处理效率;需要说明的是本发明实施例一中提到的任何地址都指的逻辑地址也就是常说的可编程地址,该可编程地址与存储介质(内存或硬盘)实际的电学存储单元的物理地址存在一个转换关系,这由自动驾驶系统各个硬件单元的配置决定,在此不做进一步拓展说明;若选择内存的连续地址空间作为消息记录存储区、环形缓存区和哈希表存储区则可以达到更高的数据处理速度但系统掉电则三个存储区的数据就会丢失,若选择硬盘的连续地址空间作为消息记录存储区、环形缓存区和哈希表存储区则可以确保三个存储区不会因为系统掉电发生数据丢失问题,具体选择内存还是硬盘作为三个存储区的规划空间由具体实施工程需求决定;
规划出的消息记录存储区实际就是消息队列存储区,该存储区用于存储消息记录,每个消息记录由固定长度的消息头和变长的消息体组成;其中,消息头由固定长度的模块名称、消息标识、消息长度和消息时间戳组成,消息长度为消息记录的整体数据长度;消息体则是具体的生产数据内容,诸如各类雷达传感器的点云数据、摄像头拍摄的图像或视频数据等等,在此不做一一赘述;需要说明的是,在对消息记录存储区进行存储管理时将其视为一个线性连续存储对象进行管理;
规划出的环形缓存区实际就是消息记录存储区中与各消息记录对应的地址指针存储区,该存储区用于固定长度的存储缓存记录,每个缓存记录对应一个单独的消息记录或一个由多个子消息记录构成的聚合消息记录;每个缓存记录至少应包括一个固定长度的消息数据长度和一个固定长度的消息地址;其中,消息数据长度用于表征对应的一个单独消息记录或一个聚合消息记录的总存储数据长度,消息地址则为对应的一个单独消息记录或一个聚合消息记录在消息记录存储区中的起始存储地址;需要说明的是,在对环形缓存区进行存储管理时将其视为一个循环存储对象进行管理;
规划出的哈希表存储区实际就是散列表存储区用于存储多个固定长度的键值对(Key-Value,KV),每个键值对应一个单独的消息记录或一个由多个子消息记录构成的聚合消息记录;键值对KV中的key即关键字名称长度固定且用于存储对应的一个单独消息记录或一个聚合消息记录在消息记录存储区中的起始存储地址,键值对KV中的Value即关键字属性长度固定且用于存储对应的一个单独消息记录或一个聚合消息记录在环形缓存区中的起始存储地址;哈希表存储区采用由两个地址组成的键值对存储结构,可以在后续处理消息订阅时对订阅参数(模块名称、消息标识)匹配的消息记录进行快速定位,从而提高异步通信模块的消息读取效率;需要说明的是,在对哈希表存储区进行存储管理时也类似消息记录存储区将其视为一个线性连续存储对象进行管理;
步骤12,将消息记录存储区按预设的消息记录存储块大小sq顺序划分成多个消息记录存储块;并为消息记录存储区初始化对应的有效记录结束地址;有效记录结束地址初始化为第一个消息记录存储块的起始地址;
这里,如图2a为本发明实施例一提供的消息记录存储区示意图所示,消息记录存储区由顺序排列的消息记录存储块构成;消息记录存储块为消息记录存储区的单位存储块;由前文可知消息记录的消息体是变长的,但若采用变长方式规划单位存储块则会造成数据读取的操作难度,降低读取效率;所以本发明实施例采用固定长度的方式规划消息记录存储块,其固定长度由预先设定的系统参数消息记录存储块大小sq决定;这种使用定长单位存储块存储变长消息记录的处理方式就会在每次块写入完成后于块尾部产生一个变长无效数据区,该变长无效数据区的长度最小为0;
这里,由前文可知本发明实施例将消息记录存储区作为线性连续存储对象进行存储管理,也就是说会对消息记录存储区的有效空间和剩余空间进行跟踪,一旦剩余空间不足则在没有预先约定的历史数据清理、备份等规则的情况下就会停止对该存储区的继续写操作并会报类似存储空间不足这样的警告信息;
有效记录结束地址就是本发明实施例对剩余空间进行跟踪的特征参数,有效记录结束地址是指消息记录存储区中第一个未存储真实消息记录的消息记录存储块的起始地址;在消息记录存储区初始化时因为尚未有任何真实消息记录写入,所以第一个未存储真实消息记录的消息记录存储块实际就是整个存储区中第一个消息记录存储块,那么有效记录结束地址自然就应被设为第一个消息记录存储块的起始地址;后续步骤在对每个单独的非聚合消息记录或聚合消息记录中的各个子消息记录进行写操作时,每写完一个消息记录存储块就对应的更新有效记录结束地址,将其更新为下一个消息记录存储块的起始地址;
步骤13,将环形缓存区按预设的缓存记录存储块大小sr顺序划分成多个缓存记录存储块;并为环形缓存区初始化对应的起始位置地址、结束位置地址、可读偏移位置地址和可写偏移位置地址;起始位置地址和可写偏移位置地址均默认初始化为第一个缓存记录存储块的起始地址;结束位置地址默认初始化为最后一个缓存记录存储块的起始地址;可读偏移位置地址默认初始化为空;
这里,如图2b为本发明实施例一提供的环形缓存区示意图所示,环形缓存区由顺序排列的缓存记录存储块构成;缓存记录存储块为环形缓存区的单位存储块;缓存记录存储块用于存储定长的缓存记录,所以缓存记录存储块的块长度也就是缓存记录存储块大小sr与实际的缓存记录等长;
这里,由前文可知本发明实施例将环形缓存区作为循环存储对象进行管理,也就是说将环形缓存区视为一个环状的可循环覆盖的存储空间进行管理,如图2b所示;该环状的可循环覆盖的存储空间又称循环队列,该循环队列可以一直更新下去,一旦队列中的缓存记录写满了,就会使用最新写入的缓存记录覆盖最旧的缓存记录;为达到这样的循环目的,本发明实施例给出了用于标记循环队列特征的四个特征参数:起始位置地址、结束位置地址、可读偏移位置地址和可写偏移位置地址;
起始位置地址用于标识循环队列中的起始记录在环形缓存区中对应的缓存记录存储块的起始地址,那么,在环形缓存区初始化的时候需要对其进行设置,原则上可以任选一个缓存记录存储块的起始地址作为起始位置地址;结束位置地址用于标识循环队列中的结束记录在环形缓存区中对应的缓存记录存储块的起始地址,那么,在环形缓存区初始化的时候需要对其进行设置,原则上也任选一个缓存记录存储块的起始地址作为起始位置地址,只需保持其与起始位置地址不同即可;这里的起始和结束记录只是表示循环队列在环形缓存区中占用的存储空间,二者决定了循环队列中的记录总数,但起始和结束记录并不一定就是最旧和最新的记录;例如,环形缓存区中可以存储5个缓存记录存储块,但起始位置地址和结束位置地址只是设为第1个、第3个缓存记录存储块的起始地址,那么就意味着这5个缓存记录存储块中只有第1到第3个缓存记录存储块参与循环队列的存储,而第4、5个缓存记录存储块不会被使用;本发明实施例为存储空间的最大化利用,则默认选择第一个缓存记录存储块的起始地址作为起始位置地址,选择最后一个缓存记录存储块的起始地址作为结束位置地址,这样就可以将整个环形缓存区用来最循环队列管理;需要强调的是起始位置地址和结束位置地址一旦设定之后,不会发生变化;
可读偏移位置地址用于标识环形缓存区中最旧的缓存记录所在的缓存记录存储块的起始地址,也就是说可读偏移位置地址是一个变化值,因为环形缓存区在初始化时尚未写入任何有效的缓存记录,所以初始化时将可读偏移位置地址设为空;
可写偏移位置地址用于标识环形缓存区中后续最新写入的缓存记录可用的缓存记录存储块的起始地址也即下一个可写入的缓存记录存储块的起始地址,也就是说可写偏移位置地址也是一个变化值,因为环形缓存区在初始化时尚未写入任何有效的缓存记录,也就是说下一个可写入的缓存记录存储块的起始地址应与当前起始位置地址相同,所以初始化时将其设为与当前起始位置地址相同的地址即第一个缓存记录存储块的起始地址;
为对起始位置地址、结束位置地址、可读偏移位置地址和可写偏移位置地址的变化设置有更为清晰的认识,下文以一个简单示例对本发明实施例对起始位置地址、结束位置地址、可读偏移位置地址和可写偏移位置地址的设置方式进行说明;
例如,环形缓存区中有3个缓存记录存储块,3个缓存记录存储块的起始地址分别为A1、A2、A3,初始化时设置起始位置地址和可写偏移位置地址为A1,设置结束位置地址为A3,设置可读偏移位置地址设为空;
那么,在写入第1个缓存记录时,按可写偏移位置地址A1将第1个缓存记录写入A1对应的缓存记录存储块中;写完后,起始、结束位置地址保持不变为A1、A3;可读偏移位置地址因为当前最旧的缓存记录是第1个缓存记录所以其取值由空变为第1个缓存记录的缓存记录存储块的起始地址A1;对于可写偏移位置地址,因为当前最新的缓存记录是第1个缓存记录,对应的下一个可写入的缓存记录存储块的起始地址应是A2,所以可写偏移位置地址取值由A1变为A2;
在写入第2个缓存记录时,按可写偏移位置地址A2将第2个缓存记录写入A2对应的缓存记录存储块中;写完后,起始、结束位置地址保持不变为A1、A3;可读偏移位置地址因为当前最旧的缓存记录是第1个缓存记录所以其取值不变仍为A1;对于可写偏移位置地址,因为当前最新的缓存记录是第2个缓存记录,对应的下一个可写入的缓存记录存储块的起始地址应是A3,所以可写偏移位置地址取值由A2变为A3;
在写入第3个缓存记录时,按可写偏移位置地址A3将第3个缓存记录写入A3对应的缓存记录存储块中;写完后,起始、结束位置地址保持不变为A1、A3;可读偏移位置地址因为当前最旧的缓存记录是第1个缓存记录所以其取值不变仍为A1;对于可写偏移位置地址,因为当前最新的缓存记录是第3个缓存记录,第3个缓存记录的缓存记录存储块已经到达结束位置地址A3指向的缓存记录存储块,下一个写入的缓存记录存储块就应循环到起始位置地址A1指向的缓存记录存储块,所以可写偏移位置地址取值由A3变为A1;
在写入第4个缓存记录时,按可写偏移位置地址A1将第4个缓存记录写入A1对应的缓存记录存储块中;写完后,起始、结束位置地址保持不变为A1、A3;可读偏移位置地址因为当前最旧的缓存记录已经从原来的第1个缓存记录存储块中存储的第1缓存记录变为第2个缓存记录存储块中存储的第2缓存记录,所以可读偏移位置地址的取值从A1变为A2;对于可写偏移位置地址,因为当前最新的缓存记录是第1个缓存记录存储块中存储的第4个缓存记录,下一个写入的缓存记录存储块就应是第2个缓存记录存储块的起始地址,所以可写偏移位置地址取值由A1变为A2;
后续写入的缓存记录依次类推,由上述示例不难看出本发明实施例对这四个特征参数(起始位置地址、结束位置地址、可读偏移位置地址和可写偏移位置地址)的设置规则:起始位置地址和结束位置地址一经设定不会变化;在首轮循队列写的时候(从队列空写到队列满),对于可读偏移位置地址而言只在第1次新写入缓存记录之后发生改变、其余次数不发生变化,对于可写偏移位置地址而言每次新写入缓存记录之后都会发生递增改变且在到达结束位置地址之后会重新循环到起始位置地址;在首轮循队列写满之后,可读偏移位置地址、可写偏移位置地址在每次新写入缓存记录之后都会发生递增改变且二者取值保持一致,且二者在到达结束位置地址之后会重新循环到起始位置地址;本发明实施例在后续步骤中也会基于上述设置规则对可写偏移位置地址进行设置;
步骤14,将哈希表存储区按预设的键值对存储块大小sh顺序划分成多个键值对存储块;并为消息记录存储区初始化对应的有效键值对结束地址;有效键值对结束地址初始化为第一个键值对存储块的起始地址。
这里,如图2c为本发明实施例一提供的哈希表存储区示意图所示,哈希表存储区由顺序排列的键值对存储块构成;键值对存储块为哈希表存储区的单位存储块;键值对存储块用于存储定长的键值对,所以键值对存储块的块长度也就是键值对存储块大小sh与实际的键值对等长;
这里,由前文可知本发明实施例将哈希表存储区作为线性连续存储对象进行存储管理,也就是说会对哈希表存储区的有效空间和剩余空间进行跟踪,一旦剩余空间不足则在没有预先约定的历史数据清理、备份等规则的情况下就会停止对该存储区的继续写操作并会报类似存储空间不足这样的警告信息;
有效键值对结束地址就是本发明实施例对剩余空间进行跟踪的特征参数,有效键值对结束地址是指哈希表存储区中第一个未存储真实键值对的键值对存储块的起始地址;在哈希表存储区初始化时因为尚未有任何真实键值对写入,所以第一个未存储真实键值对的键值对存储块实际就是整个存储区中第一个键值对存储块,那么有效键值对结束地址自然就应被设为第一个键值对存储块的起始地址;后续步骤每写完一个键值对存储块就对应的更新有效键值对结束地址,将其更新为下一个有效键值对结束地址的起始地址。
步骤2,异步通信模块在初始化成功时,对自动驾驶系统的各个数据生产模块的消息发布指令进行侦听;并对自动驾驶系统的各个数据消费模块的消息订阅指令进行侦听;
其中,数据生产模块至少包括超声波传感器模块、激光雷达传感器模块、毫米波传感器模块、惯性测量单元传感器模块、全球定位系统传感器模块、摄像头模块、车辆底盘模块、感知模块、预测模块、规划模块;数据消费模块至少包括感知模块、预测模块、规划模块和控制模块。
这里,按自动系统内部模块的数据传输方向,可将超声波传感器模块、激光雷达传感器模块、毫米波传感器模块、惯性测量单元传感器模块、全球定位系统传感器模块、摄像头模块、车辆底盘模块等分别作为数据生产模块,将感知模块作为数据消费模块;还可将感知模块作为数据生产模块,将预测模块和规划模块分别作为数据消费模块;还可将预测模块作为数据生产模块,将规划模块作为数据消费模块;还可将规划模块作为数据生产模块,将控制模块作为数据消费模块。除此之外,还可自行根据实际需求对各个内部模块进行数据生产模块和数据消费模块的角色设置与切换,还可另行添加更多的内部模块分别作为数据生产模块和数据消费模块这两种通信角色。
步骤3,异步通信模块在接收到任一数据生产模块发送的消息发布指令时,从指令中提取出发布模式;并根据发布模式接收当前数据生产模块发送的生产数据组成对应的第一消息记录;并根据发布模式对第一消息记录的时间戳进行校验;校验成功则根据发布模式将第一消息记录写入消息记录存储区并获得对应的写入地址记为第一消息地址;并根据发布模式、第一消息记录和第一消息地址进行缓存记录构建生成对应的第一缓存记录;并将第一缓存记录写入环形缓存区并获得对应的缓存偏移地址记为第一偏移地址;并根据第一消息地址和第一偏移地址进行哈希表键值对构建生成对应的第一键值对;并将第一键值对写入哈希表存储区;写入成功则向当前数据生产模块回发消息发布成功回执;
这里,当前步骤就是异步通信模块对各数据生产模块提交的生产数据进行消息发布的处理过程;一旦完成处理就会向数据生产模块回发消息发布成功回执;
具体包括:步骤31,异步通信模块在接收到任一数据生产模块发送的消息发布指令时,从指令中提取出发布模式;
其中,发布模式包括第一、第二模式;
这里,第一模式即是单个生产数据的发布模式,异步通信模块在第一模式下每接收一个生产数据就产生一组对应的消息记录、缓存记录和键值对,并基于这组消息记录、缓存记录和键值对对消息记录存储区、环形缓存区和哈希表存储区进行一次写操作从而完成当前单个生产数据的消息发布;第二模式即是聚合生产数据发布模式,异步通信模块在第二模式下按数据生产模块发送的聚合数量N处理数据接收,每接收一个生产数据产生一个对应的子消息记录,接收了N个生产数据之后由N个子消息记录组成一个对应的聚合消息记录并产生对应的缓存记录和键值对,再基于这组聚合消息记录、缓存记录和键值对对消息记录存储区、环形缓存区和哈希表存储区进行一次写操作从而完成批量(N个)生产数据的消息发布;
步骤32,根据发布模式接收当前数据生产模块发送的生产数据组成对应的第一消息记录;
其中,生产数据至少应包括生产数据长度、数据生产模块名称、生产数据标识、生产数据时间戳和生产数据包;生产数据长度整个生产数据的长度;
此处,生产数据的数据结构为生产数据长度+数据生产模块名称+生产数据标识+生产数据时间戳+生产数据包,那么生产数据长度就是数据序列{产数据长度,数据生产模块名称,生产数据标识,生产数据时间戳,生产数据包}的数据长度;数据生产模块名称就是当前数据生产模块的名称或标识;生产数据标识即是当前数据生产模块或自动驾驶系统为生产数据包分配的唯一标识;生产数据时间戳即是当前数据生产模块生成该生产数据包的时间信息;生产数据包是具体的数据内容,诸如各类雷达传感器的点云数据、摄像头拍摄的图像或视频数据等等,在此不做一一赘述;
具体包括:步骤321,对发布模式进行识别;
步骤322,当发布模式为第一模式时,接收当前数据生产模块发送的生产数据;并从生产数据中提取出生产数据长度作为对应的消息长度,提取出数据生产模块名称作为对应的模块名称,提取出生产数据标识作为对应的消息标识,提取出生产数据时间戳作为对应的消息时间戳,提取出生产数据包作为对应的消息体;并由模块名称、消息标识、消息长度和消息时间戳组成对应的消息头;并由消息头和消息体组成对应的第一消息记录;
这里,第一模式下,每接收一次生产数据就会生成一个第一消息记录;
步骤323,当发布模式为第二模式时,从消息发布指令中提取出聚合数量N;并对当前数据生产模块发送的N个生产数据进行接收;每接收一个生产数据,就从当前生产数据中提取出生产数据长度、数据生产模块名称、生产数据标识、生产数据时间戳和生产数据包作为对应的消息长度、模块名称、消息标识、消息时间戳和消息体,并由得到的模块名称、消息标识、消息长度和消息时间戳组成对应的消息头,并由消息头和消息体组成对应的子消息记录;并由得到的N个子消息记录组成对应的第一消息记录;
这里,第二模式下,每接收一次生产数据就会生成一个对应的子消息记录;在每次接受完N个生产数据后就会得到一个由N个子消息记录组成的第一消息记录,此时的第一消息记录实际是一个聚合消息记录;
步骤33,根据发布模式对第一消息记录的时间戳进行校验;
具体包括:步骤331,对发布模式进行识别;
步骤332,当发布模式为第一模式时,从第一消息记录中提取出消息时间戳;并对消息时间戳与当前系统时间的时间差进行计算生成对应的第一时间差;若第一时间差满足预设的时延要求则确认校验成功;
这里,第一模式下第一消息记录中只有一个消息时间戳,所以只需验证这个消息时间戳与当前系统时间的时延即可;预设的时延要求实际就是一个对最大延时的规定范围,具体可根据实际实施要求进行设定;
步骤333,当发布模式为第二模式时,对第一消息记录中各个子消息记录的消息时间戳与当前系统时间的时间差进行计算从而得到多个子记录时间差;若所有子记录时间差满足预设的时延要求则确认校验成功;
这里,第二模式下第一消息记录中有多个子消息记录的消息时间戳,需要对每个消息时间戳与当前系统时间的时延要求进行检查;这里聚合消息记录使用的时延要求可与第一模式下使用的时延要求不同,具体可根据实际实施要求进行设定;
步骤34,校验成功则根据发布模式将第一消息记录写入消息记录存储区并获得对应的写入地址记为第一消息地址;
具体包括:步骤341,对消息记录存储区的有效记录结束地址是否已经达到消息记录存储区的结束地址进行判断;若有效记录结束地址未达到消息记录存储区的结束地址,则对剩余空间大小除以消息记录存储块大小sq商进行取整得到对应的剩余消息记录存储块数量;
这里,消息记录存储区的有效记录结束地址未达到消息记录存储区的结束地址说明消息记录存储区还有剩余空间可写入,但因为第一消息记录可能是一个聚合消息记录(长度大于消息记录存储块大小sq)所以还需通过后续步骤根据发布模式对剩余消息记录存储块数量是否满足第一消息记录进行确认;
步骤342,根据发布模式对剩余消息记录存储块数量是否满足第一消息记录进行确认;当发布模式为第一模式时,若剩余消息记录存储块数量大于0则确认剩余空间大小满足第一消息记录;当发布模式为第二模式时,若剩余消息记录存储块数量不小于第一消息记录的子消息记录数量则确认剩余空间大小满足第一消息记录;
这里,当发布模式为第一模式时说明第一消息记录只需使用一个消息记录存储块,此时只要剩余消息记录存储块数量大于0即可;当发布模式为第二模式时说明第一消息记录需要使用多个消息记录存储块,此时这要保证剩余消息记录存储块数量足够存储第一消息记录的所有子消息记录;
步骤343,当确认剩余空间大小满足第一消息记录时,对发布模式进行识别;当发布模式为第一模式时,以有效记录结束地址为起始写入地址将第一消息记录写入消息记录存储区并在写入成功后将有效记录结束地址更新为原有效记录结束地址与消息记录存储块大小sq相加的和;当发布模式为第二模式时,以有效记录结束地址为起始写入地址将第一消息记录的第一个子消息记录写入消息记录存储区并在写入成功后将有效记录结束地址更新为原有效记录结束地址与消息记录存储块大小sq相加的和,再以新的有效记录结束地址为起始写入地址将第一消息记录的第二个子消息记录写入消息记录存储区,依次类推,直到把第一消息记录的最后一个子消息记录写入消息记录存储区并对有效记录结束地址完成更新为止;
这里,当发布模式为第一模式时只需做一次消息记录存储块的写操作并同步更新有效记录结束地址;当发布模式为第二模式时要做多次消息记录存储块的写操作并在每次写操作完成后都同步更新有效记录结束地址;
步骤344,将第一消息记录的起始写入地址作为对应的第一消息地址;
步骤35,根据发布模式、第一消息记录和第一消息地址进行缓存记录构建生成对应的第一缓存记录;
具体包括:步骤351,根据发布模式和第一消息记录确定对应的消息数据长度;若发布模式为第一模式,则设置消息数据长度为消息记录存储块大小sq;若发布模式为第二模式,则将第一消息记录的子消息记录数量作为第一数量,并设置消息数据长度为消息记录存储块大小sq与第一数量的乘积;
这里,若发布模式为第一模式说明只写了一个消息记录存储块,所以消息数据长度被设为消息记录存储块大小sq;若发布模式为第二模式说明写了多个消息记录存储块,所以消息数据长度应为被设为多个消息记录存储块的总长度即消息记录存储块大小sq与第一消息记录的子消息记录数量即第一数量的乘积,此处的第一数量实际就是当前具体为聚合消息记录的第一消息记录对应的聚合数量N;
步骤352,将第一消息地址作为对应的消息地址;
步骤353,由消息数据长度和消息地址组成对应的第一缓存记录;
步骤36,将第一缓存记录写入环形缓存区并获得对应的缓存偏移地址记为第一偏移地址;
具体包括:以可写偏移位置地址为起始写入地址将第一缓存记录写入环形缓存区;写入成功后,将环形缓存区的可写偏移位置地址更新为下一个可写缓存记录存储块的起始地址;并将第一缓存记录的起始写入地址作为对应的第一偏移地址;
这里,如前文所述每次写完环形缓存区之后都要对可写偏移位置地址进行更新,更新到为下一个可写缓存记录存储块的起始地址;前文中已经对下一个可写缓存记录存储块的确认给出了详细说明,在起始位置地址到结束位置地址之间的缓存记录存储块尚未写满时,下一个可写缓存记录存储块的起始地址即更新后的可写偏移位置地址为原可写偏移位置地址与缓存记录存储块大小sr相加的和;在起始位置地址到结束位置地址之间的缓存记录存储块刚写满即当前可写偏移位置地址与结束位置地址第一次相等时,下一个可写缓存记录存储块的起始地址即更新后的可写偏移位置地址会第一次循环到起始位置地址;在新的一轮循环写开始之后且新的一轮循环写尚未写满时,下一个可写缓存记录存储块的起始地址即更新后的可写偏移位置地址为原可写偏移位置地址与缓存记录存储块大小sr相加的和;在新的一轮循环写开始之后且新的一轮循环刚写满即当前可写偏移位置地址再次与结束位置地址相等时,下一个可写缓存记录存储块的起始地址即更新后的可写偏移位置地址又再次循环到起始位置地址;如此循环往复;
需要说明的是,由前文中说明的对环形缓存区四个特征参数(起始位置地址、结束位置地址、可读偏移位置地址和可写偏移位置地址)的设置规则可知,每完成一次缓存记录的写操作不但要更新可写偏移位置还要更新可读偏移位置使之始终指向环形缓存区中最旧的缓存记录所在的缓存记录存储块的起始地址,本发明实施例基于更新后的可写偏移位置地址对可读偏移位置地址进行更新:在更新后的可写偏移位置地址尚未第一次循环到起始位置地址之前,设置可读偏移位置地址为起始位置地址;在更新后的可写偏移位置地址第一次循环到起始位置地址之后,则设置可读偏移位置地址为更新后的可写偏移位置地址;
步骤37,根据第一消息地址和第一偏移地址进行哈希表键值对构建生成对应的第一键值对;
具体包括:将第一消息地址作为对应的关键字名称,将第一偏移地址作为对应的关键字属性;并由关键字名称和关键字属性组成对应的第一键值对;
这里,第一消息地址即一个单独的消息记录或一个由多个子消息记录构成的聚合消息记录在消息记录存储区中的起始存储地址,第一偏移地址则是这个单独消息记录或这个聚合消息记录在环形缓存区中的起始存储地址,以第一消息地址为关键字名称、以第一偏移地址为关键字属性就可得到对应这个单独消息记录或这个聚合消息记录的键值对即第一键值对;
步骤38,将第一键值对写入哈希表存储区;
具体包括:对哈希表存储区的有效键值对结束地址是否已经达到哈希表存储区的结束地址进行判断;若未达到则以有效键值对结束地址为起始写入地址将第一键值对写入到哈希表存储区中;写入成功后,将有效键值对结束地址更新为原有效键值对结束地址与键值对存储块大小sh相加的和;
这里,哈希表存储区的有效键值对结束地址未达到哈希表存储区的结束地址说明哈希表存储区还有剩余空间可写入,写操作成功后需要同步更新有效键值对结束地址;
步骤39,写入成功则向当前数据生产模块回发消息发布成功回执。
通过步骤3异步通信模块的消息发布处理过程,自动驾驶系统内部各个数据生产模块的数据收发单元就无需向其各自的下游模块保证大数据量的同步通信,而只需将与生产数据相关的标识信息诸如消息标识转发到下游模块告知进行异步订阅即可。
步骤4,异步通信模块在接收到任一数据消费模块发送的消息订阅指令时,从指令中提取出订阅消息模块名称和订阅消息标识;并根据订阅消息模块名称和订阅消息标识查询哈希表存储区得到对应的第二偏移地址;并根据第二偏移地址从环形缓存区读取对应的第二缓存记录;并根据第二缓存记录从消息记录存储区读取对应的第二消息记录;并将第二消息记录向当前数据消费模块回发;
具体包括:步骤41,异步通信模块在接收到任一数据消费模块发送的消息订阅指令时,从指令中提取出订阅消息模块名称和订阅消息标识;
步骤42,根据订阅消息模块名称和订阅消息标识查询哈希表存储区得到对应的第二偏移地址;
具体包括:对哈希表存储区中处于有效键值对结束地址之前的各个键值对进行轮询;并将当前被轮询的键值对作为当前键值对;并将当前键值对的关键字名称指向的消息记录存储区的存储地址作为当前消息地址;并由当前消息地址加上预设的消息标识偏移量得到对应的当前消息标识地址;并在消息记录存储区中,从当前消息地址开始读取长度为预设的模块名称数据长度的一段连续存储数据作为对应的当前模块名称,从当前消息标识地址开始读取长度为预设的消息标识数据长度的一段连续存储数据作为对应的当前消息标识;并对当前模块名称和当前消息标识是否与订阅消息模块名称和订阅消息标识全匹配进行确认;若确认不是全匹配则转至下一个键值对继续轮询直到最后一个键值对轮询结束为止;若确认全匹配则停止轮询并将当前键值对的关键字属性提取出来作为对应的第二偏移地址;
这里,每个键值对中关键字名称存储的实际是消息记录存储区中一个消息记录存储块的起始地址,因为每个消息记录存储块存储的消息记录格式是固定的:模块名称+消息标识+消息长度+消息时间戳+消息体+变长无效数据区,且模块名称、消息标识、消息长度、消息时间戳的长度也都是固定的,所以消息标识偏移量实际就是模块名称数据长度,从起始地址开始读取模块名称数据长度的连续数据就可得到模块名称,从起始地址+模块名称数据长度的位置开始读取消息标识数据长度的连续数据就可得到消息标识;
需要说明的是,这里采用同步比对模块名称和消息标识的方式进行查表是因为自动驾驶系统的各个数据生产模块在生产数据时会为当前系统启动周期内产生的每个生产数据分配一个唯一的生产数据标识即消息标识,但不一定全系统所有数据生产模块的生产数据标识都能确保唯一;反之,如果自动驾驶系统能够在当前系统启动周期内确保所有数据生产模块的生产数据标识唯一,那么步骤41中数据消费模块进行消息查询时就只需提交订阅消息标识,对应的当前步骤42中也只需在轮询时只对当前消息标识进行获取并只对当前消息标识是否与订阅消息标识匹配进行确认;
步骤43,根据第二偏移地址从环形缓存区读取对应的第二缓存记录;
具体包括:在环形缓存区中从第二偏移地址开始读取长度为缓存记录存储块大小sr的一段连续存储数据作为对应的第二缓存记录;
这里,如前文所述环形缓存区中存储的缓存记录都是定长的,长度就是缓存记录存储块大小sr,所以从第二偏移地址开始读取长度为缓存记录存储块大小sr的一段连续存储数据就能获得一个完整的缓存记录即第二缓存记录;
步骤44,根据第二缓存记录从消息记录存储区读取对应的第二消息记录;
具体包括:步骤441,将第二缓存记录的消息数据长度作为第一数据长度,并将第二缓存记录的消息地址作为第一读取地址;
这里,由前文可知,第二缓存记录中包括消息数据长度和消息地址;
步骤442,在消息记录存储区中从第一读取地址开始读取长度为第一数据长度的一段连续存储数据作为第一数据;
这里,读出来的第一数据可能是一个单独的消息记录对应的单个消息记录存储块内容,也可能是由一个聚合消息记录对应的多个消息记录存储块构成的大数据块;所以需要后续步骤根据第一数据长度来做消息记录的提取;
步骤443,若第一数据长度与消息记录存储块大小sq相等则从第一数据中提取出消息长度,并将第一数据中靠前的长度为消息长度的连续数据提取出来对应的第二消息记录;
这里,若第一数据长度与消息记录存储块大小sq相等说明第一数据是一个单独的消息记录存储块;由前文可知消息记录存储块的数据存储格式为:模块名称+消息标识+消息长度+消息时间戳+消息体+变长无效数据区,其中可能包括数据长度不为0的变长无效数据区;为消除变长无效数据区获得真实的消息记录(模块名称+消息标识+消息长度+消息时间戳+消息体)则需要对第一数据进行一次有效数据提取;提取时,首先根据消息长度的固定偏移及固定数据长度从第一数据中获得消息长度的内容,因为消息长度指的是整个消息记录(模块名称+消息标识+消息长度+消息时间戳+消息体)的长度,所以在获得消息长度之后将第一数据中靠前的长度为消息长度的连续数据提取出来就得到了不带变长无效数据区的真实消息记录即第二消息记录;
步骤444,若第一数据长度大于消息记录存储块大小sq,则按消息记录存储块大小sq将第一数据顺序切分成多个等长的第二数据;并将各个第二数据的消息长度提取出来作为对应的第二数据长度;并将各个第二数据中靠前的长度为对应的第二数据长度的连续数据提取出来对应的第一子消息记录;并对得到的多个第一子消息记录进行排序从而得到对应的第二消息记录;
这里,若第一数据长度大于消息记录存储块大小sq说明第一数据是一个聚合了多个消息记录存储块的大数据块;因为每个消息记录存储块等长都为消息记录存储块大小sq,所以可基于消息记录存储块大小sq将第一数据顺序切分成多个小数据块即多个第二数据;每个第二数据实际对应一个消息记录存储块,因此每个第二数据也有一个对应的消息长度即第二数据长度;基于对应的第二数据长度就可从各个第二数据中提取出对应的真实消息记录即第一子消息记录;在得到所有第一子消息记录之后,按第二数据的排列顺序对第一子消息记录进行排序就可得到一个实际为聚合消息记录的第二消息记录;
步骤45,将第二消息记录向当前数据消费模块回发。
通过步骤4异步通信模块的消息订阅处理过程,自动驾驶系统内部各个数据消费模块在获得上游模块发送的消息标识之后就可基于上游模块名称和消息标识从异步通信模块处订阅对应的消息记录,因为消息订阅没有同步要求,所以各个数据消费模块可以更好的处理内部任务的优先级,从而使得模块内部工作负载均衡度更稳定。各个模块内部工作负载均衡度越稳定则整体负载的实时峰值或平均峰值就会越低,整体负载的实时峰值或平均峰值得到控制则自动驾驶系统发生系统崩溃的几率就会下降,从而使得整体稳健性得到有效提升。
需要补充的是,本发明实施例的异步通信模块在自动驾驶系统正常关机时,还会根据预设制定的存储区备份模式对消息记录存储区、环形缓存区和哈希表存储区进行处理,具体为:对存储区备份模式进行识别;当存储区备份模式为无备份模式时,对三个存储区进行删除从而将内存或硬盘上由三个存储区占用的存储空间释放;当存储区备份模式为本地备份模式时,将三个存储区的内容存入本地硬盘指定存储区进行备份,并在备份结束时对三个存储区进行删除;当存储区备份模式为移动存储介质备份模式时,将三个存储区的内容存入指定的移动存储介质进行备份,并在备份结束时对三个存储区进行删除;当存储区备份模式为远程备份模式时,按指定的远程网络接口将三个存储区的内容发送至远程服务器进行备份,并在备份结束时对三个存储区进行删除。
还需要补充的是,如前文所述本发明实施例异步通信模块在自动驾驶系统的异步通信模块在系统启动时会对消息记录存储区、环形缓存区和哈希表存储区进行初始化,常规情况下为保证数据读取效率会在初始化时为消息记录存储区、环形缓存区和哈希表存储区分配足够大的连续地址空间用于数据存储。但在现实情况中的一些极端条件下,也偶尔会出现消息记录存储区和哈希表存储区的剩余空间不足的情况,针对这种情况本发明实施例另外还给出对应的解决办法,即:在消息记录存储区或哈希表存储区的剩余空间耗尽时,将消息记录存储区或哈希表存储区的存储对象管理方式由原来的线性连续存储对象管理方式切换到类似环形缓存区的循环存储对象管理方式;为消息记录存储区或哈希表存储区配置四个特征参数(起始位置地址、结束位置地址、可读位置地址、可写位置地址);并设置起始位置地址和结束位置地址分别为消息记录存储区或哈希表存储区的第一个和最后一个消息记录存储块或键值对存储块的起始地址,并初始化可读位置地址和可写位置地址均为起始位置地址;并采用类似环形缓存区的缓存记录写方式执行对应的消息记录或键值对的写操作,并采用类似环形缓存区的可读位置地址更新方式更新消息记录存储区或哈希表存储区的可读位置地址,并在每次可写位置地址更新后设置可读位置地址与更新后的可写位置地址保持一致。
图3为本发明实施例二提供的一种电子设备的结构示意图。该电子设备可以为前述的终端设备或者服务器,也可以为与前述终端设备或者服务器连接的实现本发明实施例方法的终端设备或服务器。如图3所示,该电子设备可以包括:处理器301(例如CPU)、存储器302、收发器303;收发器303耦合至处理器301,处理器301控制收发器303的收发动作。存储器302中可以存储各种指令,以用于完成各种处理功能以及实现前述方法实施例描述的处理步骤。优选的,本发明实施例涉及的电子设备还包括:电源304、系统总线305以及通信端口306。系统总线305用于实现元件之间的通信连接。上述通信端口306用于电子设备与其他外设之间进行连接通信。
在图3中提到的系统总线305可以是外设部件互连标准(Peripheral ComponentInterconnect,PCI)总线或扩展工业标准结构(Extended Industry StandardArchitecture,EISA)总线等。该系统总线可以分为地址总线、数据总线、控制总线等。为便于表示,图3中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。通信接口用于实现数据库访问装置与其他设备(例如客户端、读写库和只读库)之间的通信。存储器可能包含随机存取存储器(Random Access Memory,RAM),也可能还包括非易失性存储器(Non-Volatile Memory),例如至少一个磁盘存储器。
上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)、图形处理器(Graphics Processing Unit,GPU)等;还可以是数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(FieldProgrammable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
需要说明的是,本发明实施例还提供一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述实施例中提供的方法和处理过程。
本发明实施例还提供一种运行指令的芯片,该芯片用于执行前述方法实施例描述的处理步骤。
本发明实施例提供了一种面向自动驾驶系统内部模块的消息发布-订阅处理方法、电子设备及计算机可读存储介质,在自动驾驶系统中增加一个异步通信模块,并将自动驾驶系统中发送数据的内部模块作为消息发布方即数据生产模块、将接收数据的内部模块作为消息订阅方即数据消费模块,并由异步通信模块创建对应的消息记录存储区、环形缓存区和哈希表存储区来处理数据生产模块和数据消费模块之间的消息发布与订阅查询的操作流程;在处理消息发布时,异步通信模块接收数据生产模块发送的生产数据并转换为对应的消息记录存入消息记录存储区,并基于当前消息记录的记录长度和存储地址在环形缓存区中构建对应的缓存记录,并基于当前消息记录存储地址和缓存记录偏移地址在哈希表存储区中构建对应的键值对,并在完成上述储存区操作之后确认消息发布成功向数据生产模块回发对应的发布成功回执;在处理订阅查询时,异步通信模块接收数据消费模块发送的订阅参数,并根据订阅参数对哈希表存储区的键值对进行比对获得对应的缓存记录偏移地址,并根据缓存记录偏移地址直接从环形缓存区中定向读出对应缓存记录中的消息记录存储地址和记录长度,并根据消息记录存储地址和记录长度直接从消息记录存储区中定向读出对应的消息记录,并将得到的消息记录作为订阅查询结果向数据消费模块发送。通过本发明,由异步通信模块为其他内部模块构建起了一种基于消息发布-订阅处理流程的异步数据通信机制;基于该异步数据通信机制,不但降低了各内部模块数据收发单元的同步传输压力、改善了通信阻塞状况、降低了数据丢失可能,还降低了各内部模块的实时工作负载、提高了各模块工作负载均衡度、降低了整体负载的实时峰值从而提高了自动驾驶系统的整体稳健性。
专业人员应该还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (16)
1.一种面向自动驾驶系统内部模块的消息发布-订阅处理方法,其特征在于,所述方法包括:
自动驾驶系统的异步通信模块在系统启动时,对消息记录存储区、环形缓存区和哈希表存储区进行初始化;
所述异步通信模块在所述初始化成功时,对所述自动驾驶系统的各个数据生产模块的消息发布指令进行侦听;并对所述自动驾驶系统的各个数据消费模块的消息订阅指令进行侦听;
所述异步通信模块在接收到任一所述数据生产模块发送的所述消息发布指令时,从指令中提取出发布模式;并根据所述发布模式接收当前数据生产模块发送的生产数据组成对应的第一消息记录;并根据所述发布模式对所述第一消息记录的时间戳进行校验;校验成功则根据所述发布模式将所述第一消息记录写入所述消息记录存储区并获得对应的写入地址记为第一消息地址;并根据所述发布模式、所述第一消息记录和所述第一消息地址进行缓存记录构建生成对应的第一缓存记录;并将所述第一缓存记录写入所述环形缓存区并获得对应的缓存偏移地址记为第一偏移地址;并根据所述第一消息地址和所述第一偏移地址进行哈希表键值对构建生成对应的第一键值对;并将所述第一键值对写入所述哈希表存储区;写入成功则向所述当前数据生产模块回发消息发布成功回执;
所述异步通信模块在接收到任一所述数据消费模块发送的所述消息订阅指令时,从指令中提取出订阅消息模块名称和订阅消息标识;并根据所述订阅消息模块名称和所述订阅消息标识查询所述哈希表存储区得到对应的第二偏移地址;并根据所述第二偏移地址从所述环形缓存区读取对应的第二缓存记录;并根据所述第二缓存记录从所述消息记录存储区读取对应的第二消息记录;并将所述第二消息记录向当前数据消费模块回发。
2.根据权利要求1所述的面向自动驾驶系统内部模块的消息发布-订阅处理方法,其特征在于,
所述数据生产模块至少包括超声波传感器模块、激光雷达传感器模块、毫米波传感器模块、惯性测量单元传感器模块、全球定位系统传感器模块、摄像头模块、车辆底盘模块、感知模块、预测模块、规划模块;
所述数据消费模块至少包括感知模块、预测模块、规划模块和控制模块。
3.根据权利要求1所述的面向自动驾驶系统内部模块的消息发布-订阅处理方法,其特征在于,
所述消息记录存储区存储多个消息记录;所述消息记录包括消息头和消息体;所述消息头包括模块名称、消息标识、消息长度和消息时间戳,所述消息长度为所述消息记录的数据长度;
所述环形缓存区存储多个缓存记录;所述缓存记录包括消息数据长度和消息地址;
所述哈希表存储区存储多个键值对;所述键值对由关键字名称和关键字属性组成。
4.根据权利要求3所述的面向自动驾驶系统内部模块的消息发布-订阅处理方法,其特征在于,所述对消息记录存储区、环形缓存区和哈希表存储区进行初始化,具体包括:
在系统存储空间,根据预设的消息记录、环形缓存和哈希表存储区大小分配对应的内存连续地址空间或硬盘连续地址空间作为所述消息记录存储区、所述环形缓存区和所述哈希表存储区;
将所述消息记录存储区按预设的消息记录存储块大小sq顺序划分成多个消息记录存储块;并为所述消息记录存储区初始化对应的有效记录结束地址;所述有效记录结束地址初始化为第一个所述消息记录存储块的起始地址;
将所述环形缓存区按预设的缓存记录存储块大小sr顺序划分成多个缓存记录存储块;并为所述环形缓存区初始化对应的起始位置地址、结束位置地址、可读偏移位置地址和可写偏移位置地址;所述起始位置地址和所述可写偏移位置地址均默认初始化为第一个所述缓存记录存储块的起始地址;所述结束位置地址默认初始化为最后一个所述缓存记录存储块的起始地址;所述可读偏移位置地址默认初始化为空;
将所述哈希表存储区按预设的键值对存储块大小sh顺序划分成多个键值对存储块;并为所述消息记录存储区初始化对应的有效键值对结束地址;所述有效键值对结束地址初始化为第一个所述键值对存储块的起始地址。
5.根据权利要求3所述的面向自动驾驶系统内部模块的消息发布-订阅处理方法,其特征在于,所述根据所述发布模式接收当前数据生产模块发送的生产数据组成对应的第一消息记录,具体包括:
对所述发布模式进行识别;
当所述发布模式为第一模式时,接收所述当前数据生产模块发送的生产数据;并从所述生产数据中提取出生产数据长度作为对应的所述消息长度,提取出数据生产模块名称作为对应的所述模块名称,提取出生产数据标识作为对应的所述消息标识,提取出生产数据时间戳作为对应的所述消息时间戳,提取出生产数据包作为对应的所述消息体;并由所述模块名称、所述消息标识、所述消息长度和所述消息时间戳组成对应的所述消息头;并由所述消息头和所述消息体组成对应的所述第一消息记录;
当所述发布模式为第二模式时,从所述消息发布指令中提取出聚合数量N;并对所述当前数据生产模块发送的N个所述生产数据进行接收;每接收一个所述生产数据,就从当前生产数据中提取出所述生产数据长度、所述数据生产模块名称、所述生产数据标识、所述生产数据时间戳和所述生产数据包作为对应的所述消息长度、所述模块名称、所述消息标识、所述消息时间戳和所述消息体,并由得到的所述模块名称、所述消息标识、所述消息长度和所述消息时间戳组成对应的所述消息头,并由所述消息头和所述消息体组成对应的子消息记录;并由得到的N个所述子消息记录组成对应的所述第一消息记录。
6.根据权利要求5所述的面向自动驾驶系统内部模块的消息发布-订阅处理方法,其特征在于,所述根据所述发布模式对所述第一消息记录的时间戳进行校验,具体包括:
对所述发布模式进行识别;
当所述发布模式为第一模式时,从所述第一消息记录中提取出所述消息时间戳;并对所述消息时间戳与当前系统时间的时间差进行计算生成对应的第一时间差;若所述第一时间差满足预设的时延要求则确认所述校验成功;
当所述发布模式为第二模式时,对所述第一消息记录中各个所述子消息记录的所述消息时间戳与当前系统时间的时间差进行计算从而得到多个子记录时间差;若所有所述子记录时间差满足预设的时延要求则确认所述校验成功。
7.根据权利要求4所述的面向自动驾驶系统内部模块的消息发布-订阅处理方法,其特征在于,所述根据所述发布模式将所述第一消息记录写入所述消息记录存储区并获得对应的写入地址记为第一消息地址,具体包括:
对所述消息记录存储区的所述有效记录结束地址是否已经达到所述消息记录存储区的结束地址进行判断;若所述有效记录结束地址未达到所述消息记录存储区的结束地址,则对剩余空间大小除以所述消息记录存储块大小sq商进行取整得到对应的剩余消息记录存储块数量;
根据所述发布模式对所述剩余消息记录存储块数量是否满足所述第一消息记录进行确认;当所述发布模式为第一模式时,若所述剩余消息记录存储块数量大于0则确认所述剩余空间大小满足所述第一消息记录;当所述发布模式为第二模式时,若所述剩余消息记录存储块数量不小于所述第一消息记录的子消息记录数量则确认所述剩余空间大小满足所述第一消息记录;
当确认所述剩余空间大小满足所述第一消息记录时,对发布模式进行识别;当所述发布模式为第一模式时,以所述有效记录结束地址为起始写入地址将所述第一消息记录写入所述消息记录存储区并在写入成功后将所述有效记录结束地址更新为原有效记录结束地址与所述消息记录存储块大小sq相加的和;当所述发布模式为第二模式时,以所述有效记录结束地址为起始写入地址将所述第一消息记录的第一个子消息记录写入所述消息记录存储区并在写入成功后将所述有效记录结束地址更新为原有效记录结束地址与所述消息记录存储块大小sq相加的和,再以新的所述有效记录结束地址为起始写入地址将所述第一消息记录的第二个子消息记录写入所述消息记录存储区,依次类推,直到把所述第一消息记录的最后一个子消息记录写入所述消息记录存储区并对所述有效记录结束地址完成更新为止;
将所述第一消息记录的起始写入地址作为对应的所述第一消息地址。
8.根据权利要求4所述的面向自动驾驶系统内部模块的消息发布-订阅处理方法,其特征在于,所述根据所述发布模式、所述第一消息记录和所述第一消息地址进行缓存记录构建生成对应的第一缓存记录,具体包括:
根据所述发布模式和所述第一消息记录确定对应的所述消息数据长度;若所述发布模式为第一模式,则设置所述消息数据长度为所述消息记录存储块大小sq;若所述发布模式为第二模式,则将所述第一消息记录的子消息记录数量作为第一数量,并设置所述消息数据长度为所述消息记录存储块大小sq与第一数量的乘积;
将所述第一消息地址作为对应的所述消息地址;
由所述消息数据长度和所述消息地址组成对应的所述第一缓存记录。
9.根据权利要求4所述的面向自动驾驶系统内部模块的消息发布-订阅处理方法,其特征在于,所述将所述第一缓存记录写入所述环形缓存区并获得对应的缓存偏移地址记为第一偏移地址,具体包括:
以所述可写偏移位置地址为起始写入地址将所述第一缓存记录写入所述环形缓存区;写入成功后,将所述环形缓存区的所述可写偏移位置地址更新为下一个可写缓存记录存储块的起始地址;并将所述第一缓存记录的起始写入地址作为对应的所述第一偏移地址。
10.根据权利要求3所述的面向自动驾驶系统内部模块的消息发布-订阅处理方法,其特征在于,所述根据所述第一消息地址和所述第一偏移地址进行哈希表键值对构建生成对应的第一键值对,具体包括:
将所述第一消息地址作为对应的所述关键字名称,将所述第一偏移地址作为对应的所述关键字属性;并由所述关键字名称和所述关键字属性组成对应的所述第一键值对。
11.根据权利要求4所述的面向自动驾驶系统内部模块的消息发布-订阅处理方法,其特征在于,所述将所述第一键值对写入所述哈希表存储区,具体包括:
对所述哈希表存储区的所述有效键值对结束地址是否已经达到所述哈希表存储区的结束地址进行判断;若未达到则以所述有效键值对结束地址为起始写入地址将所述第一键值对写入到所述哈希表存储区中;写入成功后,将所述有效键值对结束地址更新为原有效键值对结束地址与所述键值对存储块大小sh相加的和。
12.根据权利要求4所述的面向自动驾驶系统内部模块的消息发布-订阅处理方法,其特征在于,所述根据所述订阅消息模块名称和所述订阅消息标识查询所述哈希表存储区得到对应的第二偏移地址,具体包括:
对所述哈希表存储区中处于所述有效键值对结束地址之前的各个所述键值对进行轮询;并将当前被轮询的所述键值对作为当前键值对;并将所述当前键值对的所述关键字名称指向的所述消息记录存储区的存储地址作为当前消息地址;并由所述当前消息地址加上预设的消息标识偏移量得到对应的当前消息标识地址;并在所述消息记录存储区中,从所述当前消息地址开始读取长度为预设的模块名称数据长度的一段连续存储数据作为对应的当前模块名称,从所述当前消息标识地址开始读取长度为预设的消息标识数据长度的一段连续存储数据作为对应的当前消息标识;并对所述当前模块名称和所述当前消息标识是否与所述订阅消息模块名称和所述订阅消息标识全匹配进行确认;若确认不是全匹配则转至下一个所述键值对继续轮询直到最后一个所述键值对轮询结束为止;若确认全匹配则停止轮询并将所述当前键值对的所述关键字属性提取出来作为对应的所述第二偏移地址。
13.根据权利要求4所述的面向自动驾驶系统内部模块的消息发布-订阅处理方法,其特征在于,所述根据所述第二偏移地址从所述环形缓存区读取对应的第二缓存记录,具体包括:
在所述环形缓存区中从所述第二偏移地址开始读取长度为所述缓存记录存储块大小sr的一段连续存储数据作为对应的所述第二缓存记录。
14.根据权利要求4所述的面向自动驾驶系统内部模块的消息发布-订阅处理方法,其特征在于,所述根据所述第二缓存记录从所述消息记录存储区读取对应的第二消息记录,具体包括:
将所述第二缓存记录的所述消息数据长度作为第一数据长度,并将所述第二缓存记录的所述消息地址作为第一读取地址;
在所述消息记录存储区中从所述第一读取地址开始读取长度为所述第一数据长度的一段连续存储数据作为第一数据;
若所述第一数据长度与所述消息记录存储块大小sq相等则从所述第一数据中提取出所述消息长度,并将所述第一数据中靠前的长度为所述消息长度的连续数据提取出来对应的所述第二消息记录;
若所述第一数据长度大于所述消息记录存储块大小sq,则按所述消息记录存储块大小sq将所述第一数据顺序切分成多个等长的第二数据;并将各个所述第二数据的所述消息长度提取出来作为对应的第二数据长度;并将各个所述第二数据中靠前的长度为对应的所述第二数据长度的连续数据提取出来对应的第一子消息记录;并对得到的多个所述第一子消息记录进行排序从而得到对应的所述第二消息记录。
15.一种电子设备,其特征在于,包括:存储器、处理器和收发器;
所述处理器用于与所述存储器耦合,读取并执行所述存储器中的指令,以实现权利要求1-14任一项所述的方法步骤;
所述收发器与所述处理器耦合,由所述处理器控制所述收发器进行消息收发。
16.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机指令,当所述计算机指令被计算机执行时,使得所述计算机执行权利要求1-14任一项所述的方法的指令。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210676004.6A CN115080268B (zh) | 2022-06-15 | 2022-06-15 | 面向自动驾驶系统内部模块的消息发布-订阅处理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210676004.6A CN115080268B (zh) | 2022-06-15 | 2022-06-15 | 面向自动驾驶系统内部模块的消息发布-订阅处理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115080268A CN115080268A (zh) | 2022-09-20 |
CN115080268B true CN115080268B (zh) | 2024-03-26 |
Family
ID=83253715
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210676004.6A Active CN115080268B (zh) | 2022-06-15 | 2022-06-15 | 面向自动驾驶系统内部模块的消息发布-订阅处理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115080268B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6167435A (en) * | 1998-10-30 | 2000-12-26 | Netcreations, Inc. | Double opt-in™ method and system for verifying subscriptions to information distribution services |
CN104092767A (zh) * | 2014-07-21 | 2014-10-08 | 北京邮电大学 | 一种增加消息队列模型的发布/订阅系统及其工作方法 |
CN109740038A (zh) * | 2019-01-02 | 2019-05-10 | 安徽芃睿科技有限公司 | 网络数据分布式采集系统及方法 |
CN112632069A (zh) * | 2020-12-22 | 2021-04-09 | 中科驭数(北京)科技有限公司 | 哈希表数据存储管理方法、装置、介质和电子设备 |
CN114327280A (zh) * | 2021-12-29 | 2022-04-12 | 以萨技术股份有限公司 | 一种基于冷热分离存储的消息存储方法及系统 |
-
2022
- 2022-06-15 CN CN202210676004.6A patent/CN115080268B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6167435A (en) * | 1998-10-30 | 2000-12-26 | Netcreations, Inc. | Double opt-in™ method and system for verifying subscriptions to information distribution services |
CN104092767A (zh) * | 2014-07-21 | 2014-10-08 | 北京邮电大学 | 一种增加消息队列模型的发布/订阅系统及其工作方法 |
CN109740038A (zh) * | 2019-01-02 | 2019-05-10 | 安徽芃睿科技有限公司 | 网络数据分布式采集系统及方法 |
CN112632069A (zh) * | 2020-12-22 | 2021-04-09 | 中科驭数(北京)科技有限公司 | 哈希表数据存储管理方法、装置、介质和电子设备 |
CN114327280A (zh) * | 2021-12-29 | 2022-04-12 | 以萨技术股份有限公司 | 一种基于冷热分离存储的消息存储方法及系统 |
Non-Patent Citations (2)
Title |
---|
MQTT数据交换协议的分析与优化;李娜;陈福;朱建明;黄勇峰;张艳梅;;网络空间安全;20190925(第09期);全文 * |
动态称重控制器OPC驱动程序设计;鹿剑;周俊;;现代电子技术;20070325(第06期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN115080268A (zh) | 2022-09-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110222091A (zh) | 一种海量数据实时统计分析方法 | |
CN110413650B (zh) | 一种业务数据的处理方法、装置、设备和存储介质 | |
US11190620B2 (en) | Methods and electronic devices for data transmission and reception | |
CN109787884B (zh) | 一种消息推送方法和装置 | |
CN114327280A (zh) | 一种基于冷热分离存储的消息存储方法及系统 | |
CN115964319A (zh) | 远程直接内存访问的数据处理方法及相关产品 | |
CN113971138A (zh) | 一种数据访问方法及相关设备 | |
CN113868160A (zh) | 一种数据查询方法、装置及相关设备 | |
CN113641604A (zh) | 一种数据传输方法及系统 | |
CN110912805B (zh) | 消息读取状态的同步方法、终端、服务端及系统 | |
CN114006946B (zh) | 同质资源请求的处理方法、装置、设备及存储介质 | |
CN104317716A (zh) | 分布式节点间的数据传输方法及分布式节点设备 | |
CN110069533B (zh) | 一种基于区块链的事件订阅方法及装置 | |
CN115080268B (zh) | 面向自动驾驶系统内部模块的消息发布-订阅处理方法 | |
JP7461468B2 (ja) | トランザクション管理方法およびシステム | |
CN115658337B (zh) | 一种消息全生命周期处理方法及分布式消息系统 | |
CN116595014A (zh) | 一种已读回执的存储系统、方法、装置及可读存储介质 | |
CN116107952A (zh) | 多核异构通信方法以及车辆 | |
CN111209263A (zh) | 数据存储方法、装置、设备及存储介质 | |
CN116226178A (zh) | 一种数据查询方法、装置、存储介质及电子装置 | |
CN105912477B (zh) | 一种目录读取的方法、装置及系统 | |
CN115550380A (zh) | 数据同步方法、装置、设备及存储介质 | |
CN115576661A (zh) | 数据处理系统、方法和控制器 | |
CN114691026A (zh) | 一种数据访问方法及相关设备 | |
CN113032820A (zh) | 文件存储方法、访问方法、装置、设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |