CN113767376A - 用于在车辆部件之间传送信息的消息缓存器 - Google Patents

用于在车辆部件之间传送信息的消息缓存器 Download PDF

Info

Publication number
CN113767376A
CN113767376A CN201880100665.6A CN201880100665A CN113767376A CN 113767376 A CN113767376 A CN 113767376A CN 201880100665 A CN201880100665 A CN 201880100665A CN 113767376 A CN113767376 A CN 113767376A
Authority
CN
China
Prior art keywords
message
messages
topic
registry
node
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
CN201880100665.6A
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.)
Beijing Voyager Technology Co Ltd
Original Assignee
Beijing Voyager 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 Beijing Voyager Technology Co Ltd filed Critical Beijing Voyager Technology Co Ltd
Publication of CN113767376A publication Critical patent/CN113767376A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/12Protocols specially adapted for proprietary or special-purpose networking environments, e.g. medical networks, sensor networks, networks in vehicles or remote metering networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/0284Multiple user address space allocation, e.g. using different base addresses
    • 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/544Buffers; Shared memory; Pipes
    • 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
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/12Protocols specially adapted for proprietary or special-purpose networking environments, e.g. medical networks, sensor networks, networks in vehicles or remote metering networks
    • H04L67/125Protocols specially adapted for proprietary or special-purpose networking environments, e.g. medical networks, sensor networks, networks in vehicles or remote metering networks involving control of end-device applications over a network
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/52Network services specially adapted for the location of the user terminal
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • G06F2212/1024Latency reduction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1032Reliability improvement, data loss prevention, degraded operation etc
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/17Embedded application
    • G06F2212/173Vehicle or other transportation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Medical Informatics (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Computing Systems (AREA)
  • Small-Scale Networks (AREA)
  • Multi Processors (AREA)

Abstract

一种车辆上多个模块之间进行通信的方法,每个模块被配置为利用共享存储器通信***在操作自动驾驶车辆时进行通信的发布者节点或订阅者节点。该方法可以包括由发布者节点生成多组消息,每一组与唯一主题相关联并且由与所述唯一主题相关联的单个发布者节点生成,在与所述唯一主题相关联的消息缓存器中写入一组消息,在注册表中写入这些消息被写入的位置的位置信息,从该注册表读取新消息信息,所述新消息信息指示是否有与特定主题相关联的新消息可用,如果有新消息可用,则读取指示存储该新消息的位置的位置信息,并且从相应的消息缓存器中读取该新消息。

Description

用于在车辆部件之间传送信息的消息缓存器
技术领域
本公开一般涉及一种消息通信架构,具体涉及一种用于车辆中的计算机***的集中式通信架构。
背景技术
车辆软件***可以表示为通过传递消息彼此通信的节点的计算图形。节点是为车辆计算机***子集执行计算的过程。有专用节点来执行本地化、感知、规划和控制操作。例如,与光检测和测距***(LiDAR system)相关的传感器节点可以收集并提供光检测和测距图像作为传感器消息。感知节点可以接收光检测和测距图像消息,并使用该信息基于光检测和测距图像确定围绕车辆的环境的一个方面(例如,车辆前面的物体的距离),并提供与所确定的方面相关的感知消息。控制器节点可以接收感知消息,并使用该感知消息中的信息控制车辆以控制车辆(例如,刹车或者继续在其规划的路线上向前移动车辆)。
来自单独的节点的消息可以经由具有发布/订阅语义的跨进程通信(“IPC”,inter-process communication)***被路由。节点通过将消息发布到给定主题来外发消息。主题是用于标识节点发布的消息内容的名称。对某种数据感兴趣的节点将订阅相应的主题。对于一个主题,可以有多个并行发布者和订阅者,在一个节点中可以发布和/或订阅多个主题。一般来说,发布者节点和订阅者节点不知道彼此的存在。其想法是将信息的生产与其消费去耦。逻辑上,可以将一个主题视为强类型的消息总线。每个总线都是一个名称,只要它们属于正确的类型,任何人都可以连接到该总线以发送或接收消息。
即使进程崩溃,模块化架构仍提供稳定性。例如,单独的进程可能在不关闭整个***的情况下,间歇地崩溃和重新启动。然而,此模块化是有成本的。节点通信所需的跨进程***引入了延迟。将消息保持在低延迟对自动驾驶车辆、提供驾驶员辅助特征的车辆和/或用于基于位置的服务的车辆的安全运行至关重要。在繁忙环境中,车辆(例如自动驾驶车辆、提供驾驶员辅助特征的车辆和/或用于基于位置的服务的车辆)接受大量输入,往往要求迅即控制动作来达到车辆的安全性和车辆附近的人员和财产的安全性。例如,车辆可以接收指示行人或接近的车辆在其车道上的信号,并且必须能够读取并且能够迅即反应。
此外,对于多个订阅者订阅主题的***存在非必要的开销。对于每个订阅者,都必须在发布者和每个订阅者之间建立通信路径。每个路径都需要内核交互。当大量消息(例如,数千到数百万以及更多)被传送,在此类***中的开销处理会影响计算资源。机器人操作***(ROS)使用的传输控制协议/互联协议(TCP/IP)由于路由选择、确认字符(ACK)、流控制等而有太多的开销。实际上,任何基于管道的跨进程机制都由于以下一个或多个原因而非常不适合于实时***:(1)相对于较新的数据,管道有利于较旧的数据,并且可能阻碍或丢弃您的消息,这与运行实时***所期望的相抵触;(2)消息经内核路由,可能会引入多个场景切换;(3)对于每一对发布者订阅者,消息被复制至少两次(发布者至内核以及内核至订阅者),对于每个发布的消息和订阅消息的效率低下;(4)由于内核存储器有限,需要多次迭代地将大消息拆分成块并传送;以及(5)由于实时***通常在固定定时器上运行,因此信号机制的开销是非必要的。
发明内容
本发明的***、方法和设备各具有若干方面(特征),不存在其中一个方面单独负责其所期望的属性。在不限制由所附权利要求所表达的本发明范围的情况下,下文描述一些方面。
一个创新包括一种在车辆上实施的***,例如在自动驾驶车辆中。在一些实施例中,该***包括用于车辆上的计算机***中的模块之间进行通信的共享存储器消息***,该***包括多个模块,每个模块被配置为执行与控制车辆相关的功能,这些模块中每个模块包括关联节点,该关联节点被配置为用于写入与其代表性模块相关的主题的消息的发布者节点,或被配置为用于读取另一个节点写入的另一个主题的消息的订阅者节点,或者兼有地配置为用于写入与其关联于的模块相关的主题的消息的发布者节点和用于读取由另一节点写入的另一个主题的消息的订阅者节点,这些多个模块中每个节点定义了用于在这些多个模块之间传送消息的多个节点。该***还包括在数据存储部件上实现的主题注册表,该主题注册表被配置为存储指示用于多组消息的存储位置的信息,每一组消息与唯一主题相关且每一组消息被存储在不同的消息缓存器中且由这些多个节点之一发布,多个消息缓存器各自与该主题注册表通信,每个消息缓存器包括环形缓存器存储部件,其被配置为存储由这些多个节点之一发布的消息,以及耦合到该主题注册表的通信总线、多个消息缓存器和多个节点。该通信总线被配置为使得节点能够直接将消息直接写入这些消息缓存器的至少其中之一,并且将指示所写入的消息所在位置的位置信息写入主题注册表,并且使得节点能够使用来自主题注册表指示特定主题的消息所在位置的信息,直接从这些消息缓存器的至少其中之一中读取特定主题的消息。
本文描述的***的实施例可以具有多种***实施例中的一个或多个其它方面(特征),本文提出了这些方面的其中一些。然而,正如本领域技术人员所能认识到的,此类***的多种实施例可具有附加的方面或更少的方面,并且本文公开的多个方面可在多个实施例中一起使用,即使未具体图示或描述为在某一实施例中。例如,在一个方面中,每个节点包括耦合到存储器部件的至少一个处理器。在另一个方面中,该通信总线被配置为使得这些多个节点中的订阅者节点能够直接从消息缓存器读取消息而不经过计算机***的内核。在另一个方面中,该通信总线被配置为使得这些多个节点中的发布者节点能够将消息直接写入到消息缓存器而不经过计算机***的内核。
在此类***的另一个方面中,该主题注册表被配置为存储在这些多个消息缓存器的任何一个中存储的每个消息所在位置的信息。在另一个方面中,每个消息的主题注册表中存储的信息包括表示存储每个消息的消息缓存器的地址的数据。在另一个方面中,每个消息的主题注册表中存储的信息包括表示每个消息的主题的数据。在另一个方面中,由每个消息的主题注册表存储的信息包括表示对应消息的发布频率的数据。在另一个方面中,由消息的主题注册表存储的信息包括存储对应消息的消息缓存器中该消息的开始位置。在另一个方面中,由消息的主题注册表存储的信息包括在将该消息写入时,在存储该消息的消息缓存器中,该消息结束的暂定位置。
在另一个方面中,在此类***中,这些多个消息缓存器中每个消息缓存器存储与一个主题相关的消息。在另一个方面中,多个消息缓存器的一个消息缓存器存储与一个主题相关的所有消息。在另一个方面中,每个订阅者节点写入与一个主题相关的消息。在另一个方面中,一个或多个订阅者节点读取与多于一个主题相关的消息。在另一个方面中,每个消息缓存器被配置为存储来自发布者节点的多个消息,每个存储的消息包括与消息和消息内容有关的信息。在另一个方面中,这些多个消息缓存器被配置为存储来自发布者节点的预定大小的消息。在另一个方面中,这些多个消息缓存器被配置为存储来自发布者节点的动态确定的大小的消息。
在另一种创新中,用于车辆上的计算机***中的模块之间进行通信的共享存储器消息***,被配置为执行与控制车辆相关的功能。该***可以包括多个模块,每个模块表示为一个节点,这些多个模块共同表示为多个节点,每个节点被配置为用于写入与其代表性模块相关的主题的消息的发布者节点或用于读取由另一个节点写入的另一个主题的消息的订阅者节点,或二者兼有。该***还可以包括在数据存储部件上实现的主题注册表,其被配置为存储指示存储位置的信息。该***还可以包括各自与主题注册表通信的多个消息缓存器,每个消息缓存器在存储部件上实现,该存储部件被配置为存储由多个节点的其中之一发布的消息。该***还可以包括耦合到主题注册表、这些多个消息缓存器和多个节点的通信总线,其中该通信总线被配置为使得发布者节点消息被存储在消息缓存器中,并且关联的存储位置信息被存储在主题注册表中,而无需通过所述计算机***的内核,并且使得订阅者节点能够使用来自主题注册表的信息直接从消息缓存器读取消息,而不通过内核。
另一个创新包括一种车辆上的***中的多个模块之间传送消息的方法,这些多个模块中的每个模块被配置为写入消息的发布者节点、读取消息的订阅者节点、或者兼为发布者节点和订阅者节点,该发布者节点和订阅者节点共同形成在操作该车辆时进行通信的多个节点。此类方法的一个示例包括:通过多个节点的发布者节点生成多组消息,每组消息与唯一主题相关联并由与唯一主题相关联的单个发布者节点生成,由发布者节点,将多组消息中每组消息写入关联与该组消息相同的主题的相应消息缓存器的存储器位置,相应消息缓存器是多个消息缓存器的其中之一,多个消息缓存器中的每个与一个消息主题相关联,由每个发布者节点且对于写入消息缓存器中的每个消息,在注册表中写入指示已将消息写入于的位置信息,其中,注册表被配置为存储将写入消息缓存器中的每个消息与消息缓存器的地址相关联的位置信息、写入消息缓存器的每个消息所存储于的存储器位置,以及主题,由订阅者节点,从注册表读取新消息信息,新消息信息指示是否有与特定主题相关联的新消息可用,订阅者节点的每个订阅者节点被配置为读取多组消息中的一组或更多组,并且由订阅者节点中的每个订阅者节点,使用从注册表读取的新消息信息,确定是否有与关联于相应订阅者节点的主题也相关联的至少一个新消息可用。该方法还包括响应于确定有至少一个新消息可用,由相应订阅者节点中的每个订阅者节点,从该注册表读取指示至少一条新消息所存储于的位置的位置信息,并且由相应订阅者节点中的每个订阅者节点,从相应消息缓存器读取至少一个新消息。
本文描述的方法实施例可以具有多种***实施例中的一个或多个其它方面(特征),本文提出了这些方面的其中一些。然而,正如本领域技术人员所能认识到的,此类方法的多种实施例可具有附加的方面或更少的方面,并且本文公开的多个方面可在多个实施例中一起使用,即使未具体图示或描述为在某一实施例中。例如,在一个方面中,在注册表中写入包括:在注册表中写入指示消息缓存器中消息开始的位置和消息缓存器中消息结束的位置的信息。在另一个方面中,在注册表中写入包括:写入指示在将消息写入消息缓存器完成之前消息结束所在位置的信息。在另一个方面中,该方法可以还包括:由生成消息的发布者节点,确定消息大小,其中,指示消息在消息缓存器中结束的位置的信息是由消息的大小确定的暂定位置。在另一个方面中,写入多组消息中的每一组消息包括对应于每个消息,写入消息的大小。在另一个方面中,消息的大小包括消息有效负载和消息填充的总和。
在该方法的另一个方面中,该方法还包括确定消息大小是否大于在相应消息缓存器中分配的用于存储消息的消息大小,并且响应于确定该消息大小较大,在相应消息缓存器中重新分配更大的消息存储大小。在另一个方面中,该消息还包括对于每个消息主题,在注册表中,生成在相应消息缓存器中存储的主题的消息的数量计数。在另一个方面中,该新消息信息包括相应消息缓存器中存储的主题的消息的数量计数。在另一个方面中,该方法还包括:在每个订阅者节点处,生成读取消息信息,读取消息信息包括由所述每个订阅者节点已读取的主题的消息计数。在另一个方面中,确定是否有与主题相关联的至少一个新消息可用包括:在每个订阅者节点处,将注册表中的新消息信息中的主题的新消息的计数与订阅者节点已读取的主题的消息计数相比较,方法还包括当新消息计数大于订阅者节点的已读取消息计数器,确定有与第一主题相关联的新消息可用于读取。在另一个方面中,这些多个模块中的每个模块在至少一个处理器上实现。在另一个方面中,至少两个订阅者节点与同一主题相关联。在另一个方面中,至少一个订阅者节点与两个或更多个主题相关联。
在另一个方面中,从注册表读取包括:在不利用计算机***的内核的情况下,从注册表读取。在另一个方面中,从消息缓存器读取包括:在不利用计算机***的内核的情况下,从消息缓存器读取。在另一个方面中,写入注册表包括:在不利用计算机***的内核的情况下,写入注册表。在另一个方面中,写入消息缓存器包括:在不利用计算机***的内核的情况下,写入消息缓存器。在另一个方面中,注册表和多个消息缓存器被配置为能够被发布者节点直接访问的共享存储器位置。在另一个方面中,注册表和多个消息缓存器被配置为能够被订阅者节点直接访问的共享存储器位置。
另一个创新包括一种车辆上的***中多个模块之间传送消息的方法,多个模块中的每个模块在至少一个处理器上实现且被配置为写入消息的发布者节点、读取消息的订阅者节点或者发布者节点和订阅者节点两者,发布者节点和订阅者节点共同形成在操作车辆时进行通信的多个节点。在一些实施例中,该方法包括:由第一发布者节点生成与第一主题相关联的第一消息,由第一发布者节点将第一消息写入多个消息缓存器中的第一消息缓存器中的存储器位置中,第一消息缓存器与第一主题相关联且被配置为存储与第一主题相关联的多个消息,这些多个缓存器中的其它缓存器各自与唯一消息主题相关联且被配置为各自存储与其关联于的消息主题相关联的多个消息,其中存储第一条消息的存储器位置是订阅者节点可访问的共享存储器位置,这些订阅者节点被配置为读取与第一主题相关的消息,并且由第一发布者节点在注册表中写入与写入第一消息相关联的信息,该注册表被配置为存储指示第一消息缓存器的通信地址的位置信息和指示第一消息缓存器上存储第一消息的存储器位置的位置信息。
本文描述的方法实施例可以具有多种***实施例中的一个或多个其它方面(特征),本文提出了这些方面的其中一些。然而,正如本领域技术人员所能认识到的,此类方法的多种实施例可具有附加的方面或更少的方面,并且本文公开的多个方面可在多个实施例中一起使用,即使未具体图示或描述为在某一实施例中。例如,在一个方面中,在第一消息缓存器中写入第一消息包括:经由通信总线在第一消息缓存器中写入第一消息,通信总线被配置为在多个节点与多个消息缓存器之间传送消息。在另一个方面中,在注册表中写入与第一消息相关联的信息包括经由通信总线,在注册表中写入与第一消息相关联的信息,其中该通信总线还被配置为在注册表与多个节点的每个节点之间传送位置信息。在另一个方面中,在第一消息缓存器中写入第一消息包括:经由该通信总线,在第一消息缓存器中直接写入第一消息。在另一个方面中,在第一消息缓存器中直接写入第一消息包括:在第一消息缓存器中写入第一消息而不通过***内核的通信交互。在另一个方面中,在注册表中写入与第一消息相关联的信息包括:经由该通信总线,由第一发布者节点在该注册表中直接写入信息。在另一个方面中,在注册表中直接写入与第一消息相关联的信息包括:在该注册表中写入信息而无需通过***内核中的通信交互。在另一个方面中,第一发布者节点还被配置为通过该通信总线,将与在第一消息缓存器中写入第一消息相关联的信息直接传送到注册表。在另一个方面中,这些多个节点包括多个发布者节点和多个订阅者节点。
在此类方法的另一个方面中,这些多个发布者节点中的每个发布者节点写入多个消息,每个消息与特定的主题相关联,并且其中这些多个消息中与相同主题相关联的消息由这些发布者节点中同一个发布者节点写入。在另一个方面中,该方法还可以包括由第一发布者节点生成与第一主题相关联的第二消息,由第一发布者节点将第二消息写入第一消息缓存器中的存储器位置中,并且由该发布者节点在注册表中写入与在第一消息缓存器中写入与第二消息相关联的信息,其中该注册表还被配置为存储指示存储第二消息存储于第一消息缓存器中的存储器位置的位置信息。在另一个方面中,该方法还可以包括由第二发布者节点生成与第二主题相关联的第二消息,由第二发布者节点将第二消息写入多个缓存器的第二消息缓存器中的存储器位置中,并且由第二发布者节点在注册表中写入与在第二消息缓存器中写入第二消息相关联的信息,其中该注册表还被配置为存储指示第二消息存储于第二消息缓存器中的存储器位置的位置信息。在该方法的另一个方面中,该方法还可以包括,由第一发布者节点确定第一消息缓存器中下一个可用于存储消息的位置,其中这些多个节点被配置为使得第一发布者节点是写入第一消息缓存器的唯一发布者节点,并且在第一个消息缓存器中存储第二消息使得其开始于所确定的下一个可用存储位置。在另一个方面中,这些多个消息缓存器中每个消息缓存器被配置为环形缓存器。在另一个方面中,每个消息的主题注册表中存储的信息包括表示每个消息的主题的数据。在另一个方面中,这些多个消息缓存器和注册表在***的一个或多个存储部件上实现,该一个或多个存储部件是与实现多个模块中任意模块的存储部件的不同部件。在另一个方面中,位置信息还指示被写入到该消息缓存器中的消息的结束。在另一个方面中,该注册表还被配置为存储这些多个消息缓存器上存储的所有消息的位置信息。
另一个创新包括一种车辆上的***中的多个模块之间传送消息的方法,这些多个模块中的每个模块被配置为写入消息的发布者节点、读取消息的订阅者节点或者兼为发布者节点和订阅者节点,该发布者节点和订阅者节点共同形成在操作该车辆时进行通信的多个节点。在一些实施例中,该方法包括由包括至少一个订阅者节点的第一组订阅者节点中的每个订阅者节点与注册表(本文中有时称为“主题注册表”)通信,以读取注册表上的信息,用于确定是否有与第一主题相关联的新消息可用于读取,这些第一组订阅者节点中每个订阅者节点被配置为读取与第一主题相关联的消息,然后由第一组订阅者节点中的每个订阅者节点使用从注册表中读取的信息来确定是否有与第一主题相关联的新消息可用于读取。该方法还包括响应于确定有与第一主题相关联的新消息可用于读取,由第一组订阅者节点中每个订阅者节点,从注册表读取指示在与第一主题相关联且被配置为存储与第一主题相关联的消息的第一消息缓存器中第一消息所存储于的位置信息,第一消息缓存器是多个缓存器之一,这些多个缓存器中每个缓存器与不同的主题相关联,并且由第一组订阅者节点中每个订阅者节点,使用指示第一消息所存储于的位置信息从第一消息缓存器读取第一消息。
本文描述的方法实施例可以具有多种***实施例中的一个或多个其它方面(特征),本文提出了这些方面的其中一些。然而,正如本领域技术人员能认识到的,此类方法的多种实施例可具有附加的方面或更少的方面,并且本文公开的多个方面可在多个实施例中一起使用,即使未具体图示或描述为在某一实施例中。例如,在该方法的一个方面中,与注册表通信获取信息以确定是否有与第一主题相关联的新消息可用包括:由每个第一组订阅者节点从注册表读取与第一主题相关联的新消息信息,并且将来自注册表的该新消息信息与存储于第一组订阅者节点中每个订阅者节点中已读消息信息进行比较。在另一个方面中,新的消息信息包括新消息计数器,该方法还包括当与第一主题相关联的消息被写入第一消息缓存器时递增该新消息计数器。在另一个方面中,第一组订阅者节点中的每个订阅者节点的已读消息信息包括已读消息计数器,该方法还包括:由第一组订阅者节点中的每个订阅者节点,在从该第一消息缓存器读取与第一主题相关的新消息时,递增其已读消息计数器。在另一个方面中,将来自注册表的新消息信息与已读消息信息进行比较包括:由第一组订阅者节点的每个订阅者节点,将该注册表的新消息计数器与该订阅者节点的已读消息计数器进行比较。在另一个方面中,该方法还包括:在该新消息计数器大于已读消息计数器时,确定有与第一主题相关联的新消息可用于读取。在另一个方面中,这些多个模块中的每个模块在至少一个处理器上实现。在另一个方面中,第一组订阅者节点包括至少两个订阅者节点。
在另一个方面中,该方法还包括由被配置为读取与第二主题相关联的消息的第二组订阅者节点中的每个订阅者节点,与注册表通信,获取信息来确定是否有与第二主题相关联的新消息可用,第二组订阅者节点包括至少一个订阅者节点,由每个第二组订阅者节点,确定有与第二主题相关联的新消息可用于读取,响应于确定有与第二主题相关联的新消息可用,由第二组订阅者节点中的每个订阅者节点从注册表读取指示将第二消息存储于第二存储器缓存器中的位置信息,第二存储器缓存器与第二主题相关联且被配置为存储与第二主题相关联的消息,并且由第二个组订阅者节点中的每个订阅者节点,使用指示第二消息所存储于的位置信息,从第二个消息缓存器读取第二消息。在一些实施例中,第一组订阅者节点中的至少一个订阅者节点也是第二组订阅者节点中的订阅者节点。在一个方面中,从注册表和第一消息总线读取包括:经由通信总线从注册表和第一消息总线读取,该通信总线被配置为使得订阅者节点能够从注册表中读取位置信息,并且能够从第一消息缓存器中读取消息而无需利用计算机***的内核。在另一个方面中,该注册表被配置为存储指示第一消息缓存器的通信地址的位置信息和指示在第一消息缓存器上第一消息所存储于的存储器位置的位置信息。在另一个方面中,该注册表还被配置为存储与存储在这些多个消息缓存器上的消息相关联的信息,该信息指示与每个存储的消息相关联的主题。在另一个方面中,该注册表被配置为存储位置信息,该位置信息包括指示第一消息缓存器的通信地址的数据以及第一消息所存储于第一消息缓存器的存储器位置。在另一个方面中,该注册表被配置为存储位置信息,该位置信息包括指示第一和第二消息缓存器的通信地址的数据,第一消息存储于第一消息缓存器上的存储器位置,以及第二消息存储于第二消息缓存器上的存储器位置。
在此类方法中,又一个方面可以包括:由注册表存储的每个消息的位置信息包括指示与特定主题相关联的每个消息被发布的频率的数据。在本文描述的此类方法的一些实施例中,一种方法可以还包括由第一组订阅者节点中的每个订阅者节点周期性地与注册表通信,以确定是否有新消息可用于读取。在另一个方面中,对于每个订阅者节点周期性地通信包括:按预定频率与注册表通信以确定是否有新消息是否可用于读取。在另一个方面中,对于每个订阅者节点周期性地通信包括:按预定频率与注册表通信以确定是否有新消息是否可用于读取,这对于至少两个订阅者节点不同。在另一个方面中,周期性地通信包括:对于至少一个订阅者节点,按动态确定的频率与注册表通信以确定是否有新消息可用于读取。
附图简要说明
结合附图,通过以下描述和所附权利要求,本文描述的设备的特征和优点将更加显而易见。这些附图仅描绘根据本公开的几个实施例并且不应被认为是对其范围的限制。在附图中,除非上下文另有说明,否则相似的引用数字或符号通常表示相似的部件。在一些情况下,附图可能是未按比例绘制的。
图1A示出了根据一个实施例的联网车辆环境的框图,其中一个或多个车辆和/或一个或多个用户设备经由网络与服务器交互。
图1B示出了的框图示出根据一个实施例的图1A的车辆与图1A的一个或多个其它车辆和/或服务器通信。
图2是沿道路移动的车辆和车辆可用于确定其地理位置信息的部件的示例的示意图。
图3是一些实施例中可以设在车辆中的计算机***中的多种模块的示例的示意图,每个模块与代表性节点相关联,其中模块可以用来发布某个主题的消息以及订阅一个或多个主题的消息(例如,由一个或多个其它模块发布的消息)。
图4是可以在车辆上的计算机***中实现的共享消息通信***的示例的示意图,该***提供例如图3所示的两个或更多个模块之间的更高效通信。
图5是可以在车辆上的计算机***中实现的共享存储器消息通信***的示例的示意图,其示出了一个代表性架构,该架构包括主题注册表、两个或更多消息缓存器以及通信信道,用于多个节点中每个节点发布一个主题的消息以及订阅由其它多个节点中的一个或多个节点发布的多种主题的消息。
图6是主题注册表和针对特定主题的关联的消息缓存器的一个实施例的示例的示意图。
图7是示出了用于节点在共享存储器消息通信***中发布有关特定主题的消息的方法示例的流程图图示,该共享存储器消息通信***使节点能够发布供其它节点读取的消息,可以在例如图5所示的共享存储器消息通信***上执行。
图8是表示用于节点订阅(或读取)共享存储器消息通信***中有关特定主题的消息的方法示例的流程图图示,该共享存储器消息通信***使节点能够订阅供一个或多个节点发布的消息,可以在例如图5所示的共享存储器消息通信***上执行。
图9是可以设置在车辆上并且可以用于执行本文描述的地图数据加载的计算机***的示例的示意图。
具体实施方式
以下详细描述涉及本发明的某些方面和示例。然而,本发明可以以多种不同的方式来实施。显然,本文中的多个方面可以以多种形式实施,并且本文公开的任何特定结构、功能或两者仅表示本发明的一个或多个实施例。本文公开的各个方面可以彼此独立地来实现,并且这些方面中的两个或更多个方面可以以各种方式进行组合。例如,共享存储器通信***的不同实施例可以使用本文公开的多个方面/特征来实现。此外,可以附加以本文阐述的一个或多个方面或作为替代而使用其它过程、步骤、结构、功能或结构来实现此类方法或者实施此类***。
说明性实施例
下面参照附图描述用于加载地图数据的***和方法的实施例。本领域技术人员能够认识到,在不背离所描述技术的范围的情况下,可以进行多种修改和改变。此类修改和更改理应落入这些实施例的范围内。本领域技术人员还能认识到,一个实施例中包括的部件可与其它实施例互换——来自所示实施例的一个或多个部件可以以任何组合与其它所示实施例包含在一起。例如,可以将本文描述的和/或附图所示的多种部件中的任意组件进行组合、互换或在其它实施例中予以排除。
用于车辆中的计算机***中进行通信的共享存储器消息***的实施例解决了上述涉及具有多个功能模块的问题,这些功能模块共同表示在车辆的集中计算机***内的多个子***上分布的多个消息发布者和多个消息订阅者。在一个实施例中,对于每个主题,有一个该主题的消息发布者,并且对于关于任何主题发布的任何消息可以有多个订阅者。实施例使用共享的存储器是底层的消息传输。此类实施例具有多个优点。包括,例如读取和写入的并发操作,纯用户空间同步以及没有锁定或***调用来调度和/或以其它方式寻址(例如,通过内核)。另一个优点在于其设计具有防崩溃安全性(crash safe)。发布者和订阅者都可以崩溃,然后在崩溃后再次重启后安全地重新加入。发布者将总是能成功地写入其消息。因为在所描述的实施例中使用了环形缓存器,所以如果缓存器已满,缓存器会覆盖最旧的消息。在这种情况下,订阅者可以安全地检测到发生了覆盖,并且可以随后尝试读取较新的消息。
由于发布者和订阅者的操作未连接,慢速订阅者对发布其消息的发布者没有影响。这与典型的***显著不同,在典型的***中,内核协助发布者和订阅者之间的通信,特别是在每个发布者和订阅者之间建立通信信道,因此如果订阅者在通信过程中很慢,发布者操作则被延迟。此外,发布者一次仅复制一个消息到共享存储器。因此,订阅者的数量对发布者没有影响,也不会增加内核必须执行的通信操作的数量。
一般来说,在这种架构中,有两种类型的共享存储器区域在存储设备上实现:主题注册表和两个或更多个消息缓存器。在本文描述的不同实施例中,可以通过多种具体方式来实现所述的主题注册表和多个消息缓存器的架构的功能,作为该架构的若干说明性实施例。在此类***中,可以有许多发布者节点。对于特定主题的每个消息,都有一个发布者节点,其将该主题的消息写入共享存储器空间。多个订阅者节点可以被配置为从该共享存储器空间读取与特定主题相关的消息。此外,被配置为读取与一个主题相关的消息的订阅者节点也可以被配置为读取与其它主题相关的其它消息。即,每个发布者节点被配置为将与某个主题相关的消息写入共享存储器空间,使之能够被至少一个订阅者节点容易地读取。
两个或更多个消息缓存器中的每个消息缓存器都存储与一个主题相关的消息。即,特定消息缓存器中存储的所有消息都与同一个主题相关。消息缓存器可以是环形缓存器。主题注册表可以是集中式阵列,被配置为存储在这些消息缓存器之一中存储的消息的元数据。主题注册表中的每个元素(例如,存储的“主题记录”)对应于在消息缓存器之一中存储的特定消息的元数据。消息主题与消息缓存器中的索引之间的映射是***不同模块之间的共识。在一些实施例中,来自每个消息而存储在主题注册表中的信息指示储有这些消息的消息缓存器的地址,以及消息所涉及的主题的名称。因此,时常(例如,根据该订阅者节点的某个周期)要读取其订阅的消息的订阅者节点,可以检查主题注册表以确定消息与其订阅的主题相关,在哪里找到这些消息,然后可以使用来自主题注册表的信息从这些消息所存储于的对应消息缓存器中读取这些消息,以访问这些消息。
在一些实施例中,主题注册表还包括与某个发布者节点发布消息的频率相关的信息。在一些实施例中,如果发布者节点没有按预期的频率(如主题注册表上该消息的频率信息所指示的)发布消息,则可以生成***告警。例如,车辆,例如自动驾驶车辆、提供驾驶员辅助特征的车辆和/或用于基于位置的服务的车辆,可能使用多个传感器来持续确定有关其环境的信息。如果发布与光探测和测距相关的消息(例如,光探测与测距图像)的传感器发布者节点停止发布其消息或以低于如主题注册表中该消息主题的信息所指示的预期消息频率的频率发布其消息,则可以生成警告以通知控制***有意外状况发生,因此可以缓解光探测与测距数据的丢失或缺陷。
可能有多种具体方式来实现本文描述的架构实施例。无论具体实现方式如何,发布者节点都被配置为写入被配置为存储特定主题的消息的消息缓存器,并使用主题注册表信息来确定要将消息写入哪里;类似地,订阅者节点使用主题注册表信息来确定在哪里读取其订阅的消息,并从消息缓存器的共享存储空间中读取这些消息。发布者节点可以将其消息写入消息缓存器并更新主题注册表,而无需使用计算机***内核管理此通信。如本文所引述的“内核”是指作为计算机操作***的核且完全控制该***中每一方面的计算机程序的广义术语。例如,内核将应用软件连接到计算机***的硬件。内核可以是启动期间加载的第一程序之一,并且它可以处理启动过程的其它部分,以及来自软件的输入/输出请求,将其转换成中央处理单元的数据处理指令。此外,内核***设备连接到计算机***并管理其存储器。如上文论述,使用使发布者节点(例如,执行特定功能以及写入与该功能相关的消息,例如输出图像)与订阅者节点(例如,执行另一个功能并读取与该功能相关的消息,例如,输入图像)之间的直接通信去耦的此共享存储器架构,可以实现许多优点,包括例如,减少内核必须管理的通信任务的数量。
在一些实施例中,消息主题的主题注册表中的元数据包括两个变量,有时称为tale_offset和pending_tail_offset,它们用于同步读取和写入操作。一般来说,tale_offset引用的是消息缓存器中消息开始处的空间。pending_tail_offset引用的是消息缓存器中正在写入的消息将结束处的空间。此类变量由发布者写入并被订阅者读取。对于每个消息主题,有一个环形缓存器来存储这些消息,并且主题注册表包括存储每个主题的消息的消息缓存器的地址。主题注册表还包括指示每个主题的名称的元数据,使得某个主题的订阅者可以引用此元数据来标识并仅读取以其作为订阅者的主题的那些消息。主题注册表还可以包括指示发布消息的频率的信息。因为主题注册表包括指示与每个消息相关联的主题的信息,所以可以有这样一个主题注册表:其包含不考虑主题而存储的每个消息的元数据,并且对于每个主题,都有一个环形缓存器被配置为存储与该主题相关的消息。即,主题注册表包括每个主题的元数据。每个主题对应于一个消息缓存器。每个消息缓存器都可以存储属于该主题的一个或多个消息。在与多种主题相关的消息为大小不同的情况下,与主题集对应的消息缓存器中分配的空间被设置为适应于其存储的特定消息。在该消息缓存器中,可以其大小为后缀写入每个消息。
在此类共享存储器通信***的一些实施例中,订阅者知道消息是否已被丢弃,或监视服务确定消息是否按期望的速率发布可能是有用的。为了帮助实现此功能,可以在主题注册表和订阅者两者上实现消息计数器。每次针对一主题写入消息时,与该主题相关联的消息计数器递增。每次特定主题的订阅者读取消息时,其与该主题相关联的消息计数器递增。通过将主题注册表中的消息计数器与订阅者的消息计数器相比较,订阅者能够确定消息是否已被丢弃,并且能够确定消息是否在按期望的速率发布。
在一些情况中,针对特定主题发布(且存储在特定消息缓存器中)的消息可能大小有所差异。因此,在一些实施例中,当发布者要写入比先前分配的存储空间更大的消息时,它能够在消息缓存器上分配更大的存储空间。
为了帮助实现共享存储器通信***的上述功能,需要在编译时声明所有这些消息主题。每个主题所需的信息可以包括,例如主题名称、所发布消息的最大消息大小、共享存储器消息缓存器大小以及发布速率。因为所有主题在编译时都是已知的,所以可以对主题自动赋予例如实体ID(integer ID)的元数据,并将其作为主题注册表中的索引。在有不同类型消息,例如,车载消息、场外(off-board)消息和测试消息的一些实施例中,可以通过不同的主题注册表来管理每种不同类型的消息。因此,一些实施例可以包括两个或更多个主题注册器,其中,在此类实施例中,每个主题注册表管理不同类型的消息,每个主题注册表与各自存储有特定主题的消息的消息缓存器相关联。
虽然本文描述的共享存储器架构不依赖于节点的知识,但是出于***监视的目的,在一些实施例中,该知识对于还要静态地定义计算图形可能是有用的。在此类实施例中,每个节点所需的信息可以包括输入消息主题和输出消息主题。在一些实施例中,可以采用JavaScript对象表示法(JSON,JavaScript Object Notation)格式指定主题/节点信息(并且可选地以静态库(protobuf)来定义模式(schema)),以便在运行时易于从python/js/etc.访问。此外,可以生成C++源代码的编译时常量(compile-time constants),使其更容易且更高效地从C++使用。
在一些实施例中,为了更容易计算和调整***的特性(例如,最大消息大小和消息大小缓存器),***可以被配置为监视所生成的消息并确定多种特征的分布。即使该特性对于当前消息是不可调节的,仍可以传递消息,并且可以向开发人员发送告警以指示需要对这些特征进行调整。例如,如果一些消息大于最大消息大小但小于消息缓存器大小,则这些消息仍可以被传递以进行处理,但每次可以将事件作为警告记录,以便让开发人员知道他们需要调整该主题的配置特征。如果消息大于消息缓存器大小,则可以丢弃这些消息,并且可以将事件记录为对开发人员的更严重警告,以便尽快将其解决。
尽管每个主题有多于一个的发布者节点的***是可能的,但在几乎所有情况下,每个主题只有一个发布者节点。因此,在此类实施例中,***可以被设计为仅仅支持每个主题的一个发布者,并且可以对共享存储器文件的命名方案确定固定的路径。例如:
主题注册表:/dev/shm/voy.<session_id>.topic_registry.<namespace>
主题:/dev/shm/voy.<session_id>.topic_registry.<namespace>.<topic_index>.<generation)id>在一些实施例中,可以将文件名限制为不大于255个字符。
在一些实施例中,可以使用来自命令行标志的值(如果有的话)或者使用来自ROS_MASTER_URI环境变量(env variable)的端口号(如果有的话)或使用如0的某个默认值来执行会话ID(session ID)的确定。共享存储器文件不被删除。为了确保订阅者不仍然使用相同的会话ID从前一个会话中读取消息,订阅者可以将其要读取的消息的索引指示符设置为等于已为该主题发布的最后一个消息的结束处,例如,将订阅者的“头(head)”(订阅者将开始读取的位置)设置为“tail_now”(订阅者订阅的特定主题的最后一个消息的结束处)。虽然这可能导致订阅者错过该发布者已发布的所有消息,但是随着此类实时***中当前和/或持续在发布消息,这对大多数操作的影响(如果有的话)可能最小。
图1A示出根据一个实施例的网络车辆环境100的框图,其中一个或多个车辆120和/或一个或多个用户设备102经由网络110与服务器130交互。例如,车辆120可以配备成提供出行共享和/或其它基于位置的服务,以帮助驾驶员控制车辆操作(例如,通过多种驾驶员辅助特征,例如自适应和/或常规巡航控制,自适应前灯控制,防抱死刹车、自动泊车、夜视、盲点监测、碰撞避免、防侧风稳定、驾驶员疲劳检测、驾驶员监控***、紧急驾驶员协助,交叉路口辅助、缓坡陡降控制、智能速度自适应、车道居中、车道偏离警告、前方、后方和/或侧方停车传感器、行人检测、雨量传感器、环视***、胎压监测器、交通标志识别、转向辅助、逆向驾驶警告、交通状况提示等)和/或完全控制车辆运行。因此,车辆120可以是常规的汽油、天然气、生物燃料、电动、氢气等的且被配置为提供共享出行和/或其它基于位置的服务的车辆,提供驾驶员辅助功能(例如,一个或多个本文描述的驾驶员辅助特征)的车辆或自动或自主驾驶车辆(AV)。车辆120可以是汽车、卡车、面包车、公共汽车摩托车、踏板车、自行车和/或任何其它机动车辆。
服务器130可以与车辆120通信以获得车辆数据,例如路线数据、传感器数据、感知数据、车辆120控制数据、车辆120部件故障和/或故障数据等。服务器130可以处理和存储这些车辆数据,以在由服务器130和/或另一计算***(未示出)执行的其它操作中使用。此类操作可以包括运行诊断模型以识别车辆120运行问题(例如,车辆120导航误差的原因、异常传感器读数、未识别的物体、车辆120部件故障等);运行模型以模拟给定一组变量的车辆120的性能;识别车辆120无法识别的物体,生成在被车辆120执行时使车辆120沿着指定的路径以某种方式驾驶和/或操控的控制指令;和/或类似操作。
服务器130还可以将数据传送到车辆120。例如,服务器130可以传送地图数据、固件和/或软件更新、车辆120控制指令、未能被车辆120识别的物体的识别结果、乘客接取信息、交通数据和/或者类似信息。
除了与一个或多个车辆120通信之外,服务器130还能够与一个或多个用户设备102通信。具体地,服务器130可以提供网络服务以便让用户能够通过在用户设备102上运行的应用,请求基于位置的服务(例如,运送服务,如共享出行服务)。例如,用户设备102可以对应于计算设备,例如智能电话、平板电脑、笔记本电脑、智能手表、或可以通过网络110与服务器130通信的任何其它设备。在该实施例中,用户设备102执行诸如移动应用的应用,操作用户设备102的用户可以使用该应用与服务器130交互。例如,用户设备102可以与服务器130通信以向服务器130提供位置数据和/或查询,从服务器130接收地图相关数据和/或方向,和/或类似操作。
服务器130可以处理从用户设备102接收的请求和/或其它数据,以标识服务提供方(例如,车辆120驾驶员)以向用户提供所请求的服务。此外,服务器130可以接收数据——例如用户行程接取或目的地数据、用户位置查询数据等——服务器130基于这些数据识别与各种用户相关联的区域、地址和/或其它位置。然后,服务器130可以使用所识别的位置以向服务提供方和/或用户提供指向所确定的接取位置的方向。
可以通过对服务器130负责的相同实体创建和/或制造在用户设备102上运行的应用。备选地,用户设备102上运行的应用可以是包括能够与服务器130通信的特征(例如,应用程序编程接口或软件开发套件)的第三方应用。
为了简洁和易于解释,图1A中示出了一个服务器130。然而,应当认识到,服务器130可以是单个计算设备,或者可以包括逻辑上或物理上组合共同作为服务器***运行的多个不同计算设备。服务器130的部件可以采用专用的硬件(例如,具有一个或多个ASIC的服务器计算设备)来实现,而无需软件,或者可以作为硬件和软件的组合来实现。另外,服务器130的模块和部件可以被组合在一个服务器计算设备上,或者单独地分离或作为分布在若干服务器计算设备上的多个组。在一些实施例中,服务器130可以包括比图1A中所示的附加或更少的部件。
网络110包括任何有线网络、无线网络或其组合。例如,网络110可以是个人区域网络、局域网、广域网、空中广播网络(例如,用于广播或电视的网络)、有线网络、卫星网络、蜂窝电话网络或其组合。作为另一示例,网络110可以是链接网络的可公开访问的网络,可能由各种不同参与方运行,例如因特网。在一些实施例中,网络110可以是私用或半私用网络,例如公司或大学内联网。网络110可以包括一个或多个无线网络,例如用于全球移动通信***(GSM)网络、码分多址(CDMA)网络、长期演进(LTE)网络或任何其它类型的无线网络。网络110可以使用用于经因特网或任何其它上述网络进行通信的协议和部件。例如,网络110使用的协议可以包括超文本传输协议(HTTP)、超文本传输安全协议(HTTPS)、消息队列遥测传输(MQTT)、受限应用协议(CAAP)及类似协议。用于经因特网或前述任何其它类型的通信网络进行通信的协议和部件对于本领域技术人员是公知的,因此本文不再详细描述。
服务器130可以包括导航单元140、车辆数据处理单元145和数据存储150。导航单元140可以协助基于位置的服务。例如,导航单元140可以帮助用户(在此也称为“驾驶员”)将另一用户(在此也称为“搭车者”)和/或物体(例如,食物、包裹等)从第一位置(在此也称为“接取位置”)运送到第二位置(在此也称为“目的地位置”)。导航单元140可以通过向在驾驶员的用户设备102上运行的应用、向搭车者的用户设备102上运行的应用和/或向车辆120上运行的导航***提供地图和/或导航指令来帮助实现用户和/或物体运送。
作为示例,导航单元140可以包括匹配服务(未示出),该匹配服务将请求从接取位置到目的地位置的行程的搭车者与能够完成该行程的驾驶员进行配对。该匹配服务可以与在搭车者的用户设备102上运行的应用和/或在驾驶员的用户设备102上运行的应用交互,以建立搭车者的行程和/或处理从搭车者对驾驶员的付款。
导航单元140还可以在行程期间与驾驶员的用户设备102运行上的应用通信,以从用户设备102获得行程位置信息(例如,通过耦合到和/或嵌入在用户设备102中的全球定位***(GPS)部件),并向该应用提供导航方向,所述导航方向帮助驾驶员从驾驶员的当前位置行驶到目的地位置。导航单元140还可以向驾驶员指示多个不同地理位置或兴趣点,而无论驾驶员是否在搭载搭车者。
车辆数据处理单元145可以被配置为支持车辆120的驾驶员辅助特征和/或支持自动驾驶驾驶。例如,车辆数据处理单元145可以生成地图数据和/或将其传送到车辆120,运行用于识别车辆120的运行问题的诊断模型,运行用于在给定一组变量的情况中仿真车辆120的性能的模型,使用由车辆120提供的车辆数据来识别物体并将物体的标识传送到车辆120,生成车辆120控制指令和/或将其传送到车辆120,和/或类似操作。
数据存储器150可以存储由导航单元140、车辆数据处理单元145、用户设备102和/或车辆120使用的多种类型的数据。例如,数据存储150可以存储用户数据152、地图数据154、搜索数据156和日志数据158。
用户数据152可以包括有关注册了基于位置的服务的一些或所有用户的信息,例如驾驶员和搭车者。该信息可以包括例如用户名、密码、姓名、地址、帐单信息、与用户所采用或所服务的先前行程相关联的数据、用户评级信息、用户忠诚度计划信息和/或类似信息。
地图数据154可以包括从传感器(例如,光探测和测距(LiDAR)传感器、无线电探测和测距传感器、红外相机、可见光相机、立体相机、惯性测量单元(IMU)等)、卫星图像、在捕获的街道图像上执行的光学字符识别(OCR)(例如,识别街道名称、识别街道标志文字、识别兴趣点名称等)等生成的高分辨率(HD)地图;用于计算路线的信息;用于渲染二维(2D)和/或三维(3D)图形地图的信息;和/或类似信息。例如,地图数据154可以包括诸多元素:如街道和十字路口的布局、桥梁(例如,包括有关过街天桥的高度和/或宽度的信息)、出口匝道、建筑物、停车结构入口和出口(例如,包括有关车辆入口和/或出口的高度和/或宽度的信息)、路牌和停车灯的位置、紧急岔道、兴趣点(例如公园、餐馆、加油站、景点、地标等以及关联名称)、道路标记(例如,分隔相对车道的中心线标记、车道标记、停车线、左转引导线、右转引导线、人行横道、公交车道标记、自行车道标记、安全岛标记、路面文字、高速公路出口和入口标记等)、路缘石、铁路线、水路、左右转弯的转弯半径和/或角度、道路特征的距离和尺寸、双向交通之间隔离物的位置,和/或类似元素,连同这些元素的关联的地理位置(例如,地理坐标)。地图数据154还可以包括参考数据,例如实时和/或历史交通信息、当前和/或预测的天气状况、道路作业信息、有关法律和法规的信息(例如,速度限制、是否允许或禁止在红灯时右转、是否允许或禁止掉头、允许的行驶方向和/或类似的信息)、新闻事件和/或类似信息。
虽然地图数据154图示为存储在服务器130的数据存储150中,但这并不意味着是限制性的。例如,服务器130可以将地图数据154传送到车辆120以存储在其中(例如,如下文描述,存储在数据存储129中)。
搜索数据156可以包括过去由多个不同用户输入的搜索。例如,搜索数据156可以包括对接取和/或目的地位置的文本搜索。搜索可以针对特定地址、地理位置、与地理位置相关联的名称(例如,公园、餐厅、加油站、景点、地标等的名称)等。
日志数据158可以包括由一个或多个车辆120提供的车辆数据。例如,车辆数据可以包括路线数据、传感器数据、感知数据、车辆120控制数据、车辆120部件故障和/或故障数据等。
图1B图示的框图示出根据一个实施例的图1A的车辆120与图1A的一个或多个其它车辆170A-N和/或服务器130通信。如图1B所示,车辆120可以包括多种部件和/或数据存储。例如,车辆120可以包括传感器阵列121、通信阵列122、数据处理***123、通信***124、内部接口***125、车辆控制***126、操作***127、地图引擎128和/或数据存储129。
可以在车辆120、一个或多个车辆170A-N和/或服务器130之间发送和/或接收通信180。服务器130可以传送和/或从车辆120接收数据,正如上文结合图1A所描述的。例如,服务器130可以向车辆120传送车辆控制指令或命令(例如,作为通信180)。车辆控制指令可以被通信阵列122(例如,被配置为发射和/或接收无线信号的一个或多个天线的阵列)接收,该通信阵列由通信***124(例如,收发器)来操作。通信***124可以将车辆控制指令传送到车辆控制***126,该车辆控制***可以操作车辆120的加速、转向、刹车、灯光、信号和其它操作***127以便驾驶和/或操控车辆120和/或协助驾驶员驾驶和/或操控车辆120通过道路交通到达由车辆控制指令所指定的目的地位置。
作为示例,车辆控制指令可以包括路线数据163,其可以由车辆控制***126处理以操控车辆120和/或协助驾驶员沿着给定路线操控车辆120(例如,由服务器130和/或地图引擎128计算出的优化路线)驶向指定的目的地位置。在处理路线数据163时,车辆控制***126可以生成控制命令164以供操作***127执行(例如,加速、转向、刹车、操控、倒车等)以使车辆120沿路线行驶到目的地位置和/或协助驾驶员沿线路操控车辆120驶向目的地位置。
目的地位置166可以由服务器130基于从用户设备102上运行的应用传送的用户请求(例如,接取请求、递送请求等)来指定。备选地或附加地,车辆120的搭车者和/或驾驶员可以通过内部接口***125(例如,车辆导航***)提供用户输入169以提供目的地位置166。在一些实施例中,车辆控制***126可以将输入的目的地位置166和/或车辆120的当前位置(例如,作为GPS数据包)作为通信180经由通信***124和通信阵列122传送到服务器130。服务器130(例如,导航单元140)可以使用车辆120的当前位置和/或输入的目的地位置166来执行优化操作以确定车辆120行驶到目的地位置166的最优路线。可以将包括最优路线的路线数据163经由通信阵列122和通信***124从服务器130传送到车辆控制***126。由于接收到路线数据163,车辆控制***126能使操作***127操控车辆120沿最优路线通过交通到达目的地位置166,协助驾驶员操控车辆120沿最优路线通过交通到达目的地位置166,和/或使内部接口***125显示和/或呈现用于操控车辆120沿最优路线通过交通到达目的地位置166的指令。
备选地或附加地,路线数据163包括最优路线并且车辆控制***126自动地将路线数据163输入到地图引擎128中。地图引擎128可以使用最优路线生成地图数据165(例如,生成显示最优路线的地图和/或采取最优路线的指令)并且将地图数据165提供到内部接口***125(例如,经由车辆控制***126)以进行显示。地图数据165可以包括从存储在服务器130上的数据存储150中的地图数据154中导出的信息。显示的地图数据165可以指示估计的到达时间和/或显示车辆120沿最优路线的进程。显示的地图数据165还可以包括指示符,例如改道命令、紧急通知、道路作业信息、实时交通数据、当前天气状况、有关法律和法规的信息(例如,限速、红灯时是否允许或禁止右转、哪里允许或禁止掉头、允许的行驶方向等)、新闻事件和/或类似信息。
用户输入169也可以是访问网络(例如,网络110)的请求。响应于此类请求,内部接口***125可以生成访问请求168,其可以由通信***124处理以将通信阵列122配置为发送和/或接收对应于用户与内部接口***125交互和/或与内部接口***125通信的用户设备102交互(例如,通过无线连接连接到内部接口***125的用户设备102)的数据。例如,车辆120可以包括车载Wi-Fi,乘客和/或驾驶员可以访问该Wi-Fi以发送和/或接收电子邮件和/或文本消息、流媒体音频和/或视频内容、浏览内容页面(例如,网络页面、网页等)和/或访问使用网络访问的应用。基于用户交互,内部接口***125可以经由网络110、通信阵列122和/或通信***124接收内容167。通信***124可以动态地管理网络访问以避免内容167传输中断或将其中断减到最少。
传感器阵列121可以包括任意数量的一种或多种类型的传感器,例如卫星无线导航***(例如,GPS)、光探测和测距传感器、景观传感器(例如,雷达传感器)、惯性测量单元、相机(例如,红外相机、可见光相机、立体相机等)、Wi-Fi检测***、蜂窝通信***、车辆间通信***、道路传感器通信***、特征传感器、接近度传感器(例如,红外、电磁、光电等)、距离传感器、深度传感器和/或类似装置。卫星无线电导航***可以基于对从卫星星座接收的信号进行分析来计算车辆120的当前位置(例如,在1-10米的范围内)。
光探测和测距传感器、雷达传感器和/或任何其它类似类型的传感器可用于在车辆120处于运动中或即将开始运动时检测车辆120周围环境。例如,光探测和测距传感器可用于从接近的物体反射多个激光束,以评估它们的距离并提供有关周围环境的准确三维信息。从光探测和测距传感器获得的数据可用于执行物体识别、运动矢量确定、碰撞预测和/或实施事故避免过程。可选地,光探测和测距传感器可以使用旋转扫描镜组件来提供360°视角。光探测和测距传感器可以可选地安装在车辆120的车顶上。
惯性测量单元可以包括X、Y、Z朝向的陀螺仪和/或加速度计。惯性测量单元提供有关车辆120的旋转和直线运动的数据,其可用于计算车辆120的运动和位置。
相机可用于捕获车辆120周围环境的视觉图像。具体根据相机的配置和数量,相机可以提供车辆120周围的360°视角。来自相机的图像可用于读取道路标记(例如,车道标记)、读取街道标志、检测物体和/或类似操作。
Wi-Fi检测***和/或蜂窝通信***可分别用于对Wi-Fi热点或蜂窝塔进行三角测量,以确定车辆120的位置(可选地结合卫星无线电导航***)。
车辆间通信***(其可包括Wi-Fi检测***、蜂窝通信***和/或通信阵列122)可用于接收和/或向其它车辆170A-N传送数据,例如车辆120的当前速度和/或位置坐标、规划减速时对应的时间和/或位置坐标以及规划的减速率、规划停止操作时的时间和/或位置坐标、规划变道时的时间和/或位置坐标以及变道方向、规划转弯操作时的时间和/或位置坐标、规划停车操作时的时间和/或位置坐标和/或类似操作。
道路传感器通信***(可包括Wi-Fi检测***和/或蜂窝通信***)可用于从道路传感器读取信息(例如,指示车流速度和/或交通拥堵)和/或从交通控制设备读取信息(例如,交通信号)。
当用户(例如,通过在用户设备102上运行的应用)请求运送时,用户可以指定具体的目的地位置。初始位置可以是车辆120的当前位置,其可以使用安装在车辆中的卫星无线电导航***(例如,GPS、Galileo、COMPASS、DORIS、GLONASS和/或其它卫星无线电导航***)、Wi-Fi定位***、蜂窝塔三角测量和/或类似方式来予以确定。可选地,初始位置可由用户通过由车辆120提供的用户界面(例如,内部接口***125)或通过运行该应用的用户设备102来指定。可选地,可以根据从用户设备102获得的位置信息自动确定初始位置。除了初始位置和目的地位置之外,还可以指定一个或多个导航点,从而启用多个目的地位置。
来自传感器阵列121的原始传感器数据161可由车载数据处理***123来处理。处理后的数据162则可以之后被数据处理***123传送到车辆控制***126,并且可选地经由通信***124和通信阵列122传送到服务器130。
数据存储129可以存储地图数据(例如,地图数据154)和/或地图数据154的子集(例如,对应于车辆120当前所在的大致区域的地图数据154的一部分)。在一些实施例中,车辆120可以使用传感器阵列121沿行驶路线记录更新的地图数据,并经由通信***124和通信阵列122将更新的地图数据传送到服务器130。服务器130然后可以将更新的地图数据传送到车辆170A-N中的一个或多个和/或进一步处理更新的地图数据。
数据处理***123可以向车辆控制***126提供连续或接近连续处理的数据162以响应车辆120周围环境中的点对点活动。处理的数据162可以包括原始传感器数据161——表示车辆120的运行环境并且由传感器阵列121连续收集——与存储在数据存储129中的地图数据之间的比较。在一个示例中,将数据处理***123编程为具有机器学习或其它人工智能能力,以使车辆120能够识别和响应状况、事件和/或潜在危险。在变体中,数据处理***123可以连续地或接近连续地将原始传感器数据161与存储的地图数据进行比较以便执行定位以连续地或接近连续地确定车辆120的位置和/或方向。车辆120的定位可使车辆120与存储的地图数据相比能够得知车辆120的即时位置和/或朝向,以便操控车辆120在街区道路上通过交通,和/或协助驾驶员操控车辆120在街区道路上通过交通并且识别和响应潜在危险(例如,行人)或当地状况,例如天气或交通状况。
再者,定位可使车辆120能够对通信阵列122进行调谐或波束转向,以将通信链接的质量提高到最大和/或将来自其它车辆170A-N的其它通信的干扰减到最小。例如,通信***124可以响应于从服务器130接收到的网络配置命令来对通信阵列122的辐射方向图进行波束转向。数据存储129可以存储标识网络基站和/或提供网络连接的其它网络源的当前网络资源地图数据。网络资源地图数据可以指示车辆120所在区域内的基站和/或可用网络类型(例如,3G、4G、LTE、Wi-Fi等)的位置。
虽然图1B将某些操作描述为由车辆120或服务器130执行,但这并不意味着作为限制。如本文描述的由车辆120和服务器130执行的操作可以由任一实体来执行。例如,通常由服务器130执行的某些操作(例如,向车辆170A-N传送更新地图数据)可由车辆120执行以便达到负载平衡目的(例如,减少服务器130的处理负载,利用车辆120上的空闲处理能力等)。
再者,车辆170A-N中的任一个可以包括本文描述的车辆120的一些或全部部件。例如,车辆170A-N可以包括通信阵列122以与车辆120和/或服务器130进行通信。
图2是沿道路移动的车辆和车辆可用于确定其地理位置信息的部件的示例的示意图。计算机***105位于车辆120上,并且执行操作以部分或完全控制该车辆。计算机***105可以包括上文结合图1B描述的车辆120的任何部件。在车辆120在自动驾驶模式下运行的情况中,计算机***105完全控制车辆。计算机***105被配置为执行与定位、感知、规划和控制操作相关的大量功能以控制车辆120。例如,在本发明的多种实施例中,可以使用一个或多个描述的部件或一个或多个其它部件来确定车辆的位置。计算机***105的多种功能和操作可以由计算机***105的模块109执行。多个类型的模块的说明性示例可以在车辆上的计算机***105中实现,如图3中所示。在计算机***105控制车辆120的操作期间,多种模块109传送多种主题的消息,一些模块109写入消息,一些模块109读取消息。在本文描述的共享通信***的实施例的上下文中,写入消息的模块109可以表示为发布者节点,以及读取消息的模块109可以表示为订阅者节点。
图2示出了车辆120沿着道路241移动的示例。道路241可以是车辆120被控制为以自动驾驶方式从第一点行驶到第二点的路线的一部分。在图2中,车辆120以运动矢量230所指示的速度和方向沿着道路241移动。图2还示出了可以被车辆120使用或向车辆120被动地或主动地提供给车辆120可以用来确定车辆120的位置(例如,地理位置)的地理位置信息的定位部件的示例。
当车辆120沿道路241移动时,沿道路241或与车辆120上的传感器通信的定位部件可以用于帮助控制和/或定位车辆120。图2示出了此类定位部件的若干示例,以及在本文中描述的可用于定位和控制车辆的感测***的示例。在一个示例中,近端定位部件250A,250B可以沿着道路241延伸。在多种实施例中,此类部件可以是相接的或紧密布置的,并且可以是无源的(由车辆120上的传感器感测,例如由车辆120上的发射传感器反射,或者由IR或光学传感器感测)或有源的(例如,发射由车辆120感测的辐射)。一个或多个远端定位部件225可以布置在道路旁边或远离道路的某个距离。远端定位部件225也可以是有源的或无源的,以及具有多种实施例。在一些实施例中,全球定位***发射器215可以提供由车辆120接收的GPS信号。在一些实施例中,一个或多个固定发射器220可以沿着道路241布置,并且可以向车辆120提供用于确定其位置的传输或通信。
在多种实施例中,车辆120可以包括传感器***作为计算机***105的一部分,或者可以包括车辆上与计算机***105接口的传感器***。在多种实施例部件中,传感器***可以包括被配置为感测有关车辆120所处且包括定位部件的环境的信息的一个或多个传感器。在多种实施例中,一个或多个传感器可以包括全球定位***(GPS)模块、惯性测量单元(IMU)、无线电检测和测距单元、激光测距仪和/或光探测和测距单元、红外(IR)相机和/或光学相机中的一个或多个。全球定位***模块可以是被配置为估计车辆120的地理位置的任何传感器。为此,全球定位***模块可以包括被配置为根据基于卫星的定位数据估计汽车100相对于地球的位置的收发器。在一个示例中,计算机***105可以被配置为结合地图数据使用全球定位***模块来估计车辆120可能行驶的道路上的车道边界的位置。
惯性测量单元可以是被配置为基于惯性加速度感测车辆120的位置和朝向变化的传感器的任何组合。在一些示例中,传感器的组合可以包括例如加速度计和陀螺仪。传感器的其它组合也是可能的。
无线电检测和测距单元可以被认为是可被配置为使用无线电波来确定物体的特性,例如物体的范围、高度、方向或速度的物体检测***。无线电检测和测距单元可以被配置为发射可从波路径中的任何物体反弹的无线电波或微波的脉冲。物体可以将波的一部分能量返回到接收器(例如,碟形天线或天线),该接收器也可以是无线电检测和测距单元的一部分。无线电检测和测距单元还可以被配置为执行接收到的信号(从物体反弹的)的数字信号处理,并且可以被配置为标识物体。
类似于无线电检测和测距的其它***已经在电磁频谱的其它部分中被应用。一个示例是LiDAR(光探测和测距),可以被配置为使用来自激光的可见光而不是无线电波。
光探测和测距单元可以包括传感器,该传感器被配置为在使用光定位车辆120的环境中感测或检测对象。一般而言,光探测和测距是一种可以通过用光照射目标来测量到目标的距离或其它属性的光学遥感技术。作为示例,光探测和测距单元可以包括被配置为发射激光脉冲的激光源和/或激光扫描仪以及被配置为接收激光脉冲的反射的检测器。例如,光探测和测距单元可以包括通过旋转镜反射的激光测距仪,并且围绕正在被数字化的场景以一维或二维的方式扫描激光,以指定的角度区间收集距离测量值。在多个示例中,光探测和测距单元可以包括诸如光(例如,激光)源、扫描仪和光学元件、光电检测器和接收器电子装置,以及定位和导航***之类的部件。
在一个示例中,光探测和测距单元可以被配置为使用紫外线(UV)、可见光或红外光来对物体成像,并且可以与包括非金属物体的广泛目标范围一起使用。在一个示例中,可以使用窄激光束以高分辨率对物体的物理特征进行地图绘制。
在示例中,可以使用从约10微米(红外线)到约250nm(UV)范围的波长。通常光是通过反向散射来反射的。不同类型的散射用于不同的光探测和测距应用,例如瑞利散射、米氏散射和拉曼散射以及荧光散射。基于不同种类的反向散射,光探测和测距可以相应地称为例如瑞利光探测和测距、米氏光探测和测距、拉曼光探测和测距和钠/铁/钾荧光光探测和测距。合适的波长组合可以通过寻找反射信号强度中波长相关的变化来实现对物体的远距地图绘制。
可以使用扫描和非扫描光探测和测距***两者来实现三维成像。“三维门控成像光探测和测距”是应用脉冲激光和快速选通相机的非扫描激光测距***的一个示例。成像光探测和测距也可以使用高速探测器阵列和调制敏感探测器阵列来执行,该阵列通常使用互补金属氧化物半导体(CMOS,complementary metal-oxide-semiconductor)和混合互补金属氧化物半导体(hybrid CMOS)/电荷耦合器件(CCD,charge-coupled device)制造技术构建在单个芯片上。在这些装置中,每个像素可以通过解调或高速选通在本地进行处理,从而能够处理阵列以表示来自相机的图像。使用这种技术,可以同时获取数千个像素,以创建表示在由光探测和测距单元检测的物体或场景的三维点云。
点云可以包括三维坐标系中的一组顶点。例如,这些顶点可以由X、Y和Z坐标定义,并且可以表示物体的外表面。光探测和测距单元可以被配置为通过测量物体表面上大量的点来创建点云,并且可以将点云输出为数据文件。作为光探测和测距单元对物体进行三维扫描过程的结果,点云可用于标识物体和将其可视化。在一个示例中,可以直接渲染点云以将物体可视化。在另一个示例中,可以通过可以被称为表面重构的过程将点云转换成多边形或三角形网格模型。用于将点云转换成三维表面的示例技术可以包括Delaunay三角剖分(Delaunay triangulation)、alpha形状(alpha shapes)和球旋转(ball pivoting)。这些技术包括在点云的现有顶点上构建三角形网络。其它示例技术可以包括将点云转换为体积距离场并重建通过移动立方体算法界定的隐式表面。
相机可以是被配置为捕捉车辆120所处环境的图像的任何相机(例如,照相机、摄像机等)。为此,相机可以被配置为检测可见光,或者可以被配置为检测来自光谱中其它部分的光,例如红外光或紫外光。其它类型的相机也是可能的。该相机可以是二维检测器,或可以具有三维空间范围。在一些示例中,该相机可以是例如被配置为生成指示从相机到环境中多个点的距离的二维图像的测距检测器。为此,该相机可以使用一种或多种测距技术。例如,相机可以被配置为使用结构光技术,其中车辆120利用预定光图案(例如网格或棋盘图案)照亮环境中的物体并且使用相机来检测预定光图案从该物体的反射。基于反射的光图案的扭曲,车辆120可以被配置为确定到物体上的点的距离。预定光图案可包括红外光或另一个波长的光。传感器***可以附加地或可替换地包括本文描述的以外的部件。
图3是根据一些实施例的可以设在车辆的计算机***105中的多种模块109示例的示意图。计算机***105的多种实施例可以具有更多或更少的模块109或不同的模块109,图3中所示的模块109是此类模块的表示性示例,并且无意限制计算机***105的模块109,或者将其视为是任何特定计算机***105中所必需的。在图3所示的示例中,计算机***105包括车辆位置模块109A、光学传感器模块109B、红外传感器模块109C、光检测和测距传感器模块109D、雷达传感器模块109E、全球定位***模块109F、用户界面模块109G和地图数据-地理模块109H、地图数据-几何模块109I以及惯性传感器模块109J、导航模块109K、自动驱动控制器模块109L、车辆***控制器模块109M、通信接口模块109N以及汽车至汽车接口模块109O。
这些模块109中的每个模块可以发送消息和从计算机***105的任何其它模块109、其它子***和部件,或者连接到脱离车辆120的计算机***105中的***接收消息。为了帮助实现这种通信,可以采用本文描述的共享消息传播器架构。对于这种实现方式,模块109A-O中的每个可以被视为可发布某个主题的消息(例如,提供与传感器数据或控制功能相关的消息)以及用于订阅由模块109中的一个或多个其它模块发布的一个或多个主题的一个或多个消息的代表性节点141a-o。
图4是共享通信***的一部分的示例的示意图,其中示出可以在车辆上的计算机***105中的共享消息通信***中实现的主题注册表410和多个消息缓存器420、425、430,其提供例如图3所示的两个或更多个模块109之间的高效通信。在多种实施例中,单个主题注册表410可以与两个或更多个消息缓存器420、425、430交互,以使发布者节点能够将与某个主题相关的消息写入被配置为存储该主题的消息的消息缓存器,以及使得多个订阅者节点能够读取消息缓存器420、425、430中任一消息缓存器上存储的消息。
主题注册表410是用于存储与***中所有节点141发布的消息相关的信息的单个注册表。主题注册表410包括与在消息缓存器420、425、430中每个消息缓存器中存储的与每个消息相关的主题记录411、412、413(例如,主题记录411有关于消息缓存器420中存储的消息,主题记录412有关于消息缓存器425中存储的消息,主题记录413有关于消息缓存器430中存储的消息)。对于消息缓存器420、425、430中存储的每个消息,主题注册表410包括用于发布者节点将消息写入消息缓存器420、425、430之一的信息,以及用于订阅者节点从消息缓存器420、425、430之一读取消息的信息。例如,主题注册表410可以对应于每个消息包括该消息所存储于的消息缓存器的地址,与每个消息相关的主题的名称以及预期要发布的一个主题的消息的频率。
消息缓存器420、425、430可以在一个或多个存储设备上实现。在一些实施例中,两个或更多个消息缓存器可以在同一存储设备上实现。消息缓存器420、425、430中的每个消息缓存器存储特定(单个)主题的消息。例如,消息缓存器420存储第一主题的消息421、422、423,消息缓存器425存储第二主题的消息426、427、428,以及消息缓存器425存储第三主题的消息431、432、433。因为消息有关于多个信息(例如,传感器数据、导航、控制功能),所以一个主题的消息相对于另一个主题的消息在大小上可能有(很大)差异。利用每个消息缓存器存储单个主题的消息,可以为所存储的主题的消息的预期消息大小分配每个消息缓存器中的存储器。每个消息缓存器被配置为环形缓存器,使得一旦将消息写入缓存器中的最后一个可用存储位置,则如连接435所指示的,缓存器环绕到达缓存器的开始处,并且可以继续该消息或其它消息的写入。
图5是可以在车辆上的计算机***中实现的共享传播器通信***的示例的示意图,示出了包括主题注册表,两个或更多消息缓存器的表示性架构,以及多个节点中的每个节点的通信信道,以对主题的发布消息,并订阅由其它多个节点中的一个或多个发布的各种主题的消息。图5示出了彼此通信的图4中所示的主题注册表410和消息缓存器420、425、430,其可以是或被视为经由通信总线505、510、515、520进行传送,这些通信总线将每个节点141a-o连接到每个主题注册表410和适用的消息缓存器420、425、430中的每个。即,可以将工作的共享存储器读/写功能视为通信总线。例如,多个节点141中的发布者节点写入或多个节点141中的订阅者节点从中读取的消息缓存器。因此,如本文所使用的,术语“通信总线”是广义性的术语,其可以包括允许共享存储器的读取操作和共享存储器写入操作的任何硬件或软件。
图5中表示为通信总线505、510、515、520的通信总线可以是适于按发布和订阅消息之需将节点141耦合到主题注册表410和消息缓存器420、425、430的一个或多个消息缓存器的任何适合的总线结构。虽然在图5示意图中将通信总线示出表示为部分505、510、515和520,但是也可以将其表示为单个总线通信结构。在多种实施例中,通信总线可以包括将节点141有线或无线耦合到主题注册表410和节点141以及消息缓存器420、425、430,以执行本文描述的操作功能,并且可以包括用于主题注册表410与节点141以及消息缓存器420、425、430和节点141之间消息和信息传送的任何合适的硬件和软件。
在该架构中,作为发布节点的节点141中任何一个节点可以经由通信总线505、515、520来访问主题注册表410,并且可以经由通信总线520、515、510访问消息缓存器420、425、430中一个适用的消息缓存器,以将消息写入适用的消息缓存器以及与所写入的消息相关的主题注册表。作为订阅者节点的节点141中任何一个节点可以经由通信总线520、515、505的多个部分访问主题注册表410,并且可以经由通信总线520、515、510的多个部分访问消息缓存器420、425、430中一个适用的消息缓存器,以从适用的消息缓存器上的共享存储中读取消息。
图6是主题注册表410和与其相关联的消息缓存器的实施例示例的示意图,该消息缓存器存储特定主题的消息。主题注册表410包括消息缓存器中的每个消息的条目,例如,主题记录411、412、413。主题记录包括发布节点访问以知道在何处开始将新消息写入与该主题相关联的消息缓存器中的信息。主题记录还包括订阅者节点能够访问以知道在哪里读取其订阅的消息而可访问的信息。正如本领域技术人员所能认识到的,多种实施例可以包括此类索引信息的各种表示法,并且本文描述的仅是有关于此类信息的示例,而无意限制能被使用的信息。
每个记录有关于单独的消息缓存器。在该示例中,每个主题记录411、412、413有关于在相应的消息缓存器421、422、423中存储的对应消息。主题记录中的信息可以指示已写入的消息结束的位置(例如,“tail_offset”变量)。主题记录中的信息可以指示正在写入的消息结束的位置(例如,“pending_tail_offset”变量),其指示正在写入的消息将在消息缓存器中使用多少存储器。tail_offset变量指示已写入的消息在消息缓存器中结束的位置,并且由订阅者节点使用该变量来指示开始读取新消息的位置。pending_tail_offset变量指示正在写入消息缓存器的消息将在哪里结束,并且由发布者节点在写入消息时设置该变量,以指示为该消息分配的空间。每个消息缓存器420、425、430包括与一个主题相关的消息,用于主题注册表中与该主题相关的每个消息条目。在多种实施例中,每个消息可以(例如,在消息的开始或消息的结束处)包括与该消息相关的附加信息。例如,该信息可以包括消息大小,其指示消息内容的大小以及消息中的任何附加填充。可以在主题注册表和消息缓存器中使用多种索引方案,以便帮助将消息高效率地写入消息缓存器和将有关此类消息的信息记录在主题注册表中,以允许订阅者节点和发布者节点高效地访问主题注册表中的消息缓存器,以读取和写入消息。
图7是表示用于节点在共享存储器消息通信***中发布有关特定主题的消息的方法示例的流程图图示,该共享存储器消息通信***使节点705能够发布供其它节点读取的消息,可以在例如图5所示的共享存储器消息通信***上执行。如上,节点可以表示在车辆的计算机***105中执行某种功能的模块109(图2)。因此,在本公开的此处和其它部分中,除非该引用的上下文另有说明,否则对节点141的引用对应于模块109,以及反之亦然。
在框710处,节点生成要发布的消息。例如,从车辆上的传感器收集的图像。在框715处,该节点经由通信总线访问主题注册表,并从主题注册表读取指示要将消息写入哪个消息总线以及节点应该在消息总线中哪里开始写入消息的信息。在每个主题只有一个发布者节点的情况中,消息缓存器可以是已知的,并且在哪里停止在消息缓存器中写入消息也可以是已知的,使得写入消息的位置的路径名称可以是预先知道的。在此类情况中,可以访问发布者节点主题注册表以更新有关正在发布的消息的信息,以使订阅者节点能够访问新消息。例如,在框720处,发布者节点确定该消息将在消息缓存器中结束的位置,并且可以在框725处将此信息更新到主题注册表中。在框730处,发布者节点将消息写入与其正在发布的消息的主题相关联的消息缓存器。因为这些操作包括向共享存储器位置写入的节点而不是在两个进程之间的消息传送,所以访问主题注册表以写入和读取信息以及访问消息缓存器以写入消息无需通过计算机***内核。
图8是表示在共享存储器消息通信***中有关特定主题的消息的节点订阅(或读取)的方法示例的流程图图示,该共享存储器消息通信***使订阅者节点805能够订阅供一个或多个节点发布的消息,可以在例如图5所示的共享存储器消息通信***上执行。在框810处,订阅者节点805检查主题注册表以获取指示已发布主题的新消息的信息。在一个实施例中,主题注册表将具有用于已发布的消息的每个特定主题的计数器。该主题的每个订阅者节点也将具有用于指示已读取该主题的多少个消息的计数器。通过将订阅者计数器与主题注册表计数器进行比较,订阅者节点可以确定是否已发布新消息(例如,当主题注册表的计数器大于订阅者节点的计数器时)。
当有新消息可用时,在框815处,订阅者节点根据主题注册表确定用于读取新消息的起始点,并且在框820处,订阅者节点确定消息所存储于的消息缓存器的地址(如果需要的话)。在框825处,订阅者节点使用主题注册表提供的信息以从消息缓存器读取新消息。因为这些操作包括从共享存储器位置读取的节点而不是在两个进程之间的消息传送,所以访问主题注册表以读取信息以及访问消息缓存器以读取消息无需通过计算机***内核。在框830处,订阅者节点确定有另一个消息要读取(例如,将针对一主题的订阅者节点读取的消息的订阅者计数器与指示针对一主题写入的消息的数量的主题注册表计数器相比较)。如果有新消息可用,则该过程返回到框815,其中订阅者节点确定用于读取新消息的起始点。如果确定此时没有另一消息要读取,则过程800返回到框810,其中订阅者节点继续周期性地检查以查看是否已发布与其订阅的主题相关的新消息。
在多种实施例中,可以实现多种不同的过程来从主题注册表读取信息和向主题注册表写入信息,以及从消息缓存器读取消息和向消息缓存器写入消息。下文是可以在一些实施例中执行以设置与主题注册表、消息缓存器和发布者/订阅者节点相关的某些变量的过程操作的示例。正如本领域技术人员所能认识到的,有许多方法可用于命名和定义与读取信息和消息以及向主题注册表和消息缓存器写入信息和消息相关的变量,并且下面的过程操作仅仅是示例并且无意限制本文描述的任何实施例的特征。
初始状态
以现有共享存储器文件中的值将tail_offset和pending_tail_offset初始化。如果创建共享存储器文件,则将两者都初始化为零。
对于每个读取方:head_offset=tail_offset。
写过程
pending_tail_offset=std::max(tail_offset+msg_size,pending_tail_offset)
actual_size=WriteMessage(msg_bytes)
tail_offset+=actual_size
读取算法
if head_offset==tail_offset:
//没有发布者写入的新消息。
return EAGAIN
msg_size=ReadMessageSize(head_offset)
if pending_tail_offset>head_offset+shm_body_size:
//发布者已覆写刚读取的存储器。
//将head复位到已知的安全位置。
head_offset=tail_offset
return EAGAIN
msg_bytes=ReadMessageBytes(head_offset,msg_size)
if pending_tail_offset>head_offset+sizeof(msg_header)+shm_body size:
//发布者已覆写刚读取的存储器。
//将head复位到已知的安全位置。
head_offset=tail_offset
return EAGAIN
head_offset+=msg_size
return msg_size,msg_bytes
图7和图8描述一种车辆上的***中的多个模块之间传送消息的革新的方法,这些多个模块中的每个模块被配置为写入消息的发布者节点、读取消息的订阅者节点或者兼为发布者节点和订阅者节点,该发布者节点和订阅者节点共同形成在操作该车辆时进行通信的多个节点。此类方法的示例包括由多个节点的发布者节点生成多组消息。每组消息与单个和唯一主题相关联,并且由与该唯一主题相关联的单个发布者节点生成。发布者节点将其各自相应的多组消息写入相应的消息缓存器的存储器位置,即,与该组消息相同主题所关联的消息缓存器。每个消息缓存器是被配置为允许该与消息缓存器存储的消息的主题相关联的发布者节点和订阅者节点访问的多个消息缓存器之一,对于这些消息主题中每个有一个消息缓存器。
发布者节点可以通过对于消息缓存器中写入的每个消息,在注册表(主题注册表)写入指示该消息所写入于(以存储)的位置的某个位置信息来存储消息。注册表被配置为存储在消息缓存器中写入的每个消息与例如,消息缓存器的地址、存储写入消息缓存器的每个消息所在的存储器位置以及该存储的消息所关联的主题,相关联的信息。该方法包括由订阅者节点从注册表读取新消息信息,该新消息信息指示是否有与特定主题相关联的新消息可用。每个订阅者节点被配置为读取这些消息组中的(例如,它们所关联的主题的)一组或多组消息。订阅者节点还被配置为使用从注册表读取的新消息信息来确定是否有与关联于相应订阅者节点的主题相关联的至少一个新消息可用。响应于确定有至少一个新消息可用,确定对于其所关联的主题有新消息可用的每个订阅者节点,从注册表中读取指示该至少一个新消息所所存储于的位置信息。相应订阅者节点还从相应消息缓存器读取至少一个新消息。
发布者节点在注册表中写入可以包括在注册表中写入指示消息缓存器中消息开始的位置(例如,存储器地址)以及该消息缓存器中消息结束的位置(例如,存储器地址)的信息。发布者节点还可以在注册表中写入指示在向消息缓存器写入消息完成之前的消息结束的位置的信息,该位置可以被称为消息缓存器中存储的消息的暂定结束(或尾部)位置。生成该消息的发布者节点可以确定消息大小,并且可以将其用于将消息的暂定位置写入注册表。消息的大小可以包括消息有效负载或内容(例如,图像)和消息填充的总和。如果所确定的消息大小比相应消息缓存器中为存储消息分配的消息大小更大,则在一些实施例中,发布者节点可以在该相应消息缓存器中重新分配更大的消息存储大小。
为了确定是否有新消息可用于发布者节点读取,注册表可以对应于每个主题包括写入相应消息缓存器的新消息的计数器。每个订阅者节点还可以具有与其订阅的每个消息主题相关的计数器。对于特定主题,订阅者节点可以周期性地将该主题的已读消息计数器与该注册表处该主题的新消息计数器核对。当注册表处的新消息计数器大于订阅者节点的已读消息计数器时,指示有新消息。其它实施方式也是可能的,其中注册表处的新消息信息指示有新消息可用于订阅者读取。在一些实施例中,不通知订阅者节点有新消息可用(例如,使用订阅者节点和注册表的上述计数器)。而是,订阅者节点周期性地检查注册表上的新消息信息,并使用新的消息信息来确定是否有新消息可用于读取。不同的订阅者节点可以按不同的周期性检查新消息,具体取决于例如消息的优先级排名,或者取决于某个主题的消息的已知或发布速率。此外,其它因素可以影响订阅者节点检查新消息的频率。例如,车速、车辆位置、车辆采取的操作(例如,泊车,在拥挤的城市中行驶,在乡村公路上行驶),道路上其它车辆的数量或从车辆外源接收的信息。
在多种实施例中,用于订阅者节点和发布器节点的消息传递操作的通信***的配置不需要利用主计算机***的内核,例如,控制车辆操作的内核。与利用内核建立消息生产方与消息接收方之间的通信链接的***不同,使用所描述的共享存储器消息***能够进行采用更少开销的的通信,因为发布者节点、订阅者节点、注册表以及消息缓存器之间的通信操作无需或不使用另一层整体通信管理。
本文描述的技术可以由一个或多个专用计算设备来实现。专用计算设备可以是硬连线的以执行技术,或可包括电路或数字电子设备,比如,一个或多个被持续编程以执行这些技术的专用集成电路(ASIC)或现场可编程门阵列(FPGA),或可包括一个或多个被编程为执行根据固件、存储器、其它存储器或组合中的程序指令中的技术的硬件处理器。这种专用计算设备还可将定制的硬连线逻辑、ASIC或FPGA与定制编程相结合以实现这些技术。专用计算设备可以是桌上型计算机***、服务器计算机***、便携式计算机***、手持设备、网络设备或任何其它设备或并入硬连线和/或程序逻辑以实现技术的设备组合。计算设备通常通过操作***软件来控制和协调。传统的操作***控制和调度用于执行、执行存储器管理、提供文件***、网络、I/O服务,以及提供用户界面功能的计算机进程,比如,图形用户界面(graphical user interface,GUI)等。
图9是示出其上可以实现本文描述的任何实施例的计算机***105的框图,例如图2所示的计算机***105。***105可以与上述***105完全相同地对应,或者具有一个或多个不同的部件。计算机***105包括用于传送信息的总线902或其它通信机构,以及耦合到总线902且用于处理信息的一个或多个硬件处理器904。例如,总线902可以是图5所示的通信总线505、510、115和520。例如,硬件处理器904可以是一个或多个通用微处理器。处理器904可以对应于以上参考计算机***105描述的处理器。
计算机***105还包括主存储器906,例如,随机存取存储器(RAM)、高速缓存和/或其它动态存储设备,这些存储器与总线902耦接用于存储将由处理器904执行的信息和指令。主存储器906还可用于在执行要由处理器904执行的指令期间来存储临时变量或其它中间信息。当存储在处理器904中可访问的存储介质中时,这些指令使计算机***105进入专用机器,该专用机器被定制成执行指令中指定的操作。在一些实施例中,这些指令可以使计算机***105的节点141生成要发布的消息,访问主题注册表和对应于消息的主题的消息缓存器来确定要存储该消息的位置,将该消息写入消息缓存器中适合的位置处,并且更新主题注册表以指示该消息已被存储以及其开始位置。在一些实施例中,这些指令可以使计算机***105的节点141根据主题注册表确定是否有新消息可用于读取以及该消息的位置,从消息缓存器读取该新消息,确定是否有另一个消息要读取,如果情况是如此,则读取该消息,并且在确定没有新消息有待读取之后,返回到开始由节点141周期性地检查主题注册表的状态,以获取指示指向其订阅的主题的新消息已发布的信息。
计算机***105还包括与总线902耦接的只读存储器908或其它静态存储设备,用于存储处理器904的静态信息和指令。提供诸如磁盘、光盘或USB拇指驱动器(闪存驱动器)等的存储设备910并将其与总线902耦接,以存储信息和指令。主存储器906、只读存储器908和/或存储器910可以对应于上述用于存储地图数据的存储器106。在一些实施例中,主存储器906是当地图数据块被用于控制车辆120时用于存储地图数据块的存储器。例如,可以在最初将一个或多个地图数据块存储在存储设备910上,然后根据需要基于本文描述的方法和***,可以将一个或多个地图数据块加载到存储器906中并用于控制车辆120。
计算机***105可使用定制的硬连线逻辑、一个或多个ASIC或FPGA、固件和/或程序逻辑来实现本发明的技术,这些与计算机***相结合使得计算机***105成为专用机器或将该***编程为专用机器。根据一个实施例,本发明的技术是通过计算机***105响应于处理器904执行包含在主存储器906中的一个或多个指令的一个或多个序列而执行的。这些指令可从另一个存储介质(比如,存储设备910)读入主存储器906。执行包含在主存储器906中的指令序列使得处理器904可执行本文描述的处理步骤。在替代实施例中,可使用硬连线电路来代替软件指令或与软件指令组合使用。
主存储器906、只读存储器908和/或存储装置910可包括非暂时性存储介质。如本文所使用的术语“非暂时性介质”和类似术语是指存储使机器以特定方式操作的数据和/或指令的介质,其中该介质不含暂时性信号。这种非暂时性介质可包括非易失性介质和/或易失性介质。非易失性介质包括例如光盘或磁盘,比如,存储设备910。易失性介质包括动态存储器,比如,主存储器906。例如,非暂时性介质的常见形式包括:软盘、硬盘、固态硬盘、磁带或任何其它磁性数据存储介质、CD-ROM、任何其它光学数据存储介质、任何有孔图案的物理介质、RAM、PROM和EPROM、FLASH-EPROM、NVRAM、任何其它内存芯片或盒式磁带,以及其网络版本。
计算机***105还包括与总线902耦合的通信接口918。通信接口918提供与连接到一个或多个本地网络的一个或多个网络链接耦接的双向数据通信。例如,通信接口918可以是综合业务数字网(ISDN)卡、电缆调制解调器、卫星调制解调器或提供与对应类型的电话线的数据之间的通信连接调制解调器。再例如,通信接口918可以是局域网卡,以提供与兼容局域网(或与广域网通信的广域网组件)的数据通信连接。还可实施无线链接。在任何这种实施方式中,通信接口918发送和接收携带表示各种类型信息的数字数据流的电信号、电磁信号或光信号。
计算机***105可通过网络925、网络链接919和通信接口918发送消息和接收数据,包括程序代码。网络925可以连接到一个或多个服务器930。在因特网示例中,服务器可通过因特网、互联网服务提供商、本地网络和通信接口918来发送用于应用程序的请求代码。所接收到的代码可在被接收时由处理器904执行,和/或可存储在存储设备910或其它非易失性存储器中以供稍后执行。
虽然本公开大致是结合自动驾驶模式运行的车辆120来描述的,但是这仅是出于说明性目的而无意作为限制。本文描述的任何技术或操作都可以应用于提供驾驶员辅助特征和/或用于共享出行或其它基于位置的服务的车辆120。
前文描述详述了本文公开的***、设备和方法的某些实施例。然而,能够认识到的是,无论前文在文本中呈现如何详尽,这些***、设备和方法仍可以采用多种方式实施。又如上所陈述的,应当注意,在描述本发明的某些特征或方面时使用特定术语不应被视为暗示该术语在本文中被重新定义为限制于包括与该术语相关的技术的这些特征或方面的具体特性。
前面部分中描述的每个过程、方法和算法可通过由包括计算机硬件的一个或多个计算机***或计算机处理器执行的代码模块来实施,并通过包括计算机硬件的一个或多个计算机***或计算机处理器执行的代码模块来完全或部分将其自动化。过程和算法可部分或全部地在专用电路中实现。
上述多种特征和过程可彼此独立地被使用,或可以多种方式被组合。所有可能的组合和子组合都旨在落入本公开的范围内。另外,在一些实施方式中可省略某些方法或过程方框。本文描述的方法和过程也不限于任何特定序列,且与其相关的方框或状态可以以适当的其它序列来执行。例如,所描述的方框或状态可以不同于具体公开的顺序来执行,或多个方框或状态可在单个方框或状态中组合。示例性方框或状态可串行、并行或以某种其它方式来执行。可向所公开的示例性实施例中添加方框或状态或从其中移除方框或状态。本文描述的示例***和组件可与所描述的不同地来进行配置。例如,与所公开的示例性实施例相比,可添加、移除或重新布置元件。
本文描述的示例方法的多种操作可以至少部分地通过算法来执行。该算法可以包含在存储在存储器(例如,上述非暂时性计算机可读存储介质)中的程序代码或指令中。此类算法可以包括机器学习算法或模型。在一些实施例中,机器学习算法或模型可能不显性地对计算机编程以执行功能,但可以根据训练数据学习以产生执行该功能的预测模型(训练的机器学习模型)。
本文描述的示例方法的多种操作可以至少部分地由被临时配置(例如,通过软件)或永久配置为执行相关操作的一个或多个处理器来执行。无论是临时配置还是永久配置,此类处理器都可以构成处理器实现的引擎,以操作来执行本文描述的一个或多个操作或功能。
类似地,本文描述的方法可以至少部分地由处理器实现,其中一个或多个特定处理器是硬件的示例。例如,一种方法的至少一些操作可以由一个或多个处理器或处理器实现的引擎来执行。此外,一个或多个处理器还可以在“云计算”环境中或作为“软件即服务”(SaaS)运行以支持相关操作的执行。例如,至少一些操作可以由一组计算机(例如包括多个处理器的机器)来执行,这些操作是可通过网络(例如,因特网)和一个或多个适当的接口(例如,应用程序接口(API)访问的)。
某些操作的执行可以分布在多个处理器之间,不仅驻留在单个机器内,而且可以跨多个机器部署。在一些示例实施例中,处理器或处理器实现的引擎可以位于单个地理位置中(例如,在家庭环境、办公室环境或服务器群内)。在其它示例实施例中,处理器或处理器实施的引擎可以跨多个地理位置分布。
在整个说明书中,多个示例可以实现作为单个实例来描述的多个部件、操作或结构。尽管一个或多个方法的各个操作被示出并描述为单独的操作,但是可同时执行一个或多个单独的操作,且不需要以所示的顺序来执行这些操作。示范性配置中作为单独组件展示的结构与功能可能作为组合结构或组件进行实施。类似地,作为单独组件展示的结构与功能可能以单组组件实施。这些及其另外的变化、改动、添加及改进属于本文主题的范围。
虽然本主题的概述是参考具体示例实施例来描述的,但是在不背离本公开的实施例的更宽范围的情况下,可对这些实施例进行各种修改和更改。仅仅是为了方便,本文中的主题的这些实施例可单独地或共同地通过术语“发明”来提及,如果事实上披露了多于一个公开或概念,则无意自愿将本申请的范围限制于任何单一的公开或概念。
本文图示的实施例得到了足够详尽的描述以使本领域技术人员能够实施所公开的教导。可以使用其它实施例并从中导出其它实施例,使得可以在不脱离本公开范围的情况下进行结构和逻辑替换和改变。因此,具体实施方式不应被视为具有限制意义,且各个实施例的范围仅由所附权利要求以及这些权利要求所赋予的等效物的全部范围来限定。
本文描述的和/或附图中描绘的流程图中的任何过程描述、元素或框应被理解为可能地表示这样的模块、代码段或代码部分,其包括一个或多个可执行指令用于在过程中实现特定逻辑的功能或步骤。备选实施方式包括在本文描述的实施例的范围内,其中元素或功能可以被删除、按不同于所示或论述的次序来执行,包括基本上同时或以逆序执行,取决于所涉及的功能,正如本领域技术人员应理解的。
如本文所使用的,术语“或”可被解释为包括或不包括的意义。此外,可以为本文描述的多个资源、操作或结构提供多个示例作为一个实例。另外,多种资源、操作、引擎和数据存储之间的边界在某种程度上是任意的,并且具体操作是在具体的说明性配置上下文中来说明的。功能的其它分配是可设想的,并且这些其它分配可以落入本公开的多种实施例的范围内。一般而言,在示例配置中作为单独资源提出的结构和功能可以作为组合的结构或资源来实现。类似地,表示为单个资源提出的结构和功能可以作为单独的资源来实现。这些和其它变化、修改、添加和改进落入如所附权利要求所表示的本公开的实施例的范围内。因此,说明书和附图应认为是说明性的而不是限制性的。
条件语言,例如“能够”、“可能”、“可以”或“可”,除非另有特别说明,或在所使用的上下文中以其它方式理解,否则通常旨在传达某些实施例包括,而其它实施例不包括某些特征、元素和/或步骤。因此,此类条件语言通常无意暗示特征、元素和/或步骤对于一个或多个实施例以任何方式是必需的,或者一个或多个实施例必需地包括用于在有或没有用户输入或提示的情况下,决定是否将这些特征、元素和/或步骤包括在任何特定实施例中或要在任何特定实施例中执行。
此外,某些术语已被用于描述本公开的实施例。例如,术语“一个实施例”、“实施例”和“一些实施例”意味着结合该实施例描述的特定特征、结构或特性被包括在本公开的至少一个实施例中。因此,需要强调且应理解,在本说明书的各个部分中对“一个实施例”或“实施例”或“备选实施例”的两次或更多次引述不一定都指代相同的实施例。再者,可以将具体特征、结构或特性按需在本公开的一个或多个实施例中进行组合。类似地,应当认识到,在本公开的实施例的前文描述中,为了流程化公开以帮助理解一个或多个不同实施例,有时将多种特征分组在单个实施例、附图或对其的描述中。然而,这种公开方法不应被解释为表意所要求权利的主题需要比每个权利要求中明确叙述的特征更多的特征。相反,权利要求的主题并不依赖于单个前述公开的实施例的所有特征。
再者,本领域技术人员能够认识到,本公开的多个方面可以在本文中以多个可专利类别或上下文中的任何一个来图示和描述,可专利类别或上下文中包括任何新的且有用的过程、机器、制造或组合或其任何新的且有用的改进。因此,本发明公开的多个方面可以完全由硬件、完全由软件(包括固件、常驻软件、微代码等)或组合软件和硬件的实现方式来实现,这些实现方式在本文中统称为“模块”,“单元、“部件”、“设备”或“***”。此外,本公开的多个方面可以采用在一个或多个计算机可读介质中包含的计算机程序产品的形式,该计算机可读介质在其上包含有计算机可读程序代码。
用于执行本公开的多个方面的操作的计算机程序代码可以采用一种或多种编程语言的任意组合编写,包括面向物体的编程语言,例如Java、Scala、Smalltalk、Eiffel、JADE、Emerald、C++、C#、VB、NET、Python等;常规过程编程语言,例如“C”编程语言、VisualBasic、Fortran 2003、Perl、COBOL 2002、PHP、ABAP;动态编程语言,例如Python、Ruby和Groovy或其它编程语言。程序代码可以完全在用户计算机上、部分在用户计算机上、作为独立软件包、部分在用户计算机上部分在远程计算机上或完全在远程计算机或服务器上执行。在后一种情况下,远程计算机可以经由任何类型的网络连接到用户计算机,包括局域网(LAN)或广域网(WAN),或者可以连接到外部计算机(例如,经由使用因特网服务提供商的因特网)或在云计算环境中或作为服务提供,例如软件即服务(SaaS)。
在本文中包括标题以供参考并帮助定位各个部分。这些标题无意限制与其相关描述的概念的范围。此类概念在整个说明书中具有适用性。
除非另外具体说明,否则如短语“X、Y或Z中的至少一个”的析取语言,按常规使用结合上下文理解为提出物品、项等,可以是X、Y或Z,或者其任何组合(例如,X、Y和/或Z)。因此,此类析取语言通常无意且不应暗示某些实施例要求X中的至少一个、Y中的至少一个或Z中的至少一个为每个都存在。本领域技术人员将认识到,在不背离所描述技术的范围的情况下,可以进行多种修改和改变。此类修改和更改理应落入这些实施例的范围内。本领域技术人员还能够认识到,一个实施例中包括的部件可与其它实施例互换;来自所示实施例的一个或多个部件可以以任何组合与其它所示实施例包含在一起。例如,可以将本文描述的和/或附图所示的多种部件中的任意组件进行组合、互换或在其它实施例中予以排除。
除非另有明确指出,否则短语“基于”不表示“仅基于”。换言之,短语“基于”描述的是“仅基于”以及“至少基于”两者。除非另有明确地说明,否则如“一个”或“个”之类的冠词通常应被解释为包括一个或多个所描述的物品。因此,如“被配置为执行...的设备”的短语旨在包括一个或多个所引述的设备。
上文描述公开了本发明的若干方法和材料。本发明往往会被方法和材料的修改以及在制造方法和设备上的更改所影响。参考本文公开的本发明的公开内容或实施,这些修改对于本领域技术人员来说将变得显而易见。因此,无意将本发明限于本文公开的具体实施例,而是它涵盖了落入如所附权利要求中所包含的本发明真实范围和精神内的所有修改和替代。申请人保留提交针对被认为是新颖的和非显而易见的所公开的发明的组合和子组合的权利要求的权利。在特征、功能、元件和/或性质的其它组合和子组合中实施的发明可以通过这些权利要求的修正或在本申请或相关申请中提出新权利要求来要求权利。此类修正或新的权利要求,无论它们是针对相同的发明还是不同的发明,以及它们在范围上与原始权利要求不同、更宽、更窄或相等,都应被认为在本文所描述的发明的主题内。

Claims (20)

1.一种在车辆上的***中的多个模块之间传送消息的方法,所述多个模块中的每个模块被配置为写入消息的发布者节点、读取消息的订阅者节点或者发布者节点和订阅者节点两者,所述发布者节点和订阅者节点共同形成在操作所述车辆时进行通信的多个节点,所述方法包括:
通过所述多个节点中的发布者节点生成多组消息,每组消息与唯一主题相关联并由与所述唯一主题相关联的单个发布者节点生成;
由所述发布者节点,将所述多组消息中每组消息写入关联于与所述组消息相同的主题的相应消息缓存器的存储器位置,所述相应消息缓存器是多个消息缓存器中的一个消息缓存器,所述多个消息缓存器中的每个消息缓存器与一个消息主题相关联;
由每个发布者节点且对于写入消息缓存器中的每个消息,在注册表中写入指示已将所述消息所写入于的位置信息,其中,所述注册表被配置为存储将写入消息缓存器中的每个消息与所述消息缓存器的地址相关联的位置信息、存储写入消息缓存器的每个消息的存储器位置、以及存储主题;
由订阅者节点,从所述注册表读取新消息信息,所述新消息信息指示是否有与特定主题相关联的新消息可用,所述订阅者节点的每个订阅者节点被配置为读取所述消息中的一组或多组;
由所述订阅者节点中的每个订阅者节点,使用从所述注册表读取的所述新消息信息,确定是否有与关联于相应订阅者节点的主题也相关联的至少一个新消息可用;
响应于确定有至少一个新消息可用,由所述相应订阅者节点中的每个订阅者节点,从所述注册表读取指示所述至少一个新消息所存储于的位置的位置信息;并且
由所述相应订阅者节点中的每个订阅者节点,从所述相应消息缓存器读取所述至少一个新消息。
2.如权利要求1所述的方法,其中,所述在所述注册表中写入包括:在所述注册表中写入指示所述消息缓存器中消息开始的位置,和所述消息缓存器中所述消息结束的位置。
3.如权利要求2所述的方法,其中,在所述注册表中写入还包括:在将所述消息写入所述消息缓存器完成之前,写入指示所述消息结束的位置的信息。
4.如权利要求2所述的方法,还包括:由生成所述消息的发布者节点,确定所述消息大小,其中,指示所述消息在所述消息缓存器中结束的位置的信息,是由所述消息的大小确定的暂定位置。
5.如权利要求1所述的方法,其中,写入所述多组消息中的每一组包括,对于每个消息,写入所述消息的所述大小。
6.如权利要求1所述的方法,其中,所述消息的所述大小包括所述消息有效负载和消息填充的总和。
7.如权利要求4所述的方法,还包括:
确定所述消息大小是否大于所述相应消息缓存器中分配用于存储消息的消息大小,并且
响应于确定所述消息大小较大,在所述相应消息缓存器中重新分配更大的消息存储大小。
8.如权利要求1所述的方法,还包括:对于每个消息主题,在所述注册表中,生成在相应消息缓存器中存储的主题的消息的数量计数。
9.如权利要求8所述的方法,其中,所述新消息信息包括相应消息缓存器中存储的主题的消息的数量计数。
10.如权利要求9所述的方法,还包括:在每个订阅者节点处,生成读取消息信息,所述读取消息信息包括由所述每个订阅者节点已读取的主题的消息计数。
11.如权利要求10所述的方法,其中,确定是否有与主题相关联的至少一个新消息可用包括:在每个订阅者节点处,将所述注册表中的所述新消息信息中的主题的所述新消息的计数与所述订阅者节点已读取的主题的消息计数相比较,所述方法还包括,当所述新消息计数大于所述订阅者节点的已读取消息计数器时,确定有与所述第一主题相关联的新消息可用于读取。
12.如权利要求1所述的方法,其中,所述多个模块中的每个模块在至少一个处理器上实现。
13.如权利要求1所述的方法,其中,至少两个订阅者节点与同一主题相关联。
14.如权利要求1所述的方法,其中,至少一个订阅者节点与两个或更多个主题相关联。
15.如权利要求1所述的方法,其中,从所述注册表读取包括:在不利用所述计算机***的内核的情况下,从所述注册表读取。
16.如权利要求1所述的方法,其中,从所述消息缓存器读取包括:在不利用所述计算机***的所述内核的情况下,从所述消息缓存器读取。
17.如权利要求1所述的方法,其中,写入所述注册表包括:在不利用所述计算机***的所述内核的情况下,写入所述注册表。
18.如权利要求1所述的方法,其中,写入消息缓存器包括:在不利用所述计算机***的所述内核的情况下,写入所述消息缓存器。
19.如权利要求1所述的方法,其中,所述注册表和所述多个消息缓存器被配置为能够被所述发布者节点直接访问的共享存储器位置。
20.如权利要求1所述的方法,其中,所述注册表和所述多个消息缓存器被配置为能够被所述订阅者节点直接访问的共享存储器位置。
CN201880100665.6A 2018-12-28 2018-12-28 用于在车辆部件之间传送信息的消息缓存器 Pending CN113767376A (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/US2018/068038 WO2020139393A1 (en) 2018-12-28 2018-12-28 Message buffer for communicating information between vehicle components

Publications (1)

Publication Number Publication Date
CN113767376A true CN113767376A (zh) 2021-12-07

Family

ID=71127406

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201880100665.6A Pending CN113767376A (zh) 2018-12-28 2018-12-28 用于在车辆部件之间传送信息的消息缓存器

Country Status (2)

Country Link
CN (1) CN113767376A (zh)
WO (1) WO2020139393A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN118025049A (zh) * 2024-04-15 2024-05-14 成都创科升电子科技有限责任公司 一种基于调度器的车辆电控件的控制方法、***及车辆

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102859541A (zh) * 2010-04-19 2013-01-02 国际商业机器公司 在发布/订阅通讯中控制消息传递
CN105830059A (zh) * 2014-11-28 2016-08-03 华为技术有限公司 文件访问方法、装置及存储设备
CN107864694A (zh) * 2016-07-21 2018-03-30 百度时代网络技术(北京)有限公司 用于操作无人驾驶车辆的计算节点当中的有效通信

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7203706B2 (en) * 2002-08-01 2007-04-10 Oracle International Corporation Buffered message queue architecture for database management systems with memory optimizations and “zero copy” buffered message queue
CN101222449A (zh) * 2007-01-10 2008-07-16 国际商业机器公司 发布/订阅***和方法
US9325650B2 (en) * 2014-04-02 2016-04-26 Ford Global Technologies, Llc Vehicle telematics data exchange
US9794340B2 (en) * 2014-09-15 2017-10-17 Ge Aviation Systems Llc Mechanism and method for accessing data in a shared memory
CN106021000B (zh) * 2016-06-02 2018-06-01 北京百度网讯科技有限公司 用于机器人操作***的共享内存管理方法和装置

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102859541A (zh) * 2010-04-19 2013-01-02 国际商业机器公司 在发布/订阅通讯中控制消息传递
CN105830059A (zh) * 2014-11-28 2016-08-03 华为技术有限公司 文件访问方法、装置及存储设备
CN107864694A (zh) * 2016-07-21 2018-03-30 百度时代网络技术(北京)有限公司 用于操作无人驾驶车辆的计算节点当中的有效通信

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN118025049A (zh) * 2024-04-15 2024-05-14 成都创科升电子科技有限责任公司 一种基于调度器的车辆电控件的控制方法、***及车辆

Also Published As

Publication number Publication date
WO2020139393A1 (en) 2020-07-02

Similar Documents

Publication Publication Date Title
US11080216B2 (en) Writing messages in a shared memory architecture for a vehicle
US11616737B2 (en) Reading messages in a shared memory architecture for a vehicle
US10747597B2 (en) Message buffer for communicating information between vehicle components
US11550623B2 (en) Distributed system task management using a simulated clock
US11327489B2 (en) Shared memory architecture for a vehicle
US10876844B2 (en) Systems and methods for loading and tracking maps on a vehicle
US20200209005A1 (en) Systems and methods for loading object geometry data on a vehicle
US11480964B2 (en) Distributed system execution using a serial timeline
CN111693055B (zh) 道路网络变化检测和所检测的变化的本地传播
US11397610B2 (en) Architecture for simulation clock-based simulation of distributed systems
US11409927B2 (en) Architecture for configurable distributed system simulation timing
CN114072784A (zh) 用于在车辆上加载物体几何数据的***和方法
US11456890B2 (en) Open and safe monitoring system for autonomous driving platform
WO2022067295A1 (en) Architecture for distributed system simulation timing alignment
WO2020139396A1 (en) Writing messages in a shared memory architecture for a vehicle
US20230341554A1 (en) Methods and apparatus with hardware logic for pre-processing lidar data
CN113767376A (zh) 用于在车辆部件之间传送信息的消息缓存器
WO2020139395A1 (en) Reading messages in a shared memory architecture for a vehicle
CN113748418B (zh) 用于在车辆上加载和跟踪地图的***和方法
US11809790B2 (en) Architecture for distributed system simulation timing alignment
US11669657B2 (en) Architecture for distributed system simulation with realistic timing
WO2020139389A1 (en) Shared memory architecture for a vehicle
US20230342316A1 (en) Scalable configurable chip architecture
WO2024092559A1 (zh) 一种导航方法及相应装置
US20240116540A1 (en) Distributed Computing System For A Vehicle

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