智能车分布式进程虚拟交换机通信方法

文档序号:9276886阅读:498来源:国知局
智能车分布式进程虚拟交换机通信方法
【技术领域】
[0001] 本发明属于智能车,尤其涉及一种智能车分布式进程虚拟交换机通信方法。
【背景技术】
[0002] 智能驾驶技术涉及计算机科学、通信科学、认知科学、车辆工程、电子电气工程、控 制科学与工程、系统科学与技术、人机工程科学、人工智能等诸多科学。智能车是一种移动 轮式机器人,是智能驾驶发展到高级阶段的产物,是衡量一个国家科研实力和工业水平的 重要标志之一。
[0003] 智能车的开发涉及到软、硬件两个方面。硬件方面需要对车辆进行机械改装和电 子电气改造,为车辆配备具有感知能力的传感器和充足计算能力的计算机。智能车在不同 位置安装多种不同类型的传感器,满足实时、准确、全面获取周边环境信息的要求。软件方 面需要几十甚至上百个软件模块协同工作,完成环境感知、智能决策、路径规划、自动控制 等任务。
[0004] 早期的无人驾驶车辆软件架构设计中,按照信息流向,将软件模块依次分为感知 层、决策层和控制层。同一层次的模块之间相互独立,互不通信,通信只发生在不同层次之 间,多采用TCP、UDP等点对点的通信方式。然而随着无人驾驶车辆系统的日趋复杂,传感器 的数量越来越多,每个传感器都需要独立的软件模块,完成数据的接收、解析、分析和处理。 此外,驾驶地图模块、驾驶先验知识模块、人机交互模块等高级功能模块的加入,在增强无 人驾驶车功能的同时,也使得软件架构越来越复杂。目前典型的智能驾驶车辆上同时运行 的软件模块数量多达几十个,且分布式地运行在多个计算机上,软件模块之间的通信变得 更为错综复杂,某些软件模块会同时跟其他多个软件模块进行跨主机通信。传统的点对点 通信方式,进程间相互依赖性强、数据耦合度高、功能可扩展性差、模块可维护性低等缺点 就集中暴露出来。近几年一些智能车采用点对多点模式,这种模式与点对点模式相比,在降 低数据耦合度、提高可扩展性方面有所提高,但存在代码实现复杂、通信拓扑不清晰、可用 性可维护性较差等问题,无法满足智能车多点对多点的通信需求。无论是TCP还是UDP通 信协议,建立通信通路都需要维护IP地址和端口号,当软件模块数量增加时,需要维护的 通信端口列表将繁冗复杂,导致通信拓扑结构不清晰。同时,点对点通信或点对多点模式也 使得程序代码的可重用性较差,某个模块的调整有可能导致整个系统代码多处的修改,为 软件开发带来了极大的不便。

【发明内容】

[0005] 本发明的目的在于克服上述技术的不足,而提供一种智能车分布式进程虚拟交换 机通信方法,以解决点对点或点对多点通信方法中对于进程间相互依赖性强、数据耦合度 高、代码可重用性低、功能可扩展性差、以及在软件模块数量增加时通信端口列表繁冗复杂 所导致的通信拓扑结构不清晰的问题,实现了各软件模块在时间与空间上的解耦,增加了 软件模块的独立性。
[0006] 本发明为实现上述目的,采用以下技术方案:一种智能车分布式进程虚拟交换机 通信方法,其特征是:采用总线型拓扑结构,基于UDP组播协议,通过订阅/发布消息模式, 实现了智能车软件模块间的数据通信,具体步骤如下:
[0007] -、建立软件模块通信分组:
[0008]智能车软件系统由若干软件模块组成,每个软件模块对应一个进程,软件模块是 从智能车系统角度提出的,进程是从计算机操作系统角度提出的,软件模块以进程的形式 存在于智能车系统中,两者在智能车系统中属同一范畴;
[0009] 二、建立虚拟交换机:
[0010] 虚拟交换机用于局域网内单个或多个计算机上不同进程之间的数据通信,所述虚 拟交换机是基于微软.net平台、应用于局域网、异步收发和直接传递"对象"的总线型分布 式消息中间件,以.net环境下托管动态链接库的形式被进程调用;
[0011] 三、建立虚拟总线:
[0012] 虚拟总线基于UDP组播协议实现,一条虚拟总线相当于一个网络套接字,套接字 的网络地址为私网组播地址,连接到同一条虚拟总线上的各软件模块通过虚拟交换机同时 加入该组播组并监听套接字上的消息,每条总线连接若干进程,所述进程属于局域网内任 何一台计算机,同一总线上的不同进程之间通过订阅消息和发布消息两种模式进行数据通 f目;
[0013] 四、建立消息:
[0014] 虚拟交换机中的一帧消息由三部分组成:
[0015] 消息标题+时间戳+消息内容
[0016] 其中,时间戳由虚拟交换机生成,消息标题及消息内容由软件模块生成;
[0017] 五、建立订阅消息/取消订阅消息:
[0018] 所述订阅消息是进程将消息标题加入到自身内存中的消息订阅列表中,同时将回 调函数地址关联到所述消息标题,
[0019] 所述取消订阅消息是进程将消息标题从消息订阅列表中移除,
[0020] 虚拟交换机为每个进程保存了一张消息订阅列表,存储在该进程的地址空间中, 每个进程维护一个消息订阅列表;
[0021] 六、发布消息:
[0022] 当软件模块发布消息时,虚拟交换机首先将消息内容通过序列化的方式转换成字 节数组,然后与时间戳及消息标题一起形成消息帧,再通过虚拟总线将消息帧发送给所有 连接到该总线的软件模块;
[0023] 采用总线型拓扑结构,所述虚拟交换机通过一条或多条虚拟总线与软件模块连 接,实现软件模块订阅所需消息和发布产生的消息,通信结束后,虚拟总线随着软件模块的 退出而退出。
[0024] 所述虚拟交换机通过虚拟总线编号计算出组播端口,计算方法为:组播端口 = (总线编号+6000) % 1024,侦听该端口号的UDP组播,当虚拟总线有新消息到来时,该进程 空间的虚拟交换程序首先提取该消息标题,然后查找自身消息订阅列表,如果存在该标题, 则在线程池中启动一个新线程执行对应的回调函数,如果不存在则不进行处理;
[0025] 所述发布消息是该进程空间的虚拟交换机首先将消息内容序列化成字节数组,然 后加上时间戳及消息标题形成消息帧,通过虚拟总线编号计算出组播端口号,计算方法为: 组播端口 =(总线编号+6000)%1024,最后通过UDP组播协议将消息广播到以太网。
[0026] 所述虚拟交换机包含可靠传输模式和非可靠传输模式两种运行方式,底层实现分 别对应微软消息队列与UDP多播,不同的虚拟总线,对应不同的多播地址;在同一条虚拟总 线上,能够将数据载荷进一步划分为64位字节的消息头和后面的真正载荷,使得软件模块 能够有选择性的订阅总线上的各类消息。
[0027] 所述虚拟交换机使用方法:虚拟交换机共提供4个接口供软件模块调用:
[0028] 1.连接虚拟总线:VirtualSwitchBus (int busNum);
[0029]【功能】连接虚拟总线
[0030]【参数】
[0031] busNum :总线编号,0 ~1023 ;
[0032]【返回值】无
[0033] 2?订阅消息:int SubMsg(string msgLabel, MsgRecvFunc msgRecvFunc);
[0034]【功能】订阅消息
[0035]【参数】
[0036] msgLabel :消息标题
[0037] msgRecvFunc :回调函数
[0038] 回调函数声明如下:void FuncName (object msgContent, ref DateTime msgSentTime)。其中,msgContent表示接收到的消息内容,msgSentTime表示消息时间戳。
[0039]【返回值】
[0040] 0 :订阅成功;
[0041] 1 :订阅失败;
[
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1