一种港口自动驾驶单车端通信消息解耦处理方法技术

技术编号:32020546 阅读:13 留言:0更新日期:2022-01-22 18:39
本发明专利技术为一种港口自动驾驶单车端通信消息解耦处理方法,对Publish侧的中间件消息与子系统消息分离,定义子系统到中间件的消息转换函数ToMsg();然后定义用于发布的PubProxyCore类,实现PubProxyCore::pub()函数;最后封装PubProxyCore成PubProxy类,给子系统提供统一的publish子系统消息接口。对Subscribe侧,定义中间件(ROS2)到子系统的消息转换函数ToInnerData()及映射关系宏INNER_MAPPING_MSG(InnerType,MsgType);然后定义用于订阅的类SubProxyCore,实现SubProxyCore::create_sub()函数;接着控制SubProxyCore::create_sub()的生命周期与回调函数保持一致;最后子系统使用SubProxy::create_sub()即可订阅到子系统消息类型的消息。本发明专利技术提高了系统的可维护性和可扩展性,降低了测试成本,提高了开发效率。高了开发效率。高了开发效率。

【技术实现步骤摘要】
一种港口自动驾驶单车端通信消息解耦处理方法


[0001]本专利技术属于港口自动驾驶、单车智能以及软件架构设计领域,适用场景是单车自动驾驶系统各子系统间消息通信处理方法,具体涉及一种港口自动驾驶单车端通信消息解耦处理方法。

技术介绍

[0002]在港口自动驾驶单车智能中,各子系统(包括作业处理、规划控制、感知、定位、高精地图等)间的通信必不可少。
[0003]业界普遍使用的通信方案为:利用ROS这样的消息中间件,规定好各子系统间交互的topic和message。若某个子系统需将自己的数据发送出去,则它publish对应topic,那么它就将数据以对应message的格式广播出去了。此时subscribe了此topic的其他子系统,就能收到对应的message,进而进行后续业务处理。Publish和subscribe的消息格式都依赖于ROS,须符合ROS 的消息格式规范。
[0004]上述方案的缺点在于,随着作业场景的变化,若哪天需要更换消息中间件(如ROS2或自研消息中间件),则原先程序中所有使用ROS1 message 的部分都需要修改,适配成符合新中间件的message格式。这不仅带来了修改上的麻烦(修改每一处容易出错,每一个修改处都须重新测试),更不符合软件设计上的“对扩展开放,对更改封闭”的设计原则。

技术实现思路

[0005]本专利技术的目的在于提供一种港口自动驾驶单车端通信消息解耦处理方法,旨在解耦消息中间件消息格式与子系统业务处理的消息格式。分离出中间件消息到子系统消息转换模块,当更换消息中间件,只需适配此消息转换模块,子系统处理部分无需做任何变动。
[0006]为实现上述目的,本专利技术提供如下技术方案:
[0007]一种港口自动驾驶单车端通信消息解耦处理方法,其特征在于,
[0008]对Publish侧的中间件消息与子系统消息分离,即:
[0009]定义子系统消息转换成ROS2消息函数ToMsg();
[0010]定义用于pubilsh的类PubProxyCore,实现PubProxycore::pub()函数;
[0011]定义PubProxy类,封装PubProxyCore,用于对子系统提供统一调用接口;
[0012]对Subscribe侧的中间件消息与子系统消息分离,即:
[0013]定义ROS2消息类型到子系统消息类型的转换函数ToInnerData()及映射关系;
[0014]定义用于subscribe的类SubProxyCore,实现SubProxyCore::create_sub ()函数;
[0015]控制SubProxyCore::create_sub()的生命周期,对子系统提供统一订阅子系统消息接口SubProxy::create_sub()。
[0016]本专利技术进一步设置,定义子系统消息转换成ROS2消息函数ToMsg() 时,以子系统消息类型为形参,不同的子系统消息类型构成ToMsg()的函数重载;
[0017]本专利技术进一步设置,定义用于publish的类PubProxyCore,实现 PubProxyCore::pub(T inner_msg)函数时,类型T根据传入的实参,具象化为具体的子系统消息类型。由传入的子系统消息类型和ToMsg(),可得到对应的ROS2消息类型,从而创建出此ROS2消息类型的publisher对象,最后,调用publisher对象的publish()方法,将转换成ROS2消息的子系统消息发送出去。
[0018]本专利技术进一步设置,定义PubProxy类,封装了PubProxyCore,用于对子系统提供统一调用接口。PubProxy将需publish的每个topic对应的 PubProxyCore存入unordered_map,作为成员变量;当子系统需要publish 某topic时,直接调用PubProxy对象pub()成员函数。同时,将PubProxy 定义成单例类,其对外调用接口为:
[0019]PubProxy::Instance().pub(topic,inner_msg);
[0020]本专利技术进一步设置,定义用于subscribe的类SubProxyCore,实现 SubProxyCore::create_sub()函数时,obj::fp()为用户需实现的回调函数,入参为子系统消息类型,create_sub()实现中,调用了ros2的subscribe ()方法,并转换成调用使用子系统消息类型的obj::fp()方法。
[0021]本专利技术进一步设置,控制SubProxyCore::create_sub()的生命周期时,为SubProxyCore再封装一层,定义一个SubProxy类,根据其vector成员变量,vector的元素为SubProxyCore::create_sub()的返回值,子系统类通过包括一个SubProxy的成员变量对象,来使用SubProxy::create_sub()来订阅topic,当SubProxy成员对象被销毁时,创建的subscriber对象也会被销毁。
[0022]本专利技术进一步设置,若消息中间件变更成除ros2之外的其他中间件时,再扩展一个对应的PubProxy/PubProxyCore/SubProxy/SubProxyCore/中间件消息与子系统消息转换函数即可。
[0023]本专利技术的有益效果:提出了单车端各子系统间通信消息解耦处理方法。该方法解耦了消息中间件消息格式与子系统处理消息格式,专利技术提出分离出中间件消息到子系统消息转换模块,当更换消息中间件,只需用预定义宏控制,适配此消息转换模块即可,子系统处理部分无需做任何变动。这提高了系统的可维护性和可扩展性,降低了测试成本,提高了开发效率。
附图说明
[0024]图1为本专利技术实施例定义子系统消息转换成ROS2消息函数ToMsg() 的示意图。
[0025]图2为本专利技术实施例中PubproxyCore::pub()函数模板的示意图。
[0026]图3为本专利技术实施例中定义PubProxy类,封装PubProxycore,用于对子系统提供统一调用接口的示意图。
[0027]图4为本专利技术实施例中PubProxy定义成单例类的示意图。
[0028]图5为本专利技术实施例中ROS2消息转换成子系统消息ToInnerData() 的示意图。
[0029]图6为本专利技术实施例定义子系统消息到ROS2消息映射关系的示意图。
[0030]图7为本专利技术实施例中create_sub()实现的示意图。
[0031]图8为本专利技术实施例中为SubProxyCore再封装成SubProxy的示意图。
[0032]图9为

图11为本专利技术实施例中子系统类使用SubProxy对象subscribetopic/
message方法的示意图。
具体实施方式...

【技术保护点】

【技术特征摘要】
1.一种港口自动驾驶单车端通信消息解耦处理方法,其特征在于,对Publish侧的中间件消息与子系统消息分离,即:定义子系统消息转换成ROS2消息函数ToMsg();定义用于pubilsh的类PubProxyCore,实现PubProxycore::pub()函数;定义PubProxy类,封装PubProxyCore,用于对子系统提供统一调用接口;对Subscribe侧的中间件消息与子系统消息分离,即:定义ROS2消息类型到子系统消息类型的转换函数ToInnerData()及映射关系;定义用于subscribe的类SubProxyCore,实现SubProxyCore::create_sub()函数;控制SubProxyCore::create_sub()的生命周期,对子系统提供统一订阅子系统消息接口SubProxy::create_sub()。2.根据权利要求1所述的一种港口自动驾驶单车端通信消息解耦处理方法,其特征在于,定义子系统消息转换成ROS2消息函数ToMsg()时,以子系统消息类型为形参,不同的子系统消息类型构成ToMsg()的函数重载。3.根据权利要求2所述的一种港口自动驾驶单车端通信消息解耦处理方法,其特征在于,定义用于publish的类PubProxyCore,实现PubProxyCore::pub(T inner_msg)函数时,类型T根据传入的实参,具象化为具体的子系统消息类型;由传入的子系统消息类型和ToMsg(),可得到对应的ROS2消息类型,从而创建出此ROS2消息类型的publisher对象,最后,调用publisher对象的publish()方法,将转换成ROS2消息的子系统消息发送出去。4.根据权利要求3所述的一种港口自动驾驶单车端通信消息解耦处理方法,其特征在于,定义PubProxy类,封装了PubProxyCore,用于...

【专利技术属性】
技术研发人员:杨高升阳钧刘鹤云
申请(专利权)人:北京斯年智驾科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1