WO2020139393A1 - Message buffer for communicating information between vehicle components - Google Patents

Message buffer for communicating information between vehicle components Download PDF

Info

Publication number
WO2020139393A1
WO2020139393A1 PCT/US2018/068038 US2018068038W WO2020139393A1 WO 2020139393 A1 WO2020139393 A1 WO 2020139393A1 US 2018068038 W US2018068038 W US 2018068038W WO 2020139393 A1 WO2020139393 A1 WO 2020139393A1
Authority
WO
WIPO (PCT)
Prior art keywords
message
topic
messages
registry
vehicle
Prior art date
Application number
PCT/US2018/068038
Other languages
English (en)
French (fr)
Inventor
Yuzhu Shen
Alok Priyadarshi
Original Assignee
Didi Research America, Llc
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 Didi Research America, Llc filed Critical Didi Research America, Llc
Priority to PCT/US2018/068038 priority Critical patent/WO2020139393A1/en
Priority to CN201880100665.6A priority patent/CN113767376A/zh
Publication of WO2020139393A1 publication Critical patent/WO2020139393A1/en

Links

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

Definitions

  • This disclosure generally relates to a message communication architecture, and, in particular, to a centralized communication architecture for a computer system in a vehicle.
  • Vehicle software systems can be represented as a computation graph of nodes that communicate with each other by passing messages. Nodes are processes that perform computation for a subset of the vehicle computer system. There are dedicated nodes to perform localization, perception, planning, and control operations.
  • a sensor node relating to a light detection and ranging (LiDAR) system may collect and provide a LiDAR image as a sensor message.
  • a perception node may receive the LiDAR image message and use the information to determine an aspect of the environment surrounding the vehicle based on the LiDAR image (e.g., distance of objects in front of the vehicle), and provide a perception message to related to the determined aspect.
  • a controller node may receive the perception message and control the vehicle using information in the perception message to control the vehicle (e.g., to brake, or to continue to move the vehicle forward on its planned route).
  • Messages from individual nodes can be routed via an inter-process communication (IPC) system with publish and subscribe semantics.
  • IPC inter-process communication
  • a node sends out a message by publishing it to a given topic.
  • the topic is a name that is used to identify the content of the message published by the node.
  • a node that is interested in a certain kind of data will subscribe to the appropriate topic.
  • publisher nodes and subscriber nodes are not aware of each other’s existence. The idea is to decouple the production of information from its consumption.
  • Logically one can think of a topic is a strongly typed message bus. Each bus is a name, and anyone can connect to the bus to send or receive messages as long as they are of the right type.
  • a modular architecture provides stability even if a process crashes. For example, individual processes may intermittently crash and relaunch without shutting down the entire system. However, this modularity comes at a cost.
  • the IPC system required for node communication introduces latency. Keeping the latency of messages low is critical for safe operations of an autonomous vehicle, a vehicle that provides driver-assist features, and/or a vehicle used for location-based services.
  • a vehicle, such as an autonomous vehicle, a vehicle that provides driver-assist features, and/or a vehicle used for location-based services, in a busy environment is subject to numerous inputs often requiring immediate control actions for safety of the vehicle and for people and property near the vehicle. For example, the vehicle may receive a signal indicating a pedestrian or an oncoming vehicle is in its lane and must be able to read be able to react immediately.
  • any pipe-based IPC mechanism is a bad fit for real-time systems due to one or more of the following reasons: (1) pipes favor older data over newer data, and can block or drop your messages, which is the opposite of how real-time systems want to be operated; (2) messages are routed via the kernel which may introduce multiple context switches; (3) a message is copied at least two times (publisher-to-kemel and kernel-to-subscriber) for each publisher-subscriber pair, which inefficiency to each published and subscribe to message; (4) large messages need to be broken down into chunks and transferred in several iterations due to limited kernel memory; and (5) the overhead of a signaling mechanism is unnecessary since real-time systems typically run on a fixed timer.
  • the system includes a shared memory message system for communication between modules in a computer system on a vehicle, the system includes a plurality of modules, each module configured to perform a function related to controlling a vehicle, each of the modules comprising an associated node configured as a publisher node to write a message for a topic related to its representative module or as a subscriber node to read a message for another topic written by another node, or both a publisher node to write a message for a topic related to its associated module and a subscriber node to read a message for another topic written by another node, the nodes of each of the plurality of modules defining a plurality of nodes for communicating messages between the plurality of modules.
  • the system also includes a topic registry implemented on a data storage component, the topic registry configured to store information indicative of the storage location for a plurality of groups of messages, each group of messages related to a unique topic and each group of messages stored in a different message buffer and published by one of the plurality of nodes, a plurality of message buffers each in communication with the topic registry, each message buffer comprising a ring-buffer storage component configured to store messages published by one of the plurality of nodes, and a communication bus coupled to the topic registry, the plurality of message buffers, and the plurality of nodes.
  • a topic registry implemented on a data storage component, the topic registry configured to store information indicative of the storage location for a plurality of groups of messages, each group of messages related to a unique topic and each group of messages stored in a different message buffer and published by one of the plurality of nodes, a plurality of message buffers each in communication with the topic registry, each message buffer comprising a ring-buffer storage component configured to store messages published by one of the pluralit
  • the communication bus is configured such that nodes can write messages directly to at least one of the message buffers and write location information indicative of the location of the written message in the topic registry, and such that nodes can read messages of a particular topic directly from at least one of the message buffers using information from the topic registry indicative of the location of the messages of a particular topic.
  • each node comprises at least one processor coupled to a memory component.
  • the communication bus is configured such that subscriber nodes of the plurality of nodes can read messages directly from the message buffers without going through a kernel of the computer system.
  • the communication bus is configured such that publisher nodes of the plurality of nodes can write messages directly to the message buffers without going through a kernel of the computer system.
  • the topic registry is configured to store information of the location of every message stored on any of the plurality of message buffers.
  • the information stored by the topic registry for each message comprises data representative of the address of the message buffer that stores said each message.
  • the information stored by the topic registry for each message comprises data representative of the topic of said each message.
  • the information stored by the topic registry for each message comprises data representative of the published frequency of said each message.
  • information stored by the topic registry for a message comprises the location of the start of said message in the message buffer that stores said message.
  • the information stored by the topic registry for said message comprises the pending location, in the message buffer that stores the message, of the end of said message, while the message is being written.
  • each of the plurality of message buffers stores messages related to a single topic.
  • one message buffer, of the plurality of message buffers stores all of the messages related to a single topic.
  • each subscriber node writes messages related to a single topic.
  • one or more of the subscriber modes reads messages related to more than one topic.
  • each message buffer is configured to store a plurality of messages from a publisher node, each of the stored messages including information related to the message and a message content.
  • the plurality of message buffers are configured to store messages from a publisher node of a predetermined size.
  • the plurality of message buffers are configured to store messages from a publisher node of a dynamically determined size.
  • a shared memory message system for communication between modules configured to perform a function related to controlling a vehicle in a computer system on the vehicle.
  • the system may include a plurality of modules each representative as a node, the plurality of modules collectively representative as a plurality of nodes, each node configured as a publisher node to write a message for a topic related to its representative module or as a subscriber node to read a message for another topic written by another node, or both.
  • the system may also include a topic registry implemented on a data storage component configured to store information indicative of the storage location.
  • the system may also include a plurality of message buffers each in communication with the topic registry, each message buffer implemented on a storage component configured to store messages published by one of the plurality of nodes.
  • the system may further include a communication bus coupled to the topic registry, the plurality of message buffers, and the plurality of nodes, where the communication bus is configured such that publisher node messages are stored in a message buffer and associated storage location information is stored in the topic registry without going through a kernel of said computer system, and such that subscriber nodes can read messages directly from a message buffer using information from the topic registry without going through the kernel.
  • Another innovation includes a method of communicating messages between a plurality of modules in a system on a vehicle, each module of the plurality of modules configured as a publisher node that writes messages, a subscriber node that reads messages, or both a publisher node and a subscriber node, the publisher nodes and the subscriber nodes collectively forming a plurality of nodes that communicate in the operation of the vehicle.
  • An example of such a method includes generating a plurality of groups of messages by publisher nodes of the plurality of nodes, each group of messages associated with a unique topic and generated by a single publisher node associated with the unique topic, writing, by the publisher nodes, each of the plurality of groups of messages in a memory location of a respective message buffer that is associated with the same topic as the group of messages, the respective message buffer being one of a plurality of message buffers, each of the plurality of message buffers associated with one message topic, writing in a registry, by each publisher node and for each message written in a message buffer, location information indicating where the message was written to, wherein the registry is configured to store location information associating each message written in a message buffer with an address of the message buffer, a memory location where each message written to a message buffer is stored, and a topic, reading, by subscriber nodes, new message information from the registry, the new message information indicative of whether a new message associated with a particular topic is available, each of the subscriber nodes configured to
  • the method further includes in response to determining at least one new message is available, reading from the registry, by each of the respective subscriber nodes, the location information indicating where the at least one new message is stored, and reading, by each of the respective subscriber nodes, the at least one new message from the respective message buffer.
  • Embodiments of methods described herein may have one or more other aspects (features) in various embodiments of the system, a number of these aspects being noted here. However, various embodiments of such methods may have additional aspects or fewer aspects, and the aspects disclosed herein can be used together in an number of embodiments even if specifically not illustrated or described as being in a certain embodiment, as one of ordinary skill in the art will appreciate.
  • writing in the registry comprises writing information in the registry indicative of a location in the message buffer where a message starts and a location in the message buffer where the message ends.
  • writing in the registry further comprises writing information indicative of the location where the message ends before the writing of the message to the message buffer is completed.
  • the method may further comprise determining, by a publisher node generating the message, the message size, wherein the information indicative of where in the message buffer the message ends is a pending location determined by the size of the message.
  • writing each of the plurality of groups of messages comprises writing, for each message, the size of the message.
  • the size of the message comprises the sum of the message payload and message padding.
  • the method further comprises determining if the message size is greater than the message size allocated in the respective message buffer for storing messages, and in response to determining the message size is greater, reallocate a bigger message storage size in the respective message buffer.
  • the message further comprises for each message topic, generating at the registry, a count of the number of messages of a topic stored in a respective message buffer.
  • the new message information comprises the count of the number of messages of a topic stored in a respective message buffer.
  • the method further comprises generating, at each subscriber node, read message information that includes a count of the messages of a topic that have been read by said each subscriber node.
  • determining if at least one new message associated with a topic is available comprises comparing, at each subscriber node, the count of the new messages of a topic in the new message information on the registry to the count of the messages of a topic that have been read by the subscriber node, the method further comprising determining a new message associated with the first topic is available for reading when the new message count is greater than the read message counter of the subscriber node.
  • each of the plurality of modules is implemented on at least one processor.
  • at least two subscriber nodes are associated with at the same topic.
  • at least one subscriber node is associated with two or more topics.
  • reading from the registry comprises reading from the registry without utilizing the kernel of the computer system.
  • reading from the message buffer comprises reading from the message buffer without utilizing the kernel of the computer system.
  • writing to the registry comprises writing to the registry without utilizing the kernel of the computer system.
  • writing to a message buffer comprises writing to the message buffer without utilizing the kernel of the computer system.
  • the registry and the plurality of message buffers are configured to be shared memory locations that can be accessed directly by the publisher nodes.
  • the registry and the plurality of message buffers are configured to be shared memory locations that can be accessed directly by the subscriber nodes.
  • Another innovation includes a method of communicating messages between a plurality of modules in a system on a vehicle, each module of the plurality of modules implemented on at least one processor and configured as a publisher node that writes messages, a subscriber node that reads messages, or both a publisher node and a subscriber node, the publisher nodes and the subscriber nodes collectively forming a plurality of nodes that communicate in the operation of the vehicle.
  • the method includes generating a first message associated with a first topic by a first publisher node, writing, by the first publisher node, the first message in a memory location in a first message buffer of the plurality of message buffers, the first message buffer associated with the first topic and configured to store a plurality of messages associated with the first topic, the other of the plurality of buffers each associated with a unique message topic and configured to each store a plurality of messages related to its associated message topic, wherein the memory location where the first message is stored is a shared memory location accessible to subscriber nodes that are configured to read messages related to the first topic, and writing in a registry, by the first publisher node, information associated with writing the first message, the registry configured to store location information indicating a communication address of the first message buffer and location information indicating the memory location on the first message buffer where first message is stored.
  • Embodiments of methods described herein may have one or more other aspects (features) in various embodiments of the system, a number of these aspects being noted here. However, various embodiments of such method may have additional aspects or fewer aspects, and the aspects disclosed herein can be used together in an number of embodiments even if specifically not illustrated or described as being in a certain embodiment, as one of ordinary skill in the art will appreciate.
  • writing the first message in the first message buffer comprises writing the first message in the first message buffer via a communication bus configured to communicate messages between the plurality of nodes and a plurality of message buffers.
  • writing information associated with the first message in the registry comprises writing information associated with the first message in the registry via the communication bus, wherein the communication bus is further configured to communicate location information between the registry and each of the plurality of nodes.
  • writing the first message in the first message buffer comprises directly writing the first message in the first message buffer via the communication bus.
  • directly writing the first message in the first message buffer comprises writing the first message in the first message buffer without interaction in the communication by a kernel of the system.
  • writing information associated with the first message in the registry comprises directly writing information in the registry by the first publisher node via the communication bus.
  • directly writing information associated with the first message in the registry comprises writing the information in the registry without interaction in the communication by a kernel of the system.
  • the first publisher node is further configured to communicate information associated with writing the first message in the first message buffer directly to the registry via the communication bus.
  • the plurality of nodes comprises a plurality of publisher nodes and a plurality of subscriber nodes.
  • each of the plurality of publisher nodes writes a plurality of messages each message being associated with a particular topic, and wherein the messages of the plurality of messages that are associated with the same topic are written by the same one of the publisher nodes.
  • the method may further include generating a second message associated with the first topic by the first publisher node, writing, by the first publisher node, the second message in a memory location in the first message buffer, and writing in the registry, by the publisher node, information associated with writing the second message in the first message buffer, wherein the registry is further configured to store location information indicating the memory location in the first message buffer where the second message is stored.
  • the method may further include generating a second message associated with a second topic by a second publisher node, writing, by the second publisher node, the second message in a memory location in a second message buffer of the plurality of buffers, and writing in the registry, by the second publisher node, information associated with writing the second message in the second message buffer, wherein the registry is further configured to store location information indicating the memory location in the second message buffer where the second message is stored.
  • the method may further include determining, by the first publisher node, the location in the first message buffer next available to store a message, wherein the plurality of nodes are configured such that the first publisher node is the only publisher node that writes to the first message buffer, and storing the second message in the first message buffer beginning at the determined next available storage location.
  • each of the plurality of message buffers are configured as ring buffers.
  • the information stored by the topic registry for each message comprises data representative of the topic of each message.
  • the plurality of message buffers and the registry are implemented on one or more storage components of the system that are different components from the storage components implementing any of the plurality of modules.
  • the location information further indicates the end of a message being written to the message buffer.
  • the registry is further configured to store location information of all the messages stored on the plurality of message buffers.
  • Another innovation includes a method of communicating messages between a plurality of modules in a system on a vehicle, each module of the plurality of modules configured as a publisher node that writes messages, a subscriber node that reads messages, or both a publisher node and a subscriber node, the publisher nodes and the subscriber nodes collectively forming a plurality of nodes that communicate in the operation of the vehicle.
  • the method includes communicating, by each of a first group of subscriber nodes comprising at least one subscriber node, with a registry (sometimes referred to herein as a“topic registry”) to read information on the registry for determining if a new message associated with a first topic is available for reading, each of the first group subscriber nodes configured to read messages associated with the first topic, and then determining, by each of the first group subscriber nodes, if a new message associated with the first topic is available for reading using the information read from the registry.
  • a registry sometimes referred to herein as a“topic registry”
  • the method further includes, in response to determining a new message associated with the first topic is available for reading, reading from the registry, by each of the first group subscriber nodes, location information indicating where the first message is stored in a first message buffer associated with the first topic and configured to store messages associated with the first topic, the first message buffer being one of a plurality of buffers, each of the plurality of buffers being associated with a different topic, and reading, by each of the first group subscriber nodes, the first message from the first message buffer using the location information indicating where the first message is stored.
  • Embodiments of methods described herein may have one or more other aspects (features) in various embodiments of the system, a number of these aspects being noted here. However, various embodiments of such methods may have additional aspects or fewer aspects, and the aspects disclosed herein can be used together in an number of embodiments even if specifically not illustrated or described as being in a certain embodiment, as one of ordinary skill in the art will appreciate.
  • communicating with the registry for information to determine if a new message associated with the first topic is available includes reading from the registry, by each first group subscriber node, new message information associated with the first topic and comparing the new message information from the registry to read message information stored at each of the first group subscriber nodes.
  • the new message information comprises a new message counter, the method further comprising incrementing the new message counter when a message associated with the first topic is written to the first message buffer.
  • the read message information for each of the first group subscriber nodes includes a read message counter, the method further comprising incrementing, by each of the first group of subscriber nodes, its read message counter when it reads a new message related to the first topic from the first message buffer.
  • comparing the new message information from the registry to read message information comprises comparing, by each subscriber node of the first group of subscriber nodes, the new message counter of the registry with the read message counter of the subscriber node.
  • the method further comprises determining a new message associated with the first topic is available for reading when the new counter message is greater than the read message counter.
  • each of the plurality of modules is implemented on at least one processor.
  • the first group of subscriber nodes includes at least two subscriber nodes.
  • the method further includes communicating with the registry, by each of a second group of subscriber nodes configured to read messages associated with a second topic, for information to determine if a new message associated with the second topic is available for reading, the second group of subscriber nodes comprising at least one subscriber node, determining, by each second group subscriber node, if a new message associated with the second topic is available for reading, in response to determining a new message associated with the second topic is available, reading from the registry, by each of the second groups subscriber nodes, location information indicating where the second message is stored in a second memory buffer, the second memory buffer associated with the second topic and configured to store messages associated with the second topic, and reading, by each of the second group subscriber nodes, the second message from the second message buffer using the location information indicating where the second message is stored.
  • At least one subscriber node in the first group of subscriber nodes is also a subscriber node in the second group of subscriber nodes.
  • the reading from the registry and from the first message bus comprises reading from the registry and from the first message bus via a communication bus configured such that subscriber nodes can read location information from the registry and can read messages from the first message buffer without utilizing a kernel of the computer system.
  • the registry is configured to store location information indicating a communication address of the first message buffer and location information indicating the memory location on the first message buffer where the first message is stored.
  • the registry is further configured to store information associated with messages stored on the plurality of message buffers indicative of the topic each stored message is associated with.
  • the registry is configured to store location information comprising data indicating a communication address of the first message buffer and the memory location of the first message buffer where the first message is stored. In another aspect, the registry is configured to store location information comprising data indicating a communication address of the first and second message buffer, the memory location on the first message buffer where the first message is stored, and the memory location on the second message buffer where the second message is stored.
  • a further aspect may include that the location information stored by the registry for each message include data indicating the frequency that each message associated with a particular topic is published.
  • a method may further comprise communicating periodically, by each of the subscriber nodes in the first group of subscriber nodes, with the registry to determine if a new message is available for reading.
  • communicating periodically, for each subscriber node includes communicating with the registry to determine if a new message is available for reading at a pre-determined frequency.
  • communicating periodically, for each subscriber node includes communicating with the registry to determine if a new message is available for reading at a pre-determined frequency which is different for at least two of subscriber nodes.
  • communicating periodically includes, for at least one of the subscriber nodes, communicating with the registry to determine if a new message is available for reading at a dynamically determined frequency.
  • FIG. 1 A illustrates a block diagram of a networked vehicle environment in which one or more vehicles and/or one or more user devices interact with a server via a network, according to one embodiment
  • FIG. IB illustrates a block diagram showing the vehicle of FIG. 1A in communication with one or more other vehicles and/or the server of FIG. 1A, according to one embodiment
  • FIG. 2 is a schematic illustrating a vehicle moving along a road and examples of components that the vehicle may use to determine its geographical location information.
  • FIG. 3 is a schematic illustrating an example of various modules that may be in a computer system in a vehicle in some embodiments, each of the modules associated with a representative node which the module may use for publishing messages of a certain topic and for subscribing to messages of one or more topics, for example, messages published by one or more of the other modules.
  • FIG. 4 is a schematic illustrating an example of a shared message communication system that may be implemented in a computer system on a vehicle that provides, for example, more efficient communications between two or more of the modules illustrated in FIG. 3.
  • FIG. 5 is a schematic illustrating an example of a shared memory message communication system that may be implemented in a computer system on a vehicle, illustrating a representative architecture that includes a topic registry, two or more message buffers, and communication channels for each of the plurality of nodes to both publish messages of a topic, and subscribe to messages of various topics that are published by one or more of the other plurality of nodes.
  • FIG. 6 is a schematic illustrating an example of an embodiment of a topic registry and an associated message buffer for a particular topic.
  • FIG. 7 is an illustration of a flow diagram representing an example of a method for a node to publish a message on a particular topic in a shared memory message communication system that allows nodes to publish messages for other nodes to read that may be performed, for example, on the shared memory message communication system illustrated in FIG. 5.
  • FIG. 8 is an illustration of a flow diagram representing an example of a method for a node to subscribe to (or read) a message on a particular topic in a shared memory message communication system that allows a node to subscribe to the messages published by one or more nodes that may be performed, for example, on the shared memory message communication system illustrated in FIG. 5.
  • FIG. 9 is a schematic of an example of a computer system that can be on a vehicle and that can be used to perform the map data loading described herein.
  • Embodiments of a shared memory message system for communication in a computer system in a vehicle address problems described above relating to having a plurality of functional modules that collectively represent multiple message publishers and multiple message subscribers distributed over multiple subsystems within the collective computer system of the vehicle.
  • there is a single publisher of the messages for the topic and there can be multiple subscribers for any message that is published relating to any topic.
  • Embodiments use shared memory is the underlying message transport.
  • Such embodiments have multiple advantages. Including, for example, concurrent read and write operations, pure user space synchronization, and no locks or system calls to schedule and/or otherwise address (e.g., by the kernel). Another advantage is that the design is crash safe.
  • this architecture there are two types of shared memory regions implemented on storage devices, a topic registry and two or more message buffers.
  • the functionality of the described architecture of a topic registry and a plurality of message buffers may be implemented in various specific ways in different embodiments described herein are several illustrative embodiments of this architecture.
  • a subscriber node that is configured to read a message related to one topic may also be configured to read other messages related to other topics. That is, each publisher node is configured to write a message related to a certain topic to a shared memory space such that it can be easily read by at least one subscriber node.
  • Each of the two or more message buffers stores messages related to a single topic. That is, all of the messages that are stored in a particular message buffer are related to the same topic.
  • the message buffers may be ring buffers.
  • the topic registry can be a centralized array configured to store metadata for messages that are stored in one of the message buffers.
  • Each element (e.g., a“topic record” that is stored) in the topic registry corresponds to metadata of a particular message stored in one of the message buffers.
  • the mapping between message topics and indices in the message buffer is common knowledge among different modules of the system.
  • the information stored in the topic registry from each message indicates the address of the message buffer with the messages stored, and the name of the topic the message relates to.
  • a subscriber node that from time to time (e.g., in accordance with a certain cycle for that subscriber node) wants to read messages that it subscribes to, can check the topic registry to determine messages that are related to the topics that it subscribes to, where those messages are found, and then can access those messages using the information from the topic registry to read those messages from the corresponding message buffers where those messages are stored.
  • the topic registry also includes information related to the frequency at which a message is published by a certain publisher node.
  • a publisher node if a publisher node is not publishing a message at the frequency that is expected (as indicated by the frequency information for that message on the topic registry), a system alert may be generated.
  • a vehicle such as an autonomous vehicle, a vehicle that provides driver-assist features, and/or a vehicle used for location-based services, can use multiple sensors constantly to determine information about its environment.
  • a sensor publisher node that publishes messages related to LiDAR stops publishing its messages or publishes its messages at a frequency that is lower than the expected message frequency as indicated by the information for that message topic in the topic registry, and alert may be generated to inform the control system that there is an unexpected condition occurring so it may take to mitigate the loss or impairment of the LiDAR data.
  • a publisher node is configured to write to a message buffer configured to store messages of a particular topic, and uses topic registry information to determine where to write the message; similarly, a subscriber node uses topic registry information to determine where to read the messages that it subscribes to, and reads these messages from the shared storage space of the message buffer.
  • the publisher nodes may write their messages to a message buffer an update the topic registry without using the computer system kernel to manage this communication.
  • the “kernel” as referred to herein is a broad term that refers to the computer program that is the core of a computer’s operating system and that has complete control over everything in the system.
  • the kernel connects the application software to the hardware of the computer system.
  • the kernel may be one of the first programs loaded during startup and it may handle the rest of the start procedure, as well as input/output requests from software, translating them into data processing instructions for a central processing unit.
  • the kernel peripherals to the computer system and manages its memory.
  • this shared memory architecture that decouples the direct communication between a publisher node (e.g., a module performing a certain function and writing a message related to the function, for example, an output image) and a subscriber node (e.g., a performing a another function and reading a message related to that function, for example, in input image), many advantages can be achieved including, for example, reducing the number of communication tasks the kernel has to manage.
  • the metadata in the topic registry for a message topic contains two variables, sometimes referred to as a tale offset, and a pending tail offset, which are used for synchronizing read and write operations.
  • the tale offset refers to a space in the message buffer where the message starts.
  • the pending tail offset refers to a space in the message buffer where a message that is being written is going to end.
  • Such variables are written by the publisher and read by the subscribers.
  • For each message topic there is a ring buffer to store the messages, and the topic registry includes the address for the message buffer that stores the messages for each topic.
  • the topic registry also includes metadata indicative of the name of each topic, such that a subscriber of a certain topic can reference this metadata to identify and read only those messages of the topics it is a subscriber to.
  • the topic registry may also contain information indicative of the frequency at which messages are published. Because the topic registry includes information indicating the topic associated with each message, there can be one topic registry that includes metadata for every message stored regardless of the topic, and for each topic there is a ring buffer that is configured to store messages related to that topic. That is, the topic registry includes metadata for each topic.
  • Each topic corresponds to a message buffer. Each message buffer can store one or multiple messages belonging to the topic. In instances where messages relating to various topics are of different sizes, the space allocated in the message buffer corresponding to the topic set is set to accommodate the particular message it stores. In the message buffer, each message may be written suffixed with its size.
  • a message counter may be implemented on both the topic registry and the subscriber. Every time a message is written for a topic a message counter associate with the topic is incremented. Every time a message is read by a subscriber of a particular topic its message counter associate with the topic is incremented. By comparing the message counter in the topic registry to a message counter of the subscriber, the subscriber can determine whether messages have been dropped and can determine whether messages are being published at the desired rate.
  • the messages that are published for particular topic may vary in size. Accordingly, in some embodiments, the publisher is able to allocate a larger storage space on the message buffer when it wants to write a message bigger than a previously allocated storage space.
  • each topic is required to be declared at compile time.
  • the information needed for each topic may include, for example, topic name, maximum message size for a published message, shared memory message buffer size, and the publish rate. Because all topics are known at compile time, metadata such as an integer ID can be automatically assigned to the topics and used as indices into the topic registry.
  • each different type of message may be managed by a different topic registry. Accordingly, some embodiments may include two or more topic registries where each topic registry manages a different type of message in such embodiments, each topic registry is associated with message buffers that each store a message of a particular topic.
  • shared memory architecture described herein doesn’t rely on knowledge of nodes, for the purpose of system monitoring, in some embodiments the knowledge may be useful to also define the computation graph statically.
  • information needed for each node may include input message topics and output message topics.
  • topic/node information could be specified in JavaScript Object Notation (JSON) format (and optionally define the schema in protobuf) so that it is easy to access from python/js/etc. at run-time in addition, we could generate C++ source code of compile-time constants to make it easier and more efficient to use from C++.
  • JSON JavaScript Object Notation
  • the system in order to make it easier to calculate and adjust characteristics of system, (e.g., the maximum message size and the message size buffers), the system can be configured to monitor the message generated and determine distributions for the various characteristics. Even if the characteristics are not adjustable for current messages, the messages could be passed and alerts could be sent to developers to indicate that adjustments to these characteristics need to be made. For example if some messages are larger than the maximum message size but smaller than the message buffer size, these messages can still be passed for processing but each time the event could be recorded as a warning to let developers know that they need to adjust the configuration characteristics for that topic. If the messages are larger than the message buffer size, these messages could be dropped and the event could be recorded as a more serious warning to developers such that it is addressed as soon as possible.
  • characteristics of system e.g., the maximum message size and the message size buffers
  • the system may be designed to support only one publisher per topic and a fixed path may be determined for the naming scheme for shared memory files. For example:
  • Topic registry /dev/shm/voy. ⁇ session_id>.topic_registry. ⁇ namespace>
  • the filename can be limited to no greater than 255 characters.
  • the determination of the session ID can be done using the value from a command line flag (if it exist), or using the port number from the ROS MASTER URI env variable (if it exist), or using some default value such as zero.
  • Shared memory files are not deleted.
  • subscribers may set an index indicator of the messages that they’re going to read to be the equivalent of the end of the last message that was published for the topic, for example, set subscriber“head” (where the subscriber is going to start to read) to“tail now” (the end of the last message for the particular topic the subscriber is subscribing to).
  • subscriber“head” where the subscriber is going to start to read
  • “tail now” the end of the last message for the particular topic the subscriber is subscribing to.
  • FIG. 1A illustrates a block diagram of a networked vehicle environment 100 in which one or more vehicles 120 and/or one or more user devices 102 interact with a server 130 via a network 110, according to one embodiment.
  • the vehicles 120 may be equipped to provide ride-sharing and/or other location-based services, to assist drivers in controlling vehicle operation (e.g., via various driver-assist features, such as adaptive and/or regular cruise control, adaptive headlight control, anti-lock braking, automatic parking, night vision, blind spot monitor, collision avoidance, crosswind stabilization, driver drowsiness detection, driver monitoring system, emergency driver assistant, intersection assistant, hill descent control, intelligent speed adaptation, lane centering, lane departure warning, forward, rear, and/or side parking sensors, pedestrian detection, rain sensor, surround view system, tire pressure monitor, traffic sign recognition, turning assistant, wrong-way driving warning, traffic condition alerts, etc.), and/or to fully control vehicle operation.
  • driver-assist features such as adaptive and/or regular cruise control, adaptive headlight control, anti-
  • the vehicles 120 can be regular gasoline, natural gas, biofuel, electric, hydrogen, etc. vehicles configured to offer ride-sharing and/or other location-based services, vehicles that provide driver-assist functionality (e.g., one or more of the driver-assist features described herein), and/or automated or autonomous vehicles (AVs).
  • the vehicles 120 can be automobiles, trucks, vans, buses, motorcycles, scooters, bicycles, and/or any other motorized vehicle.
  • the server 130 can communicate with the vehicles 120 to obtain vehicle data, such as route data, sensor data, perception data, vehicle 120 control data, vehicle 120 component fault and/or failure data, etc.
  • vehicle data such as route data, sensor data, perception data, vehicle 120 control data, vehicle 120 component fault and/or failure data, etc.
  • the server 130 can process and store the vehicle data for use in other operations performed by the server 130 and/or another computing system (not shown).
  • Such operations can include running diagnostic models to identify vehicle 120 operational issues (e.g., the cause of vehicle 120 navigational errors, unusual sensor readings, an object not being identified, vehicle 120 component failure, etc.); running models to simulate vehicle 120 performance given a set of variables; identifying objects that cannot be identified by a vehicle 120, generating control instructions that, when executed by a vehicle 120, cause the vehicle 120 to drive and/or maneuver in a certain manner along a specified path; and/or the like.
  • vehicle data such as route data, sensor data, perception data, vehicle 120 control data, vehicle 120 component fault and/or failure data, etc
  • the server 130 can also transmit data to the vehicles 120.
  • the server 130 can transmit map data, firmware and/or software updates, vehicle 120 control instructions, an identification of an object that could not otherwise be identified by a vehicle 120, passenger pickup information, traffic data, and/or the like.
  • the server 130 can communicate with one or more user devices 102.
  • the server 130 can provide a network service to enable a user to request, via an application running on a user device 102, location-based services (e.g., transportation services, such as ride-sharing services).
  • location-based services e.g., transportation services, such as ride-sharing services
  • the user devices 102 can correspond to a computing device, such as a smart phone, tablet, laptop, smart watch, or any other device that can communicate over the network 110 with the server 130.
  • a user device 102 executes an application, such as a mobile application, that the user operating the user device 102 can use to interact with the server 130.
  • the user device 102 can communicate with the server 130 to provide location data and/or queries to the server 130, to receive map-related data and/or directions from the server 130, and/or the like.
  • the server 130 can process requests and/or other data received from user devices 102 to identify service providers (e.g., vehicle 120 drivers) to provide the requested services for the users.
  • the server 130 can receive data—such as user trip pickup or destination data, user location query data, etc.— based on which the server 130 identifies a region, an address, and/or other location associated with the various users.
  • the server 130 can then use the identified location to provide services providers and/or users with directions to a determined pickup location.
  • the application running on the user device 102 may be created and/or made available by the same entity responsible for the server 130.
  • the application running on the user device 102 can be a third-party application that includes features (e.g., an application programming interface or software development kit) that enables communications with the server 130.
  • a single server 130 is illustrated in FIG. 1A for simplicity and ease of explanation. It is appreciated, however, that the server 130 may be a single computing device, or may include multiple distinct computing devices logically or physically grouped together to collectively operate as a server system.
  • the components of the server 130 can be implemented in application-specific hardware (e.g., a server computing device with one or more ASICs) such that no software is necessary, or as a combination of hardware and software.
  • the modules and components of the server 130 can be combined on one server computing device or separated individually or into groups on several server computing devices.
  • the server 130 may include additional or fewer components than illustrated in FIG. 1 A.
  • the network 110 includes any wired network, wireless network, or combination thereof.
  • the network 110 may be a personal area network, local area network, wide area network, over-the-air broadcast network (e.g., for radio or television), cable network, satellite network, cellular telephone network, or combination thereof.
  • the network 110 may be a publicly accessible network of linked networks, possibly operated by various distinct parties, such as the Internet.
  • the network 110 may be a private or semi -private network, such as a corporate or university intranet.
  • the network 110 may include one or more wireless networks, such as a Global System for Mobile Communications (GSM) network, a Code Division Multiple Access (CDMA) network, a Long Term Evolution (LTE) network, or any other type of wireless network.
  • GSM Global System for Mobile Communications
  • CDMA Code Division Multiple Access
  • LTE Long Term Evolution
  • the network 110 can use protocols and components for communicating via the Internet or any of the other aforementioned types of networks.
  • the protocols used by the network 110 may include Hypertext Transfer Protocol (HTTP), HTTP Secure (HTTPS), Message Queue Telemetry Transport (MQTT), Constrained Application Protocol (CoAP), and the like. Protocols and components for communicating via the Internet or any of the other aforementioned types of communication networks are well known to those skilled in the art and, thus, are not described in more detail herein.
  • the server 130 can include a navigation unit 140, a vehicle data processing unit 145, and a data store 150.
  • the navigation unit 140 can assist with location-based services.
  • the navigation unit 140 can facilitate the transportation of a user (also referred to herein as a“rider”) and/or an object (e.g., food, packages, etc.) by another user (also referred to herein as a“driver”) from a first location (also referred to herein as a“pickup location”) to a second location (also referred to herein as a“destination location”).
  • the navigation unit 140 may facilitate user and/or object transportation by providing map and/or navigation instructions to an application running on a user device 102 of a rider, to an application running on a user device 102 of a driver, and/or to a navigational system running on a vehicle 120.
  • the navigation unit 140 can include a matching service (not shown) that pairs a rider requesting a trip from a pickup location to a destination location with a driver that can complete the trip.
  • the matching service may interact with an application running on the user device 102 of the rider and/or an application running on the user device 102 of the driver to establish the trip for the rider and/or to process payment from the rider to the driver.
  • the navigation unit 140 can also communicate with the application running on the user device 102 of the driver during the trip to obtain trip location information from the user device 102 (e.g., via a global position system (GPS) component coupled to and/or embedded within the user device 102) and provide navigation directions to the application that aid the driver in traveling from the current location of the driver to the destination location.
  • the navigation unit 140 can also direct the driver to various geographic locations or points of interest, regardless of whether the driver is carrying a rider.
  • the vehicle data processing unit 145 can be configured to support vehicle 120 driver-assist features and/or to support autonomous driving.
  • the vehicle data processing unit 145 can generate and/or transmit to a vehicle 120 map data, run diagnostic models to identify vehicle 120 operational issues, run models to simulate vehicle 120 performance given a set of variables, use vehicle data provided by a vehicle 120 to identify an object and transmit an identification of the object to the vehicle 120, generate and/or transmit to a vehicle 120 vehicle 120 control instructions, and/or the like.
  • the data store 150 can store various types of data used by the navigation unit 140, the vehicle data processing unit 145, the user devices 102, and/or the vehicles 120.
  • the data store 150 can store user data 152, map data 154, search data 156, and log data 158.
  • the user data 152 may include information on some or all of the users registered with a location-based service, such as drivers and riders.
  • the information may include, for example, usernames, passwords, names, addresses, billing information, data associated with prior trips taken or serviced by a user, user rating information, user loyalty program information, and/or the like.
  • the map data 154 may include high definition (HD) maps generated from sensors (e.g., light detection and ranging (LiDAR) sensors, radio detection and ranging (RADAR) sensors, infrared cameras, visible light cameras, stereo cameras, an inertial measurement unit (IMU), etc.), satellite imagery, optical character recognition (OCR) performed on captured street images (e.g., to identify names of streets, to identify street sign text, to identify names of points of interest, etc.), etc.; information used to calculate routes; information used to render 2D and/or 3D graphical maps; and/or the like.
  • sensors e.g., light detection and ranging (LiDAR) sensors, radio detection and ranging (RADAR) sensors, infrared cameras, visible light cameras, stereo cameras, an inertial measurement unit (IMU), etc.
  • satellite imagery e.g., optical character recognition (OCR) performed on captured street images (e.g., to identify names of streets, to identify street sign text, to identify names of points of interest, etc.
  • the map data 154 can include elements like the layout of streets and intersections, bridges (e.g., including information on the height and/or width of bridges over streets), off-ramps, buildings, parking structure entrances and exits (e.g., including information on the height and/or width of the vehicle entrances and/or exits), the placement of street signs and stop lights, emergency turnoffs, points of interest (e.g., parks, restaurants, fuel stations, attractions, landmarks, etc., and associated names), road markings (e.g., centerline markings dividing lanes of opposing traffic, lane markings, stop lines, left turn guide lines, right turn guide lines, crosswalks, bus lane markings, bike lane markings, island marking, pavement text, highway exist and entrance markings, etc.), curbs, rail lines, waterways, turning radiuses and/or angles of left and right turns, the distance and dimensions of road features, the placement of barriers between two-way traffic, and/or the like, along with the elements’ associated geographical locations (e
  • the map data 154 can also include reference data, such as real-time and/or historical traffic information, current and/or predicted weather conditions, road work information, information regarding laws and regulations (e.g., speed limits, whether right turns on red lights are permitted or prohibited, whether U-turns are permitted or prohibited, permitted direction of travel, and/or the like), news events, and/or the like.
  • reference data such as real-time and/or historical traffic information, current and/or predicted weather conditions, road work information, information regarding laws and regulations (e.g., speed limits, whether right turns on red lights are permitted or prohibited, whether U-turns are permitted or prohibited, permitted direction of travel, and/or the like), news events, and/or the like.
  • map data 154 is illustrated as being stored in the data store 150 of the server 130, this is not meant to be limiting.
  • the server 130 can transmit the map data 154 to a vehicle 120 for storage therein (e.g., in the data store 129, described below).
  • the search data 156 can include searches entered by various users in the past.
  • the search data 156 can include textual searches for pickup and/or destination locations.
  • the searches can be for specific addresses, geographical locations, names associated with a geographical location (e.g., name of a park, restaurant, fuel station, attraction, landmark, etc.), etc.
  • the log data 158 can include vehicle data provided by one or more vehicles 120.
  • vehicle data can include route data, sensor data, perception data, vehicle 120 control data, vehicle 120 component fault and/or failure data, etc.
  • FIG. IB illustrates a block diagram showing the vehicle 120 of FIG. 1A in communication with one or more other vehicles 170A-N and/or the server 130 of FIG. 1A, according to one embodiment.
  • the vehicle 120 can include various components and/or data stores.
  • the vehicle 120 can include a sensor array 121, a communications array 122, a data processing system 123, a communication system 124, an interior interface system 125, a vehicle control system 126, operative systems 127, a mapping engine 128, and/or a data store 129.
  • Communications 180 may be transmitted and/or received between the vehicle 120, one or more vehicles 170A-N, and/or the server 130.
  • the server 130 can transmit and/or receive data from the vehicle 120 as described above with respect to FIG. 1 A.
  • the server 130 can transmit vehicle control instructions or commands (e.g., as communications 180) to the vehicle 120.
  • the vehicle control instructions can be received by the communications array 122 (e.g., an array of one or more antennas configured to transmit and/or receive wireless signals), which is operated by the communication system 124 (e.g., a transceiver).
  • the communication system 124 can transmit the vehicle control instructions to the vehicle control system 126, which can operate the acceleration, steering, braking, lights, signals, and other operative systems 127 of the vehicle 120 in order to drive and/or maneuver the vehicle 120 and/or assist a driver in driving and/or maneuvering the vehicle 120 through road traffic to destination locations specified by the vehicle control instructions.
  • the vehicle control instructions can include route data 163, which can be processed by the vehicle control system 126 to maneuver the vehicle 120 and/or assist a driver in maneuvering the vehicle 120 along a given route (e.g., an optimized route calculated by the server 130 and/or the mapping engine 128) to the specified destination location.
  • the vehicle control system 126 can generate control commands 164 for execution by the operative systems 127 (e.g., acceleration, steering, braking, maneuvering, reversing, etc.) to cause the vehicle 120 to travel along the route to the destination location and/or to assist a driver in maneuvering the vehicle 120 along the route to the destination location.
  • the operative systems 127 e.g., acceleration, steering, braking, maneuvering, reversing, etc.
  • a destination location 166 may be specified by the server 130 based on user requests (e.g., pickup requests, delivery requests, etc.) transmitted from applications running on user devices 102.
  • a passenger and/or driver of the vehicle 120 can provide user input(s) 169 through an interior interface system 125 (e.g., a vehicle navigation system) to provide a destination location 166.
  • the vehicle control system 126 can transmit the inputted destination location 166 and/or a current location of the vehicle 120 (e.g., as a GPS data packet) as a communication 180 to the server 130 via the communication system 124 and the communications array 122.
  • the server 130 (e.g., the navigation unit 140) can use the current location of the vehicle 120 and/or the inputted destination location 166 to perform an optimization operation to determine an optimal route for the vehicle 120 to travel to the destination location 166.
  • Route data 163 that includes the optimal route can be transmitted from the server 130 to the vehicle control system 126 via the communications array 122 and the communication system 124.
  • the vehicle control system 126 can cause the operative systems 127 to maneuver the vehicle 120 through traffic to the destination location 166 along the optimal route, assist a driver in maneuvering the vehicle 120 through traffic to the destination location 166 along the optimal route, and/or cause the interior interface system 125 to display and/or present instructions for maneuvering the vehicle 120 through traffic to the destination location 166 along the optimal route.
  • the route data 163 includes the optimal route and the vehicle control system 126 automatically inputs the route data 163 into the mapping engine 128.
  • the mapping engine 128 can generate map data 165 using the optimal route (e.g., generate a map showing the optimal route and/or instructions for taking the optimal route) and provide the map data 165 to the interior interface system 125 (e.g., via the vehicle control system 126) for display.
  • the map data 165 may include information derived from the map data 154 stored in the data store 150 on the server 130.
  • the displayed map data 165 can indicate an estimated time of arrival and/or show the progress of the vehicle 120 along the optimal route.
  • the displayed map data 165 can also include indicators, such as reroute commands, emergency notifications, road work information, real-time traffic data, current weather conditions, information regarding laws and regulations (e.g., speed limits, whether right turns on red lights are permitted or prohibited, where U-turns are permitted or prohibited, permitted direction of travel, etc.), news events, and/or the like.
  • indicators such as reroute commands, emergency notifications, road work information, real-time traffic data, current weather conditions, information regarding laws and regulations (e.g., speed limits, whether right turns on red lights are permitted or prohibited, where U-turns are permitted or prohibited, permitted direction of travel, etc.), news events, and/or the like.
  • the user input 169 can also be a request to access a network (e.g., the network 110).
  • the interior interface system 125 can generate an access request 168, which can be processed by the communication system 124 to configure the communications array 122 to transmit and/or receive data corresponding to a user’s interaction with the interior interface system 125 and/or with a user device 102 in communication with the interior interface system 125 (e.g., a user device 102 connected to the interior interface system 125 via a wireless connection).
  • the vehicle 120 can include on-board Wi-Fi, which the passenger(s) and/or driver can access to send and/or receive emails and/or text messages, stream audio and/or video content, browse content pages (e.g., network pages, web pages, etc.), and/or access applications that use network access.
  • the interior interface system 125 can receive content 167 via the network 110, the communications array 122, and/or the communication system 124.
  • the communication system 124 can dynamically manage network access to avoid or minimize disruption of the transmission of the content 167.
  • the sensor array 121 can include any number of one or more types of sensors, such as a satellite-radio navigation system (e.g., GPS), a LiDAR sensor, a landscape sensor (e.g., a radar sensor), an IMU, a camera (e.g., an infrared camera, a visible light camera, stereo cameras, etc.), a Wi-Fi detection system, a cellular communication system, an inter-vehicle communication system, a road sensor communication system, feature sensors, proximity sensors (e.g., infrared, electromagnetic, photoelectric, etc.), distance sensors, depth sensors, and/or the like.
  • the satellite-radio navigation system may compute the current position (e.g., within a range of 1-10 meters) of the vehicle 120 based on an analysis of signals received from a constellation of satellites.
  • the LiDAR sensor, the radar sensor, and/or any other similar types of sensors can be used to detect the vehicle 120 surroundings while the vehicle 120 is in motion or about to begin motion.
  • the LiDAR sensor may be used to bounce multiple laser beams off approaching objects to assess their distance and to provide accurate 3D information on the surrounding environment.
  • the data obtained from the LiDAR sensor may be used in performing object identification, motion vector determination, collision prediction, and/or in implementing accident avoidance processes.
  • the LiDAR sensor may provide a 360° view using a rotating, scanning mirror assembly.
  • the LiDAR sensor may optionally be mounted on a roof of the vehicle 120.
  • the IMU may include X, Y, Z oriented gyroscopes and/or accelerometers.
  • the IMU provides data on the rotational and linear motion of the vehicle 120, which may be used to calculate the motion and position of the vehicle 120.
  • Cameras may be used to capture visual images of the environment surrounding the vehicle 120. Depending on the configuration and number of cameras, the cameras may provide a 360° view around the vehicle 120. The images from the cameras may be used to read road markings (e.g., lane markings), read street signs, detect objects, and/or the like.
  • road markings e.g., lane markings
  • read street signs e.g., street signs
  • detect objects e.g., lane markings
  • the Wi-Fi detection system and/or the cellular communication system may be used to perform triangulation with respect to Wi-Fi hot spots or cell towers respectively, to determine the position of the vehicle 120 (optionally in conjunction with then satellite-radio navigation system).
  • the inter-vehicle communication system (which may include the Wi-Fi detection system, the cellular communication system, and/or the communications array 122) may be used to receive and/or transmit data to the other vehicles 170A-N, such as current speed and/or location coordinates of the vehicle 120, time and/or location coordinates corresponding to when deceleration is planned and the planned rate of deceleration, time and/or location coordinates when a stop operation is planned, time and/or location coordinates when a lane change is planned and direction of lane change, time and/or location coordinates when a turn operation is planned, time and/or location coordinates when a parking operation is planned, and/or the like.
  • the other vehicles 170A-N such as current speed and/or location coordinates of the vehicle 120, time and/or location coordinates corresponding to when deceleration is planned and the planned rate of deceleration, time and/or location coordinates when a stop operation is planned, time and/or location coordinates when a lane change is planned and direction of
  • the road sensor communication system (which may include the Wi-Fi detection system and/or the cellular communication system) may be used to read information from road sensors (e.g., indicating the traffic speed and/or traffic congestion) and/or traffic control devices (e.g., traffic signals).
  • road sensors e.g., indicating the traffic speed and/or traffic congestion
  • traffic control devices e.g., traffic signals
  • the origination location may be the current location of the vehicle 120, which may be determined using the satellite-radio navigation system installed in the vehicle (e.g., GPS, Galileo, BeiDou/COMPASS, DORIS, GLONASS, and/or other satellite-radio navigation system), a Wi-Fi positioning System, cell tower tri angulation, and/or the like.
  • the origination location may be specified by the user via a user interface provided by the vehicle 120 (e.g., the interior interface system 125) or via the user device 102 running the application.
  • the origination location may be automatically determined from location information obtained from the user device 102.
  • one or more waypoints may be specified, enabling multiple destination locations.
  • Raw sensor data 161 from the sensor array 121 can be processed by the on-board data processing system 123.
  • the processed data 162 can then be sent by the data processing system 123 to the vehicle control system 126, and optionally sent to the server 130 via the communication system 124 and the communications array 122.
  • the data store 129 can store map data (e.g., the map data 154) and/or a subset of the map data 154 (e.g., a portion of the map data 154 corresponding to a general region in which the vehicle 120 is currently located).
  • the vehicle 120 can use the sensor array 121 to record updated map data along traveled routes, and transmit the updated map data to the server 130 via the communication system 124 and the communications array 122.
  • the server 130 can then transmit the updated map data to one or more of the vehicles 170A-N and/or further process the updated map data.
  • the data processing system 123 can provide continuous or near continuous processed data 162 to the vehicle control system 126 to respond to point-to-point activity in the surroundings of the vehicle 120.
  • the processed data 162 can comprise comparisons between the raw sensor data 161— which represents an operational environment of the vehicle 120, and which is continuously collected by the sensor array 121— and the map data stored in the data store 129.
  • the data processing system 123 is programmed with machine learning or other artificial intelligence capabilities to enable the vehicle 120 to identify and respond to conditions, events, and/or potential hazards.
  • the data processing system 123 can continuously or nearly continuously compare raw sensor data 161 to stored map data in order to perform a localization to continuously or nearly continuously determine a location and/or orientation of the vehicle 120.
  • Localization of the vehicle 120 may allow the vehicle 120 to become aware of an instant location and/or orientation of the vehicle 120 in comparison to the stored map data in order to maneuver the vehicle 120 on surface streets through traffic and/or assist a driver in maneuvering the vehicle 120 on surface streets through traffic and identify and respond to potential hazards (e.g., pedestrians) or local conditions, such as weather or traffic conditions.
  • localization can enable the vehicle 120 to tune or beam steer the communications array 122 to maximize a communication link quality and/or to minimize interference with other communications from other vehicles 170A-N.
  • the communication system 124 can beam steer a radiation patterns of the communications array 122 in response to network configuration commands received from the server 130.
  • the data store 129 may store current network resource map data that identifies network base stations and/or other network sources that provide network connectivity.
  • the network resource map data may indicate locations of base stations and/or available network types (e.g., 3G, 4G, LTE, Wi-Fi, etc.) within a region in which the vehicle 120 is located.
  • FIG. IB describes certain operations as being performed by the vehicle 120 or the server 130, this is not meant to be limiting.
  • the operations performed by the vehicle 120 and the server 130 as described herein can be performed by either entity.
  • certain operations normally performed by the server 130 e.g., transmitting updating map data to the vehicles 170A-N
  • may be performed by the vehicle 120 for load balancing purposes e.g., to reduce the processing load of the server 130, to take advantage of spare processing capacity on the vehicle 120, etc.
  • any of the vehicles 170A-N may include some or all of the components of the vehicle 120 described herein.
  • a vehicle 170A-N can include a communications array 122 to communicate with the vehicle 120 and/or the server 130.
  • FIG. 2 is a schematic illustrating a vehicle moving along a road and examples of components that the vehicle may use to determine its geographical location information.
  • a computer system 105 is on the vehicle 120, and operates to partially or fully control the vehicle.
  • the computer system 105 may include any of the components of the vehicle 120 described above with respect to FIG. IB. In instances where the vehicle 120 is operating in an autonomous mode, the computer system 105 fully controls the vehicle.
  • the computer system 105 is configured to perform numerous functions relating to localization, perception, planning, and control operations to control the vehicle 120. For example, in various embodiments of the invention, one or more of the described components, or one or more other components, may be used to determine the vehicle’s location.
  • modules 109 of the computer system 105 may be performed by modules 109 of the computer system 105. Illustrative examples of types of modules that may be implemented in a computer system 105 on a vehicle are illustrated in FIG. 3.
  • the various modules 109 communicate messages of various topics, some modules 109 writing messages, some modules 109 reading messages.
  • the modules 109 that write messages may be represented as publisher nodes, and the modules 109 that read messages may be represented as subscriber nodes, in the context of embodiments of a shared communication system described herein.
  • FIG. 2 illustrates an example the vehicle 120 moving along a road 241.
  • the road 241 may be part of the route from the first point to a second point that the vehicle 120 is controlled to autonomously traverse.
  • vehicle 120 is moving along the road 241 at a speed and in a direction indicated by motion vector 230.
  • FIG. 2 also illustrates examples of positioning components that may be used by the vehicle 120, or provide to the vehicle 120, either passively or actively, geographical location information that the vehicle 120 may use to determine the location (e.g., a geographic location) of the vehicle 120.
  • proximal positioning components 250A, 250B may run along the road 241.
  • such components may be contiguous or closely arranged, and may either be passive (sensed by a sensor on the vehicle 120, e.g., be reflective of a transmitting sensor on the vehicle 120, or be sensed by an IR or optical sensor), or active (e.g., transmit radiation sensed by the vehicle 120).
  • One or more distal positioning components 225 may be arranged beside the road or off the road as certain distance.
  • the distal positioning components 225 may also be active or passive, and various embodiments.
  • a GPS transmitter 215 may provide GPS signals that are received by the vehicle 120.
  • one or more fixed transmitters 220 may be disposed along the road 241, and provide the vehicle 120 with transmissions or communications that can be used by vehicle 120 to determine its location.
  • the vehicle 120 may include a sensor system as part of the computer system 105, or may include a sensor system on the vehicle that interfaces with the computer system 105.
  • the sensor system may include one or more sensors configured to sense information about an environment, including positioning components, in which the vehicle 120 is located.
  • the one or more sensors may include, one or more of a Global Positioning System (GPS) module, an inertial measurement unit (IMU), a radio detection and ranging (RADAR) unit, a laser rangefinder and/or light detection and ranging (LiDAR) unit, an infrared (IR) camera, and/or an optical camera.
  • GPS Global Positioning System
  • IMU inertial measurement unit
  • RADAR radio detection and ranging
  • LiDAR light detection and ranging
  • IR infrared
  • the GPS module may be any sensor configured to estimate a geographic location of the vehicle 120.
  • the GPS module may include a transceiver configured to estimate a position of the automobile 100 with respect to the Earth, based on satellite-based positioning data.
  • the computer system 105 may be configured to use the GPS module in combination with the map data to estimate a location of a lane boundary on road on which the vehicle 120 may be travelling on.
  • the IMU may be any combination of sensors configured to sense position and orientation changes of the vehicle 120 based on inertial acceleration.
  • the combination of sensors may include, for example, accelerometers and gyroscopes. Other combinations of sensors are possible as well.
  • the RADAR unit may be considered as an object detection system that may be configured to use radio waves to determine characteristics of the object such as range, altitude, direction, or speed of the object.
  • the RADAR unit may be configured to transmit pulses of radio waves or microwaves that may bounce off any object in a path of the waves.
  • the object may return a part of energy of the waves to a receiver (e.g., dish or antenna), which may be part of the RADAR unit as well.
  • the RADAR unit also may be configured to perform digital signal processing of received signals (bouncing off the object) and may be configured to identify the object.
  • the LiDAR unit may include a sensor configured to sense or detect obj ects in an environment in which the vehicle 120 is located using light.
  • LiDAR is an optical remote sensing technology that can measure distance to, or other properties of, a target by illuminating the target with light.
  • the LiDAR unit may include a laser source and/or laser scanner configured to emit laser pulses and a detector configured to receive reflections of the laser pulses.
  • the LiDAR unit may include a laser range finder reflected by a rotating mirror, and the laser is scanned around a scene being digitized, in one or two dimensions, gathering distance measurements at specified angle intervals.
  • the LiDAR unit may include components such as light (e.g., laser) source, scanner and optics, photo-detector and receiver electronics, and position and navigation system.
  • the LiDAR unit may be configured to use ultraviolet (UV), visible, or infrared light to image objects and can be used with a wide range of targets, including non-metallic objects.
  • UV ultraviolet
  • a narrow laser beam can be used to map physical features of an object with high resolution.
  • wavelengths in a range from about 10 micrometers (infrared) to about 250 nm (UV) could be used.
  • light is reflected via backscattering.
  • Different types of scattering are used for different LiDAR applications, such as Rayleigh scattering, Mie scattering and Raman scattering, as well as fluorescence.
  • LiDAR can be accordingly called Rayleigh LiDAR, Mie LiDAR, Raman LiDAR and Na/Fe/K Fluorescence LiDAR, as examples.
  • Suitable combinations of wavelengths can allow for remote mapping of objects by looking for wavelength-dependent changes in intensity of reflected signals, for example.
  • Three-dimensional (3D) imaging can be achieved using both scanning and non-scanning LiDAR systems.
  • “3D gated viewing laser radar” is an example of a non scanning laser ranging system that applies a pulsed laser and a fast gated camera.
  • Imaging LiDAR can also be performed using an array of high speed detectors and a modulation sensitive detectors array typically built on single chips using CMOS (complementary metal- oxide-semiconductor) and hybrid CMOS/CCD (charge-coupled device) fabrication techniques.
  • CMOS complementary metal- oxide-semiconductor
  • CCD charge-coupled device
  • a point cloud may include a set of vertices in a 3D coordinate system. These vertices may be defined by X, Y, and Z coordinates, for example, and may represent an external surface of an object.
  • the LiDAR unit may be configured to create the point cloud by measuring a large number of points on the surface of the object, and may output the point cloud as a data file.
  • the point cloud can be used to identify and visualize the object.
  • the point cloud can be directly rendered to visualize the object.
  • the point cloud may be converted to polygon or triangle mesh models through a process that may be referred to as surface reconstruction.
  • Example techniques for converting a point cloud to a 3D surface may include Delaunay tri angulation, alpha shapes, and ball pivoting. These techniques include building a network of triangles over existing vertices of the point cloud. Other example techniques may include converting the point cloud into a volumetric distance field and reconstructing an implicit surface so defined through a marching cubes algorithm.
  • the camera may be any camera (e.g., a still camera, a video camera, etc.) configured to capture images of the environment in which the vehicle 120 is located.
  • the camera may be configured to detect visible light, or may be configured to detect light from other portions of the spectrum, such as infrared or ultraviolet light. Other types of cameras are possible as well.
  • the camera may be a two-dimensional detector, or may have a three-dimensional spatial range.
  • the camera may be, for example, a range detector configured to generate a two-dimensional image indicating a distance from the camera to a number of points in the environment. To this end, the camera may use one or more range detecting techniques.
  • the camera may be configured to use a structured light technique in which the vehicle 120 illuminates an object in the environment with a predetermined light pattern, such as a grid or checkerboard pattern and uses the camera to detect a reflection of the predetermined light pattern off the object. Based on distortions in the reflected light pattern, the vehicle 120 may be configured to determine the distance to the points on the object.
  • the predetermined light pattern may comprise infrared light, or light of another wavelength.
  • the sensor system may additionally or alternatively include components other than those described here.
  • FIG. 3 is a schematic illustrating an example of various modules 109 that may be in a computer system 105 of a vehicle, according to some embodiments.
  • Various embodiments of the computer system 105 may have more or less modules 109 or different modules 109, the illustrated modules 109 in FIG. 3 being representative examples of such modules, and our not meant to limit the modules 109 of a computer system 105, or be viewed as being required in any particular computer system 105.
  • FIG. 3 is a schematic illustrating an example of various modules 109 that may be in a computer system 105 of a vehicle, according to some embodiments.
  • Various embodiments of the computer system 105 may have more or less modules 109 or different modules 109, the illustrated modules 109 in FIG. 3 being representative examples of such modules, and our not meant to limit the modules 109 of a computer system 105, or be viewed as being required in any particular computer system 105.
  • FIG. 3 is a schematic illustrating an example of various modules 109 that may be in a computer system 105
  • the computer system 105 includes a vehicle position module 109 A, an optical sensor module 109B, an infrared sensor module 109C, a LiDAR sensor module 109D, a RADAR sensor module 109E, the GPS module 109F, the user interface module 109G, and map data - geographic module 109H, a map data - geometry module 109 I, and inertia sensor module 109J, a navigation module 109K, an auto driving controller module 109L, the vehicle system controller module 109M, the communication interface module 109N, and a car to car interface module 1090.
  • a vehicle position module 109 A an optical sensor module 109B, an infrared sensor module 109C, a LiDAR sensor module 109D, a RADAR sensor module 109E, the GPS module 109F, the user interface module 109G, and map data - geographic module 109H, a map data - geometry module 109 I, and inertia sensor module 109J, a
  • Each of the modules 109 may send messages and receive messages from any of the other modules 109, other subsystems and components of the computer system 105, or systems that are linked to the computer system 105 that reside off the vehicle 120.
  • the shared message memory architecture described herein may be utilized.
  • each of the modules 109A-O may be considered to be a representative node 141a-o which may publish messages of a certain topic (e.g., provide a message relating to sensor data, or a control function) and for subscribing to one or more messages of one or more topics, published by other of the one or more of the modules 109.
  • FIG. 4 is a schematic illustrating an example of a portion of a shared communication system showing a topic registry 410 and multiple message buffers 420, 425, 430 that can be implemented in a shared message communication system in the computer system 105 on a vehicle that provides, for example, efficient communications between two or more of the modules 109 illustrated in FIG. 3.
  • a single topic registry 410 may interact with two or more message buffers 420, 425, 430 to allow a publisher node to write a message relating to a certain topic to a message buffer configured to and store messages of that topic, and to allow multiple subscriber nodes to read messages stored on any of the message buffers 420, 425, 430.
  • the topic registry 410 is a single registry for storing information relating to the messages that are published by all of the nodes 141 in the system.
  • the topic registry 410 includes a topic record 411, 412, 413 relating to each of the messages that are stored in each of the message buffers 420, 425, 430 (e.g., topic record 411 relates to messages that are stored in message buffer 420, topic record 412 relates to messages that are stored in message buffer 425, and topic record 413 relates to messages that are stored in message buffer 430).
  • the topic registry 410 For each message stored in a message buffer 420, 425, 430, the topic registry 410 includes information that is used for a publisher node to write a message to one of the message buffers 420, 425, 430, and for a subscriber node to read a message from one of the message buffers
  • the topic registry 410 may include for each message the address of the message buffer in which the message is stored, the name of the topic each message relates to, and the frequency at which messages of a topic are expected be published.
  • the message buffers 420, 425, 430 may be implemented on one or more storage devices. In some embodiments, two or more of the message buffers, may be implemented on the same storage device. Each of the message buffers 420, 425, 430 stores messages of a particular (single) topic. For example, message buffer 420 stores messages
  • message buffer 425 stores messages 426, 427, 428 of a second topic
  • message buffer 425 stores messages 431, 432, 433 of a third topic. Because the messages relate to a variety of information (e.g., sensor data, navigation, control functions) the messages of one topic may vary (greatly) in size from messages of a different topic. With each message buffer storing messages of a single topic, memory in each message buffer may be allocated for the expected message size for the messages of the topics that stores. Each message buffer is configured as a ring buffer such that once a message has been written to the last available storage location in the buffer, the buffer wraps around, as indicated by connection 435, to the beginning of the buffer and the writing of the message or other messages may continue.
  • FIG. 5 is a schematic illustrating an example of a shared memory message communication system that may be implemented in a computer system on a vehicle, illustrating a representative architecture that includes a topic registry, two or more message buffers, and communication channels for each of the plurality of nodes to both publish messages of a topic, and subscribe to messages of various topics that are published by one or more of the other plurality of nodes.
  • FIG. 5 illustrates the topic registry 410 and message buffers 420, 425, 430 illustrated in FIG.
  • the operational shared memory read/write functionality can be considered the communication bus.
  • the term“communication bus” is a broad term that may include any of the hardware or software that allows the operation of the shared memory read and shared memory write operations.
  • the communication bus represented in FIG. 5 as communication bus 505, 510, 515, 520 may be any suitable bus structure suitable for coupling the nodes 141 to the topic registry 410 and one or more of the message buffers 420, 425, 430 as needed for publishing and subscribing to messages. Although in the FIG. 5 schematic the communication bus is shown as represented as portions 505, 510, 515, and 520, it can also be represented as a single bus communication structure.
  • the communication bus may include wired or wireless coupling of the nodes 141 to the topic registry 410 and the nodes 141, and the message buffers 420, 425, 430 to perform the operational functionality described herein, and may include any suitable hardware and software for communication of messages and information between the topic registry 410 and the nodes 141, and the message buffers 420, 425, 430 and the nodes 141.
  • any of the nodes 141 that is a publishing node may access the topic registry 410 via communication bus 505, 515, 520 and may access an applicable one of the message buffers 420, 425, 430 via the communication bus 520, 515, 510 for writing a message to the applicable message buffer and the topic registry relating to the written message.
  • Any of the nodes 141 that is a subscriber node may access the topic registry 410 via portions of the communication bus 520, 515, 505 and may access an applicable one of the message buffers 420, 425, 430 via portions of the communication bus 520, 515, 510 for reading a message from the shared storage on the applicable message buffer.
  • FIG. 6 is a schematic illustrating an example of an embodiment of a topic registry 410 and an associated message buffer that stores messages for a particular topic.
  • the topic registry 410 includes an entry for each message in a message buffer, for example, a topic record 411, 412, 413.
  • the topic record includes information that publishing nodes access to know where to start writing a new message in the message buffer associated with the topic.
  • the topic record also includes information the subscriber node can access to know where to read messages that it subscribes to.
  • various embodiments may include various notations of such indexing information, and what is described herein relates to examples of such information but is not intended to limit the information that can be used.
  • Each record relates to a separate message buffer.
  • each topic record 411, 412, 413 relates to a corresponding a message stored in respective message buffers 421, 422, 423.
  • the information in a topic record may indicate where the already written message ends (e.g., a“tail offset” variable).
  • the information in a topic record may indicate where the being-written message ends (e.g., a“pending tail offsef’ variable), which indicates how much memory a being-written message will be using in the message buffer.
  • the tail offset variable indicates where the already written message ends in the message buffer, and is used by a subscriber node to indicate where to start reading the new message.
  • the pending tail offset variable indicates where a message that is being written to the message buffer will end, and is set by the publisher node when it is writing the message to indicate allocated space for the message.
  • Each message buffer 420, 425, 430 includes a message related to a topic for each of the message entries in the topic registry related to that topic.
  • each message may include additional information (e.g., at the beginning of the message or at the end of the message) relating to the message.
  • this information may include the message size, which indicates the size of the content of the message and any additional padding in the message.
  • Various indexing schemes may be used in both the topic registry and the message buffer to facilitate efficiently writing messages into the message buffer and recording information about such messages in the topic registry to allow subscriber nodes and publisher nodes to efficiently access the topic registry in the message buffers to read and write messages.
  • FIG. 7 is an illustration of a flow diagram representing an example of a method for a node to publish a message on a particular topic in a shared memory message communication system that allows a node 705 to publish messages for other nodes to read that may be performed, for example, on the shared memory message communication system illustrated in FIG. 5.
  • the node may be representative of a module 109 (FIG. 2) that performs a certain functionality in the computer system 105 of a vehicle. Accordingly, here and in other portions of this disclosure, references to a node 141 correspond to a module 109, and vice-versa, unless the context of the reference indicates otherwise.
  • the node generates a message to publish. For example, an image collected from a sensor on the vehicle.
  • the node accesses the topic registry, via the communication bus, and reads information from the topic registry indicating which message bus to write the message to and where in the message bus the node should start writing the message.
  • the message buffer may be already known, and where it left off writing messages in the message buffer may also be known, such that the pathname of where to write the message may be known in advance.
  • the publisher node topic registry may be accessed to update information about the message being published so subscriber nodes can access the new message.
  • the publisher node determines where the message will end in the message buffer and this information may be updated into the topic registry at block 725.
  • the publisher node at block 730 writes the message to the message buffer associated with the topic of the message it is publishing. Because these operations involve a node writing to a shared memory location instead of a communication of a message between two processes, accessing the topic registry to read and write information and accessing the message buffer to write the message does not need to go through the computer system kernel.
  • FIG. 8 is an illustration of a flow diagram representing an example of a method for a node to subscribe to (or read) a message on a particular topic in a shared memory message communication system that allows a subscriber node 805 to subscribe to the messages published by one or more nodes that may be performed, for example, on the shared memory message communication system illustrated in FIG. 5.
  • the subscriber node 805 checks the topic registry for information indicating a new message for a topic has been published.
  • the topic registry will have a counter for each particular topic of messages that are published.
  • Each subscriber node of the topic will also have a counter, which it uses to indicate how many messages of that topic it has read. By comparing the subscriber counter to the topic registry counter, the subscriber node can determine if a new message has been published (e.g., when the counter of the topic registry is higher than the counter of the subscriber node).
  • the subscriber node determines from the topic registry the starting point for reading the new message, and at block 820 the subscriber node determines the addresses of the message buffer where the message is stored (if needed).
  • the subscriber node uses the information provided by the topic registry to read the new message from message buffer. Because these operations involve a node reading from a shared memory location instead of a communication of a message between two processes, accessing the topic registry to read information and accessing the message buffer to read the message does not need to go through the computer system kernel.
  • the subscriber node determines that there is another message to read (for example, comparing a subscriber counter of the messages read by the subscriber node for a topic to a topic registry counter indicating the number of messages written for a topic. If a new message is available, the process reverts back to block 815 where the subscriber node determines the starting point for reading the new message. If it is determined that there is not another message to read at that time, the process 800 reverts back to block 810, where the subscriber node continues to periodically check to see if a new message relating to the topic it subscribes to has been published.
  • a number of different processes may be implemented to read and write information to/from the topic registry, and to read and write messages to/from the message buffers.
  • process operations that can be performed in some embodiments to set certain variables related to the topic registry, message buffers and the publisher/subscriber nodes.
  • process operations below are merely examples and are not intended to limit features of any the embodiments described herein.
  • tail offset and pending tail offset initialized with values in existing shared memory file. If shared memory file is created, both are initialized to zero.
  • pending tail offset std: :max(tail_offset + msg size, pending tail offset)
  • msg bytes ReadMessageBytes(head_offset, msg size)
  • FIGS. 7 and 8 describe an innovation of a method of communicating messages between a plurality of modules in a system on a vehicle, each module of the plurality of modules configured as a publisher node that writes messages, a subscriber node that reads messages, or both a publisher node and a subscriber node, the publisher nodes and the subscriber nodes collectively forming a plurality of nodes that communicate in the operation of the vehicle.
  • An example of such a method includes generating a plurality of groups of messages by publisher nodes of the plurality of nodes. Each group of messages are associated with a single and unique topic, and are generated by a single publisher node associated with the unique topic.
  • the publisher nodes each write their respective groups of messages in a memory location of a respective message buffer, that is, a message buffer that is associated with the same topic as the group of messages.
  • Each of the message buffers are one of a plurality of message buffers that are configured to allow access to its memory by the publisher nodes and the subscriber nodes that are associated with the topic of the messages the message buffer stores, and there is one message buffer for each of the message topics.
  • a publisher node may store messages by writing in a registry (topic registry), for each message written in a message buffer, certain location information indicating where the message was written to (stored).
  • the registry is configured to store location information associating each message written in a message buffer with, for example, an address of the message buffer, a memory location where each message written to a message buffer is stored, and a topic the stored message is associated with.
  • the method includes reading, by subscriber nodes, new message information from the registry, the new message information indicative of whether a new message associated with a particular topic is available.
  • Each of the subscriber nodes are configured to read one or more of the groups of messages (e.g., of the topics they are associated with).
  • the subscriber nodes are also configured to determine, using the new message information read from the registry, if at least one new message associated with a topic that a respective subscriber node is also associated with is available. In response to determining at least one new message is available, each of the subscriber nodes that determined a new message was available for a topic they are associated with, read from the registry the location information indicating where the at least one new message is stored. The respective subscriber nodes also read the at least one new message from the respective message buffer.
  • Writing in the registry by a publisher node may include writing information in the registry indicative of a location (e.g., a memory address) in the message buffer where a message starts and a location (e.g., a memory address) in the message buffer where the message ends.
  • a publisher node may also write in the registry information indicative of the location where the message ends before the writing of the message to the message buffer is completed, which may be referred to as a pending end (or tail) location of the stored message in the message buffer.
  • a publisher node generating the message may determine the message size, and this may be used to write the pending location of the message to the registry.
  • the size of the message may include the sum of the message payload or content (e.g., an image) and message padding. If the determined message size is greater than the message size allocated in the respective message buffer for storing messages, in some embodiments a publisher node may reallocate a bigger message storage size in the respective message buffer.
  • the registry may include, for each topic, a counter of new messages that are written to the respective message buffer.
  • Each subscriber node may also have a counter related to each of the message topics it subscribes to. For a particular topic, the subscriber node may periodically check its read message counter for that topic with the new message counter for that topic at the registry. A new message is indicated when the new message counter at the registry is greater than the read message counter of the subscriber node.
  • new message information on the registry indicates a new message is available for the subscriber to read.
  • the subscriber node is not notified that a new message is available (e.g., using above-described counters of the subscriber node and the registry). Rather, the subscriber nodes periodically checks to the new message information on the registry and uses the new message information to determine if a new message is available for reading. Different subscriber nodes may check for new messages at different periodicities, depending for example on a priority ranking of the messages, or on the known or publication rate of a message of a certain topic. In addition, other factors may affect how often a subscriber node checks for new messages. For example, the vehicle speed, the vehicle location, the operations a vehicle is undertaking (e.g., parking, driving in a congested city, driving on a country road), the number of other vehicles on the road, or information received from a source outside of the vehicle.
  • the vehicle speed, the vehicle location, the operations a vehicle is undertaking e.g., parking, driving in a congested city, driving on a country road
  • the number of other vehicles on the road or
  • the configuration of the communication system for the messaging operations of subscriber nodes and publisher nodes do not require utilizing the kernel of a main computer system, e.g., the kernel controlling the operations of the vehicle.
  • the kernel controlling the operations of the vehicle.
  • using the described shared memory message system allows communications to occur that utilize less overhead as the communication operations between the publisher nodes, subscriber nodes, the registry, and the message buffer do not need or use another layer of overall communication management.
  • the techniques described herein may be implemented by one or more special-purpose computing devices.
  • the special-purpose computing devices may be hard wired to perform the techniques, or may include circuitry or digital electronic devices such as one or more application-specific integrated circuits (ASICs) or field programmable gate arrays (FPGAs) that are persistently programmed to perform the techniques, or may include one or more hardware processors programmed to perform the techniques pursuant to program instructions in firmware, memory, other storage, or a combination.
  • ASICs application-specific integrated circuits
  • FPGAs field programmable gate arrays
  • Such special-purpose computing devices may also combine custom hard-wired logic, ASICs, or FPGAs with custom programming to accomplish the techniques.
  • the special-purpose computing devices may be desktop computer systems, server computer systems, portable computer systems, handheld devices, networking devices or any other device or combination of devices that incorporate hard-wired and/or program logic to implement the techniques.
  • Computing device(s) are generally controlled and coordinated by operating system software.
  • Conventional operating systems control and schedule computer processes for execution, perform memory management, provide file system, networking, I/O services, and provide a user interface functionality, such as a graphical user interface (“GUT’), among other things.
  • GUT graphical user interface
  • FIG. 9 is a block diagram that illustrates a computer system 105 upon which any of the embodiments described herein may be implemented, for example, computer system 105 illustrated in FIG. 2.
  • the system 105 may correspond identically to the system 105 described above, or have one or more different components.
  • the computer system 105 includes a bus 902 or other communication mechanism for communicating information, and one or more hardware processors 904 coupled to the bus 902 for processing information.
  • the bus 902 may be the communication bus 505, 510, 115, 520 illustrated in FIG. 5.
  • Hardware processor(s) 904 may be, for example, one or more general purpose microprocessors.
  • the processor(s) 904 may correspond to a processor described above in reference to computer system 105.
  • the computer system 105 also includes a main memory 906, such as a random access memory (RAM), cache and/or other dynamic storage devices, coupled to bus 902 for storing information and instructions to be executed by processor 904.
  • Main memory 906 also may be used for storing temporary variables or other intermediate information during execution of instructions to be executed by processor 904.
  • Such instructions when stored in storage media accessible to processor 904, render computer system 105 into a special-purpose machine that is customized to perform the operations specified in the instructions.
  • the instructions may cause a node 141 of the computer system 105 to generate a message to publish, access the topic registry and the message buffer corresponding to the topic of the message to determine where to store the message, right the message to the message buffer at the appropriate location, and update the topic registry indicating the message has been stored and where it starts.
  • the instructions may cause a node 141 of the computer system 105 to determine from the topic registry whether a new message is available to be read and the location of the message, read the new message from the message buffer, determine if there is another message to be read and if so read that message, and after determining there are no new messages waiting to be read, revert to a state with a node 141 periodically checks the topic registry for information indicating a new message to a topic it subscribes to has been published.
  • the computer system 105 further includes a read only memory (ROM) 908 or other static storage device coupled to bus 902 for storing static information and instructions for processor 904.
  • a storage device 910 such as a magnetic disk, optical disk, or USB thumb drive (Flash drive), etc., is provided and coupled to bus 902 for storing information and instructions.
  • the main memory 906, the ROM 908, and/or the storage 910 may correspond to the memory 106 described above for storing map data.
  • the main memory 906 is the memory used to store the map data tiles when they are being used to control the vehicle 120. For example, one or more map data tiles may be initially stored on the storage device 910 and then, as needed based on the methods and systems described herein, the one or more map data tiles may be loaded into memory 906 and used to control the vehicle 120.
  • the computer system 105 may implement the techniques described herein using customized hard-wired logic, one or more ASICs or FPGAs, firmware and/or program logic which in combination with the computer system causes or programs computer system 105 to be a special-purpose machine. According to one embodiment, the techniques herein are performed by computer system 105 in response to processor(s) 904 executing one or more sequences of one or more instructions contained in main memory 906. Such instructions may be read into main memory 906 from another storage medium, such as storage device 910. Execution of the sequences of instructions contained in main memory 906 causes processor(s) 904 to perform the process steps described herein. In alternative embodiments, hard-wired circuitry may be used in place of or in combination with software instructions.
  • the main memory 906, the ROM 908, and/or the storage 910 may include non-transitory storage media.
  • non-transitory media refers to a media that store data and/or instructions that cause a machine to operate in a specific fashion, where the media excludes transitory signals.
  • Such non-transitory media may comprise non-volatile media and/or volatile media.
  • Non-volatile media includes, for example, optical or magnetic disks, such as storage device 910.
  • Volatile media includes dynamic memory, such as main memory 906.
  • non-transitory media include, for example, a floppy disk, a flexible disk, hard disk, solid state drive, magnetic tape, or any other magnetic data storage medium, a CD-ROM, any other optical data storage medium, any physical medium with patterns of holes, a RAM, a PROM, and EPROM, a FLASH-EPROM, NVRAM, any other memory chip or cartridge, and networked versions of the same.
  • the computer system 105 also includes a communication interface 918 coupled to bus 902.
  • Communication interface 918 provides a two-way data communication coupling to one or more network links that are connected to one or more local networks.
  • communication interface 918 may be an integrated services digital network (ISDN) card, cable modem, satellite modem, or a modem to provide a data communication connection to a corresponding type of telephone line.
  • ISDN integrated services digital network
  • communication interface 918 may be a local area network (LAN) card to provide a data communication connection to a compatible LAN (or WAN component to communicated with a WAN).
  • LAN local area network
  • Wireless links may also be implemented.
  • communication interface 918 sends and receives electrical, electromagnetic or optical signals that carry digital data streams representing various types of information.
  • the computer system 105 can send messages and receive data, including program code, through the network(s) 925, network link 919 and communication interface 918.
  • the networks(s) 925 maybe connected to one or more servers 930.
  • a server might transmit a requested code for an application program through the Internet, the ISP, the local network and the communication interface 918.
  • the received code may be executed by processor 904 as it is received, and/or stored in storage device 910, or other non-volatile storage for later execution.
  • the various operations of example methods described herein may be performed, at least partially, by an algorithm.
  • the algorithm may be comprised in program codes or instructions stored in a memory (e.g., a non-transitory computer-readable storage medium described above).
  • Such algorithm may comprise a machine learning algorithm or model.
  • a machine learning algorithm or model may not explicitly program computers to perform a function, but can learn from training data to make a predictions model (a trained machine learning model) that performs the function.
  • processors may be temporarily configured (e.g., by software) or permanently configured to perform the relevant operations.
  • processors may constitute processor- implemented engines that operate to perform one or more operations or functions described herein.
  • the methods described herein may be at least partially processor- implemented, with a particular processor or processors being an example of hardware.
  • a particular processor or processors being an example of hardware.
  • the operations of a method may be performed by one or more processors or processor-implemented engines.
  • the one or more processors may also operate to support performance of the relevant operations in a“cloud computing” environment or as a“software as a service” (SaaS).
  • SaaS software as a service
  • at least some of the operations may be performed by a group of computers (as examples of machines including processors), with these operations being accessible via a network (e.g., the Internet) and via one or more appropriate interfaces (e.g., an Application Program Interface (API)).
  • API Application Program Interface
  • the performance of certain of the operations may be distributed among the processors, not only residing within a single machine, but deployed across a number of machines.
  • the processors or processor-implemented engines may be located in a single geographic location (e.g., within a home environment, an office environment, or a server farm). In other example embodiments, the processors or processor- implemented engines may be distributed across a number of geographic locations.
  • the term“or” may be construed in either an inclusive or exclusive sense. Moreover, plural instances may be provided for resources, operations, or structures described herein as a single instance. Additionally, boundaries between various resources, operations, engines, and data stores are somewhat arbitrary, and particular operations are illustrated in a context of specific illustrative configurations. Other allocations of functionality are envisioned and may fall within a scope of various embodiments of the present disclosure. In general, structures and functionality presented as separate resources in the example configurations may be implemented as a combined structure or resource. Similarly, structures and functionality presented as a single resource may be implemented as separate resources. These and other variations, modifications, additions, and improvements fall within a scope of embodiments of the present disclosure as represented by the appended claims. The specification and drawings are, accordingly, to be regarded in an illustrative rather than a restrictive sense.
  • Conditional language such as, among others,“can,”“could,”“might,” or “may,” unless specifically stated otherwise, or otherwise understood within the context as used, is generally intended to convey that certain embodiments include, while other embodiments do not include, certain features, elements and/or steps. Thus, such conditional language is not generally intended to imply that features, elements and/or steps are in any way required for one or more embodiments or that one or more embodiments necessarily include logic for deciding, with or without user input or prompting, whether these features, elements and/or steps are included or are to be performed in any particular embodiment.
  • aspects of the present disclosure may be illustrated and described herein in any of a number of patentable classes or context including any new and useful process, machine, manufacture, or composition of matter, or any new and useful improvement thereof. Accordingly, aspects of the present disclosure may be implemented entirely hardware, entirely software (including firmware, resident software, micro-code, etc.) or combining software and hardware implementation that may all generally be referred to herein as a “module,” “unit,” “component,”“device,” or“system.” Furthermore, aspects of the present disclosure may take the form of a computer program product embodied in one or more computer readable media having computer readable program code embodied thereon.
  • Computer program code for carrying out operations for aspects of the present disclosure may be written in any combination of one or more programming languages, including an object oriented programming language such as Java, Scala, Smalltalk, Eiffel, JADE, Emerald, C++, C#, VB. NET, Python or the like, conventional procedural programming languages, such as the“C” programming language, Visual Basic, Fortran 2003, Perl, COBOL 2002, PHP, ABAP, dynamic programming languages such as Python, Ruby and Groovy, or other programming languages.
  • the program code may execute entirely on the user's computer, partly on the user's computer, as a stand-alone software package, partly on the user's computer and partly on a remote computer or entirely on the remote computer or server.
  • the remote computer may be connected to the user's computer through any type of network, including a local area network (LAN) or a wide area network (WAN), or the connection may be made to an external computer (for example, through the Internet using an Internet Service Provider) or in a cloud computing environment or offered as a service such as a Software as a Service (SaaS).
  • LAN local area network
  • WAN wide area network
  • SaaS Software as a Service
  • Disjunctive language such as the phrase“at least one of X, Y, or Z,” unless specifically stated otherwise, is otherwise understood with the context as used in general to present that an item, term, etc., may be either X, Y, or Z, or any combination thereof (e.g., X, Y, and/or Z).
  • Disjunctive language is not generally intended to, and should not, imply that certain embodiments require at least one of X, at least one of Y, or at least one of Z to each be present. It will be appreciated by those skilled in the art that various modifications and changes may be made without departing from the scope of the described technology. Such modifications and changes are intended to fall within the scope of the embodiments.
  • phrase“based on” does not mean“based only on,” unless expressly specified otherwise. In other words, the phrase“based on” describes both“based only on” and“based at least on.” Unless otherwise explicitly stated, articles such as“a” or“an” should generally be interpreted to include one or more described items. Accordingly, phrases such as “a device configured to” are intended to include one or more recited devices.

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)
PCT/US2018/068038 2018-12-28 2018-12-28 Message buffer for communicating information between vehicle components WO2020139393A1 (en)

Priority Applications (2)

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
CN201880100665.6A CN113767376A (zh) 2018-12-28 2018-12-28 用于在车辆部件之间传送信息的消息缓存器

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
WO2020139393A1 true WO2020139393A1 (en) 2020-07-02

Family

ID=71127406

Family Applications (1)

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

Country Status (2)

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

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040034664A1 (en) * 2002-08-01 2004-02-19 Oracle International Corporation Buffered message queue architecture for database management systems with memory optimizations and "zero copy" buffered message queue
US20080168122A1 (en) * 2007-01-10 2008-07-10 Benjamin Joseph Fletcher Publish/subscribe system
US20150288636A1 (en) * 2014-04-02 2015-10-08 Ford Global Technologies, Llc Vehicle telematics data exchange
US20160080491A1 (en) * 2014-09-15 2016-03-17 Ge Aviation Systems Llc Mechanism and method for accessing data in a shared memory
US20170262172A1 (en) * 2014-11-28 2017-09-14 Huawei Technologies Co., Ltd. File Access Method and Apparatus, and Storage Device
US20170353418A1 (en) * 2016-06-02 2017-12-07 Beijing Baidu Netcom Science And Technology Co., Ltd. Method and device for managing shared memory in robot operating system
US20180183873A1 (en) * 2016-07-21 2018-06-28 Baidu Usa Llc Efficient communications amongst computing nodes for operating autonomous vehicles

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2011131262A1 (en) * 2010-04-19 2011-10-27 International Business Machines Corporation Controlling message delivery in publish/subscribe messaging

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040034664A1 (en) * 2002-08-01 2004-02-19 Oracle International Corporation Buffered message queue architecture for database management systems with memory optimizations and "zero copy" buffered message queue
US20080168122A1 (en) * 2007-01-10 2008-07-10 Benjamin Joseph Fletcher Publish/subscribe system
US20150288636A1 (en) * 2014-04-02 2015-10-08 Ford Global Technologies, Llc Vehicle telematics data exchange
US20160080491A1 (en) * 2014-09-15 2016-03-17 Ge Aviation Systems Llc Mechanism and method for accessing data in a shared memory
US20170262172A1 (en) * 2014-11-28 2017-09-14 Huawei Technologies Co., Ltd. File Access Method and Apparatus, and Storage Device
US20170353418A1 (en) * 2016-06-02 2017-12-07 Beijing Baidu Netcom Science And Technology Co., Ltd. Method and device for managing shared memory in robot operating system
US20180183873A1 (en) * 2016-07-21 2018-06-28 Baidu Usa Llc Efficient communications amongst computing nodes for operating autonomous vehicles

Also Published As

Publication number Publication date
CN113767376A (zh) 2021-12-07

Similar Documents

Publication Publication Date Title
US11080216B2 (en) Writing messages in a shared memory architecture for a vehicle
US10747597B2 (en) Message buffer for communicating information between vehicle components
US11616737B2 (en) Reading messages in a shared memory architecture for a vehicle
US10876844B2 (en) Systems and methods for loading and tracking maps on a vehicle
US11327489B2 (en) Shared memory architecture for a vehicle
CN107228676B (zh) 来自连接的车辆队列的地图更新
US20200209005A1 (en) Systems and methods for loading object geometry data on a vehicle
US11550623B2 (en) Distributed system task management using a simulated clock
CN110164122A (zh) 用于路口的车辆列队***控制
US20200202167A1 (en) Dynamically loaded neural network models
US11803184B2 (en) Methods for generating maps using hyper-graph data structures
US11480964B2 (en) Distributed system execution using a serial timeline
CN111693055B (zh) 道路网络变化检测和所检测的变化的本地传播
US11397610B2 (en) Architecture for simulation clock-based simulation of distributed systems
US11290326B2 (en) Method and apparatus for regulating resource consumption by one or more sensors of a sensor array
US11999372B2 (en) Operation of an autonomous vehicle based on availability of navigational information
WO2020139331A1 (en) Systems and methods for loading object geometry data on a vehicle
WO2020139396A1 (en) Writing messages in a shared memory architecture for a vehicle
WO2022067295A1 (en) Architecture for distributed system simulation timing alignment
WO2020139395A1 (en) Reading messages in a shared memory architecture for a vehicle
CN113748418B (zh) 用于在车辆上加载和跟踪地图的***和方法
WO2020139393A1 (en) Message buffer for communicating information between vehicle components
WO2020139389A1 (en) Shared memory architecture for a vehicle
US20230342316A1 (en) Scalable configurable chip architecture

Legal Events

Date Code Title Description
121 Ep: the epo has been informed by wipo that ep was designated in this application

Ref document number: 18945032

Country of ref document: EP

Kind code of ref document: A1

DPE1 Request for preliminary examination filed after expiration of 19th month from priority date (pct application filed from 20040101)
NENP Non-entry into the national phase

Ref country code: DE

122 Ep: pct application non-entry in european phase

Ref document number: 18945032

Country of ref document: EP

Kind code of ref document: A1