CN116932250A - 一种统一不同自动驾驶消息中间件的消息自定义、生成和序列化方法 - Google Patents
一种统一不同自动驾驶消息中间件的消息自定义、生成和序列化方法 Download PDFInfo
- Publication number
- CN116932250A CN116932250A CN202310970004.1A CN202310970004A CN116932250A CN 116932250 A CN116932250 A CN 116932250A CN 202310970004 A CN202310970004 A CN 202310970004A CN 116932250 A CN116932250 A CN 116932250A
- Authority
- CN
- China
- Prior art keywords
- file
- message
- data
- huramessage
- hura
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 28
- 241000405425 Hura Species 0.000 claims abstract description 37
- 230000006870 function Effects 0.000 claims description 14
- 238000012545 processing Methods 0.000 claims description 7
- 101000871498 Homo sapiens m7GpppX diphosphatase Proteins 0.000 claims description 3
- MIQYPPGTNIFAPO-CABCVRRESA-N PS(6:0/6:0) Chemical compound CCCCCC(=O)OC[C@@H](OC(=O)CCCCC)COP(O)(=O)OC[C@H](N)C(O)=O MIQYPPGTNIFAPO-CABCVRRESA-N 0.000 claims description 3
- 102100033718 m7GpppX diphosphatase Human genes 0.000 claims description 3
- 238000010276 construction Methods 0.000 claims description 2
- 238000004891 communication Methods 0.000 abstract description 17
- 238000005336 cracking Methods 0.000 abstract description 3
- 238000013509 system migration Methods 0.000 abstract description 3
- 230000005540 biological transmission Effects 0.000 abstract description 2
- 238000010586 diagram Methods 0.000 description 4
- 230000006978 adaptation Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000013508 migration Methods 0.000 description 1
- 230000005012 migration Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000008447 perception Effects 0.000 description 1
- 238000011160 research Methods 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
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/427—Parsing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
-
- 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/547—Messaging middleware
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明使用.hura后缀的文本文件定义消息,即数据类型,定义好的hura文件通过程序解析后,自动生成对应的CPP头文件,头文件内包含了对应的数据类型class,该class的成员变量与hura文件的内容一一对应,同时成员函数包含了序列化encode和反序列化decode函数。在自动驾驶软件源代码中引用生成的头文件,使用ROS等中间件发布/订阅接口时传输中间件内置的数组数据类型,该内置的数组数据类型数据使用生成的数据类型class的encode/decode函数填充或解析,由于数据在传输过程以二进制数组的形式存在,第三方无法获悉数据代表的意义。本发明能针对不同自动驾驶通信中间件,减少系统迁移产生的工作量,同时特定的数据序列化方法杜绝了数据泄露和破解的风险。
Description
技术领域
本发明涉及一种数据处理技术领域,特别涉及一种针对不同自动驾驶系统通信中间件的统一的消息定义、生成和序列化的方法。
背景技术
目前自动驾驶技术在世界范围内飞速发展,是学术界和工业界的前沿研究方向。自动驾驶系统一般可分为五大模块:地图模块、感知模块、定位模块、决策规划模块、控制模块。五大模块之间存在多种、数据量庞大的数据交换,通信中间件提供了模块之间的数据交换接口和通道。
业界主流的通信中间件有ROS、DDS等,大多采用订阅/发布体系的通信模式,并且各自拥有不同的消息数据定义方法,这对于同一自动驾驶软件系统在不同的通信中间件之间迁移来说存在非常大的挑战和巨大的适配工作量,不利于自动驾驶软件系统针对不同通信中间件要求的工程化落地。另外,像ROS这类开源的通信中间件,提供丰富的公共消息类型,采用了这些公共消息类型的自动驾驶系统存在消息明文暴露的风险,给黑客或不法分子提供了伪造消息攻击系统的渠道。
发明内容
本发明能针对不同自动驾驶通信中间件提供统一的消息定义、生成和序列化方法,减少系统迁移产生的工作量,同时特定的数据序列化方法杜绝了数据泄露和破解的风险。其具体技术方案如下所述:
作为第一方面,本发明提供了一种统一不同自动驾驶系统通信中间件的消息定义、生成和序列化的方法,所述方法大致流程如下步骤:
S1,自定义hura消息文件example.hura(此处的example仅为一个举例,并非对文件名进行限定);
S2,定义ros msg文件为HuraMessage.msg,或定义dds idl文件为HuraMessage.idl;
S3,解析example.hura文件并生成对应hura消息cpp头文件example.hpp;
S4,解析HuraMessage.msg或HuraMessage.idl文件并生成对应ros/dds消息cpp头文件HuraMessage.hpp;
S5,源代码引用生成的hura消息cpp头文件example.hpp和ros/dds消息头文件HuraMessage.hpp进行发布消息/订阅消息;
其中,所述S1与S2可同时进行,所述S3与S4可同时进行。
基于上述基础,本发明进一步地,所述S1中的hura消息文件为文本文件,支持的变量类型有boolean、byte、int8_t、int16_t、int32_t、int64_t、float、double、string;自定义的消息类型可嵌套引用。
基于上述基础,本发明进一步地,所述S2中的消息文件HuraMessage.msg/HuraMessage.idl的内部数据类型为uint8数组。
基于上述基础,本发明进一步地,所述S3中的hura文件有package,message关键字,package关键字后跟的字符串会被解析成cpp的命名空间,message关键字声明的数据结构解析后生成对应的cpp类,该cpp类的公有成员变量包含了声明的数据结构的所有成员,且实现了相应的序列化encode和反序列化decode函数;其中序列化的规则为按照变量声明的顺序依次按大端字节序紧凑排布填充为二进制数组,反序列化规则反之。
基于上述基础,本发明进一步地,使用构建工具catkin/opendds_idl将所述S4中的HuraMessage.msg/HuraMessage.idl文件解析并生成对应ros/dds消息cpp头文件HuraMessage.hpp。
基于上述基础,本发明进一步地,所述S5中的订阅消息为:
在cpp源码文件中,引用ros msg文件或dds idl文件,和自定义hura文件生成的cpp头文件;
实例化一个::ros::Subscriber类型或OpenDDS::DCPS::DDSTraits<HuraMessage>::DataReaderType类型的subscriber,subscriber传输的数据类型为HuraMessage;
在subscriber的回调函数中,将传入的HuraMessage类型实例message的data拷贝到uint8类型的数组buffer,实例化自定义的消息数据类型example,将buffer传入example的decode方法中,buffer的数据将被解析并对example的成员变量赋值。
基于上述基础,本发明进一步地,所述S5中的发布消息为:
在cpp源码文件中,引用ros msg文件或dds idl文件,和自定义hura文件生成的cpp头文件,实例化自定义的消息数据类型example并赋值,然后调用该类型实例example的encode函数将要传输的消息实例序列化成二进制数据存放于uint8类型的数组buffer中;
实例化一个::ros::Publisher类型或OpenDDS::DCPS::DDSTraits<HuraMessage>::DataWriterType类型的publisher,publisher传输的数据类型为HuraMessage;
将buffer的数据拷贝给HuraMessage类型实例message的成员变量data;
publisher调用publish方法发送message。
作为第二方面,本发明提供了一种数据处理装置,所述数据处理装置包括中央处理器、可读存储器、数据总线。所述中央处理器同所述可读存储器通过数据总线进行数据连接,所述中央处理器根据操作指令对可读存储器进行控制,从而执行上述的任意一个方法。
本发明的有益效果是:本发明能针对不同自动驾驶通信中间件提供统一的消息定义、生成和序列化方法,减少系统迁移产生的工作量,同时特定的数据序列化方法杜绝了数据泄露和破解的风险。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其它的附图。
图1为本发明的方法流程示意图;
图2为本发明的hura消息文件的消息定义格式示例图;
图3为本发明的自定义的消息类型可嵌套引用的引用规则示例图;
图4为本发明的序列化encode函数示例图;
图5为本发明的反序列化decode函数示例图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
在本具体实施例的描述中,需要说明的是,术语“中心”、“上”、“下”、“左”、“右”、“竖直”、“水平”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,或者是该发明产品使用时惯常摆放的方位或位置关系,仅是为了便于描述发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对发明的限制。此外,术语“第一”、“第二”、“第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
此外,术语“水平”、“竖直”、“悬垂”等术语并不表示要求部件绝对水平或悬垂,而是可以稍微倾斜。如“水平”仅仅是指其方向相对“竖直”而言更加水平,并不是表示该结构一定要完全水平,而是可以稍微倾斜。
在本具体实施例的描述中,还需要说明的是,除非另有明确的规定和限定,术语“设置”、“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本具体实施例中的具体含义。
本发明使用.hura后缀的文本文件定义消息,即数据类型,定义好的hura文件需通过hura_gen代码生成器生成CPP头文件,hura_gen识别解析hura文件的关键字“package”、“message”,将“package”后的字符串转换为C++的命名空间, 将“message”后的字符串转换为C++的class, 该class的成员变量与“message”包含的元素一一对应,同时成员函数包含了序列化encode和反序列化decode函数。在自动驾驶软件源代码中引用生成的cpp头文件,使用ros/dds等中间件发布/订阅接口时传输中间件内置的数组数据类型, 该内置的数组数据类型数据使用生成的数据类型class的encode/decode函数填充或解析,由于数据在传输过程以二进制数组的形式存在,第三方无法获悉数据代表的意义。
因此本实施例以使用ROS消息中间件为例,其它以发布/订阅通信体系的中间件同之。另外,自定义hura消息文件以example.hura为例,ros消息以HuraMessage.msg为例说明,其中ros消息的定义规则和解析生成方法见官方文档,这里不做特别说明。
本发明的实现主要包含5大步骤:
1.自定义hura消息文件example.hura;
2.定义ros msg文件HuraMessage.msg;
3.解析hura文件并生成对应hura消息cpp头文件example.hpp;
4.解析HuraMessage.msg文件并生成对应ros消息cpp头文件HuraMessage.hpp;
5.引用生成的hura消息cpp头文件example.hpp和ros消息头文件HuraMessage.hpp发布消息或订阅消息。
1)自定义hura消息文件
hura消息文件为文本文件,支持的变量类型有boolean、byte、int8_t、int16_t、int32_t、int64_t、float、double、string。消息定义格式如图2所示。自定义的消息类型可嵌套引用,引用规则如图3所示。
2) 定义内部数据类型为uint8数组的ros msg文件HuraMessage.msg,内容为:unit8[] data。
3)解析hura文件并生成对应cpp头文件
如图2所示,hura文件有package,message关键字,package关键字后跟的字符串会被解析成cpp的命名空间,如hura.meta.common代表命名空间hura::meta::common,message关键字声明的数据结构解析后生成对应的cpp类,该cpp类的公有成员变量包含了声明的数据结构的所有成员,且实现了相应的序列化encode和反序列化decode函数,如图4和图5所示。
其中序列化的规则为按照变量声明的顺序依次按大端字节序紧凑排布填充为二进制数组,反序列化规则反之。
4)解析msg文件并生成对应cpp头文件
使用ros构建工具catkin将msg文件解析并生成cpp头文件。
5)引用生成的cpp头文件发布消息或订阅消息,其中:
a)订阅消息
1.在自动驾驶软件的cpp源码文件中,引用ros msg文件和自定义hura文件生成的cpp头文件。
2.实例化一个::ros::Subscriber类型subscriber,subscriber传输的数据类型为HuraMessage。
3.在subscriber的回调函数中,将传入的HuraMessage类型实例message的data拷贝到uint8类型的数组buffer,实例化自定义的消息数据类型example,将buffer传入example的decode方法中,buffer的数据将被解析并对example的成员变量赋值。
b)发布消息
1.在客户cpp源码文件中,引用ros msg文件和自定义hura文件生成的cpp头文件,实例化自定义的消息数据类型example并赋值,然后调用该类型实例example的encode函数将要传输的消息实例序列化成二进制数据存放于uint8类型的数组buffer中。
2.实例化一个::ros::Publisher类型publisher,publisher传输的数据类型为HuraMessage。
3.将buffer的数据拷贝给HuraMessage类型实例message的成员变量data。
4.publisher调用publish方法发送message。
应理解,上述实施例仅用于说明本发明而不用于限制本发明的范围。此外应理解为在阅读本发明的内容后,本领域技术人员可以对本发明作各种改动和修改,这些等价形式同样落于本申请所附权利要求书所限定的范围。
Claims (8)
1.一种统一不同自动驾驶消息中间件的消息自定义、生成和序列化方法,其特征在于,所述方法如下:
S1,自定义hura消息文件,例如自定义为example.hura;
S2,定义ros msg文件,例如定义为HuraMessage.msg;或定义dds idl文件,例如定义为HuraMessage.idl;
S3,解析example.hura文件并生成对应hura消息cpp头文件example.hpp;
S4,解析HuraMessage.msg或HuraMessage.idl文件并生成对应ros/dds消息cpp头文件HuraMessage.hpp;
S5,源代码引用生成的hura消息cpp头文件example.hpp和ros/dds消息头文件HuraMessage.hpp进行发布消息/订阅消息;
其中,所述S1与S2可同时进行,所述S3与S4可同时进行。
2.根据权利要求1所述的一种统一不同自动驾驶消息中间件的消息自定义、生成和序列化方法,其特征在于,所述S1中的hura消息文件为文本文件,支持的变量类型有boolean、byte、int8_t、int16_t、int32_t、int64_t、float、double、string;自定义的消息类型可嵌套引用。
3.根据权利要求2所述的一种统一不同自动驾驶消息中间件的消息自定义、生成和序列化方法,其特征在于,所述S2中的消息文件HuraMessage.msg/HuraMessage.idl的内部数据类型为uint8数组。
4.根据权利要求3所述的一种统一不同自动驾驶消息中间件的消息自定义、生成和序列化方法,其特征在于,所述S3中的hura文件有package,message关键字,package关键字后跟的字符串会被解析成cpp的命名空间,message关键字声明的数据结构解析后生成对应的cpp类,该cpp类的公有成员变量包含了声明的数据结构的所有成员,且实现了相应的序列化encode和反序列化decode函数;其中序列化的规则为按照变量声明的顺序依次按大端字节序紧凑排布填充为二进制数组,反序列化规则反之。
5.根据权利要求4所述的一种统一不同自动驾驶消息中间件的消息自定义、生成和序列化方法,其特征在于,使用构建工具catkin/opendds_idl将所述S4中的HuraMessage.msg/HuraMessage.idl文件解析并生成对应ros/dds消息cpp头文件HuraMessage.hpp。
6.根据权利要求5所述的一种统一不同自动驾驶消息中间件的消息自定义、生成和序列化方法,其特征在于,所述S5中的订阅消息为:
在cpp源码文件中,引用ros msg文件或dds idl文件,和自定义hura文件生成的cpp头文件;实例化一个::ros::Subscriber类型或OpenDDS::DCPS::DDSTraits<HuraMessage>::DataReaderType类型的subscriber,subscriber传输的数据类型为HuraMessage;
在subscriber的回调函数中,将传入的HuraMessage类型实例message的data拷贝到uint8类型的数组buffer,实例化自定义的消息数据类型example,将buffer传入example的decode方法中,buffer的数据将被解析并对example的成员变量赋值。
7.根据权利要求6所述的一种统一不同自动驾驶消息中间件的消息自定义、生成和序列化方法,其特征在于,所述S5中的发布消息为:
在cpp源码文件中,引用ros msg文件或dds idl文件,和自定义hura文件生成的cpp头文件,实例化自定义的消息数据类型example并赋值,然后调用该类型实例example的encode函数将要传输的消息实例序列化成二进制数据存放于uint8类型的数组buffer中;
实例化一个::ros::Publisher类型或OpenDDS::DCPS::DDSTraits<HuraMessage>::DataWriterType类型的publisher,publisher传输的数据类型为HuraMessage;
将buffer的数据拷贝给HuraMessage类型实例message的成员变量data;
publisher调用publish方法发送message。
8.一种数据处理装置,所述数据处理装置包括中央处理器、可读存储器、数据总线,其特征在于:所述中央处理器同所述可读存储器通过数据总线进行数据连接,所述中央处理器根据操作指令对可读存储器进行控制,从而执行权利要求1至7任意一个所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310970004.1A CN116932250A (zh) | 2023-08-03 | 2023-08-03 | 一种统一不同自动驾驶消息中间件的消息自定义、生成和序列化方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310970004.1A CN116932250A (zh) | 2023-08-03 | 2023-08-03 | 一种统一不同自动驾驶消息中间件的消息自定义、生成和序列化方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116932250A true CN116932250A (zh) | 2023-10-24 |
Family
ID=88384274
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310970004.1A Pending CN116932250A (zh) | 2023-08-03 | 2023-08-03 | 一种统一不同自动驾驶消息中间件的消息自定义、生成和序列化方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116932250A (zh) |
-
2023
- 2023-08-03 CN CN202310970004.1A patent/CN116932250A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6839896B2 (en) | System and method for providing dialog management and arbitration in a multi-modal environment | |
CA2394058C (en) | Method and apparatus of data exchange using runtime code generator and translator | |
US8775649B2 (en) | Optimizing client code through automated server specialization | |
US10666718B2 (en) | Dynamic data transport between enterprise and business computing systems | |
US20030074485A1 (en) | Dynamic corba gateway for CORBA and non-CORBA clients and services | |
US20050182778A1 (en) | Method and devices for encoding/decoding structured documents, particularly xml documents | |
CN108337236A (zh) | 一种基于Protobuf和HTTP/1.1的gRPC调用方法及装置 | |
CN103281311A (zh) | 一种使用Protobuf描述的物联网协议解析方法 | |
CA2511912A1 (en) | System and method for building and execution of platform-neutral generic services' client applications | |
EP1958089A1 (en) | Document object model api for mime | |
CA2540361A1 (en) | System and method for extending capabilities and execution efficiency of script based applications | |
CN110287040B (zh) | 一种远程调用服务框架的实现系统 | |
EP2219117A1 (en) | A processing module, a device, and a method for processing of XML data | |
JP2005174120A (ja) | Webサービス接続処理方法とシステム、およびプログラム | |
CN108446105A (zh) | 一种轻量级API Server开发框架及开发方法 | |
CN116932250A (zh) | 一种统一不同自动驾驶消息中间件的消息自定义、生成和序列化方法 | |
CN111782882A (zh) | 一种tcp报文转换方法、装置、系统及计算机存储介质 | |
CN105024923B (zh) | 基于xmpp扩展消息的消息分类实现的方法及装置 | |
CN111343201A (zh) | 一种快速适配协议变更的解析方法、装置及系统 | |
US20200162410A1 (en) | Management of messaging in heterogeneous iot / iiot messaging environments | |
CN114265638B (zh) | 基于插件兼容的通信方法、装置、设备及存储介质 | |
CN113765872B (zh) | 一种自适应数据格式转换适配的方法和系统 | |
US11216424B2 (en) | Dynamically rendering an application programming interface for internet of things applications | |
CN115333943A (zh) | 确定性网络资源配置系统、方法、设备及存储介质 | |
US20060234763A1 (en) | System and method for generating a wireless application from a web service definition |
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 |