动态拓扑维护方法、装置及设备转让专利

申请号 : CN201810701609.X

文献号 : CN108847988B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 张伍召杨凯何玮倪忠俊辛建康鲍万宇

申请人 : 百度在线网络技术(北京)有限公司

摘要 :

本发明提供一种动态拓扑维护方法、装置及设备,本发明的方法,根据配置文件为新加入的通信节点分配第一进程,控制第一进程将该进程的位置信息以及消息类型发送给域内其他第二进程,控制第二进程将域内与第一进程的消息类型相匹配的通信节点的拓扑信息发送给第一进程,在第一进程中添加新加入的通信节点;将新加入的通信节点的拓扑信息发布给第二进程,使得第一进程和第二进程均维护了包括所有与本进程消息类型相匹配的通信节点的拓扑信息,已有通信拓扑中的任一通信节点需要与其他通信节点通信时,通过对应的本地拓扑信息即可直接建立与其他通信节点,提高了无人驾驶汽车通信系统的稳定性和及时性,从而提高了无人驾驶系统的安全性。

权利要求 :

1.一种动态拓扑维护方法,其特征在于,包括:获取配置文件,所述配置文件中包括新加入的通信节点的拓扑信息以及消息类型;

为所述新加入的通信节点分配第一进程;

控制所述第一进程将该进程的位置信息以及消息类型发送给域内第二进程;

控制所述第二进程将所述域内与所述第一进程的消息类型相匹配的通信节点的拓扑信息发送给所述第一进程;

在第一进程中添加所述新加入的通信节点;

将所述新加入的通信节点的拓扑信息发布给所述第二进程;

所述控制所述第二进程将所述域内与所述第一进程的消息类型相匹配的通信节点的拓扑信息发送给所述第一进程之后,还包括:控制所述第一进程将接收到的与所述第一进程的消息类型相匹配的通信节点的拓扑信息添加到本地拓扑信息中。

2.根据权利要求1所述的方法,其特征在于,所述将所述新加入的通信节点的拓扑信息发布给所述第二进程之后,还包括:控制所述第二进程中具有与所述新加入的通信节点消息类型相同的节点的第三进程订阅第一拓扑更新消息,所述第一拓扑更新消息中携带所述新加入的通信节点的拓扑信息以及消息类型;

控制所述第三进程根据所述第一拓扑更新消息,将所述新加入的通信节点的拓扑信息添加到本地拓扑信息中。

3.根据权利要求1所述的方法,其特征在于,所述方法还包括:若检测到所述域内任一通信节点退出,控制退出节点对应的第四进程发布第二拓扑更新消息,所述第二拓扑更新消息包括该退出节点的拓扑信息和消息类型。

4.根据权利要求3所述的方法,其特征在于,所述控制退出节点对应的第四进程发布第二拓扑更新消息之后,还包括:控制具有与所述退出节点类型相同的节点的第五进程订阅所述第二拓扑更新消息;

控制所述第五进程根据所述第二拓扑更新消息,将所述退出节点的拓扑信息从本地拓扑信息中删除。

5.根据权利要求1-4任一项所述的方法,其特征在于,所述方法还包括:确定所述域内待通信的任意两个通信节点之间的拓扑关系,所述拓扑关系包括:同一进程,同一宿主机的不同进程或不同的宿主机;

根据待通信的两个通信节点之间的拓扑关系,控制该两个通信节点采用拓扑关系对应的通信方式进行通信。

6.根据权利要求1所述的方法,其特征在于,所述控制所述第一进程将该进程的位置信息以及消息类型发送给域内其他第二进程,包括:控制所述第一进程向所述域内广播或者组播新进程加入消息,所述新进程加入消息包括所述第一进程的位置信息以及消息类型。

7.根据权利要求1所述的方法,其特征在于,所述通信节点包括以下至少一种:发布节点、订阅节点、请求节点和服务节点;

所述通信节点的拓扑信息包括所属通信模块标识、宿主机的IP地址、进程的端口号和消息内容类型;

所述第一进程的位置信息包括所述第一进程的端口号和所在宿主机的IP地址。

8.根据权利要求7所述的方法,其特征在于,所述消息类型包括主题消息和服务消息中的至少一种;

所述发布节点和订阅节点的消息类型为主题消息,所述请求节点和服务节点的消息类型为服务消息;

所述第一进程的消息类型包括所述新加入的通信节点的消息类型。

9.一种动态拓扑维护装置,其特征在于,包括:获取模块,用于获取配置文件,所述配置文件中包括新加入的通信节点的拓扑信息以及消息类型;

进程加入模块,用于为所述新加入的通信节点分配第一进程;

所述进程加入模块还用于控制所述第一进程将该进程的位置信息以及消息类型发送给域内第二进程;

所述进程加入模块还用于控制所述第二进程将所述域内与所述第一进程的消息类型相匹配的通信节点的拓扑信息发送给所述第一进程;

节点加入模块,用于在第一进程中添加所述新加入的通信节点;

所述节点加入模块还用于将所述新加入的通信节点的拓扑信息发布给所述第二进程;

所述进程加入模块还用于:

控制所述第一进程将接收到的与所述第一进程的消息类型相匹配的通信节点的拓扑信息添加到本地拓扑信息中。

10.根据权利要求9所述的装置,其特征在于,所述节点加入模块还用于:控制所述第二进程中具有与所述新加入的通信节点消息类型相同的节点的第三进程订阅第一拓扑更新消息,所述第一拓扑更新消息中携带所述新加入的通信节点的拓扑信息以及消息类型;

控制所述第三进程根据所述第一拓扑更新消息,将所述新加入的通信节点的拓扑信息添加到本地拓扑信息中。

11.根据权利要求9所述的装置,其特征在于,还包括:节点退出模块,用于若检测到所述域内任一通信节点退出,控制退出节点对应的第四进程发布第二拓扑更新消息,所述第二拓扑更新消息包括该退出节点的拓扑信息和消息类型。

12.根据权利要求11所述的装置,其特征在于,所述节点退出模块还用于:控制具有与所述退出节点类型相同的节点的第五进程订阅所述第二拓扑更新消息;

控制所述第五进程根据所述第二拓扑更新消息,将所述退出节点的拓扑信息从本地拓扑信息中删除。

13.根据权利要求9-12任一项所述的装置,其特征在于,还包括:通信方式控制模块,所述通信方式控制模块用于:确定所述域内待通信的任意两个通信节点之间的拓扑关系,所述拓扑关系包括:同一进程,同一宿主机的不同进程或不同的宿主机;

根据待通信的两个通信节点之间的拓扑关系,控制该两个通信节点采用拓扑关系对应的通信方式进行通信。

14.根据权利要求9所述的装置,其特征在于,所述进程加入模块还用于:控制所述第一进程向所述域内广播或者组播新进程加入消息,所述新进程加入消息包括所述第一进程的位置信息以及消息类型。

15.根据权利要求9所述的装置,其特征在于,所述通信节点包括以下至少一种:发布节点、订阅节点、请求节点和服务节点;

所述通信节点的拓扑信息包括所属通信模块标识、宿主机的IP地址、进程的端口号和消息内容类型;

所述第一进程的位置信息包括所述第一进程的端口号和所在宿主机的IP地址。

16.根据权利要求15所述的装置,其特征在于,所述消息类型包括主题消息和服务消息中的至少一种;

所述发布节点和订阅节点的消息类型为主题消息,所述请求节点和服务节点的消息类型为服务消息;

所述第一进程的消息类型包括所述新加入的通信节点的消息类型。

17.一种车载设备,其特征在于,包括:

存储器,处理器,以及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器运行所述计算机程序时实现如权利要求1-8中任一项所述的方法。

18.一种计算机可读存储介质,其特征在于,存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1-8中任一项所述的方法。

说明书 :

动态拓扑维护方法、装置及设备

技术领域

[0001] 本发明涉及通信技术领域,尤其涉及一种动态拓扑维护方法、装置及设备。

背景技术

[0002] 在无人驾驶汽车领域中,无人驾驶通信系统的多个功能模块需要相互通信协作实现车辆的无人驾驶。无人驾驶通信系统包括车辆控制模块、定位模块、雷达模块、传感器模块、导航模块、拍摄模块及图像识别模块等等,可以将功能模块对应的软件模块作为一个通信模块(也称为Node),每个通信模块包括至少一个通信节点,通信节点可以包括发布节点、订阅节点、请求节点和服务节点。
[0003] 目前,通信节点的拓扑结构以下两种方式:一种是基于传统的Client/Server体系结构,相互通信的两个通信节点分别作为客户端节点和服务端节点,通过中心服务器建立一对一的通信连接;另一种是基于机器人操作系统(Robot Operating System,简称ROS),由一个主节点(也称为Master节点)维护整个系统的拓扑信息,除主节点外的通信节点之间进行通信前,必须先从主节点获取拓扑信息,然后通过发布/订阅的主题方式、或者请求/响应的服务方式进行通信。
[0004] 上述两种通信方式,通信节点之间进行通信时,必须经过中心服务器或者主节点,若中间服务器或者主节点出现故障,将导致无人驾驶通信系统中通信节点间出现通信故障,极易导致高速行驶的无人驾驶汽车发生交通事故,存在极大的安全隐患。

发明内容

[0005] 本发明提供一种动态拓扑维护方法、装置及设备,用以解决通信节点之间进行通信时,必须经过中心服务器或者主节点,若中间服务器或者主节点出现故障,将导致无人驾驶通信系统中通信节点间出现通信故障,极易导致高速行驶的无人驾驶汽车发生交通事故,存在极大的安全隐患的问题。
[0006] 本发明的一个方面是提供一种动态拓扑维护方法,包括:
[0007] 获取配置文件,所述配置文件中包括新加入的通信节点的拓扑信息以及消息类型;
[0008] 为所述新加入的通信节点分配第一进程;
[0009] 控制所述第一进程将该进程的位置信息以及消息类型发送给域内其他第二进程;
[0010] 控制所述第二进程将所述域内与所述第一进程的消息类型相匹配的通信节点的拓扑信息发送给所述第一进程;
[0011] 在第一进程中添加所述新加入的通信节点;
[0012] 将所述新加入的通信节点的拓扑信息发布给所述第二进程。
[0013] 本发明的另一个方面是提供一种动态拓扑维护装置,包括:
[0014] 获取模块,用于获取配置文件,所述配置文件中包括新加入的通信节点的拓扑信息以及消息类型;
[0015] 进程加入模块,用于为所述新加入的通信节点分配第一进程;
[0016] 所述进程加入模块还用于控制所述第一进程将该进程的位置信息以及消息类型发送给域内其他第二进程;
[0017] 所述进程加入模块还用于控制所述第二进程将所述域内与所述第一进程的消息类型相匹配的通信节点的拓扑信息发送给所述第一进程;
[0018] 节点加入模块,用于在第一进程中添加所述新加入的通信节点;
[0019] 所述节点加入模块还用于将所述新加入的通信节点的拓扑信息发布给所述第二进程。
[0020] 本发明的另一个方面是提供一种车载设备,包括:
[0021] 存储器,处理器,以及存储在所述存储器上并可在所述处理器上运行的计算机程序,
[0022] 所述处理器运行所述计算机程序时实现上述动态拓扑维护方法。
[0023] 本发明的另一个方面是提供一种计算机可读存储介质,存储有计算机程序,[0024] 所述计算机程序被处理器执行时实现上述动态拓扑维护方法。
[0025] 本发明提供的动态拓扑维护方法、装置及设备,通过根据配置文件为新加入的通信节点分配第一进程,控制第一进程将该进程的位置信息以及消息类型发送给域内其他第二进程,控制第二进程将域内与第一进程的消息类型相匹配的通信节点的拓扑信息发送给第一进程,在第一进程中添加新加入的通信节点;将新加入的通信节点的拓扑信息发布给第二进程,从而第一进程可以将已有通信拓扑中所有与第一进程消息类型相匹配的通信节点以及第一进程内的通信节点的拓扑信息添加到本地拓扑信息中,第二进程也可以根据新加入的通信节点的拓扑信息更新本地拓扑信息,从而第一进程和第二进程均维护了包括所有与本进程消息类型相匹配的通信节点的拓扑信息,已有通信拓扑中的任一通信节点需要与其他通信节点通信时,通过对应的本地拓扑信息即可直接建立与其他通信节点,提高了无人驾驶汽车通信系统的稳定性和及时性,从而提高了无人驾驶系统的安全性。

附图说明

[0026] 此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。
[0027] 图1为本发明实施例一提供的动态拓扑维护方法流程图;
[0028] 图2为本发明实施例一提供的通信系统示意图;
[0029] 图3为本发明实施例二提供的动态拓扑维护方法流程图;
[0030] 图4为本发明实施例二提供的另一动态拓扑维护方法流程图;
[0031] 图5为本发明实施例三提供的动态拓扑维护装置的结构示意图;
[0032] 图6为本发明实施例五提供的车载设备的结构示意图。
[0033] 通过上述附图,已示出本发明明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本发明构思的范围,而是通过参考特定实施例为本领域技术人员说明本发明的概念。

具体实施方式

[0034] 这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的装置和方法的例子。
[0035] 首先对本发明所涉及的名词进行解释:
[0036] 机器人操作系统(Robot Operating System,简称ROS):是一个机器人软件平台,它能为异质计算机集群提供类似操作系统的功能。ROS提供一些标准操作系统服务,例如硬件抽象,底层设备控制,常用功能实现,进程间消息以及数据包管理。ROS是基于一种图状架构,从而不同通信节点的进程能订阅,发布,聚合各种信息(例如传感,控制,状态,规划等等)。
[0037] 通信模块(NODE):是指无人驾驶汽车通信系统中对应于一个功能模块的通信组件,NODE是通信系统的最小模块单位。无人驾驶汽车通信系统包括:定位功能模块对应的定位NOED,导航功能模块对应的导航NODE,用于感知障碍物的拍摄功能模块对应的拍摄NODE,雷达NODE,用于控制车辆行驶的控制功能模块对应的控制NODE等等。一个NODE可以包括一个或者多个通信节点。
[0038] 域(Domain):是Windows网络中独立运行的单位,域之间相互访问则需要建立信任关系(即Trust Relation)。
[0039] 此外,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。在以下各实施例的描述中,“多个”的含义是两个以上,除非另有明确具体的限定。
[0040] 下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本发明的实施例进行描述。
[0041] 本发明实施例具体应用于无人驾驶汽车的通信系统中。无人驾驶汽车是指通过车载传感系统定位本车车位置,同时感知道路、车辆和行人等周围环境,自动规划行驶路线,自动控制车辆的驱动速度、转向和制动,能主动对障碍物进行避障,最终控制车辆到达目的地的智能汽车。无人驾驶系统包括定位模块,导航模块,用于环境感知的传感器模块、拍摄模块和雷达模块等,规划决策模块,以及控制模块等等多个功能模块。无人驾驶系统各个功能模块间的实时通信和精密协作是无人驾驶汽车的自动安全地行驶的基础,对于高速行驶中的无人驾驶汽车,各功能模块间的通信实时性差或者发生故障(哪怕是极短时间的故障)极易引发无人驾驶汽车发生严重地交通事故,导致人员伤亡。因此,保证无人驾驶汽车的通信系统的稳定性和实时性十分重要。
[0042] 实施例一
[0043] 图1为本发明实施例一提供的动态拓扑维护方法流程图;图2为本发明实施例一提供的通信系统示意图。本发明实施例针对现有技术中通信节点之间进行通信时,必须经过中心服务器或者主节点,若中间服务器或者主节点出现故障,将导致无人驾驶通信系统中通信节点间出现通信故障,极易导致高速行驶的无人驾驶汽车发生交通事故,存在极大的安全隐患的问题,提供了动态拓扑维护方法。本发明实施例的执行主体可以应用于装载在车辆上的设备,该车载设备可以是行车电脑、OBU等。在其他实施例中,该动态拓扑维护方法还可应用于其他设备,本实施例以车辆内的车载设备为例进行示意性说明。如图1所示,该方法具体步骤如下:
[0044] 步骤S101、获取配置文件,配置文件中包括新加入的通信节点的拓扑信息以及消息类型。
[0045] 其中,通信节点包括以下至少一种:发布节点、订阅节点、请求节点和服务节点。通信节点的拓扑信息包括所属通信模块标识、宿主机的IP地址、进程的端口号和消息内容类型。
[0046] 另外,通信节点的进程的端口号是指该通信节点所在进程的唯一标识端口号,若一个进程有多个端口号,则是指唯一与socket绑定的端口号。
[0047] 通信节点的消息类型可以为主题消息或者服务消息,发布节点和订阅节点的消息类型为主题消息,请求节点和服务节点的消息类型为服务消息。
[0048] 本实施例中,新加入的通信节点包括至少一个NODE的所有通信节点,可以将通信系统中所有NODE以及NODE中包括的通信节点的拓扑信息及消息类型均预先记录在一个配置文件中,在初始化通信系统,建立通信拓扑时,根据该配置文件将所有NODE的通信节点分多轮添加到通信拓扑中,每轮添加一组通信节点到通信拓扑中。
[0049] 如图2所示,通信系统可以包括多个NODE,每个NODE可以包括一个或者多个通信节点。预先将所有NODE进行分组,每一组NODE对应于一个用于维护该组NODE中所有通信节点的拓扑信息的进程,该进程所维护的通信节点称为该进程内的通信节点。
[0050] 所有NODE的分组信息可以预先存储到配置文件中,一个NODE的通信节点属于同一分组。可选的,一个分组可以与一个NODE对应,包括一个NODE的所有通信节点;或者一个分组可以对应多个NODE,包括多个NODE的所有通信节点。
[0051] 本发明实施例对一轮添加一组通信节点到通信拓扑中的过程进行说明,每轮添加一组通信节点到通信拓扑中的过程相同,通过循环执行本实施例的步骤即可将所有NODE的通信节点添加到通信拓扑中,完成整个通信拓扑的维护过程。
[0052] 步骤S102、为新加入的通信节点分配第一进程。
[0053] 本实施例中,为每一组新加入的通信节点分配一个进程,为了与其他进程进行区分,这里记为第一进程,第一进程用于维护新加入的通信节点的本地拓扑信息。
[0054] 步骤S103、控制第一进程将该进程的位置信息以及消息类型发送给域内其他第二进程。
[0055] 其中,进程的位置信息包括进程的端口号和所在宿主机的IP地址。
[0056] 进程的消息类型包括该进程内的通信节点的消息类型,进程的消息类型包括主题消息和服务消息中的至少一个。
[0057] 由于第一进程为新加入的进程,第一进程内还未添加通信节点,该步骤中,第一进程的消息类型包括新加入的通信节点的消息类型。
[0058] 例如,假设第一进程内的通信节点包括发布节点和订阅节点,第一进程内的通信节点的消息类型均为主题消息,那么第一进程的消息类型为主题消息;假设第一进程内的通信节点包括发布节点、订阅节点和服务节点,第一进程内的通信节点的消息类型包括主题消息和服务消息,那么第一进程的消息类型包括主题消息和服务消息。
[0059] 第二进程是指第一进程所在域内的、用于维护已有通信拓扑的其他进程。第二进程中已经加入了至少一个通信节点,第二进程维护有一个本地拓扑信息,第二进程的本地拓扑信息包括已有通信拓扑中与第二进程的消息类型相匹配的所有通信节点的拓扑信息。
[0060] 该步骤中,在为新加入的通信节点分配第一进程之后,首选将第一进程的位置信息和消息类型发送给其他域内的第二进程,以使第二进程将第一进程的位置信息和消息类型加入通信拓扑中。
[0061] 步骤S104、控制第二进程将域内与第一进程的消息类型相匹配的通信节点的拓扑信息发送给第一进程。
[0062] 第二进程本地拓扑信息中包括域内所有与第二进程的消息类型相匹配的通信节点的拓扑信息。
[0063] 该步骤中,第二进程根据第一进程的消息类型,获取本地拓扑信息中与第一进程的消息类型相匹配的通信节点的拓扑信息,并发送给第一进程。由于每个第二进程均会将本地拓扑信息中与第一进程的消息类型相匹配的通信节点的拓扑信息发送给第一进程,第一进程通过接收各个第二进程发送的拓扑信息,可以获得已有通信拓扑中所有的与第一进程的消息类型相匹配的通信节点的拓扑信息,也即是获得了域内所有的与第一进程的消息类型相匹配的通信节点的拓扑信息。
[0064] 步骤S105、在第一进程中添加新加入的通信节点。
[0065] 在将第一进程添加到通信拓扑之后,将新加入的通信节点添加到第一进程。这样,第一进程的本地拓扑信息中包括了已有通信拓扑中所有与第一进程的消息类型相匹配的通信节点和第一进程内的通信节点的拓扑信息,第一进程内的通信节点在需要与其他通信节点进行通信时,通过本地拓扑信息可以直接与其他通信节点建立通信连接并进行通信。
[0066] 步骤S106、将新加入的通信节点的拓扑信息发布给第二进程。
[0067] 将新加入的通信节点的拓扑信息发布给第二进程,从而使第二进程能够订阅到新加入的通信节点的拓扑信息,这样,第二进程可以将新加入的通信节点的拓扑信息更新到本地拓扑信息中,从而将新加入的通信节点添加到已有拓扑中。由于通过发布/订阅方式进行的,所以是一种可靠通信,不会造成消息的丢失。
[0068] 本发明实施例通过根据配置文件为新加入的通信节点分配第一进程,控制第一进程将该进程的位置信息以及消息类型发送给域内其他第二进程,控制第二进程将域内与第一进程的消息类型相匹配的通信节点的拓扑信息发送给第一进程,在第一进程中添加新加入的通信节点;将新加入的通信节点的拓扑信息发布给第二进程,从而第一进程可以将已有通信拓扑中所有与第一进程消息类型相匹配的通信节点以及第一进程内的通信节点的拓扑信息添加到本地拓扑信息中,第二进程也可以根据新加入的通信节点的拓扑信息更新本地拓扑信息,从而第一进程和第二进程均维护了包括所有与本进程消息类型相匹配的通信节点的拓扑信息,已有通信拓扑中的任一通信节点需要与其他通信节点通信时,通过对应的本地拓扑信息即可直接建立与其他通信节点,提高了无人驾驶汽车通信系统的稳定性和及时性,从而提高了无人驾驶系统的安全性。
[0069] 实施例二
[0070] 图3为本发明实施例二提供的动态拓扑维护方法流程图;图4为本发明实施例二提供的另一动态拓扑维护方法流程图。在上述实施例一的基础上,本实施例中,将新加入的通信节点的拓扑信息发布给第二进程之后,还包括:控制第二进程中具有与新加入的通信节点消息类型相同节点的第三进程订阅第一拓扑更新消息,第一拓扑更新消息中携带新加入的通信节点的拓扑信息以及消息类型;控制第三进程根据第一拓扑更新消息,将新加入的通信节点的拓扑信息添加到本地拓扑信息中。如图3所示,该方法具体步骤如下:
[0071] 步骤S201、获取配置文件,配置文件中包括新加入的通信节点的拓扑信息以及消息类型。
[0072] 其中,通信节点包括以下至少一种:发布节点、订阅节点、请求节点和服务节点。通信节点的拓扑信息包括所属通信模块标识、宿主机的IP地址、进程的端口号和消息内容类型。
[0073] 通信节点的消息类型可以为主题消息或者服务消息,发布节点和订阅节点的消息类型为主题消息,请求节点和服务节点的消息类型为服务消息。
[0074] 该步骤与上述步骤S101一致,本实施例此处不再赘述。
[0075] 步骤S202、为新加入的通信节点分配第一进程。
[0076] 本实施例中,为每一组新加入的通信节点分配一个进程,为了与其他进程进行区分,这里记为第一进程,第一进程用于维护新加入的通信节点的本地拓扑信息。
[0077] 可选的,第一进程可以通过注册通信单例来实现维护新加入的通信节点的本地拓扑信息。
[0078] 步骤S203、控制第一进程将该进程的位置信息以及消息类型发送给域内其他第二进程。
[0079] 其中,进程的位置信息包括进程的端口号和所在宿主机的IP地址。
[0080] 进程的消息类型包括该进程内的通信节点的消息类型,进程的消息类型包括主题消息和服务消息中的至少一个。
[0081] 由于第一进程为新加入的进程,第一进程内还未添加通信节点,该步骤中,第一进程的消息类型包括新加入的通信节点的消息类型。
[0082] 第二进程是指第一进程所在域内的、用于维护已有通信拓扑的其他进程。第二进程中已经加入了至少一个通信节点,第二进程维护有一个本地拓扑信息,第二进程的本地拓扑信息包括已有通信拓扑中与第二进程的消息类型相匹配的所有通信节点的拓扑信息。
[0083] 在为新加入的通信节点分配第一进程之后,首选将第一进程加入通信拓扑。
[0084] 该步骤中,控制第一进程将该进程的位置信息以及消息类型发送给域内其他第二进程,具体可以采用如下方式实现:
[0085] 控制第一进程向域内广播或者组播新进程加入消息,新进程加入消息包括第一进程的位置信息以及消息类型,这样第二进程就可以接收到第一进程的位置信息和消息类型。
[0086] 可选的,第一进程通过通信单例利用中间件提供的服务,通过组播或者广播的方式向所在域内发送进程加入消息,使得同样注册了该通信单例的第二进程可以监听和接收该进程加入消息。
[0087] 中间件可以配置自己所在的域,域功能上类似自己所在的局域网;中间件可以实现域内的进程之间,或者域内的通信节点之间的通信。例如,中间件可以通过组播或广播向整个域内发送信息;还可以接收来自所在域内的广播或组播信息;还可以实现除组播和广播以外的其他通信方式(例如单播方式)进行通信。例如,中间件可以基于实时流传输协议(Real Time Streaming Protocol,RTPS)实现通信节点之间的通信。
[0088] 步骤S204、控制第二进程将第一进程的位置信息以及消息类型添加到本地拓扑信息中。
[0089] 第二进程接收第一进程向域内组播或者广播的进程加入消息之后,将进程加入消息中携带的第一进程的位置信息以及消息类型添加到本地拓扑信息中,实现将第一进程加入通信拓扑。
[0090] 步骤S205、控制第二进程将域内与第一进程的消息类型相匹配的通信节点的拓扑信息发送给第一进程。
[0091] 具体的,在接收到第一进程的位置信息和消息类型之后,第二进程可以从本地拓扑信息中筛选出与第一进程的消息类型相匹配的通信节点的拓扑信息,将筛选出的与消息类型相匹配的通信节点的拓扑信息发送给第一进程。
[0092] 由于每个第二进程均会将本地拓扑信息中与第一进程的消息类型相匹配的通信节点的拓扑信息发送给第一进程,第一进程通过接收各个第二进程发送的拓扑信息,可以获得已有通信拓扑中所有的与第一进程的消息类型相匹配的通信节点的拓扑信息,也即是获得了域内所有的与第一进程的消息类型相匹配的通信节点的拓扑信息。
[0093] 由于第二进程向第一进程发送的不是第二进程的所有本地拓扑信息,而是与第一进程的消息类型相匹配的通信节点的拓扑信息,是第二进程的本地拓扑信息的子集,可以避免向第一进程发送其不需要的拓扑信息带来的网路开销。
[0094] 优选地,第二进程采用单播的方式将与第一进程的消息类型相匹配的通信节点的拓扑信息发送给第一进程,可以进一步降低网路开销。
[0095] 可选的,由于消息类型包括主题消息和服务消息两种类型,第二进程的消息类型包括主题消息和/或服务消息,任意一个第二进程中均包括与该进程的消息类型相匹配的所有通信节点的拓扑信息。因此,第一进程可以在接收到任意一个或者多个第二进程发送的与第一进程的消息类型相匹配的通信节点的拓扑信息之后,可以不再接收其他第二进程发送的拓扑信息,从而可以进一步降低网路开销。
[0096] 例如,第一进程的消息类型包括主题消息,那么,第一进程在接收到任意一个第二进程发送的与主题消息相匹配的通信节点的拓扑信息之后,即可得到已有拓扑信息中所有与主题消息相匹配的通信节点的拓扑信息,也即是得到了域内所有与主题消息相匹配的通信节点的拓扑信息,第一进程不再接收其他第二进程发送的拓扑信息。
[0097] 步骤S206、控制第一进程将接收到的与第一进程的消息类型相匹配的通信节点的拓扑信息添加到本地拓扑信息中。
[0098] 第一进程在接收到与第一进程的消息类型相匹配的通信节点的拓扑信息之后,将与第一进程的消息类型相匹配的通信节点的拓扑信息添加到本体拓扑信息中。至此,第一进程和所有的第二进程的本地拓扑信息中均包括第一进程的拓扑信息(包括第一进程的位置信息和消息类型),完成了将第一进程添加到已有的通信拓扑中。
[0099] 通过上述步骤S202-S206将第一进程加入通信拓扑之后,通过步骤S207-S210,可以将新加入的通信节点加入通信拓扑。
[0100] 步骤S207、在第一进程中添加新加入的通信节点。
[0101] 在将第一进程添加到通信拓扑之后,第一进程将与第一进程的消息类型相匹配的通信节点的拓扑信息添加到本地拓扑信息中,从而将新加入的通信节点添加到第一进程中。
[0102] 步骤S208、控制第一进程向域内发布第一拓扑更新消息,第一拓扑更新消息中携带新加入的通信节点的拓扑信息以及消息类型。
[0103] 本发明实施例中,可以将用于维护通过节点的拓扑信息的第一进程和第二进程初始化为包括一个用于维护拓扑信息的预设NODE,该预设NODE内至少包括一组发布节点、订阅节点、请求节点和服务节点。
[0104] 具体的,第一进程通过预设NODE的发布节点向域内发布包括新加入的通信节点的拓扑信息的第一拓扑更新消息,使订阅了该主题消息的第二进程可以订阅到第一拓扑更新消息。
[0105] 步骤S209、控制第二进程订阅第一拓扑更新消息,根据第一拓扑更新消息更新本地拓扑信息。
[0106] 该步骤的一种可行的实施方式:
[0107] 控制所有第二进程订阅第一拓扑更新消息,控制第二进程根据新加入的通信节点的消息类型,将与第二进程的消息类型相匹配的新加入的通信节点的拓扑信息添加到本地拓扑信息中。
[0108] 另外,可能有的第二进程不具有与新加入的通信节点消息类型相同的通信节点,不需要将新加入的通信节点的拓扑信息添加到本地拓扑信息中,那么这些第二进程订阅第一拓扑更新消息将增加网路开销。
[0109] 具体的,该步骤的另一种可行的实施方式:
[0110] 控制第二进程中具有与新加入的通信节点消息类型相同节点的第三进程订阅第一拓扑更新消息;控制第三进程根据第一拓扑更新消息,将新加入的通信节点的拓扑信息添加到本地拓扑信息中。
[0111] 可选的,第三进程根据第一拓扑更新消息更新本地拓扑信息时,将与该进程的消息类型相匹配的新加入的通信节点的拓扑信息添加到本地拓扑信息中。
[0112] 本实施例中,在将第一进程中添加新加入的通信节点之后,通过步骤S208-S209实现将新加入的通信节点的拓扑信息发布给第二进程,第一进程将新加入的通信节点的拓扑信息添加到了本地拓扑信息中,所有的第二进程均将与该进程消息类型相匹配的新加入的通信节点的拓扑信息添加到了本地拓扑信息中,从而完成了将新加入的通信节点添加到通信拓扑中,完成了一轮添加一组新加入的通信节点添加到通信拓扑中的过程。
[0113] 本实施例的另一实施方式中,该动态拓扑维护方法还包括实时检测域内是否有通信节点退出,当检测到域内任一通信节点退出时,更新通信拓扑。如图4所示,该方法还包括如下步骤:
[0114] 步骤S301、若检测到域内任一通信节点退出,控制退出节点对应的第四进程发布第二拓扑更新消息,第二拓扑更新消息包括该退出节点的拓扑信息和消息类型。
[0115] 其中,第四进程是用于维护退出的通信节点的拓扑信息的进程。
[0116] 可选的,可以通过中间件采用心跳检测方法实时地检测各通信节点是否已经退出。
[0117] 步骤S302、控制域内其他的第五进程订阅第二拓扑更改消息。
[0118] 第五进程是指域内除第四进程外的用于维护通信节点的拓扑信息的其他进程。
[0119] 由于有的第五进程不具有与退出的通信节点消息类型相同的通信节点,本地拓扑信息中不包括退出的通信节点的拓扑信息,无需针对该退出通信节点更新本地拓扑信息。
[0120] 可选的,控制具有与退出节点类型相同节点的第五进程订阅第二拓扑更改消息。
[0121] 步骤S303、控制第五进程根据第二拓扑更改消息,将退出节点的拓扑信息从本地拓扑信息中删除。
[0122] 这样在分布式场景下,在有新的通信节点加入和有通信节点退出时,均会同步更新每个进程内的本地拓扑信息,保证了每个进程内的通信拓扑都是最新的,保证了分布式一致,在以后的调试场景中,只需要检索本地的所有主题消息或者服务消息对应的拓扑信息即可得到通信拓扑中对应消息类型的所有通信节点的拓扑信息,大大降低了调试成本。
[0123] 本实施例的另一实施方式中,域内任意两个通信节点可以根据本地拓扑信息直接建立通信连接并进行通信。
[0124] 可选的,任意两个通信节点在建立通连接之后,根据两个通信节点的拓扑信息确定待通信的两个通信节点的拓扑关系,拓扑关系包括:同一进程,同一宿主机的不同进程或不同的宿主机;根据待通信的两个通信节点之间的拓扑关系,控制该两个通信节点采用拓扑关系对应的通信方式进行通信。
[0125] 具体的,若该两个通信节点的拓扑关系为同一进程,则控制该两个通信节点采用进程内通信的通信方式进行通信。例如,可以通过指针的方式实现同一进程内通信。
[0126] 若该两个通信节点的拓扑关系为同一宿主机的不同进程,则控制该两个通信节点采用进程间通信的通信方式进行通信。例如,可以通过共享内存的方式实现同一宿主机的不同进程的进程间的通信。
[0127] 若该两个通信节点的拓扑关系为不同的宿主机,则控制该两个通信节点采用跨宿主机通信的通信方式进行通信。例如,可以通过socket通信方式实现跨宿主机通信。
[0128] 本发明实施例对有新通信节点加入和通信节点退出时动态地维护通信拓扑的过程进行了详细地说明,通过第二进程将与第一进程消息类型相匹配的通信节点的拓扑信息以单播方式发送给第一进程,减少了不必要的数据传输,降低了网络开销,在有新的通信节点加入和有通信节点退出时,均会同步更新每个进程内的本地拓扑信息,保证了每个进程内的通信拓扑都是最新的,保证了分布式一致。
[0129] 实施例三
[0130] 图5为本发明实施例三提供的动态拓扑维护装置的结构示意图。本发明实施例提供的动态拓扑维护装置可以执行动态拓扑维护方法实施例提供的处理流程。如图5所示,该装置40包括:获取模块401,进程加入模块402和节点加入模块403。
[0131] 具体地,获取模块401用于获取配置文件,配置文件中包括新加入的通信节点的拓扑信息以及消息类型。
[0132] 进程加入模块402用于为新加入的通信节点分配第一进程。
[0133] 进程加入模块402还用于控制第一进程将该进程的位置信息以及消息类型发送给域内其他第二进程。
[0134] 进程加入模块402还用于控制第二进程将域内与第一进程的消息类型相匹配的通信节点的拓扑信息发送给第一进程。
[0135] 节点加入模块403用于在第一进程中添加新加入的通信节点。
[0136] 节点加入模块403还用于将新加入的通信节点的拓扑信息发布给第二进程。
[0137] 本实施例中,通信节点包括以下至少一种:发布节点、订阅节点、请求节点和服务节点。
[0138] 通信节点的拓扑信息包括所属通信模块标识、宿主机的IP地址、进程的端口号和消息内容类型。
[0139] 第一进程的位置信息包括第一进程的端口号和所在宿主机的IP地址。
[0140] 消息类型包括主题消息和服务消息中的至少一种。
[0141] 发布节点和订阅节点的消息类型为主题消息,请求节点和服务节点的消息类型为服务消息。
[0142] 第一进程的消息类型包括新加入的通信节点的消息类型。
[0143] 本发明实施例提供的装置可以具体用于执行上述实施例一所提供的方法实施例,具体功能此处不再赘述。
[0144] 本发明实施例通过根据配置文件为新加入的通信节点分配第一进程,控制第一进程将该进程的位置信息以及消息类型发送给域内其他第二进程,控制第二进程将域内与第一进程的消息类型相匹配的通信节点的拓扑信息发送给第一进程,在第一进程中添加新加入的通信节点;将新加入的通信节点的拓扑信息发布给第二进程,从而第一进程可以将已有通信拓扑中所有与第一进程消息类型相匹配的通信节点以及第一进程内的通信节点的拓扑信息添加到本地拓扑信息中,第二进程也可以根据新加入的通信节点的拓扑信息更新本地拓扑信息,从而第一进程和第二进程均维护了包括所有与本进程消息类型相匹配的通信节点的拓扑信息,已有通信拓扑中的任一通信节点需要与其他通信节点通信时,通过对应的本地拓扑信息即可直接建立与其他通信节点,提高了无人驾驶汽车通信系统的稳定性和及时性,从而提高了无人驾驶系统的安全性。
[0145] 实施例四
[0146] 在上述实施例三的基础上,本实施例中,节点加入模块还用于:
[0147] 控制第二进程中具有与新加入的通信节点消息类型相同节点的第三进程订阅第一拓扑更新消息,第一拓扑更新消息中携带新加入的通信节点的拓扑信息以及消息类型;控制第三进程根据第一拓扑更新消息,将新加入的通信节点的拓扑信息添加到本地拓扑信息中。
[0148] 可选的,进程加入模块还用于:
[0149] 控制第一进程将接收到的与第一进程的消息类型相匹配的通信节点的拓扑信息添加到本地拓扑信息中。
[0150] 可选的,进程加入模块还用于:
[0151] 控制第一进程向域内广播或者组播新进程加入消息,新进程加入消息包括第一进程的位置信息以及消息类型。
[0152] 本实施例中,该装置还可以包括:节点退出模块。
[0153] 节点退出模块用于:若检测到域内任一通信节点退出,控制退出节点对应的第四进程发布第二拓扑更新消息,第二拓扑更新消息包括该退出节点的拓扑信息和消息类型。
[0154] 可选的,节点退出模块还用于:
[0155] 控制具有与退出节点类型相同节点的第五进程订阅第二拓扑更改消息;控制第五进程根据第二拓扑更改消息,将退出节点的拓扑信息从本地拓扑信息中删除。
[0156] 可选的,该装置还可以包括:通信方式控制模块。
[0157] 通信方式控制模块用于:
[0158] 确定域内待通信的任意两个通信节点之间的拓扑关系,拓扑关系包括:同一进程,同一宿主机的不同进程或不同的宿主机;根据待通信的两个通信节点之间的拓扑关系,控制该两个通信节点采用拓扑关系对应的通信方式进行通信。
[0159] 本发明实施例提供的装置可以具体用于执行上述实施例二所提供的方法实施例,具体功能此处不再赘述。
[0160] 本发明实施例对有新通信节点加入和通信节点退出时动态地维护通信拓扑的过程进行了详细地说明,通过第二进程将与第一进程消息类型相匹配的通信节点的拓扑信息以单播方式发送给第一进程,减少了不必要的数据传输,降低了网络开销,在有新的通信节点加入和有通信节点退出时,均会同步更新每个进程内的本地拓扑信息,保证了每个进程内的通信拓扑都是最新的,保证了分布式一致。
[0161] 实施例五
[0162] 图6为本发明实施例五提供的车载设备的结构示意图。如图6所示,该设备50包括:处理器501,存储器502,以及存储在存储器502上并可由处理器501执行的计算机程序。
[0163] 处理器501在执行存储在存储器502上的计算机程序时实现上述任一方法实施例提供的动态拓扑维护方法。
[0164] 本发明实施例通过根据配置文件为新加入的通信节点分配第一进程,控制第一进程将该进程的位置信息以及消息类型发送给域内其他第二进程,控制第二进程将域内与第一进程的消息类型相匹配的通信节点的拓扑信息发送给第一进程,在第一进程中添加新加入的通信节点;将新加入的通信节点的拓扑信息发布给第二进程,从而第一进程可以将已有通信拓扑中所有与第一进程消息类型相匹配的通信节点以及第一进程内的通信节点的拓扑信息添加到本地拓扑信息中,第二进程也可以根据新加入的通信节点的拓扑信息更新本地拓扑信息,从而第一进程和第二进程均维护了包括所有与本进程消息类型相匹配的通信节点的拓扑信息,已有通信拓扑中的任一通信节点需要与其他通信节点通信时,通过对应的本地拓扑信息即可直接建立与其他通信节点,提高了无人驾驶汽车通信系统的稳定性和及时性,从而提高了无人驾驶系统的安全性。
[0165] 另外,本发明实施例还提供一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时实现上述任一方法实施例提供的动态拓扑维护方法。
[0166] 在本发明所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0167] 所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0168] 另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
[0169] 上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本发明各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
[0170] 本领域技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。上述描述的装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0171] 本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本发明的其它实施方案。本发明旨在涵盖本发明的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本发明的一般性原理并包括本发明未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本发明的真正范围和精神由下面的权利要求书指出。
[0172] 应当理解的是,本发明并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本发明的范围仅由所附的权利要求书来限制。