CN116932250A - 一种统一不同自动驾驶消息中间件的消息自定义、生成和序列化方法 - Google Patents

一种统一不同自动驾驶消息中间件的消息自定义、生成和序列化方法 Download PDF

Info

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
Application number
CN202310970004.1A
Other languages
English (en)
Inventor
胡志远
朱仁杰
王进涛
张果
杨洁
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Jushi Huixing Wuhan Technology Co ltd
Original Assignee
Jushi Huixing Wuhan Technology Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Jushi Huixing Wuhan Technology Co ltd filed Critical Jushi Huixing Wuhan Technology Co ltd
Priority to CN202310970004.1A priority Critical patent/CN116932250A/zh
Publication of CN116932250A publication Critical patent/CN116932250A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/427Parsing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/54Indexing scheme relating to G06F9/54
    • G06F2209/547Messaging 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任意一个所述的方法。
CN202310970004.1A 2023-08-03 2023-08-03 一种统一不同自动驾驶消息中间件的消息自定义、生成和序列化方法 Pending CN116932250A (zh)

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)

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&#39; 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