Sensor simulation with integrated multi-sensor view
Patent Information
- Application Number
- JP2023570224
- Authority / Receiving Office
- JP · JP
- Patent Type
- Applications
- Current Assignee / Owner
- Priority Date
- 2021-05-14
- Filing Date
- 2022-05-12
- Publication Date
- 2025-04-28
- Estimated Expiration
- 2042-05-12
AI Technical Summary
Generating and providing realistic, accurate, and high-resolution input data to sensors during virtual driving simulations is resource-intensive and computationally expensive, limiting the number of simulation scenarios, sensors, and real-time capabilities.
Techniques involving sensor-dependent data rendering, hybrid CPU-GPU systems, ray tracing, spatial and temporal upsampling, and reprojection to efficiently deliver high-resolution sensor data, including image, depth, and object data to simulated sensors.
Enhances simulation efficiency and accuracy by reducing computational load, allowing more scenarios and sensors to be simulated in real-time with improved data quality.
Smart Images

Figure 00000000_0000_ABST
Abstract
Description
[Technical field]
[0001] The present invention relates to sensor simulation with integrated multi-sensor views. [Background technology]
[0002] This application claims priority to U.S. patent application Ser. No. 17 / 321,205, filed May 14, 2021, and entitled “SENSOR SIMULATION WITH UNIFIED MULTI-SENSOR VIEWS,” the entire contents of which are incorporated herein by reference for all purposes.
[0003] Simulated data and simulations can be used to test and validate system features and functionality, including features and functionality that may be impossible to test in the real world (e.g., due to safety concerns, time limitations, repeatability, etc.). For example, autonomous vehicles and other moving vehicles may use driving simulations to test and improve passenger safety, vehicle decision-making, sensor data analysis, and route optimization. However, it can be difficult to create driving simulations that accurately reflect real-world scenarios because the data used to create such simulations can be noisy, inconsistent, and / or incomplete. Additionally, driving simulations may include multiple different systems and components interacting in a real-time simulated environment, which can be resource and computationally expensive. [Brief description of the drawings]
[0004] The detailed description will be set forth with reference to the accompanying drawings, in which the leftmost digit(s) of a reference number identifies the figure in which the reference number first appears, and the use of the same reference number in different drawings indicates similar or identical components or features. [Figure 1]1 illustrates an example process for generating and using a view of a simulated environment to provide data to a simulated sensor, according to one or more implementations of the present disclosure. [Diagram 2] 1 illustrates an example system for generating and using a view of a simulated environment to provide data to a simulated sensor, in accordance with one or more implementations of the present disclosure. [Diagram 3] 1 illustrates an example of an integrated multi-sensor view of a simulated environment in accordance with one or more implementations of the present disclosure. [Figure 4A] 1 illustrates an example of a simulated environment including a simulated vehicle having simulated sensors associated with one or more rendered views in accordance with one or more implementations of the present disclosure. [Figure 4B] 1 illustrates an example of a simulated environment including a simulated vehicle having simulated sensors associated with one or more rendered views in accordance with one or more implementations of the present disclosure. [Figure 4C] 1 illustrates an example of a simulated environment including a simulated vehicle having simulated sensors associated with one or more rendered views in accordance with one or more implementations of the present disclosure. [Diagram 5] 1 illustrates another example simulated environment including a moving simulated vehicle with a rotational sensor and a rendered view in accordance with one or more implementations of the present disclosure. [Figure 6A] 1 illustrates an example of a depth-based ray casting technique in a simulated environment in accordance with one or more implementations of the present disclosure. [Figure 6B] 1 illustrates an example of a depth-based ray casting technique in a simulated environment in accordance with one or more implementations of the present disclosure. [Figure 7] FIG. 7 illustrates an example depth-aware spatial upsampling technique for a sensor in a simulated environment in accordance with one or more implementations of the present disclosure. [Figure 8] FIG. 8 illustrates an example technique for generating a view of a simulated environment using a GPU, in accordance with one or more implementations of this disclosure. [Figure 9] FIG. 9 illustrates a block diagram of an example architecture for implementing various techniques described herein. [Figure 10] FIG. 10 illustrates an example process for generating and using a multi-sensor view of a simulated environment to provide data to simulated sensors in accordance with one or more implementations of the present disclosure. [Figure 11] FIG. 11 illustrates an example process for generating and reprojecting a view of a simulated environment to provide data to a simulated sensor in accordance with one or more implementations of the present disclosure. [Figure 12] FIG. 12 illustrates an example process for depth-aware spatial upsampling that uses linear interpolation and / or sampling to enhance a 2D view of a simulated environment in accordance with one or more implementations of the present disclosure. [Figure 13] FIG. 13 illustrates an example process of temporal upsampling for object recognition and velocity recognition that uses linear interpolation and / or sampling to generate sensor data for a time interval in accordance with one or more embodiments of the present disclosure. [Figure 14] FIG. 14 illustrates an example process for using sensor dependency data, view data, and GPU scheduling data to determine a view for rendering within a simulated environment, in accordance with one or more implementations of the present disclosure. DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS
[0005] The present disclosure relates to techniques for generating sensor data and providing the sensor data to sensors operating within a software-based simulation. A sensor simulation system (which may also be referred to as a sensor engine) may render a two-dimensional (2D) view based on a three-dimensional (3D) simulated environment and may use the 2D view to determine sensor data for the simulated sensors based on sensor positions, orientations, and / or fields of view of the simulated sensors within the simulation. Various examples described herein relate to performing a driving simulation for an autonomous vehicle, where the simulated autonomous vehicle includes a plurality of different simulated sensors mounted at different locations on the vehicle, where the simulated sensors are configured to detect and process different types of input data from the simulated environment. As the simulated vehicle traverses the simulated environment, the simulated sensors may move based on the motion of the vehicle and / or independently of the vehicle. Simulated agents and other dynamic objects within the simulated environment may also move relative to the simulated vehicle and sensors. Various techniques described herein relate to generating accurate, efficient, and high-resolution sensor data and providing the sensor data as input to simulated sensors of the simulated vehicle during real-time or offline driving simulations.
[0006] The purpose of a driving simulation may be to test and validate the response of a simulated vehicle to a variety of different simulation scenarios for later use in the real world. For example, a driving simulation may use various simulated environments and simulated objects or agents to model normal or abnormal driving and / or vehicle conditions. A driving simulation may model a variety of different traffic situations, environmental conditions, road obstacles, accidents, etc. to test and validate passenger safety, vehicle routing, decision-making, efficiency, etc. A particular driving simulation may test the response of a simulated vehicle to defects and / or malfunctioning sensors on the vehicle. Some driving simulations may be used to test individual components or systems of a simulated vehicle (e.g., perception components, decision-making or planning components, etc.). The same or different driving simulations may test the simulated vehicle as a whole, including interactions between various components or systems of the vehicle. A simulation may include scenarios that rarely occur in the real world, such as collisions with other objects, violations of traffic rules, etc., but still require testing to validate safe operation, and may provide a mechanism for consistently testing variations of control algorithms holding other factors constant. Although simulations may include scenarios that rarely occur in the real world, such as collisions with other objects or violations of traffic rules, they still require testing to verify safe operation and must provide a mechanism to consistently test variations in control algorithms while holding other factors constant.
[0007] In various driving simulations, the simulated vehicle may interact with additional simulated agents and / or other objects in the simulated environment. In such simulations, the simulated agents and / or objects in the environment may include software-based objects controlled based on artificial intelligence and / or other algorithms that can react to the behavior of the simulated vehicle, while the simulated vehicle also reacts to the simulated agents / objects and conditions of the simulated environment. Driving simulations provide highly realistic testing and validation against real-world driving scenarios by simultaneously running all simulated components (e.g., simulated vehicles, objects, and environment) in the simulated environment and supporting communication and interaction between the simulated components.
[0008] However, generating and providing realistic, accurate, and high-resolution input data to sensors during a virtual driving simulation can be resource intensive and computationally expensive. These limitations may limit the number of simulation scenarios that can be run in a particular computing environment, limit the number of different sensors that can be realistically simulated, or prevent a particular simulation from running in real time. For example, when running a virtual driving simulation environment, the simulation system may continuously generate and provide sensor data separately for each simulated sensor in the simulation. Each sensor data generation may require rendering a new view, which may involve significant computational resources by the sensor engine and / or the simulation system.
[0009] To address limitations of conventional systems for generating and providing sensor data based on a 3D simulated environment, certain techniques described herein relate to using sensor-dependent data to determine specific views (which may also be referred to as image views) to be rendered at different times during a simulation. Additional techniques described herein relate to generating a "integrated" two-dimensional view that includes multiple types of sensor data (e.g., image data, depth data, lidar data, radar data, etc.) associated with each region (e.g., pixel) of the view. This may be used to provide sensor data for different types of sensors in the simulated environment. Additional techniques relate to hybrid systems including a GPU and a CPU working in concert to perform a driving simulation (or other simulation), where the GPU is used to render a 2D view of the simulated environment (e.g., via rasterization) and perform ray tracing to spatially and / or temporally align and / or upsample the views for a particular simulated sensor position, angle, and field of view, and the CPU is used to determine the views to be rendered by the GPU and provide additional sensor data post-processing and other simulation computational functions. Further techniques described herein relate to performing spatial and / or temporal upsampling, including upsampling based on depth data, object identifiers, and / or velocity within a simulation, to improve view resolution and reduce the frequency with which images are re-rendered. As described in various examples below, the techniques and components described herein may be implemented individually or in combination to more efficiently and accurately provide realistic, high-resolution input data to sensors running in a simulated environment.
[0010] FIG. 1 illustrates an example process 100 for generating and using a 2D view of a simulated environment to generate sensor data to provide as input to simulated sensors in the simulated environment using the 2D view. In various examples, some or all of the operations of the example process 100 may be performed by a driving simulation system (e.g., a virtual driving simulator), other types of simulation systems, and / or a computing device configured as a sensor engine configured to generate and provide sensor input data to a simulation system. The process 100, and various other examples herein, are described with reference to a driving simulation in which a simulated vehicle having one or more sensors traverses a simulated environment. During the simulation, the vehicle sensors are provided with sensor input data representative of the simulated environment and simulated agents / objects therein, and the simulated vehicle responds to the sensor input data by controlling the vehicle. However, from the context of this disclosure, it may be understood that the techniques described herein are not limited to driving simulation systems, but may be implemented in a similar or identical manner within other systems, including, but not limited to, video game systems, virtual reality systems, non-driving simulation systems (e.g., flight simulators), and / or image / sensor data processing systems operating in physical (e.g., non-simulated) environments.
[0011] In operation 102, the sensor engine determines one or more 2D views of the 3D simulated environment to be rendered at a particular time during the simulation based on sensor dependencies of the simulated sensors operating during the simulation. The sensor engine, described in more detail below, may include one or more computing devices (e.g., computing devices 202 and / or 932) associated with the driving simulation system. In some cases, the simulated sensors may refer to sensor systems of a simulated vehicle executing within the driving simulation. The simulated sensors may include a variety of different types of sensor systems (e.g., cameras, lidar sensors, radar sensors, etc.) configured to detect or receive sensor data from the simulated environment. In operation 102, the sensor engine may obtain, for each sensor in the simulated environment, a set of sensor dependency data that identifies input data to be provided to the sensor relative to the simulated environment. For example, the sensor dependency data may include the position, orientation angle, and / or field of view of the sensor within the simulated environment. These factors may determine which 2D views may or may not be used to generate the sensor data to provide as input to the sensor. Additionally, sensor-dependent data may include the type of data the sensor is configured to detect, and may include any combination of physical properties of objects in the simulated environment. For example, an image sensor (e.g., a camera) may be configured to detect light and color data from the simulated environment, a radar sensor may be configured to detect object distance from the sensor (which may be referred to as depth from the sensor's perspective) and / or object velocity data, and a lidar sensor may be configured to detect data, material properties (e.g., material type / composition, reflectivity, roughness, etc.). Other types of sensors may be configured to detect additional or alternative physical properties of (or emanating from) objects, such as heat, brightness, sound, motion, wind, moisture, etc.
[0012] Along with the sensor-dependent data, the sensor engine of operation 102 may obtain data related to a current or previously rendered 2D view within the simulation. Data related to the 2D view may include the "position" of the 2D view within the 3D simulated environment, such as the focus and / or angle or orientation of the 2D view, as well as the type of data stored in the 2D view (e.g., types of sensor data, such as light, color, depth, object ID, speed, material data, etc.). Additionally, as shown in box 104, sensors may be mapped to or otherwise associated with views during the execution of the simulation, and the view data obtained in operation 102 may include data identifying the view that is (or may be) used to provide input data to various sensors.
[0013] The sensor engine may also obtain and analyze various timing data and / or simulated object movement in operation 102 within the context of the current simulation. For example, the relevant timing data may include the sensor execution rate (which may also be referred to as sampling rate or firing frequency) of each sensor operating in the simulation, and the rendering times / rates associated with the different 2D views generated for the simulation. The sensor engine may also determine the available GPU or other processor capacity for rendering the 2D views (e.g., cores, GPU speed, storage, current rendering backlog, latency, network speed) and / or the available CPU or other processor capacity for performing pre-processing and post-processing operations in connection with the rendering of the views by the GPU and the generation of the sensor data. Additionally, the sensor engine may receive object movement data in operation 102, including the speed and direction of the movement of the simulated vehicle, as well as the speed and direction of other simulated agents / objects in the simulation.
[0014] Based on the sensor dependency data and / or other simulation data in operation 102, the sensor engine may apply one or more heuristic-based algorithms and / or machine learning models to determine which views are rendered at various different times during the simulation. In some examples, the sensor engine may determine a single view to render in operation 102, or may determine a prioritized list of existing views and / or new views to be created based on sensor dependencies, view data, mapping data, etc. The views selected by the sensor engine may be provided to a GPU for rendering, and the updated rendered views may then be incorporated into the simulation system and used as input data by the simulated sensors.
[0015] As an example, in operation 102, the sensor engine may apply an algorithm that selects for rendering (or updating / re-rendering) an existing 2D view that provides sensor input data for the greatest number of sensors and / or the highest priority sensor. As another example, the sensor engine's algorithm may select for re-rendering an existing 2D view that provides sensor input data for at least one sensor, prioritizing the 2D views in order of oldest generated (e.g., oldest) current view. In yet other examples, the sensor engine's algorithm may rotate the re-rendering of the existing 2D view, skip or weight views based on the number of sensors mapped to the view, the direction of simulated vehicle movement towards or away from each view, the number of simulated agents and / or other dynamic objects in each view, etc. It may be understood that these example algorithms may be applied by the sensor engine individually or in any combination and may be modified based on any additional factors associated with the sensors and / or views described herein.
[0016] Additionally, in some examples, the sensor engine of operation 102 may perform a time-based analysis for the simulation to determine whether a view scheduled for rendering (e.g., an initial rendering or a re-rendering to update the view) has the same value or relevance when the view is projected to be integrated into the simulated environment. For example, the sensor engine may determine the expected rendering latency (e.g., GPU rendering time + pre-processing and post-processing) for generating the view and may determine which sensors to use for the updated view after it is rendered based on the motion of the simulated vehicle and / or sensors.
[0017] In operation 106, the sensor engine may generate an integrated 2D view of the simulated 3D environment that includes multiple different types of sensor data corresponding to different physical characteristics of the simulated environment. In some examples, the generated 2D view may correspond to the view selected by the sensor engine in operation 102. As used herein, a "integrated" 2D view may refer to a 2D view of the simulated environment that includes multiple types of sensor data associated with each region (e.g., pixel) of the 2D view. For example, operation 106 may include generating a 2D view (e.g., box 108) that includes image data (e.g., light and color data), depth data, object identifiers, velocity data, material data, etc. for each pixel of the view. In some examples, the sensor engine may initiate a rasterization process on the GPU to generate visual image data and depth data, and may access and analyze simulated object data in the simulated environment to determine object identifiers, velocity, material data, reflectivity, roughness, etc. For each distinct region (e.g., pixel or other predefined region) in the integrated 2D view, the sensor engine may generate an array, data structure, or other storage configuration capable of storing the multi-sensor data for the region. In some examples, the integrated 2D view may be stored as a multi-layer data structure in which different attributes (e.g., physical properties) are stored in different layers of the structure.
[0018] In operation 110, the sensor engine may reproject the 2D view generated in operation 106 to spatially align the 2D view with a particular sensor. For example, the sensor engine may determine that for a particular sensor in the simulation, the position and / or orientation angle of the sensor does not correspond to the focus and / or orientation angle of the 2D view at which the sensor receives input data. Operation 110 may include first determining whether the 2D view is aligned with its corresponding sensor, and in some instances, if the sensor is aligned within a spatial and / or temporal threshold of the 2D view, no reprojection may be required. However, because multiple sensors at different locations on the vehicle may be mapped to the same 2D view, in some cases, the sensor engine may generate a reprojection of the shared 2D view that is specific to at least one of the sensors mapped to the shared view.
[0019] In some examples, the sensor engine may use ray casting and / or ray tracing techniques to generate a reprojection of the 2D view of a particular sensor in operation 110. For example, after rasterizing the 2D view and depth buffer in operation 106, the sensor engine may cast a ray from the position of the sensor in the simulated environment toward the 2D view, which may intersect with the 2D view at a ray intersection. After casting the ray, the sensor engine may apply ray marching to depth data associated with the 2D view (e.g., depth buffer field) to determine a depth value at the ray intersection. In some cases, the sensor engine may cast a ray based on different positions of the sensor at two different times during the simulation to determine a ray intersection in the depth data. The sensor engine may cast one or more secondary rays from the depth data and the intersection to calculate shadowing and masking information that can be used to simulate various visual effects in the simulation. Recursive ray casting may also be used in some implementations.
[0020] Reprojecting the view in operation 110 may include generating a point cloud and / or generating an image based on attributes / physical characteristics stored in the integrated 2D view. For example, certain types of sensors (e.g., lidar, radar, etc.) may be configured to receive a point cloud representation 112 of the environment from the perspective of the sensor, while other types of sensors (e.g., cameras) may be configured to receive image data. Thus, the sensor engine of operation 110 may determine the simulated sensor time at which the 2D view is being reprojected, and the reprojection may include generating a lidar point cloud based on the integrated 2D view (e.g., for a lidar sensor), a radar point cloud based on the integrated 2D view (e.g., for a radar sensor), a 2D image view (e.g., for a camera sensor), etc. In some implementations, the reprojection in operation 110 may be skipped for certain sensor types. For example, if the sensor is a camera, the sensor engine may not generate an image reprojection, but may use a rasterized image of the 2D view for the image sensor input data.
[0021] As described above, ray tracing / ray casting may be used to reproject the 2D view in operation 106. For example, ray tracing may be used to generate a point cloud that spatially aligns the simulated sensor and the 2D view at a point during the simulation. Additionally, during the execution of the driving simulation, the simulated sensor may move based on the motion of the vehicle and / or may move independently of the vehicle (e.g., a spinning camera, lidar, or radar sensor). The sensor engine may be configured to cast rays at periodic time intervals after generation of the 2D view based on the updated position and / or orientation of the sensor at the time interval. Using the rays cast at each time interval, the sensor engine may generate a reprojection of the 2D view (e.g., a point cloud and / or an image) to realign the 2D view to correspond to the updated sensor position and angle. To perform ray casting, the sensor engine may determine the pose of the simulated vehicle at various time intervals and may interpolate the pose from the previous time interval to the current vehicle pose. The sensor engine may also determine updated states of the simulated vehicle sensors, including any sensor motion (e.g., rotation) between the previous time interval and the current state.
[0022] In operation 114, the sensor engine may perform spatial and / or temporal upsampling techniques on the generated 2D view and / or reprojections of the generated view to provide as sensor data to the simulated sensor. The upsampling techniques described herein may be used to enhance various aspects of the 2D view, including both visual image data and / or non-visual sensor data, by enhancing and / or increasing the rendering resolution of the 2D view. Various types of upsampling techniques and algorithms may be used, which may be performed by a GPU in various implementations. In contrast to certain conventional upsampling techniques, the sensor engine of operation 114 may determine whether to apply a blending and / or linear interpolation approach based on depth data, object identifiers, and / or object velocities in the simulation.
[0023] In some examples, the sensor engine may apply a depth-aware image spatial upsampling technique. Box 116 shows an example of depth data 118 corresponding to the 2D view shown in box 108. In this example, different portions of the depth data may represent different objects in a point cloud and / or image representation of the environment. Different portions of the depth data may correspond to different objects represented in the reprojection. Objects in the background of the point cloud or image representation may be assigned fewer pixels and rendered at a lower resolution than other objects in the foreground of the view. For spatial upsampling to improve the resolution of an object, the sensor engine may perform a depth-aware spatial upsampling technique. For example, the sensor engine may cast rays into a bounding box of a low-resolution object and determine ray intersections in the depth data. A set of adjacent depth values may be obtained from the depth data and analyzed to determine whether the ray intersections are relatively planar.
[0024] Additional upsampling techniques performed by the sensor engine may include temporal upsampling to recognize motion based on the motion of the simulated vehicle, sensor, and / or other simulated objects shown in a reprojection of the 2D view (e.g., point cloud or image). For example, the sensor engine may cast rays 120 and 122 from the sensor location at two different times during the simulation. At a first time (e.g., t1) and a second time (e.g., t2) in the simulation, the sensor engine may cast rays from the sensor location and to the sensor orientation. Between times t1 and t2, the simulated vehicle may change position and orientation as it traverses the simulated environment, and / or the sensor may move (e.g., rotate) relative to the vehicle. Other dynamic objects in the simulation may also move between times t1 and t2 in the simulated environment. In these examples, the sensor engine may analyze the depth, object identifier, and / or velocity associated with the ray intersections and determine whether to perform linear interpolation or a different upsampling technique.
[0025] In operation 124, the sensor engine provides the sensor data as input to simulated sensors executing in the simulation system (e.g., simulated vehicle sensors in a driving simulation). The reprojection generated in operation 110 of the 2D view generated in operation 106 may be used as the sensor data provided to the simulated vehicle sensors. In various examples, the reprojection may or may not include correction based on the spatial and / or temporal upsampling techniques performed in operation 114.
[0026] As shown by FIG. 1 and various illustrations, the techniques described herein provide improvements and technical advantages for generating sensor data, rendering views of a simulated environment, and performing driving simulations as well as other types of simulations. For example, generating and using a multi-sensor integrated 2D view including GPU-based rasterization followed by reprojection and / or upsampling provides more efficient real-time simulation performance that increases speed and reduces GPU latency for rendering of the view. These techniques can be used to effectively separate the sensor from the view, thus providing higher quality sensor input data with improved spatial and / or temporal alignment and / or upsampling while requiring fewer overall views to be generated during the simulation. Furthermore, the techniques described herein support dynamic reconfiguration of the GPU rendering rate and / or view resolution to comply with simulation requirements such as resolution, jitter, etc., depending on the GPU capacity and latency observed during the simulation. By more efficiently managing GPU resources to render and update the view, these techniques also provide advantages in performing real-time simulations including additional numbers of sensors and / or sensors with higher resolution or firing frequency.
[0027] 2 illustrates an exemplary system 200 including one or more computing devices 202 and components configured to generate a 2D view of a simulated environment and generate and provide sensor input data based on the 2D view to simulated sensors operating within the simulation. In this example, computing devices 202A and 202B (which may be individually or collectively referred to as computing devices 202) may be implemented as a sensor engine including components configured to monitor a simulation running on a driving simulator or other simulation system and generate sensor data to be provided as input data to the simulated sensors. In various examples, computing device 202 receives sensor dependency data 204 and simulation view data 206 related to a simulation currently running on one or more simulation systems (e.g., driving simulation system 234). As illustrated in this example, sensor dependency data 204 may be different for different sensors (e.g., sensor 208 and sensor 210) within the simulation and may include data such as (but not limited to) the location of the sensor within the simulated environment, the orientation of the sensor, the field of view of the sensor, the type of data the sensor is configured to detect, and sensor execution time / rate. Particular sensor data (eg, the sensor's position, orientation, current operating state and / or characteristics) may change during the course of a simulation, and thus the sensor dependency data 204 for such sensors may also change during the simulation.
[0028] Computing device 202 may also receive simulation view data 206 associated with multiple different 2D views currently being rendered within the simulation (e.g., view 1 indicated by reference 212 and view 2 indicated by reference 214). The simulation view data 206 may include (but is not limited to) the position (e.g., focus) of the view, the orientation (e.g., angle) of the view, the type of data stored in individual regions (e.g., pixels) of the view, the rendering time / rate associated with the view, the resolution, and / or the bounds of the view.
[0029] Along with the sensor dependency data 204 and the simulation view data 206, the computing device 202 may be configured to store and / or retrieve GPU operation data, such as rendering / processing power and latency, which may be used to determine and optimize view rendering rates during a simulation. The computing device 202 may also monitor one or more simulations performed by the driving simulation system 234, including determining characteristics of the simulated environment and static and dynamic objects within the simulation. As described in various examples herein, the number, type, position, speed, and other characteristics of agents and objects in the simulation may be used by various components of the computing device 202 to determine and schedule the rendering of views at different times, update and align views with sensors, and perform spatial and / or temporal upsampling to improve the quality of sensor data provided based on the views.
[0030] Within the computing device 202, which may also be referred to as a sensor engine or sensor simulation system, a view selector component 216 may be configured to determine which 2D views of a simulated environment to render at different times during a simulation. As shown in this example, the view selector component 216 may execute on a CPU 218 within the computing device 202. As described above with reference to operation 102, the view selector component 216 may receive and analyze the sensor dependency data 204, the simulation view data 206, and / or various additional simulation-related data (e.g., GPU capacity and latency data, simulated vehicle states, simulation agent / object states, etc.). Using these data, the view selector component 216 may apply heuristic-based algorithms and / or machine learning models to determine which views to render at various different times during a simulation.
[0031] After determining the 2D view to be rendered at a particular time during the simulation, the view selector component 216 may provide data identifying the view to be rendered (and / or the requested view rendering output time) to the GPU input queue 220. In some examples, when providing the requested view to the GPU input queue 220, the computing device 202 may also render one or more threads / processes associated with the view inactive (e.g., asleep) and wake up upon receiving an indication that the requested view has been rendered by the GPU 224. For example, the computing device 202 may implement one or more GPU / GPU fences and / or GPU / CPU fences to control the flow of rendered views through the processing pipeline described herein.
[0032] When a requested view is placed in the GPU input queue 220, the view generator component 222 may obtain data associated with the view to be generated, such as the simulation view data 206 for the view to be rendered, the current position of the simulated vehicle (and / or sensors), and the current state of the simulated environment and other simulated agents / objects within the environment. The view generator component 222 may provide the data to the GPU 224, which may be configured to render the requested view. In some examples, the GPU 224 may perform one or more rasterization processes to render the requested 2D view, including a 2D image data view, a 2D depth view, and one or more other 2D views that may be combined as layers into an integrated 2D view that includes visual data, depth data, and / or various additional data (e.g., object identifiers, speed, material properties, etc.) for each pixel or other region of the 2D view.
[0033] After generating the 2D view of the 3D simulated environment, the reprojection component 226 may be configured to use the GPU 224 to generate a reprojection (e.g., a modified 2D view) that is spatially and / or temporally aligned with a particular simulated sensor operating in the simulation. In some examples, the reprojection component 226 may perform some or all of the operations described above with reference to operation 110. For example, the reprojection component 226 may generate a reprojection of the rendered 2D view by casting rays from the location of the sensor in the simulated environment toward the 2D view to determine ray intersections using ray casting and / or ray tracing. Visual and / or depth data associated with the ray intersections may be used to align the 2D view, calculate shadowing and masking information, and simulate various visual effects. Additionally, depending on the type of simulated sensor for which the reprojection is generated, the reprojection component 226 may generate a point cloud and / or a visual representation of the 2D view. For example, for a lidar or radar simulated sensor configured to receive a point cloud as sensor input data, the reprojection component 226 may generate a point cloud. For cameras and other simulated sensors configured to receive light and / or visual input data, the reprojection component 226 may generate a 2D image view representation.
[0034] The upsampling component 228 may be configured to perform spatial and / or temporal upsampling techniques using the GPU 224 on the reprojected representation of the 2D view generated by the reprojection component 226. Because upsampling techniques may be performed on the reprojected representation of the merged 2D view, the upsampling component 228 may be configured to perform the spatial and / or temporal upsampling techniques described herein on both the image and / or point cloud representations. As described in more detail below, spatial upsampling may enhance and / or increase the resolution of the sensor data provided to the simulated sensor based on the 2D view. For example, as described below, the spatial upsampling technique may determine sensor data values associated with ray intersections that are between regions / pixels of the view reprojection. Spatially intermediate sensor data values (e.g., sensor data values corresponding to positions between pixels in the merged 2D view) may be determined using interpolation based on the sensor data values of the surrounding pixels and / or based on sampling from one of the nearby pixels when determining that sampling provides a more accurate representation of the sensor data at the intermediate position.
[0035] In contrast, temporal upsampling may be used to generate sensor data that more accurately represents the simulated environment at times within the simulation before or after the discrete times at which the view is rendered and / or reprojected. For example, during a simulation, the sensor engine may generate a first rendering of a view at a first simulation time and a second updated rendering of the view at a second simulation time. Both rendered views may be reprojected to a particular simulated sensor at the first and second simulation times, respectively. However, the simulated sensor may execute (or fire) while receiving and processing the sensor input data at a higher frequency (or higher rate) than during the first and second simulation times, or may not execute synchronously with the generation and reprojection of the view. In such an example, the upsampling component 228 may perform temporal upsampling to determine the sensor data to provide to the simulated sensor at times between the first and second simulation times. As described in more detail below, in some cases, the upsampling component 228 may interpolate based on the view reprojections at the first and second simulation times to determine sensor data for an intermediate simulation time between the first and second simulation times. In other cases, the upsampling component 228 may sample from either the view reprojection at the first simulation time or the view reprojection at the second simulation time if it determines that sampling provides a more accurate representation of the sensor data at the intermediate time.
[0036] In some examples, the upsampling component 228 may perform some or all of the operations described above with reference to operation 114. For example, the upsampling component 228 may perform spatial and / or temporal upsampling that is depth-aware and / or use additional data from the integrated 2D view, such as object identifiers, velocity data, material data, etc., to determine the particular upsampling technique to be applied to the 2D view. For example, using ray casting on low-resolution objects and / or moving objects, the upsampling component 228 may apply linear interpolation to ray intersections that are on relatively flat surfaces or on the same object as adjacent regions in the 2D view. In contrast, other techniques (e.g., sampling) may be applied to ray intersections that are not on relatively flat surfaces and / or that are not on the same object as their adjacent regions.
[0037] After generating a rendered view using the GPU 224, generating a sensor-specific reprojection of the view, and / or performing upsampling on the reprojected view, the computing device 202 may provide the output view to the GPU output queue 230. When the rendered view is placed in the GPU output queue 230, the computing device 202 may initiate one or more post-processing components to obtain and provide the rendered view data for use as input data to the simulated sensors. For example, the sensor data converter component 232 may be configured to obtain an image and / or point cloud representation from the GPU output queue 230, convert the image / point representation into a messaging format associated with the simulated sensor, and transmit the data to the driving simulation system 234. Once the sensor data is received by the driving simulation system 234, it may be provided as a sensor input to one or more sensors of a simulated autonomous vehicle running within the driving simulation. In some examples, the sensor engine may use a separate thread to push view / sensor data generation tasks onto the GPU input queue 220 and may use an additional separate thread to pull sensor data (e.g., images, point clouds, etc.) from the GPU output queue 230.
[0038] As shown in this example, the computing device 202 may be implemented as separate computing devices 202A and 202B operating in separate computing environments and / or on separate networks. In other examples, the computing device 202 may be integrated into a single computing device or server associated with a simulation system. In some implementations, the use of the CPU 218 and the GPU 224 may be coordinated and managed such that the GPU 224 is configured to perform rasterization to generate rendered views, ray tracing / ray casting to align rendered 2D views, spatial and / or temporal upsampling to generate sensor data provided to simulated sensors, etc. The CPU 218 may be configured to perform separate pre-processing and post-processing functions such as view selection and scheduling, retrieval of sensor data from a GPU output queue, message formatting and packing, and delivery of sensor data to simulated sensors. In these implementations, the computing device 202 may monitor the speed, performance, capacity, and latency associated with the respective tasks performed by the GPU 224 and the CPU 218 to more efficiently manage the running real-time simulation. For example, the computing device 202 may dynamically increase or decrease the rendering rate for generating updated 2D views and / or increase or decrease the quality and amount of ray tracing alignment and upsampling based on the current capacity, latency, and performance based on the latency of the GPU 224, etc.
[0039] 3 illustrates an example technique 300 for generating an integrated multi-sensor data 2D view 302 of a simulated environment. In some examples, the technique depicted in this example may be executed by the GPU 224 alone or in combination with additional components executed by the GPU 224 and / or CPU 218 of the computing device 202. For example, the GPU 224 may generate a first 2D view including visual image data 304 and a second 2D view including depth data 306. The image data 304 and depth data 306 may be generated by rasterizing the 3D simulated environment based on a selected position (e.g., the current position of the simulated vehicle) and a selected direction within the simulation. In this example, the 2D view of the image data 304 and depth data 306 may correspond to a forward-looking view from the perspective of the simulated vehicle traversing the simulated environment.
[0040] The computing device 202 may also obtain additional simulated environment / object data 308 corresponding to the same region of the simulation shown in the 2D view of the image data 304 and depth data 306. For example, the computing device 202 may monitor and / or obtain simulation data including corresponding object identifiers, velocities, and material properties for any objects depicted within the rasterized 2D view of the image data 304 and depth data 306. The computing device 202 may also obtain simulation light data and / or other properties of the simulated environment.
[0041] The 2D view, including visual image data 304 and depth data 306, can be combined with simulated environment / object data 308 in an array or other storage configuration to construct an integrated 2D view 302. As shown in this example, the integrated 2D view 302 may include data in multiple layers for each pixel (or other discrete region within the 2D view), with pixel data 310 including object identifiers, color, brightness, depth, speed, material, reflectance, and / or other physical properties associated with a particular pixel.
[0042] Although not shown in this example, computing device 202 may include one or more additional components used to generate and / or modify the integrated 2D view described herein. For example, computing device 202 may include a shadow identification component configured to execute a machine learning algorithm trained to detect one or more shadows in image data 304. In some cases, the shadow identification component may receive geometric information of the simulated environment and the position of the light source as input to the algorithm for detecting one or more shadows in the image data.
[0043] The computing device 202 may also include a region identification component configured to identify corresponding regions in the set of images, such as, for example, mapping the regions based on features in the image data. In some examples, the region identification component may identify regions based on image data 304 being projected onto a 3D mesh of the environment. In some examples, the computing device 202 may include a blend component configured to combine regions of image data 304 from multiple images to generate an updated region of image data with minimized or omitted shadow contribution. The computing device 202 may also include a duplication component configured to identify a source of image data 304 to be used to replace image data at a particular region or location. For example, a destination region may correspond to a shadow region of an image, and a source region may correspond to image data that is illuminated (e.g., does not include a shadow) from a corresponding region of another image. In some examples, a source region may be based on image data having similar color values, semantic information, LIDAR intensity, etc.
[0044] In some examples, the computing device 202 may include a 3D mapping component configured to map or project image data onto a portion of a 3D mesh. That is, the 3D mapping component may project image data captured by an image sensor onto a 3D mesh of the environment corresponding to the environment represented in the image data. In such examples, the 3D mesh component may receive log files (or sensor data) from a simulated vehicle and generate or update a map of the environment. In some examples, the 3D mesh component may generate a 3D mesh (or other representation, e.g., signed distance function, voxels, voxel hash, etc.) of the environment based on sensor data captured by one or more LIDAR sensors (or other sensors), e.g., depth data 306. The surface of the 3D map may be represented by one or more polygons. In some examples, objects may be represented by voxels, histograms, or distribution functions. In some examples, the surface of the 3D map may be represented by parameterized entities (e.g., NURBS). In some examples, the 3D mesh component may associate semantic information with individual polygons of the 3D mesh.
[0045] The computing device 202 may also include a light source component that includes functionality for determining a light source associated with the image data 304. In some examples, the light source component may receive a location of an environment represented in image data (e.g., latitude, longitude, elevation, etc.), time, date, etc. to determine where the light source is at the time of capturing the image. In another example, the light source component may be used to determine a location of a light source relative to a 3D mesh needed to illuminate a portion of the 3D mesh (e.g., to search the image data for a surface that is not obscured by a shadow). A light scene assessment component may include functionality for determining a type of light present in a scene with respect to image data representing an environment. In some examples, the light scene assessment component may include a machine learning algorithm trained to detect diffuse light scenes, such as an overcast day. In some examples, the light scene assessment component may access weather data associated with the location and determine weather conditions present at the time of capturing one or more images. In some examples, the light scene assessment component may generate a score associated with an image or individual regions of an image that indicates the diffuse quality of light present in the region or image.
[0046] The computing device may also include a reflectance component that includes functionality for determining the reflectance of a surface versus a surface angle. In some examples, the reflectance component may determine LIDAR intensity data relative to the angle of incidence of the LIDAR beam for a point on the surface. In some examples, the reflectance component may determine a bidirectional reflectance distribution function (BRDF) for one or more points or surfaces in the environment (and / or a bidirectional scattering surface reflectance distribution function (BSSRDF)). In some examples, individual points and / or surfaces in the environment may be classified as Lambertian (e.g., matte, diffuse, etc.), specular (e.g., glossy), specular, etc. In some examples, the reflectance characteristics may include a bidirectional reflectance distribution function (BRDF). In some examples, the reflectance component may generate a BRDF channel for each polygon of a 3D mesh and / or for each pixel of an image associated with the 3D mesh. In some examples, the driving simulation system 234 may include functionality for receiving a 3D map with shadows omitted and projecting light sources from arbitrary positions onto the 3D map to generate artificial shadows based on the 3D shape of the environment. In some examples, when the 3D map includes BRDF information for various surfaces, the driving simulation system 234 can represent light reflections based on the reflectance of the various surfaces. In some examples, the driving simulation system 234 can simulate a photorealistic image of the environment from a textured 3D map with shadows removed.
[0047] Examples of these and various other components that may be incorporated into the computing device 202 to assist in generating and modifying the integrated 2D view 302 can be found, for example, in U.S. Pat. No. 10,699,477, entitled “Generating Maps Without Shadows,” issued June 30, 2020, each of which is incorporated by reference in its entirety into this specification for all purposes.
[0048] 4A-4C show three example simulated environments, each including a simulated vehicle and several views rendered to provide sensor data for simulated sensors associated with the simulated vehicle. The examples show various configurations of simulated sensors on the simulated vehicle, as well as various configurations of 2D views rendered to provide sensor data for the simulated sensors. As described in more detail below, FIG. 4A shows an example in which a different 2D view is generated for each simulated sensor of the vehicle. FIG. 4B shows an example in which four different 2D views are generated around the simulated vehicle to provide 360-degree sensor data for any or all of the vehicle's simulated sensors, and FIG. 4C shows an example of mapping a configuration of simulated sensors on the vehicle to the four different 2D views.
[0049] FIG. 4A illustrates an exemplary simulated environment 400 including a simulated vehicle 402 traversing the environment during a driving simulation. In this example, the simulated vehicle 402 includes several sensors 404-418, mounted on the exterior of the simulated vehicle 402, that are configured to detect and process sensor data from the simulated environment 400. For each of the sensors 404-418, FIG. 4A illustrates the sensor's orientation and field of view relative to its location on the simulated vehicle 402. FIG. 4A provides an example in which the simulated vehicle's sensors 404-418 are mapped one-to-one with 2D views 420-434 rendered based on the 3D simulated environment. That is, in this example, each simulated sensor 404-418 is associated with a unique 2D view that is generated and used to provide input data to that sensor. Sensor 404 receives input data based on view 420, and sensor 406 receives input data based on view 422. As described above, the simulated sensors 404-418 may include a variety of different types of sensors (e.g., cameras, radar, lidar, etc.), and each of the respective views 420-434 may be generated as a point cloud and / or imagery including the appropriate type and amount of data for the associated sensor.
[0050] 4B illustrates another example simulated environment 436 in which the sensor engine determines a view focal point 438 associated with a simulated vehicle 402 and generates four separate views 440-446 based on the view focal point 438. The four separate views 440-446 are positioned at right angles to one another in this example, providing a 360 degree field of view for the simulated vehicle 402. In other examples, a greater or lesser number of views may be rendered from which to provide input data to simulated sensors on the simulated vehicle 402. In some cases, if none of the vehicle sensors are oriented in a particular direction for a period during the simulation, the sensor engine need not render a view covering that direction during that period.
[0051] Each view 440-446 may be mapped to (e.g., serve) zero, one, or more different simulated sensors depending on the number, type, location, and orientation of the simulated sensors on the simulated vehicle 402. Thus, each view 440-446 may be generated as an integrated 2D view that includes different types of data (e.g., image data, depth data, etc.) that can be used to service different types of sensors. In some cases, certain ones of the views 440-446 may be generated to include only certain types of sensor data and not other types of sensor types based on the data requirements of the sensors mapped to that view during the simulation. As an example, if the only sensor facing the view 442 at a time during the simulation is an image sensor (e.g., camera), the sensor engine may generate the view 442 to include only image data rather than additional types of sensor data that may be included in other integrated 2D views (e.g., lidar data, radar data, etc.).
[0052] FIG. 4C illustrates another exemplary simulated environment 448, in which several sensors are depicted on the simulated vehicle 402, with each sensor mapped to one or more of the views 440-446 described above with reference to FIG. 4B. In this example, the simulated vehicle 402 is shown traversing the environment during a driving simulation. The simulated vehicle 402 includes different configurations of sensors 450-462 positions on the exterior of the simulated vehicle 402, and for each of the sensors 450-462, FIG. 4C illustrates the sensor's orientation and field of view relative to its position on the simulated vehicle 402. As noted above, in some examples, the simulated sensor may be decoupled from the view, or vice versa. FIG. 4C provides an example of decoupling the sensors 450-462 from the 2D views 440-446 rendered in the simulated environment 448. That is, in this example, there is no one-to-one relationship between each of the sensors 450-462 and the 2D views 440-446 used to provide input data to the sensors. Sensors 450 and 452 receive input data from view 440, sensors 454 and 456 receive input data from view 442, sensor 458 receives data from view 444, and sensors 460 and 462 receive data from view 446. Thus, in this example, fewer views may be required overall by the simulation because the views are shared by multiple sensors.
[0053] In some cases, a single simulated sensor may receive sensor data based on multiple different views. For example, simulated sensor 456 is shown to have a field of view that includes both view 442 and view 444. In this example, the sensor engine may generate sensor data to simulate sensor 456 by rendering, reprojecting, and / or upsampling the separate views 442 and 444, then combining relevant portions of views 442 and 444 and providing the combined sensor data to sensor 456. In other examples, the sensor engine may dynamically respond to instances of a sensor being mapped to multiple views by reorienting and re-rendering one or more views, such that each sensor 450-462 may be mapped to a single view.
[0054] The simulated environment 448 depicts the simulated vehicle 402 at a single point in time during the driving simulation. It can be appreciated that as the simulation progresses, the position and / or orientation of the simulated vehicle 402 and / or the sensors 450-462 may change relative to the views 440-446. For example, the simulated vehicle 402 may move and / or rotate within the simulated environment 448, and each of the sensors 450-462 may exhibit corresponding changes in position and orientation. Additionally, certain of the sensors 450-462 may be configured to rotate relative to the simulated vehicle 402.
[0055] FIG. 5 illustrates another exemplary driving simulation, including four different simulated environments 500-506 corresponding to four different times during the simulation. In this example, a simulated vehicle 508 is shown moving forward along a curved road. The simulated vehicle 508 includes a single simulated sensor, which may be a rotating lidar sensor (and / or any other sensor configured to change orientation independent of the vehicle). As shown in this example, in simulated environment 500 (e.g., at time t1), the sensor is pointed toward view 510 and emits light that intersects view 510 at point 512. As the vehicle traverses the environment, the orientation of the vehicle and the orientation of the sensor change. In simulated environment 502 (e.g., at time t2), the sensor is pointed toward view 514 and emits light that intersects view 514 at point 516. In simulated environment 504 (e.g., at time t3), the sensor is aimed at view 518 and emits light that intersects view 518 at point 520. In simulated environment 506 (e.g., at time t4), the sensor is aimed at view 522 and emits light that intersects view 522 at point 524.
[0056] As this example illustrates, during a simulation, the position and / or orientation of the simulated vehicle and / or sensors may change relative to the views rendered for the simulation. In response to changes in the position and / or orientation of the sensors, the sensor engine may generate reprojections based on some views, may regenerate certain views, may reorient views, and / or may determine updated mappings between sensors and views.
[0057] 6A and 6B show two examples of depth-aware ray casting techniques in a simulated environment. In various examples, the techniques described in FIG. 6A and 6B include ray casting in a simulation scenario in which a simulated sensor has moved over the course of the simulation, casting a first ray at a first simulation time and a second ray at a second simulation time. In both FIG. 6A and 6B, multiple rays are cast by the sensor at different times into depth data 602 associated with a unified 2D view to which the simulated sensor is mapped. The techniques described herein may be applied to temporally align and / or upsample views generated for a particular sensor, as described above with reference to operation 110 of FIG. 1 and with reference to the reprojection component 226 of FIG. 2. Additionally or alternatively, the techniques described herein may be applied to spatial and / or temporal upsampling, as described above with reference to operation 114 of FIG. 1 and with reference to the upsampling component 228 of FIG. 2.
[0058] FIG. 6A illustrates a scenario in which the position of the sensor has moved from a position 604 at time t1 to a position 606 at time t2. The sensor movement in FIG. 6A may correspond to the movement of a vehicle across a simulated environment. In this example, a ray cast from the sensor at position 604 intersects with the depth data 602 (which may be a rasterized depth view corresponding to the integrated 2D view) at a ray intersection 608, and a ray cast from the sensor at position 606 intersects with the depth data at a ray intersection 610. The ray intersections 608 and 610 in this example have a relatively large difference in depth values, indicating a non-planar surface (and / or a different simulated object) between the ray intersections 608 and 610. In this example, based on the depth difference between the ray intersections 608 and 610, the sensor engine may determine to use a sampling technique for alignment and / or upsampling rather than a linear interpolation technique. For example, rather than using linear interpolation based on points 608 and 610 to determine the sensor data to use for a time in the simulation between times t1 and t2, the sensor engine may select a sample of either point 608 or 610 based on whether the time in the simulation is closer to time t1 or time t2.
[0059] FIG. 6B illustrates another scenario in which the simulated sensor position has not moved, but the sensor orientation has moved from sensor angle 612 at time t1 to sensor angle 614 at time t2. The sensor movement in FIG. 6B may correspond to a vehicle turning in the simulated environment and / or a rotation of the sensor relative to the vehicle. In this example, a ray cast from the sensor along sensor angle 612 intersects the depth data 602 at ray intersection 616, and a ray cast from sensor angle 614 intersects the depth data at ray intersection 618. Unlike ray intersections 608 and 610, in this example, ray intersections 616 and 618 have a small difference in depth values, indicating a relatively flat surface (and / or likely the same simulated object) between ray intersections 616 and 618. Based on the smaller depth difference between ray intersections 616 and 618, the sensor engine in this example may determine to use a linear interpolation technique for alignment and / or upsampling rather than a sampling technique. For example, to determine the sensor data to be used for a time in the simulation between times t1 and t2, the sensor engine may use linear interpolation based on the sensor data values corresponding to points 616 and 618, effectively blending colors, speeds, brightness, materials, etc.
[0060] While depth data 602 is used in this example, in other examples, similar techniques may be performed by casting rays into the 2D view at different times during the simulation and then determining a preferred alignment and / or upsampling technique based on whether the object IDs at the ray intersections match, or whether the velocity values at the ray intersections are within a predetermined threshold, etc.
[0061] FIG. 7 illustrates an exemplary depth-aware spatial upsampling technique for a simulated sensor in a simulated environment. As described above, in some examples, the sensor engine may perform a spatial upsampling technique during or after generation of the view reprojection to improve the quality and / or resolution of the view of the sensor data provided to the simulated sensor. In this example, spatial upsampling may be used to improve the quality and resolution of both visual and / or non-visual data (e.g., images and point clouds) by selecting an upsampling technique (e.g., linear interpolation or sampling) based on depth data associated with ray intersections. As described above, this example describes a depth-aware upsampling technique that uses depth data, but in other examples, similar or identical techniques may use object identifier data and / or velocity data instead of or in combination with depth data.
[0062] In this example, image 700 includes depth data 702 of a rendered 2D view of a simulated environment. Bounding box 704 identifies a low-resolution object in the background of the image in depth data 702. Because an object within bounding box 704 is in the background of the image, it may be assigned fewer pixels and may be rendered at a relatively lower resolution for both the visible and non-visible data of the integrated 2D view. The spatial upsampling technique described herein includes casting one or more rays into bounding box 704 associated with the object and determining sensor data values of a ray intersection to improve the resolution of the 2D view in the region of the object. In this example, the ray is cast into depth data 702 of the 2D view that intersects with the 2D view at ray intersection 706. The regions including sample points 708-716 represent adjacent pixels (or other distinct regions) of the 2D view, and each of the adjacent regions may include a set of integrated multi-sensor data associated with a particular region (e.g., object identifier, color, brightness, depth, speed, material, etc.).
[0063] Various algorithms may be used to evaluate the area adjacent to the ray intersection 706 to determine whether the ray intersection 706 is likely to be on a relatively uniform, planar surface and / or on the same object in the simulated environment. In one example, the sensor engine may identify and evaluate the depths of the three samples closest to the ray intersection 706. The three closest sample points in this example may be sample points 710, 712, and 714 that form a triangle around the ray intersection 706. In this example, if the depths of the three closest sample points 710, 712, and 714 have the same object identifier, the sensor engine may assume that the ray intersection 706 is on the same object and may use linear interpolation to determine the sensor data for the ray intersection 706 based on the corresponding sensor data at sample points 710, 712, and 714. Otherwise, the sensor engine may determine whether the triangle formed by sample points 710, 712, and 714 is sufficiently planar relative to the triangle formed by sample points 708, 714, and 716. In some examples, a curvature error parameter may be used to determine whether these triangles (or other adjacent regions) are sufficiently planar. If the two triangles are sufficiently planar, the sensor engine may use linear interpolation to determine the sensor data for ray intersection 706 based on the corresponding sensor data at sample points 710, 712, 714, and 716. Otherwise, the sensor engine may determine that sampling should be used instead of linear interpolation and may determine the sensor data for ray intersection 706 based on the corresponding sensor data for the closest sample (e.g., sample point 708). While this example describes one algorithm for performing spatial upsampling based on object identifiers and depth data, it may be understood from the context of this disclosure that other algorithms may be used in other examples based on any combination of sampling techniques, thresholds, and / or integrated multi-sensor data described herein.
[0064] FIG. 8 illustrates an example system 800 for rendering a view of a simulated environment using a GPU. As mentioned above, in some examples, the sensor engine may coordinate and manage the use of one or more GPUs and CPUs when selecting, rendering, aligning, and / or upsampling (e.g., enhancing) 2D views used to generate sensor input data during a simulation. In some cases, the GPU may be used to generate the sensor data (e.g., by rasterizing the 2D view of the 3D simulated environment, ray tracing, reprojection, upsampling, etc.), and the CPU may be used for various pre-processing (e.g., view selection) and / or post-processing (e.g., message formatting and packing, and delivery of the sensor data to the simulated sensors) of the sensor data to provide it to the simulation. In this example, the system 800 illustrates a processing pipeline for rendering a 2D view, including a GPU configured to perform view rendering and one or more CPUs configured to perform pre-processing and post-processing functions.
[0065] In this example, the sensor engine selects and begins rendering a new / updated 2D view for the simulation at each clock interval 802-806. For example, beginning at clock interval 802, input components are executed at processing block 808, pre-processing is performed by the CPU, the view is rendered by the GPU at block 810, post-processing is performed by the CPU, and the rendered 2D view is output to the simulated sensor at processing block 812. A similar processing pipeline begins at clock interval 804 proceeding from processing block 814, includes GPU rendering at processing block 816, and outputs the rendered 2D view at processing block 818, and another similar processing pipeline begins at clock interval 806 including processing blocks 820, 822, and 824.
[0066] As shown in this example, the 2D view rendering pipeline of system 800 may operate asynchronously and independently with respect to CPU and GPU functions. For example, processing block 820 initiates generation of a new 2D view and performs CPU pre-processing functions before the GPU completes rendering of the previous 2D view in processing block 816. The asynchronous operation of this example minimizes GPU downtime and maximizes the speed and efficiency of rendering of the 2D views during simulation. Additionally, the asynchronous and independent operation of the GPU and CPU in this example prevents undesirable dropped frames.
[0067] In various implementations, the 2D view rendering pipeline of system 800 may also be used to dynamically update the view rendering function during a simulation. For example, when it is determined that the rasterization and / or ray tracing operations of the GPU are a processing bottleneck, the sensor engine may reduce the rendering rate, reduce the view resolution, and / or determine a view that may be shared by multiple sensors to reduce the processing load of the GPU and alleviate the bottleneck. In some cases, to compensate for the reduced rendering rate and / or lower resolution of the view rendered by the GPU, the sensor engine may perform additional ray tracing / ray casting operations, which may improve temporal / spatial alignment and / or upsampling resulting in improved sensor input data while reducing the processing load of the GPU. In other examples, the sensor engine may reduce the ray tracing / ray casting performed by the GPU and compensate with a higher rendering rate and / or higher resolution.
[0068] 9 shows a block diagram of an example system 900 for implementing the techniques described herein. In at least one example, the system 900 can include a vehicle 902, which can be the same vehicle as the simulated vehicles 402 and 508 described above with reference to FIGS. 4 and 5. The system 900 can also include one or more computing devices 932, which can be implemented as a driving simulation system and / or a sensor engine and can be the same as or similar to the computing devices 202A and / or 202B described above with reference to FIG.
[0069] Vehicle 902 may correspond to a physical autonomous vehicle traversing a physical environment and / or a simulated vehicle operating within a virtual and / or log-based simulation. For both implementations involving real and simulated vehicles, vehicle 902 may include various software-based and / or hardware-based components of an autonomous vehicle and may be used to control the autonomous vehicle traversing a physical or simulated environment.
[0070] Vehicle 902 may be a hardware- and / or software-based controller for an unmanned vehicle, such as an autonomous vehicle configured to operate according to a Level 5 classification issued by the National Highway Traffic Safety Administration, which describes a vehicle capable of performing all safety-critical functions for the entire journey with no driver (or passenger) expected to control the vehicle at any time. In some examples, the vehicle control system may operate within an actual associated vehicle, such as a fully or partially autonomous vehicle having any other level or classification. In some cases, the techniques described herein may also be usable by non-autonomous vehicles. Additionally or alternatively, vehicle 902 may operate independently of a physical vehicle, for example, as a hardware- and software-based controller of a simulated vehicle running in a computing environment during the development, testing, and validation process of vehicle 902. Furthermore, implementations of vehicle 902 described herein may include simulating the control system of an autonomous, semi-autonomous, or non-autonomous vehicle, although some of the techniques may be in a simulated environment using a simulated vehicle.
[0071] Vehicle 902 may be used in any configuration of real or simulated vehicles, such as, for example, a van, a sports utility vehicle, a crossover vehicle, a truck, a bus, an agricultural vehicle, and / or a construction vehicle. For example, the associated vehicle for vehicle 902 may be powered by one or more internal combustion engines, one or more electric motors, hydrogen power, any combination thereof, and / or any other suitable power source. Although the associated vehicle may have four wheels, vehicle 902 and associated technology described herein may be incorporated into vehicles having a fewer or greater number of wheels and / or tires. Vehicle 902 may include a system for controlling a vehicle having four-wheel steering and may generally operate with equal or similar performance characteristics in all directions, for example, such that a first end of the vehicle is the front end of the vehicle when moving in a first direction, and such that the first end is the rear end of the vehicle when moving in the opposite direction. Similarly, when moving in a second direction, the second end of the vehicle is the front end of the vehicle, and when moving in the opposite direction, the second end is the rear end of the vehicle. These example features can facilitate greater maneuverability in tight spaces or crowded environments, such as parking lots and / or city streets, for example.
[0072] In some examples, the vehicle 902 can include a vehicle computing device 904, one or more sensor systems 906, one or more emitters 908, one or more communication connections 910, at least one direct connection 912, and one or more drive assemblies 914. The vehicle computing device 904 can include one or more processors 916 and a memory 918 communicatively coupled to the one or more processors 916. In the illustrated example, the vehicle 902 is an autonomous vehicle, however, the vehicle 902 can be any other type of vehicle or any other system having one or more sensor systems. In the illustrated example, the memory 918 of the vehicle computing device 904 stores a localization component 920, a perception component 922, a planning component 924, one or more system controllers 926, and one or more maps 928. While shown in FIG. 9 as residing in memory 918 for illustrative purposes, it is contemplated that the localization component 920, the perception component 922, the planning component 924, the one or more system controllers 926, and the one or more maps 928 may additionally or alternatively be accessible to the vehicle 902 (e.g., may be stored remotely).
[0073] In at least one example, the localization component 920 can include functionality to receive data from the sensor system 906 to determine a location of the vehicle 902. For example, the localization component 920 can include and / or request / receive a map of the environment and can continually determine a location of the autonomous vehicle within the map. In some examples, the localization component 920 can utilize simultaneous localization and mapping (SLAM) or calibration, localization and mapping, simultaneously (CLAMS) to receive image data, LIDAR data, radar data, IMU data, GPS data, wheel encoder data, etc. to precisely determine a location of the autonomous vehicle. In some examples, the localization component 920 can provide data to various components of the vehicle 902 to determine an initial location of the autonomous vehicle for generating candidate trajectories, as described herein.
[0074] In some cases, the perception component 922 may include functionality for performing object detection, segmentation, and / or classification. In some examples, the perception component 922 may provide processed sensor data indicative of the presence of an entity proximate to the vehicle 902 and / or the classification of the entity as an entity type (e.g., automobile, pedestrian, cyclist, animal, building, tree, road surface, curb, sidewalk, unknown, etc.). In additional and / or alternative examples, the perception component 922 may provide processed sensor data indicative of one or more characteristics associated with the detected entity and / or the environment in which the entity is located. In some examples, the characteristics associated with the entity may include, but are not limited to, x-position (global location), y-position (global location), z-position (global location), direction, entity type (e.g., classification, etc.), velocity of the entity, range (size) of the entity, etc. The characteristics associated with the environment may include, but are not limited to, the presence of another entity in the environment, the state of another entity in the environment, time of day, day of the week, season, weather conditions, darkness / brightness indication, etc.
[0075] In general, the planning component 924 can determine a path for the vehicle 902 to follow to traverse an environment. For example, the planning component 924 can determine various routes and trajectories, as well as various levels of detail. For example, the planning component 924 can determine a route to travel from a first location (e.g., a current location) to a second location (e.g., a target location). For purposes of this description, the route can be a series of waypoints for travel between the two locations. As non-limiting examples, the waypoints include roads, intersections, Global Positioning System (GPS) coordinates, and the like. Additionally, the planning component 924 can generate instructions for guiding the autonomous vehicle along at least a portion of the route from the first location to the second location. In at least one example, the planning component 924 can determine how to guide the autonomous vehicle from a first waypoint in the series of waypoints to a second waypoint in the series of waypoints. In some examples, the instructions can be a trajectory or a portion of a trajectory. In some examples, multiple orbits can be generated substantially simultaneously (eg, within technological tolerances) according to a recessing horizon technique.
[0076] In at least one example, vehicle computing device 904 can include one or more system controllers 926, which can be configured to control steering, propulsion, braking, safety, emitter, communication, and other systems of vehicle 902. These system controllers 926 can communicate with and / or control corresponding systems of drive assembly 914 and / or other components of vehicle 902.
[0077] The memory 918 may further include one or more maps 928 that may be used by the vehicle 902 to navigate within the environment. For purposes of this description, a map may be any number of data structures modeled in two, three, or N dimensions that may provide information about the environment, such as topology (such as intersections), streets, mountain ranges, roads, terrain, and the environment in general, but is not limited to such. In one example, the map may include a three-dimensional mesh generated using the techniques discussed herein. In some examples, the map may be stored in a tiled format such that individual tiles of the map represent separate portions of the environment, and may be loaded into the working memory as needed. In at least one example, the one or more maps 928 may include at least one map (e.g., an image and / or a mesh) generated according to the techniques discussed herein. In some examples, the vehicle 902 may be controlled based at least in part on the map 928. That is, the map 928 may be used in conjunction with the localization component 920, the perception component 922, and / or the planning component 924 to determine the position of the vehicle 902, identify objects within the environment, and / or generate a route and / or trajectory for navigating within the environment.
[0078] In some examples, one or more maps 928 may be stored on a remote computing device (such as computing device 932) accessible via network / transport component 930. In some examples, multiple maps 928 may be stored, for example, based on a characteristic (e.g., type of entity, time of day, day of the week, season of the year, etc.). Storing multiple maps 928 may have similar memory requirements but increases the speed at which data in the heat map may be accessed.
[0079] In some examples, some or all aspects of the components described herein may include any models, algorithms, and / or machine learning algorithms. For example, in some examples, the components within memory 918 (and memory 936 described below) may be implemented as neural networks.
[0080] As described herein, an exemplary neural network is a biologically inspired algorithm that passes input data through a series of connected layers to generate an output. Each layer in a neural network may also contain another neural network, or may contain any number of layers (whether convolutional or not). As understood in the context of this disclosure, a neural network may utilize machine learning, which may refer to a broad class of algorithms in which an output is generated based on learned parameters.
[0081] Although described in the context of neural networks, any type of machine learning may be used consistent with the present disclosure. For example, machine learning algorithms may include, but are not limited to, regression algorithms (e.g., ordinary least squares regression (OLSR), linear regression, logistic regression, stepwise regression, multivariate adaptive regression splines (MARS), locally estimated scatterplot smoothing (LOESS)), instance-based algorithms (e.g., ridge regression, least absolute shrinkage and selection operator (LASSO), elastic net, least-angle regression (LARS)), decision tree algorithms (e.g., classification and regression trees (CART), iterative dichotomiser 3 (ID3), chi-squared automated interaction detection (CHAID), decision stump, conditional decision tree), Bayesian algorithms (e.g., naive Bayes, Gaussian naive Bayes, multinomial naive Bayes, average one-dependence (AODE), etc.), and may be used in conjunction with machine learning algorithms (e.g., ensemble algorithms, ensemble algorithms, etc.). estimators), Bayesian belief networks (BNNs), Bayesian networks), clustering algorithms (e.g., k-means, k-medians, expectation maximization (EM), hierarchical clustering), association rule learning algorithms (e.g., perceptrons, backpropagation, Hopfield networks, RBFNs (Radial Basis FunctionNetwork), deep learning algorithms (e.g., Deep Boltzmann Machines (DBM), Deep Belief Networks (DBN), Convolutional Neural Networks (CNN), stacked autoencoders), dimensionality reduction algorithms (e.g., Principal Component Analysis (PCA), Principal Component Regression (PCR), Partial Least Squares Regression (PLSR), Sammon Mapping, Multidimensional Scaling (MDS), Projection Pursuit, Linear Discriminant Analysis (LDA), Mixture Discriminant Analysis (MDA), Quadratic Discriminant Analysis (QDA), Flexible Discriminant Analysis (FDA)), ensemble algorithms (e.g., Boosting, Bootstrap Aggregation (Bagging), AdaBoost, Stacked Generalization (Blending), Gradient Boosting Machines (GBM), Gradient Boosted Regression Trees (GBRT), Random Forests), SVM (Support Vector Machines), supervised learning, unsupervised learning, semi-supervised learning, etc.
[0082] Additional example architectures include neural networks such as ResNet70, ResNet101, VGG, DenseNet, PointNet, and the like.
[0083] In at least one example, the sensor system 906 can include LiDAR sensors, radar sensors, ultrasonic transducers, sonar sensors, position sensors (e.g., GPS, COMPASS, etc.), inertial sensors (e.g., inertial measurement units (IMUs), accelerometers, magnetometers, gyroscopes, etc.), cameras (e.g., RGB, IR, intensity, depth, time of flight, etc.), microphones, wheel encoders, environmental sensors (e.g., temperature sensors, humidity sensors, light sensors, pressure sensors, etc.), etc. The sensor system 906 can include multiple instances of each of these or other types of sensors. For example, the LIDAR sensors can include individual LIDAR sensors positioned at the corners, front, rear, sides, and / or top of the vehicle 902. As another example, the camera sensors can include multiple cameras positioned at various locations around the exterior and / or interior of the vehicle 902. The sensor system 906 can provide input to the vehicle computing device 904. Additionally or alternatively, the sensor system 906 can transmit the sensor data at a particular frequency to one or more computing devices via one or more network / transport components 930 after a predetermined period of time, in near real-time, or the like.
[0084] Vehicle 902 may also include one or more emitters 908 that emit light and / or sound, as described above. In this example, emitters 908 include interior audio and visual emitters to communicate with passengers of vehicle 902. By way of example, and not by way of limitation, interior emitters may include speakers, lights, symbols, display screens, touch screens, haptic emitters (e.g., vibration and / or force feedback), mechanical actuators (e.g., seat belt tensioners, seat positioners, head rest positioners, etc.), and the like. In this example, emitters 908 may also include exterior emitters. By way of example, and not by way of limitation, exterior emitters in this example include lights for signaling a direction of travel or other indicators of vehicle operation (e.g., indicator lights, signs, light arrays, etc.), and one or more audio emitters (e.g., speakers, speaker arrays, horns, etc.) for audibly communicating with one or more pedestrians or other nearby vehicles with acoustic beam steering technology.
[0085] Vehicle 902 may also include one or more communication connections 910 that enable communication between vehicle 902 and one or more other local or remote computing devices. For example, communication connections 910 may facilitate communication with other local computing devices on vehicle 902 and / or drive assembly 914. Communication connections 910 may also enable the vehicle to communicate with other nearby computing devices (e.g., other nearby vehicles, traffic signals, etc.). Communication connections 910 may also enable vehicle 902 to communicate with remotely operated computing devices or other remote services.
[0086] The communication connection 910 may include physical and / or logical interfaces for connecting the vehicle computing device 904 to another computing device or network, such as the network / transport component 930. For example, the communication connection 910 may enable Wi-Fi-based communications, such as over frequencies defined by the IEEE 802.11 standard, short-range wireless frequencies such as Bluetooth, cellular communications (e.g., 2G, 3G, 4G, 4G LTE, 5G, etc.), or any suitable wired or wireless communications protocol that allows each computing device to interface with other computing devices. The network / transport component 930 may include one or any combination of communications networks described herein. In some examples, the network / transport component 930 may provide communications using other techniques, such as shared memory, intra-process communications, and / or shared use of the same physical hardware, in addition to or as an alternative to a communications network.
[0087] In at least one example, the vehicle 902 can include one or more drive assemblies 914. In some examples, the vehicle 902 can have a single drive assembly 914. In at least one example, if the vehicle 902 has multiple drive assemblies 914, the individual drive assemblies 914 can be located at opposite ends of the vehicle 902 (e.g., the front and the rear, etc.). In at least one example, the drive assembly 914 can include one or more sensor systems to detect conditions surrounding the drive assembly 914 and / or the vehicle 902. By way of example and not limitation, the sensor systems can include one or more wheel encoders (e.g., rotary encoders) for sensing the rotation of the wheels of the drive assembly, inertial sensors (e.g., inertial measurement units, accelerometers, gyroscopes, magnetometers, etc.) for measuring the orientation and acceleration of the drive assembly, cameras or other image sensors, ultrasonic sensors for acoustically detecting objects surrounding the drive assembly, LIDAR sensors, radar sensors, etc. Some sensors, such as the wheel encoders, can be intrinsic to the drive assembly 914. In some cases, the sensor systems on the drive assembly 914 may overlap or complement corresponding systems on the vehicle 902 (e.g., sensor system 906).
[0088] The drive system 914 can include many vehicle systems including a high voltage battery, a motor to propel the vehicle, an inverter to convert direct current from the battery to alternating current for use by other vehicle systems, a steering system including a steering motor and a steering rack (which can be electric), a braking system including hydraulic or electric actuators, a suspension system including hydraulic and / or pneumatic components, a stability control system for braking force distribution to mitigate loss of traction and maintain control, an HVAC system, lighting (e.g., lighting such as head / tail lights that illuminate the vehicle's exterior environment), and one or more other systems (e.g., cooling systems, safety systems, on-board charging systems, DC / DC converters, high voltage junctions, high voltage cables, charging systems, charging ports, and other electronic components). Additionally, the drive system 914 can include a drive system controller that can receive and pre-process data from the sensor systems and control the operation of various vehicle systems. In some examples, the drive system controller can include one or more processors and a memory communicatively coupled to the one or more processors. The memory can store one or more programs or instructions to perform various functions of the drive assembly 914. Additionally, drive system 914 also includes one or more communications connections that enable each drive system to communicate with one or more other local or remote computing devices.
[0089] In at least one example, the localization component 920, the perception component 922, and / or the planning component 924 can process the sensor data as described above and can transmit their respective outputs to one or more computing devices 932 via one or more network / transport components 930. In at least one example, the localization component 920, the perception component 922, and / or the planning component 924 can transmit their respective outputs to one or more computing devices 932 at a particular frequency, after a predetermined period of time, in near real-time, etc.
[0090] As described above with reference to FIGS. 1-8 and discussed throughout this disclosure, the vehicle 902 can transmit sensor data to one or more computing devices 932 via the network / transport component 930. In some examples, the vehicle 902 can transmit raw sensor data to the computing device 932. In other examples, the vehicle 902 can transmit processed sensor data and / or representations of the sensor data to the computing device 932. In some examples, the vehicle 902 can transmit sensor data at a particular frequency, after a predetermined period of time, in near real-time, to the computing device 932. In some examples, the vehicle 902 can transmit the sensor data (raw or processed) to the computing device 932 as one or more log files.
[0091] During a driving simulation, the computing device 932 may execute a simulation including a simulated environment and / or simulated agents / objects. The computing device 932 may provide simulation data to the vehicle 902 in the form of sensor data detected and processed by the vehicle's sensor system 906. During the simulation, the vehicle 902 may respond to sensor inputs provided by the computing device 932, while the simulated environment and agents / objects executing on the computing device 932 may detect and respond to vehicle control commands output by the vehicle 902 (e.g., via the system controller 926) that control movement and other actions performed by the vehicle 902.
[0092] In at least one example, the computing device 932 can include one or more processors 934 and a memory 936 communicatively coupled to the one or more processors 934. In the illustrated example, the memory 936 of the computing device 932 stores the view selector component 216, the view generator component 222, the reprojection component 226, the upsampling component 228, and the driving simulation system 234. In at least one example, the computing device 932 can correspond to the computing device 202 of FIG. 2, and the components depicted in the computing device 932 can be similar or identical to the corresponding components described above in connection with FIG. 2.
[0093] The processor 916 of the vehicle 902 and the processor 934 of the computing device 932 may be any suitable processor capable of processing data and executing instructions to perform operations as described herein. By way of example and not limitation, the processors 916 and 934 may include one or more central processing units (CPUs), graphic processing units (GPUs), or any other device or portion of a device that processes electronic data and converts it into registers and / or other electronic data that can be stored in memory. In some examples, integrated circuits (e.g., ASICs, etc.), gate arrays (e.g., FPGAs, etc.), and other hardware devices may also be considered processors so long as they are configured to implement encoded instructions.
[0094] Memory 918 and memory 936 are examples of non-transitory computer-readable media. Memory 918 and memory 936 can store an operating system and one or more software applications, instructions, programs, and / or data to implement the methods and functions attributed to the various systems described herein. In various implementations, memory can be implemented using any suitable memory technology, such as static random access memory (SRAM), synchronous dynamic RAM (SDRAM), non-volatile / flash type memory, or any other type of memory capable of storing information. The architectures, systems, and individual elements described herein can include many other logical, programmatic, and physical components, the ones illustrated in the accompanying drawings are merely examples relevant to the description herein.
[0095] 9 is shown as a distributed system, it should be noted that in alternative examples, components of the vehicle 902 may be associated with the computing device 932 and / or components of the computing device 932 may be associated with the vehicle 902. That is, the vehicle 902 may perform one or more functions associated with the computing device 932, and vice versa.
[0096] 10-14 illustrate exemplary processes according to examples of the present disclosure. These processes are illustrated as logical flow graphs, each operation of which represents a sequence of operations that can be implemented in hardware, software, or a combination thereof. In the context of software, the operations represent computer-executable instructions stored on one or more computer-readable recording media that, when executed on one or more processors, perform the recited operations. Generally, computer-executable instructions include routines, programs, objects, components, data structures, etc. that perform a particular function or implement a particular abstract data type. The order in which the operations are described is not intended to be construed as limiting, and any number of the described operations can be combined in any order and / or in parallel to implement a process.
[0097] 10 illustrates an example process 1000 for generating and using a multi-sensor view of a simulated environment to provide data to simulated sensors. Some or all of the operations described in process 1000 may be performed by one or more components in FIGS. 1-9, such as the view selector component 216, the view generator component 222, and / or other components that comprise one or more computing devices 202 implementing a sensor simulation system (or sensor engine).
[0098] In operation 1002, a sensor engine may receive data representing a 3D simulated environment associated with a driving simulation. The 3D simulated environment may include a number of static and / or dynamic objects (e.g., agents), which may include software-based objects that are controlled within the simulated environment based on artificial intelligence and / or other algorithms.
[0099] In operation 1004, the sensor engine may generate a multi-sensor 2D view based on the 3D simulated environment. In some examples, operation 1004 may be executed by the view generator component 222 using a GPU configured to render the 2D view by rasterizing the 3D simulated environment from the viewpoint position of the simulated vehicle. The generated 2D view may include multiple types of sensor data associated with each region (e.g., pixel) of the 2D view, including, but not limited to, image data (e.g., light and color data), depth data, object identifiers, speed data, material data, etc., for each pixel of the view. For each individual pixel or other region in the 2D view, the sensor engine may generate an array, data structure, or other storage configuration in which the multi-sensor data for the region can be stored.
[0100] In operation 1006, the sensor engine may determine sensor-dependent data including field of view and / or data requirements associated with a sensor operating in the simulated environment. The field of view of the sensor may be based on the position and orientation angle of the sensor in the simulated environment. Furthermore, the data requirements of the sensor may correspond to the type of data the sensor is configured to detect and may include any combination of physical characteristics of objects in the simulated environment. For example, an image sensor (e.g., a camera) may be configured to detect light and color data from the simulated environment, a radar sensor may be configured to detect object distance from the sensor (which may be referred to as depth from the sensor's point of view) and / or object velocity data, and a lidar sensor may be configured to detect data, material properties (e.g., material type / composition, reflectivity, roughness, etc.).
[0101] At operation 1008, the sensor engine may determine whether the 2D view generated at operation 1004 matches the field of view and data requirements determined for the sensor at operation 1006. The sensor engine may determine a match between the 2D view and the simulated sensor by determining whether the field of view of the sensor is covered by the 2D view and whether the type of data stored in the 2D view corresponds to the data requirements of the sensor.
[0102] If the 2D view does not match the sensor dependency data (1008: no), process 1000 proceeds to operation 1010 where the sensor engine generates an updated multi-sensor 2D view associated with the sensors before returning to operation 1004. Otherwise, if the 2D view matches the sensor dependency data (1008: yes), process 1000 proceeds to operation 1012 where the sensor engine aligns the 2D view based on the position and / or orientation angle of the sensor relative to the view.
[0103] In operation 1014, after aligning the 2D view with the simulated sensor, the sensor engine may output data of the aligned 2D view as input data for the simulated sensor. In some examples, the sensor engine may provide the 2D view to the driving simulation system 234, which may integrate the updated view into the running simulation, after which the simulated sensor may receive input data based on the updated view.
[0104] 11 shows an example process 1100 for generating and reprojecting a 2D view of a simulated environment to provide data to a simulated sensor. Some or all of the operations described in process 1000 may be performed by one or more components in FIGS. 1-9, such as the view generator component 222, the reprojection component 226, and / or other components that comprise one or more computing devices 202 implementing a sensor simulation system (or sensor engine).
[0105] In operation 1002, a sensor engine may receive data representing a 3D simulated environment associated with a driving simulation. The 3D simulated environment may include a number of static and / or dynamic objects (e.g., agents), which may include software-based objects that are controlled within the simulated environment based on artificial intelligence and / or other algorithms.
[0106] In operation 1004, the sensor engine may generate a multi-sensor 2D view based on the 3D simulated environment. In some examples, operation 1004 may be executed by the view generator component 222 using a GPU configured to render the 2D view by rasterizing the 3D simulated environment from the viewpoint position of the simulated vehicle. The generated 2D view may include multiple types of sensor data associated with each region (e.g., pixel) of the 2D view, including, but not limited to, image data (e.g., light and color data), depth data, object identifiers, speed data, material data, etc., for each pixel of the view. For each individual pixel or other region in the 2D view, the sensor engine may generate an array, data structure, or other storage configuration in which the multi-sensor data for the region can be stored.
[0107] In operation 1106, the sensor engine may determine position, orientation angle, and / or movement data of the sensor operating in the simulation. The position and orientation angle of the sensor may be determined relative to the 2D view. Additionally, the movement of the sensor may be determined relative to the time the 2D view was rendered, thus indicating whether the sensor has moved (e.g., positionally and / or rotationally) since the 2D view was generated.
[0108] In operation 1108, the sensor engine may determine whether any spatial and / or temporal differences exist between the 2D view generated in operation 1104 and the sensor alignment data determined for the sensor in operation 1106. The sensor engine may determine a match between the 2D view and the simulated sensor by comparing the sensor position, angle, and / or a predefined alignment threshold.
[0109] If no significant difference is determined between the alignment of the simulated sensor and the 2D view (1108: no), process 1100 may proceed to operation 1112, where the sensor engine outputs the data of the aligned 2D view as input data for the simulated sensor. In this case, the sensor engine determines that the sensor and the 2D view onto which the sensor is mapped are sufficiently aligned and there is no need to reproject the 2D view.
[0110] Otherwise, if the sensor engine determines that the simulated sensor position, angle, and / or movement is not sufficiently aligned with the 2D view (1108: yes), the process 1100 proceeds to operation 1110, where the sensor engine initiates a reprojection operation to align the 2D view in time and / or space based on the sensor position, angle, and / or movement relative to the 2D view. In some examples, the reprojection component 226 may reproject the rendered 2D view by casting rays from the sensor's position in the simulated environment toward the 2D view to determine ray intersections using ray casting and / or ray tracing. Vision and / or depth data associated with the ray intersections may be used to align the 2D view, calculate shadowing and masking information, and simulate various visual effects.
[0111] After the reprojection is generated to align the 2D view with the simulated sensor in operation 1112, the sensor engine may output data of the aligned 2D view as input data for the simulated sensor. In some examples, the sensor engine provides the 2D view to the driving simulation system 234, which may integrate the updated view into the running simulation, and the simulated sensor may then receive input data based on the updated view.
[0112] 12 illustrates an example process 1200 for depth-aware spatial upsampling, where linear interpolation and / or sampling is used to enhance a 2D view of a simulated environment. Some or all of the operations described in process 1200 may be performed by one or more components in FIGS. 1-9, such as the view generator component 222, the upsampling component 228, and / or other components that comprise one or more computing devices 202 implementing a sensor simulation system (or sensor engine).
[0113] In operation 1202, the sensor engine may receive a 2D view of the simulated environment. In some examples, the 2D view may include a “integrated” 2D view having multi-sensor image data (e.g., vision data, depth data, object identifiers, velocity data, material data, etc.) associated with each region (e.g., pixel) of the view.
[0114] In operation 1204, the sensor engine may determine one or more lower resolution portions of the 2D view. For example, a small object in the distance / background of the 2D view may have fewer pixels assigned to it and therefore may be rendered at a relatively lower resolution for both visible and non-visible data of the 2D view.
[0115] In operation 1206, the sensor engine may cast one or more rays into a low-resolution region of the 2D view. For example, rays may be cast into a bounding box associated with the low-resolution portion of the 2D view, and the ray casting may be used to determine a ray intersection point in the depth data (e.g., a depth image or a depth buffer) of the 2D view.
[0116] In operation 1208, the sensor engine evaluates depth data of adjacent and / or other nearby regions of the 2D view to determine whether the ray intersection point is associated with a relatively flat surface. In various examples, the sensor engine may evaluate depth data of adjacent regions (e.g., pixels) using a variety of different techniques and algorithms. For example, the sensor engine may evaluate one or more triangles with respect to a curvature error parameter to determine that the triangle (or other regions surrounding or adjacent the ray intersection point) are sufficiently flat.
[0117] When it is determined that the ray intersection is not on a relatively flat surface in the simulated environment (1208: no), the sensor engine determines sensor data associated with the ray intersection based on samples closest to the ray intersection in operation 1210. Otherwise, when it is determined that the ray intersection is on a relatively flat surface in the simulated environment (1210: no), the sensor engine performs a linear interpolation operation using sensor data from adjacent or surrounding pixels to determine sensor data for the ray intersection in operation 1212.
[0118] In operation 1214, the sensor engine outputs the augmented 2D view to the simulated sensor. In some examples, the sensor engine provides the 2D view to the driving simulation system 234, which may integrate the augmented view into the running simulation, and the simulated sensor may then receive input data based on the augmented view. The augmented 2D view may correspond to a view having higher resolution across some or all of the view based on the incorporation of additional sensor data determined using the depth-aware upsampling described herein. Additionally, while this example describes an upsampling technique using depth data, in other examples, similar or identical upsampling techniques may use object identifier data and / or velocity data instead of or in combination with depth data.
[0119] 13 illustrates an example process 1200 of temporal upsampling for object recognition and velocity recognition, where linear interpolation and / or sampling is used to generate sensor input data during a time interval. Some or all of the operations described in process 1300 may be performed by one or more components in FIGS. 1-9, such as the view generator component 222, the upsampling component 228, and / or other components that comprise one or more computing devices 202 implementing a sensor simulation system (or sensor engine).
[0120] In operation 1302, the sensor engine determines a position and orientation angle of a sensor operating in the simulation at a first time. In operation 1304, the sensor engine projects a ray from the sensor to an associated 2D view based on the position and orientation of the sensor at the first time.
[0121] At operation 1306, the sensor engine determines a position and orientation angle of the sensor operating within the simulation at a second time. At operation 1308, the sensor engine projects a ray from the sensor to an associated 2D view based on the position and orientation of the sensor at the first time. In some examples, the position and / or orientation of the sensor may change between the first time and the second time. As mentioned above, in some cases, the position and / or orientation of the sensor may change based on the movement of the simulated vehicle as it traverses the environment during the simulation. Additionally or alternatively, the sensor may be configured to move and / or rotate independently of the simulated vehicle.
[0122] In operation 1310, the sensor engine may compare depths and / or object identifiers associated with the ray intersections determined in operations 1304 and 1308. In this example, if the ray intersections determined for the sensor at the first time and the second time are associated with the same object identifier and / or relatively planar (1310: yes), then in operation 1312 the sensor engine may perform a linear interpolation operation using the sensor data associated with the two ray intersections to determine sensor data associated with an intermediate simulation time between the first time and the second time.
[0123] Otherwise, if the ray intersections determined for the sensor at the first and second times are associated with different object identifiers and / or are not located on a relatively flat surface (1310: no), then in operation 1314 the sensor engine may further evaluate the velocity data associated with the ray intersections to determine whether both the ray intersections at the first and second times are located on a non-moving object. In this example, if the sensor engine determines that both ray intersections are located on a non-moving object in the environment (1314: yes), then in operation 1316 the sensor engine may determine a sensor data value for the intermediate simulation time at the intermediate simulation time sampling from the ray intersection closest in time to the intermediate simulation time. For example, if the first time is 0.0 seconds and the second time is 1.0 seconds, then in operation 1316 the sensor data associated with the intermediate simulation time of 0.4 seconds is assigned to the sensor data value corresponding to the first time, and the sensor data associated with the intermediate simulation time of 0.6 seconds is assigned to the sensor data value corresponding to the second time. These solutions are in contrast to the linear interpolation performed in act 1312, where sensor data associated with an intermediate simulation time is generated based on the sensor data values at both the first and second times.
[0124] Continuing with this example, the sensor engine may determine in operation 1314 that one or both of the ray intersections are located on a moving object (1314: NO), then in operation 1318 the sensor engine may determine and apply a sampling weighting factor before sampling from the ray intersections in operation 1316. The sampling weighting factor determined in operation 1318 may be based on which ray intersections are on the moving simulated object, as well as the speed and direction of the moving simulated object. For example, a small and / or fast moving object detected at a first time may be more likely to have moved away during an intermediate simulation time, and thus the sampling weighting factor may shift the neural weighting factor halfway between the first time and the second time (e.g., 0.5 seconds) to a lower value (e.g., 0.3 seconds), which may cause the sensor engine to sample based on the second ray intersection more frequently than the first ray intersection.
[0125] In operation 1320, the sensor engine outputs the augmented 2D view to the simulated sensor. In some examples, the sensor engine provides the 2D view to the driving simulation system 234, which may integrate the augmented view into the running simulation, and the simulated sensor may then receive input data based on the augmented view. The augmented 2D view may correspond to a view with a higher rendering rate based on the incorporation of additional sensor data determined using the temporal upsampling described herein. Additionally, while this example describes an upsampling technique using a particular algorithm based on the object identifier, depth data, and velocity, in other examples, similar or identical temporal upsampling techniques may use other integrated view data with various algorithms in other combinations.
[0126] 14 shows an example process 1400 for determining a view for rendering in a simulated environment using sensor dependency data, view data, and GPU scheduling data. Some or all of the operations described in process 1200 may be performed by one or more components in FIGS. 1-9, such as the view selector component 216 and / or other components that comprise one or more computing devices 202 implementing a sensor simulation system (or sensor engine).
[0127] In operation 1402, the sensor engine may receive sensor-dependent data for one or more sensors operating in the simulated environment. In various examples, the sensor-dependent data may include a position, orientation angle, and / or field of view of the sensor within the simulated environment along with a type of data the sensor is configured to detect.
[0128] At operation 1404, the sensor engine may receive view data associated with one or more rendered views in the simulated environment. The simulation view data may include, for each view rendered in the simulation, the position (e.g., focus) of the view, the orientation (e.g., angle) of the view, the type of data stored in individual regions (e.g., pixels) of the view, and the rendering time / rate associated with the view.
[0129] In operation 1406, the sensor engine may receive or determine scheduling and / or performance data for one or more GPUs and / or CPUs associated with the driving simulation. The scheduling and performance data for the CPU 218 and GPU 224 may include available GPU capacity for rendering the 2D view (e.g., cores, GPU speed, storage, current rendering backlog, latency, network speed) and / or available CPU capacity for performing pre-processing and post-processing operations in connection with rendering a new view by the GPU.
[0130] At operation 1408, the sensor engine may select a view and initiate updated rendering of the selected view via the GPU. As mentioned above, in various different implementations, the view selector component 216 may use different combinations of the data received at operations 1402-1406 and may apply any of the various heuristic-based algorithms and / or machine learning models described herein to determine which view is rendered at the current time during the simulation.
[0131] In operation 1410, the sensor engine may analyze the performance of the simulation and computing resources (e.g., GPU and CPU) to determine whether to adjust the view resolution and / or rendering rate for the 2D view rendered by the GPU and / or adjust the view sensor alignment and / or upsampling performed by the CPU. For example, the sensor engine may identify one or more operations (e.g., rasterization by the GPU, ray tracing by the CPU) as a processing bottleneck that may adversely affect simulation performance. In some examples, the sensor engine may apply one or more algorithms or machine learning models to determine optimal rendering rates, view configurations, view resolutions to reduce the processing load on the GPU and mitigate the bottleneck. Additionally or alternatively, the sensor engine may apply one or more algorithms or machine learning models to improve sensor / view alignment and determine optimal timing and configurations for ray tracing and / or upsampling operations used to perform temporal / spatial refinement of sensor input data by the CPU.
[0132] If the sensor engine determines optimizations including adjustments to GPU view rendering capabilities (e.g., view resolution and / or rendering rate) or CPU view processing capabilities (e.g., view sensor alignment and / or upsampling configuration) (1410: yes), then in operation 1412 the sensor engine may reconfigure the view generator component 222, the reprojection component 226, and / or the upsampling component 228 to implement the adjusted view resolution, rendering rate, and alignment and / or upsampling configuration. Otherwise, if the sensor engine does not determine optimizations including adjustments to view resolution, rendering rate, alignment, and / or upsampling configuration (1410: no), process 1400 may return to operation 1402 to determine the next view to render.
[0133] Example clauses A. A system comprising one or more processors and one or more computer-readable media storing computer-executable instructions that, when executed, cause the one or more processors to perform operations, the instructions including: determining data representative of a three-dimensional environment associated with a driving simulation; determining a position associated with a simulated vehicle within the three-dimensional environment; and generating a two-dimensional view of the three-dimensional environment based at least in part on the position of the simulated vehicle, the two-dimensional view being first data indicative of a first physical characteristic associated with a region of the two-dimensional view and second data indicative of a second physical characteristic associated with the region. generating first sensor data based at least in part on the two-dimensional view, the first sensor data including first data, the first sensor data associated with a first simulated sensor of the simulated vehicle; generating second sensor data based at least in part on the two-dimensional view, the second sensor data including second data, the second sensor data associated with a second simulated sensor of the simulated vehicle; and providing the first sensor data and the second sensor data to the simulated vehicle during a driving simulation.
[0134] B. The system described in paragraph A, wherein generating the first sensor data includes generating a first re-projection of the two-dimensional view based at least in part on a first sensor position associated with the first simulated sensor, and generating the second sensor data includes generating a second re-projection of the two-dimensional view based at least in part on a second sensor position associated with the second simulated sensor relative to the simulated vehicle position, wherein the first sensor position differs from the second sensor position.
[0135] C. The system described in paragraph A, wherein the first simulated sensor includes a camera, and the first sensor data includes light data associated with the area of the two-dimensional view, and the second simulated sensor includes at least one of a lidar sensor or a radar sensor, and the second sensor data includes at least one of speed data or material data associated with the area of the two-dimensional view.
[0136] D. The system described in paragraph A, wherein generating the first sensor data includes determining a first sensor pose associated with the first simulated sensor, determining a first sensor simulation time associated with the first sensor, and generating a reprojection of a two-dimensional view of the first simulated sensor based at least in part on the first sensor pose and the first sensor simulation time.
[0137] E. The system described in paragraph D, wherein generating a two-dimensional view of the three-dimensional environment includes performing a rasterization process, and generating the first sensor data includes performing a ray casting process to generate a first reprojection of the two-dimensional view.
[0138] F. A method comprising: receiving data representing a three dimensional simulated environment; generating a two dimensional view of the three dimensional simulated environment; determining first metadata and second metadata associated with an area of the two dimensional view; determining first sensor data based at least in part on the two dimensional view, the first sensor data including the first metadata; providing the first sensor data to a first simulated sensor configured to detect the first metadata; determining second sensor data based at least in part on the two dimensional view, the second sensor data including the second metadata; and providing the second sensor data to a second simulated sensor configured to detect the second metadata.
[0139] G. The method of paragraph F, wherein determining the first sensor data includes generating a first re-projection of the two-dimensional view based at least in part on a first sensor position of a first simulated sensor within the three-dimensional simulated environment, and determining the second sensor data includes generating a second re-projection of the two-dimensional view based at least in part on a second sensor position of a second simulated sensor within the three-dimensional simulated environment, wherein the first sensor position is different from the second sensor position.
[0140] H. The method of paragraph F, wherein generating the first sensor data includes generating a first reprojection of the two-dimensional view based at least in part on a first simulated sensor time associated with the first simulated sensor, and generating the second sensor data includes generating a second reprojection of the two-dimensional view based at least in part on a second simulated sensor time associated with the second simulated sensor, and the first simulated sensor time is different from the second simulated sensor time.
[0141] I. The method of paragraph F, wherein the first simulated sensor includes a camera, and the first metadata includes light data associated with the area of the two-dimensional view, and the second simulated sensor includes at least one of a lidar sensor or a radar sensor, and the second metadata includes at least one of speed data or material data associated with the area of the two-dimensional view.
[0142] J. The method of paragraph F, wherein generating first sensor data includes determining a first sensor position associated with a first simulated sensor within the three-dimensional simulated environment and generating a reprojection of the two-dimensional view based at least in part on a difference between the first sensor position and a view focus position associated with the two-dimensional view, wherein generating the two-dimensional view includes performing a rasterization process and generating the reprojection of the two-dimensional view includes performing a ray casting process.
[0143] K. The method of paragraph F, wherein the step of determining the first sensor data includes determining a first simulated sensor time associated with the first simulated sensor and generating a reprojection of the two-dimensional view based at least in part on a time difference between the first simulated sensor time and a time associated with the step of generating the two-dimensional view, wherein the step of generating the two-dimensional view includes performing a rasterization process and the step of generating the reprojection of the two-dimensional view includes performing a ray casting process.
[0144] L. The method of paragraph K, further including determining a first movement of a first simulated sensor within the three-dimensional simulated environment during a time period associated with the time difference, and determining a second movement of the simulated object represented in the two-dimensional view during the time period, wherein generating a reprojection of the two-dimensional view is based at least in part on the first movement and the second movement.
[0145] M. The method of paragraph F, wherein generating the two-dimensional view includes storing the camera data in a first storage location associated with the region, storing the lidar data in a second storage location associated with the region, storing the radar data in a third storage location associated with the region, and storing an object identifier in a fourth storage location associated with the region.
[0146] N. One or more non-transitory computer-readable media storing instructions executable by a processor, the instructions which, when executed, cause the processor to perform operations including: receiving data representing a three dimensional simulated environment; generating a two dimensional view of the three dimensional simulated environment; determining first metadata and second metadata associated with an area of the two dimensional view; determining first sensor data based at least in part on the two dimensional view, the first sensor data including the first metadata; providing the first sensor data to a first simulated sensor configured to detect the first metadata; determining second sensor data based at least in part on the two dimensional view, the second sensor data including the second metadata; and providing the second sensor data to a second simulated sensor configured to detect the second metadata.
[0147] O. The one or more non-transitory computer-readable media of paragraph N, wherein determining the first sensor data includes generating a first re-projection of the two-dimensional view based at least in part on a first sensor position of a first simulated sensor within the three-dimensional simulated environment, and determining the second sensor data includes generating a second re-projection of the two-dimensional view based at least in part on a second sensor position of a second simulated sensor within the three-dimensional simulated environment, wherein the first sensor position differs from the second sensor position.
[0148] P. The one or more non-transitory computer-readable media of paragraph N, wherein generating the first sensor data includes generating a first re-projection of the two-dimensional view based at least in part on a first simulated sensor time associated with the first simulated sensor, and generating the second sensor data includes generating a second re-projection of the two-dimensional view based at least in part on a second simulated sensor time associated with the second simulated sensor, wherein the first simulated sensor time differs from the second simulated sensor time.
[0149] Q. The one or more non-transitory computer-readable media of paragraph N, wherein the first simulated sensor includes a camera and the first metadata includes light data associated with the area of the two-dimensional view, and the second simulated sensor includes at least one of a lidar sensor or a radar sensor and the second metadata includes at least one of speed data or material data associated with the area of the two-dimensional view.
[0150] R. The one or more non-transitory computer-readable media described in paragraph N, wherein generating first sensor data includes determining a first sensor position associated with a first simulated sensor within the three-dimensional simulated environment and generating a reprojection of the two-dimensional view based at least in part on a difference between the first sensor position and a view focus position associated with the two-dimensional view, wherein generating the two-dimensional view includes performing a rasterization process and generating the reprojection of the two-dimensional view includes performing a ray casting process.
[0151] S. The one or more non-transitory computer-readable media described in paragraph N, wherein determining the first sensor data includes determining a first simulated sensor time associated with the first simulated sensor and generating a reprojection of the two-dimensional view based at least in part on a time difference between the first simulated sensor time and a time associated with generating the two-dimensional view, wherein generating the two-dimensional view includes performing a rasterization process and generating the reprojection of the two-dimensional view includes performing a ray casting process.
[0152] T. The one or more non-transitory computer-readable media described in paragraph S, wherein the operations further include determining a first movement of a first simulated sensor within the three-dimensional simulated environment during a time period associated with the time difference and determining a second movement of the simulated object represented in the two-dimensional view during the time period, wherein generating a reprojection of the two-dimensional view is further based at least in part on the first movement and the second movement.
[0153] U. A system comprising one or more processors and one or more computer readable media storing computer executable instructions that, when executed, cause the one or more processors to perform operations, the instructions including: receiving data representing a simulated environment; generating a two dimensional view of the simulated environment, the two dimensional view associated with a view focal position within the simulated environment; determining a first sensor position associated with a first simulated sensor within the simulated environment and a second sensor position associated with a second simulated sensor within the simulated environment, the second sensor position being different from the first sensor position. determining a sensor position that is a first spatial difference between a view focus position and the first sensor position in the simulated environment; determining a first spatial difference between the view focus position and the second sensor position in the simulated environment; generating a first reprojection based at least in part on the two-dimensional view and the first spatial difference; generating a second reprojection based at least in part on the two-dimensional view and the second spatial difference; determining first sensor data associated with the first simulated sensor based at least in part on the first reprojection; and determining second sensor data associated with the second simulated sensor based at least in part on the second reprojection.
[0154] V. The system described in paragraph U, wherein the operations further include determining a first execution rate associated with the first simulated sensor and determining a second execution rate associated with the second simulated sensor, the first execution rate being different from the second execution rate.
[0155] W. The system described in paragraph U, wherein the operations further include generating a second two-dimensional view of the simulated environment, the two-dimensional view being oriented at a first angle, the second two-dimensional view being oriented at a second angle different from the first angle, the second two-dimensional view being associated with a second view focal position; determining a third spatial difference between the second view focal position and a first sensor position in the simulated environment; and generating a third reprojection based at least in part on the second two-dimensional view and the third spatial difference, wherein a first portion of the first sensor data is determined based on the first reprojection of the two-dimensional view and a second portion of the first sensor data is determined based on the third reprojection of the second two-dimensional view.
[0156] X. The system described in paragraph U, wherein the operations further include determining a first orientation of the first simulated sensor at a first time during the simulation, where generating a first reprojection of the two-dimensional view includes determining the first orientation based at least in part on the first orientation, determining a second orientation of the first simulated sensor at a second time during the simulation after the first time, determining a second two-dimensional view based at least in part on the second orientation, determining third sensor data associated with the first simulated sensor based at least in part on a third reprojection of the second two-dimensional view, and determining the third sensor data associated with the first simulated sensor at a time during the simulation associated with the second time.
[0157] Y. The system described in paragraph U, wherein the operations further include determining a rendering time associated with generating the two-dimensional view and determining a simulated sensor time associated with the first simulated sensor, wherein generating the first reprojection is based at least in part on a time difference between the rendering time associated with generating the two-dimensional view and the simulated sensor time associated with the first simulated sensor.
[0158] Z. A method comprising: receiving data representing a simulated environment; determining a first field of view of a first simulated sensor within the simulated environment; generating first sensor data for the first simulated sensor based at least in part on the first field of view; determining a second field of view of a second simulated sensor within the simulated environment, the second field of view at least partially overlapping with the first field of view; and generating second sensor data for the second simulated sensor based at least in part on the second field of view, the second sensor data being based at least in part on the first sensor data.
[0159] AA. The method of paragraph Z, further comprising generating a two-dimensional view of the simulated environment using a rasterization process, wherein generating the first sensor data comprises generating a first reprojection of the two-dimensional view based at least in part on the first field of view, and generating the second sensor data comprises generating a second reprojection of the two-dimensional view based at least in part on the second field of view.
[0160] AB. The method of paragraph AA, wherein generating the first reprojection includes generating an image based at least in part on light data stored in the two-dimensional view, and generating the second reprojection includes generating a point cloud based at least in part on depth data stored in the two-dimensional view.
[0161] The method of paragraph AA, wherein AC. The two-dimensional view is associated with a view focus position in the simulated environment, and generating the first reprojection includes determining a first spatial difference between the view focus position and a first sensor pose in the simulated environment and performing a first raycast process based at least in part on the first spatial difference, and generating the second reprojection includes determining a second spatial difference between the view focus position and a second sensor pose in the simulated environment and performing a second raycast process based at least in part on the second spatial difference.
[0162] AD. The method of paragraph Z, further comprising determining a first simulation time associated with the first sensor data and determining a second simulation time associated with the second sensor data, the first simulation time being different from the second simulation time.
[0163] AE. The method of paragraph AD, comprising: rendering a two-dimensional view of a simulated environment, the two-dimensional view being associated with a rendering time within the simulation; and generating first sensor data includes generating a first reprojection of the two-dimensional view based at least in part on the rendering time and the first simulation time; and generating second sensor data includes generating a second reprojection of the two-dimensional view based at least in part on the rendering time and the second simulation time.
[0164] AF. The method of paragraph Z, further including the steps of rendering a first view of the simulated environment, the first view being oriented at a first angle and associated with a first focal position within the simulated environment; and rendering a second view of the simulated environment, the second view being oriented at a second angle and associated with a second focal position within the simulated environment, and generating the first sensor data includes determining a first portion of the first sensor data based on the first view; and determining a second portion of the first sensor data based on the second view.
[0165] AG. The method of paragraph Z, wherein the step of generating first sensor data includes the steps of: rendering a two-dimensional view of the simulated environment using a rasterization process, the two-dimensional view being associated with a view focus position and a rendering time within the simulated environment; determining a spatial difference between the view focus position and a first sensor pose associated with the first sensor; determining a time difference between the rendering time and a first simulation time associated with the first sensor; and generating a reprojection of the two-dimensional view based at least in part on the spatial difference and the time difference.
[0166] AH. One or more non-transitory computer-readable media storing instructions executable by a processor, the instructions which, when executed, cause the processor to perform operations including: receiving data representing a simulated environment; determining a first field of view of a first simulated sensor within the simulated environment; generating first sensor data for the first simulated sensor based at least in part on the first field of view; determining a second field of view of a second simulated sensor within the simulated environment, the second field of view at least partially overlapping with the first field of view; and generating second sensor data for the second simulated sensor based at least in part on the second field of view, the second sensor data being based at least in part on the first sensor data.
[0167] The one or more non-transitory computer-readable media described in paragraph AH, wherein the AI operation further includes generating a two-dimensional view of the simulated environment using a rasterization process, wherein generating the first sensor data includes generating a first re-projection of the two-dimensional view based at least in part on the first field of view, and generating the second sensor data includes generating a second re-projection of the two-dimensional view based at least in part on the second field of view.
[0168] AJ. One or more non-transitory computer-readable media as described in paragraph AI, wherein generating the first reprojection includes generating an image based at least in part on the light data stored in the two-dimensional view, and generating the second reprojection includes generating a point cloud based at least in part on the depth data stored in the two-dimensional view.
[0169] AK. The one or more non-temporal computer-readable media of paragraph AI, wherein the two-dimensional view is associated with a view focal position within the simulated environment, and generating the first reprojection includes determining a first spatial difference between the view focal position and a first sensor pose within the simulated environment and performing a first raycast process based at least in part on the first spatial difference, and generating the second reprojection includes determining a second spatial difference between the view focal position and a second sensor pose within the simulated environment and performing a second raycast process based at least in part on the second spatial difference.
[0170] AL. The one or more non-transitory computer-readable media of paragraph AH, wherein the operations further include determining a first simulation time associated with the first sensor data and determining a second simulation time associated with the second sensor data, the first simulation time being different from the second simulation time.
[0171] AM. The one or more non-transitory computer-readable media described in paragraph AL, wherein the operations further include rendering a two-dimensional view of the simulated environment, the two-dimensional view being associated with a rendering time within the simulation, and wherein generating the first sensor data includes generating a first re-projection of the two-dimensional view based at least in part on the rendering time and the first simulation time, and generating the second sensor data includes generating a second re-projection of the two-dimensional view based at least in part on the rendering time and the second simulation time.
[0172] AN. The one or more non-transitory computer-readable media of paragraph A-M, wherein the operations include rendering a first view of the simulated environment, the first view being oriented at a first angle and associated with a first focal position within the simulated environment, and rendering a second view of the simulated environment, the second view being oriented at a second angle and associated with a second focal position within the simulated environment, and generating the first sensor data further includes determining a first portion of the first sensor data based on the first view, and determining a second portion of the first sensor data based on the second view.
[0173] AO. A system comprising one or more processors and one or more computer-readable media storing computer-executable instructions that, when executed, cause the one or more processors to perform operations, the instructions comprising: receiving a two-dimensional view associated with a simulated environment; determining a sensor pose associated with a simulated sensor in the simulated environment; determining ray intersections in the two-dimensional view based at least in part on the sensor pose using a ray casting process; receiving the two-dimensional view based at least in part on the ray intersections, and a first depth value associated with a first region and a second depth value associated with a second region from the two-dimensional view; determining physical properties associated with the ray intersections based at least in part on a comparison between the first depth value and the second depth value; and providing sensor data to a simulated vehicle in the simulated environment, the sensor data including the physical properties associated with the ray intersections.
[0174] AP. The system described in paragraph AO, wherein determining a physical characteristic associated with the ray intersection includes determining a first sample of a physical characteristic associated with the first region; determining a second sample of a physical characteristic associated with the second region; comparing a difference between the first depth value and the second depth value to a threshold; when the difference is less than the threshold, determining the physical characteristic associated with the ray intersection using a linear interpolation process based at least in part on the first sample and the second sample; and when the difference meets or exceeds the threshold, selecting one of the first sample or the second sample to determine the physical characteristic associated with the ray intersection.
[0175] AQ. The system described in paragraph AO, wherein the operations further include determining a first object identifier associated with the first region and determining a second object identifier associated with the second region, and determining the physical characteristic associated with the ray intersection is based at least in part on a second comparison between the first object identifier and the second object identifier.
[0176] The system described in paragraph AO, wherein the operation further includes determining a second sensor pose of a simulated sensor in the simulated environment, where the sensor pose is associated with a first time during the simulation and the second sensor pose is associated with a second time after the first time during the simulation, and determining a second ray intersection in the two-dimensional view using a second ray casting process based at least in part on the second sensor pose, where a first region is associated with the ray intersection and a second region is associated with the second ray intersection.
[0177] The system described in paragraph AO, wherein the AS. operation includes determining a first sample of a physical property associated with the first region by retrieving a first sample from a first storage of a two-dimensional view associated with the first region, and determining a second sample of a physical property associated with the second region by retrieving a second sample from a second storage of the two-dimensional view associated with the first region, wherein the physical property includes at least one of an optical property, a velocity property, a material property, or a reflectance property.
[0178] AT. A method comprising: receiving a two-dimensional view associated with a simulated environment; determining a sensor pose of a simulated sensor in the simulated environment; determining ray intersections in the two-dimensional view using a ray casting process based at least in part on the sensor pose; determining a region of the two-dimensional view associated with the ray intersections; determining an attribute value associated with the region of the two-dimensional view, the attribute value including at least one of a depth value, an object identifier, or a velocity value; determining a value of a physical property associated with the ray intersections based at least in part on the attribute value; and determining sensor data associated with the simulated sensor, the sensor data including the value of the physical property.
[0179] AU. The method of paragraph AT, further comprising determining a second region of the two-dimensional view and determining a second attribute value associated with the second region of the two-dimensional view, wherein determining a value of a physical property associated with the ray intersection is based at least in part on comparing the attribute value associated with the region and the second attribute value associated with the second region.
[0180] AV. The method of paragraph AU, further comprising: determining that a difference between the attribute value and the second attribute value is less than a threshold; determining a second value of a physical property associated with the region based on determining that the difference is less than the threshold; determining a third value of a physical property associated with the second region; and performing a linear interpolation process involving at least the second value and the third value, wherein the value of the physical property associated with the ray intersection is determined based on the linear interpolation process.
[0181] AW. The method of paragraph AU, further comprising the steps of: determining that a difference between the attribute value and a second attribute value meets or exceeds a threshold; determining either the region or the second region as a region spatially close to a ray intersection in the two-dimensional view based on determining that the difference meets or exceeds the threshold; determining a second value of a physical property associated with the spatially close region; and determining the value of the physical property associated with the ray intersection as the second value of the physical property associated with the spatially close region.
[0182] AX. The method of paragraph AU, further including: determining a second sensor pose of a simulated sensor in the simulated environment, where the sensor pose is associated with a first time during the simulation and the second sensor pose is associated with a second time after the first time during the simulation; and determining a second ray intersection in the two-dimensional view using a second ray casting process based at least in part on the second sensor pose, where a region is associated with the ray intersection and a second region is associated with the second ray intersection.
[0183] AY. The method of paragraph AX, further comprising determining a distance in the two-dimensional view between the ray intersection and a second ray intersection, wherein determining a value of a physical property associated with the ray intersection is based at least in part on the distance.
[0184] AZ. The method of paragraph AT, further comprising steps of: determining a second region of the two dimensional view, the second region adjacent to the region; determining a second attribute value associated with the second region; and determining a third region of the two dimensional view, the third region adjacent to the region on a different side than the second region; and determining a third attribute value associated with the third region, wherein determining a value of a physical characteristic associated with the ray intersection is based at least in part on comparing the attribute value, the second attribute value, and the third attribute value.
[0185] BA. The method of paragraph AT, further comprising determining a second value of a physical property associated with the region, the physical property including at least one of an optical property, a velocity property, a material property, or a reflectance property, and wherein determining the value of the physical property associated with the ray intersection is based at least in part on the second value of the physical property associated with the region.
[0186] BB. One or more non-transitory computer-readable media storing instructions executable by a processor, the instructions, when executed, causing the processor to perform operations including: receiving a two-dimensional view associated with a simulated environment; determining a sensor pose of a simulated sensor in the simulated environment; determining ray intersections in the two-dimensional view using a ray casting process based at least in part on the sensor pose; determining a region of the two-dimensional view associated with the ray intersections; determining attribute values associated with the region of the two-dimensional view, the attribute values including at least one of a depth value, an object identifier, or a velocity value; determining values of physical properties associated with the ray intersections based at least in part on the attribute values; and determining sensor data associated with the simulated sensor, the sensor data including values of the physical properties.
[0187] BC. The one or more non-transitory computer-readable media of paragraph BB, wherein the operations further include determining a second region of the two-dimensional view and determining a second attribute value associated with the second region of the two-dimensional view, wherein determining the value of the physical property associated with the ray intersection is based at least in part on comparing the attribute value associated with the region and the second attribute value associated with the second region.
[0188] BD. The one or more non-transitory computer-readable media described in paragraph BC, wherein the operations further include determining that a difference between the attribute value and a second attribute value is less than a threshold, determining a second value of a physical characteristic associated with the region based on determining that the difference is less than the threshold, determining a third value of a physical characteristic associated with the second region, and performing a linear interpolation process involving at least the second value and the third value, wherein the value of the physical characteristic associated with the ray intersection is determined based on the linear interpolation process.
[0189] BE. The one or more non-transitory computer-readable media of paragraph BC, the operations further including: determining that a difference between the attribute value and the second attribute value meets or exceeds a threshold; determining either the region or the second region as a region spatially near to a ray intersection in the two-dimensional view based on determining that the difference meets or exceeds the threshold; determining a second value of a physical property associated with the spatially near region; and determining the value of the physical property associated with the ray intersection as the second value of the physical property associated with the spatially near region.
[0190] BF. The one or more non-transitory computer-readable media of paragraph BC, wherein the operations further include determining a second sensor pose of a simulated sensor in the simulated environment, where the sensor pose is associated with a first time during the simulation and the second sensor pose is associated with a second time after the first time during the simulation, and determining a second ray intersection in the two-dimensional view using a second ray casting process based at least in part on the second sensor pose, where a region is associated with the ray intersection and a second region is associated with the second ray intersection.
[0191] BG. The one or more non-transitory computer-readable media described in paragraph BF, wherein the operation further includes determining a distance in the two-dimensional view between the ray intersection and a second ray intersection, and determining a value of a physical property associated with the ray intersection is further based at least in part on the distance.
[0192] BH. The one or more non-transitory computer-readable media of paragraph BB, wherein the operations further include determining a second region of the two dimensional view, where the second region is adjacent to the region; determining a second attribute value associated with the second region; determining a third region of the two dimensional view, where the third region is adjacent to the region on a different side than the region and determining a third attribute value associated with the third region, wherein determining a value of the physical characteristic associated with the ray intersection is based at least in part on comparing the attribute value, the second attribute value, and the third attribute value.
[0193] BI. A system comprising one or more processors and one or more computer readable media storing computer executable instructions that, when executed, cause the one or more processors to perform operations, the instructions including: receiving data representing a three dimensional simulated environment associated with a driving simulation; determining a first sensor and a second sensor associated with a simulated vehicle within the three dimensional simulated environment, the first sensor having a first position and a first orientation within the three dimensional simulated environment, the second sensor having a second position different from the first position and a second orientation different from the first orientation within the three dimensional simulated environment; determining a first view of the three dimensional simulated environment associated with the first sensor based at least in part on the first position and the first orientation; and determining a second view of the three dimensional simulated environment associated with the first sensor based at least in part on the second position and the second orientation. determining a second view of the three dimensional simulated environment associated with a second sensor; determining a first data requirement and a first simulation time associated with the first sensor; determining a second data requirement and a second simulation time associated with the second sensor; determining a rendering time of a graphics processing unit (GPU) associated with the driving simulation; determining an updated view at a time associated with the rendering time, the updated view being one of the first view or the second view, and based at least in part on the first data requirement, the second data requirement, the first simulation time, and the second simulation time; and generating an updated rendering of the updated view using the GPU at the time associated with the rendering time.
[0194] BJ. The system of paragraph BI, wherein determining a first data requirement associated with the first sensor includes determining a first type of sensor data the first sensor is configured to receive, and determining a second data requirement associated with the second sensor includes determining a second type of sensor data the second sensor is configured to receive, the second type of sensor data being different from the first type of sensor data.
[0195] BK. The system described in paragraph BI, wherein the operations further include determining a direction of movement of the simulated vehicle within the three dimensional simulated environment, and determining the updated view is further based on the first direction, the second direction, and the direction of movement.
[0196] BL. The system of paragraph BI, wherein determining the updated view comprises determining a first sensor field of view associated with a first sensor, determining a second sensor field of view associated with a second sensor, and determining that the updated view includes both the first sensor field of view and the second sensor field of view.
[0197] BM. The system of paragraph BI, wherein determining the view to be updated comprises at least one of comparing a first number of dynamic simulated objects represented in the first view with a second number of dynamic simulated objects represented in the second view, or comparing a first velocity of a first simulated object represented in the first view with a second velocity of a second simulated object represented in the second view.
[0198] BN. A method comprising: determining a first sensor associated with a first view of a three-dimensional simulated environment; determining a second sensor associated with a second view of the three-dimensional simulated environment; determining a first data requirement and a first simulation time associated with the first sensor; determining a second data requirement and a second simulation time associated with the second sensor; determining a rendering time of a GPU associated with the three-dimensional simulated environment; determining an updated view at a time associated with the rendering time, the updated view being one of the first view or a second view, the determining the view being based at least in part on the first data requirement, the second data requirement, the first simulation time, and the second simulation time; and generating the updated view using the GPU at a time associated with the rendering time.
[0199] BO. The method of paragraph BN, wherein determining a first data requirement associated with a first sensor includes determining a first sensor field of view based at least in part on a first position and a first orientation of the first sensor within the three dimensional simulated environment, and determining a second data requirement associated with a second sensor includes determining a second sensor field of view based at least in part on a second position and a second orientation of the second sensor within the three dimensional simulated environment, the second sensor field of view being different from the first sensor field of view.
[0200] BP. The method of paragraph BN, wherein determining a first data requirement associated with the first sensor includes determining a first type of sensor data the first sensor is configured to receive, and determining a second data requirement associated with the second sensor includes determining a second type of sensor data the second sensor is configured to receive, the second type of sensor data being different from the first type of sensor data.
[0201] BQ. The method of paragraph BN, further including the steps of determining a first orientation angle of a first sensor within the three-dimensional simulated environment and a second orientation angle of a second sensor within the three-dimensional simulated environment, and determining a direction of movement of at least one of the first sensor and the second sensor within the three-dimensional simulated environment, wherein the step of determining the updated view is further based on the first orientation angle, the second orientation angle, and the direction of movement.
[0202] BR. The method of paragraph BN, further comprising determining a first execution rate associated with the first sensor and a second execution rate associated with the second sensor, and determining a rendering rate associated with the GPU, wherein the step of determining the view to be updated is further based on the first execution rate, the second execution rate, and the rendering rate associated with the GPU.
[0203] The method of paragraph BR, further comprising determining a GPU latency associated with BS.GPU, wherein determining the view to be updated is further based on the GPU latency.
[0204] BT. The method of paragraph BN, wherein the step of determining a view to be updated includes the steps of determining a first sensor field of view associated with a first sensor, determining a second sensor field of view associated with a second sensor, and determining that the view to be updated includes both the first sensor field of view and the second sensor field of view.
[0205] BU. The method of paragraph BN, wherein the step of determining the view to be updated includes at least one of the steps of comparing a first number of dynamic simulated objects represented in the first view with a second number of dynamic simulated objects represented in the second view, or comparing a first velocity of a first simulated object represented in the first view with a second velocity of a second simulated object represented in the second view.
[0206] BV. One or more non-transitory computer-readable media storing instructions executable by a processor, the instructions which, when executed, cause the processor to perform operations including: determining a first sensor associated with a first view of the three dimensional simulated environment; determining a second sensor associated with a second view of the three dimensional simulated environment; determining a first data requirement and a first simulation time associated with the first sensor; determining a second data requirement and a second simulation time associated with the second sensor; determining a rendering time of a GPU associated with the three dimensional simulated environment; determining an updated view at a time associated with the rendering time, where the updated view is one of the first view or a second view, and determining the view is based at least in part on the first data requirement, the second data requirement, the first simulation time, and the second simulation time; and generating the updated view using the GPU at a time associated with the rendering time.
[0207] BW. The one or more non-transitory computer-readable media of paragraph BV, wherein determining a first data requirement associated with a first sensor includes determining a first sensor field of view based at least in part on a first position and a first orientation of the first sensor within the three dimensional simulated environment, and determining a second data requirement associated with a second sensor includes determining a second sensor field of view based at least in part on a second position and a second orientation of the second sensor within the three dimensional simulated environment, the second sensor field of view being different from the first sensor field of view.
[0208] BX. The one or more non-transitory computer-readable media of paragraph BV, wherein determining a first data requirement associated with a first sensor includes determining a first type of sensor data the first sensor is configured to receive, and determining a second data requirement associated with a second sensor includes determining a second type of sensor data the second sensor is configured to receive, the second type of sensor data being different from the first type of sensor data.
[0209] BY.The one or more non-transitory computer-readable media described in paragraph BV, wherein the operations further include determining a first orientation angle of a first sensor within the three-dimensional simulated environment and a second orientation angle of a second sensor within the three-dimensional simulated environment, and determining a movement direction of at least one of the first sensor and the second sensor within the three-dimensional simulated environment, wherein determining the updated view is further based on the first orientation angle, the second orientation angle, and the movement direction.
[0210] BZ. One or more non-transitory computer-readable media as described in paragraph BV, wherein the operations further include determining a first execution rate associated with the first sensor and a second execution rate associated with the second sensor, and determining a rendering rate associated with the GPU, and determining the view to be updated is further based on the first execution rate, the second execution rate, and the rendering rate associated with the GPU.
[0211] CA. One or more non-transitory computer-readable media as described in paragraph BV, wherein determining an updated view includes determining a first sensor field of view associated with a first sensor, determining a second sensor field of view associated with a second sensor, and determining that the updated view includes both the first sensor field of view and the second sensor field of view.
[0212] CB. The one or more non-transitory computer-readable media of paragraph BV, wherein determining the view to be updated includes at least one of comparing a first number of dynamic simulated objects represented in the first view with a second number of dynamic simulated objects represented in the second view, or comparing a first velocity of a first simulated object represented in the first view with a second velocity of a second simulated object represented in the second view.
[0213] Although the exemplary clauses above have been described with respect to particular implementations, it should be understood in the context of this specification that the contents of the exemplary clauses may be implemented via a method, device, system, computer-readable medium, and / or another implementation. Additionally, any of the exemplary A-CBs may be implemented alone or in combination with one or more of any of the exemplary A-CBs. summary One or more examples of the technology described herein have been described; however, various modifications, additions, permutations, and equivalents thereof fall within the scope of the technology described herein.
[0214] In the description of the examples, reference is made to the accompanying drawings, which form a part of this specification, showing by way of example specific examples of the claimed subject matter. It is understood that other examples may be used and modifications or substitutions, such as structural changes, may be made. Such examples, modifications or substitutions do not necessarily depart from the scope of the intended claimed subject matter. Although steps in this specification may be presented in a particular order, in some cases, the order may be changed such that certain inputs are provided at different times or in a different order without changing the functionality of the systems and methods described. The disclosed procedures may also be performed in different orders. Furthermore, the various calculations in this specification need not be performed in the order disclosed, and other examples using alternative orders of calculations may be easily implemented. In addition to reordering, calculations may also be decomposed into sub-calculations having the same results.
[0215] Although the inventive subject matter has been described in language specific to structural features and / or methodological acts, it is to be understood that the inventive subject matter defined in the appended claims is not necessarily limited to the specific features or acts described. Rather, the specific features and acts are disclosed as example forms of implementing the claims.
[0216] The components described herein represent instructions that may be stored on any type of computer-readable medium and implemented in software and / or hardware. All of the methods and processes described above may be embodied and fully automated via software code and / or computer-executable instructions executed by one or more computers or processors, hardware, or some combination thereof. Alternatively, some or all of the methods may be embodied in specialized computer hardware.
[0217] Unless expressly stated to the contrary, conditional terms such as "can," "could," "may," or "may" are understood within the context to, among other things, state that an example includes certain features, elements, and / or steps that other examples do not include. Thus, such conditional terms are not intended to generally imply that a certain feature, element, and / or step is required in any way in one or more examples, or that the one or more examples necessarily include logic for determining whether a certain feature, element, and / or step is included in or should be performed in any particular example, with or without user input or prompting.
[0218] Connecting language such as the phrase "at least one of X, Y, or Z," unless specifically stated otherwise, should be understood to mean that the item, term, etc. may be either X, Y, or Z, or any combination thereof, including collections of each of the elements. Unless expressly stated as singular, "a" means singular and plural.
[0219] Any routine description, element, or block in the flow diagrams described herein and / or shown in the accompanying figures should be understood as potentially representing a block, segment, or portion of code that includes one or more computer-executable instructions for implementing a particular logical function or element in the routine. Alternative implementations are included within the scope of the examples described herein, in which elements or functions are performed in a different order than that shown or described, including removing elements or functions, being substantially synchronized, in reverse order, or omitting additional or omitted operations, depending on the functionality involved, as would be understood by one of ordinary skill in the art.
[0220] Many variations and modifications may be made to the above examples, and these elements should be understood to be among the other acceptable examples. All such modifications and variations are intended to be included herein within the scope of this disclosure and protected by the following claims.
Claims
1. one or more processors; one or more computer readable media storing computer executable instructions; A system comprising: The computer-executable instructions, when executed, cause the one or more processors to: receiving data representative of a three-dimensional simulated environment; generating a two-dimensional view of the three-dimensional simulated environment; determining first and second metadata associated with a region of the two-dimensional view; determining first sensor data based at least in part on the two-dimensional view, the first sensor data including the first metadata; providing the first sensor data to a first simulated sensor configured to detect the first metadata; determining second sensor data based at least in part on the two-dimensional view, the second sensor data including the second metadata; and providing the second sensor data to a second simulated sensor configured to detect second metadata; A system that causes a system to perform an operation including:
2. determining the first sensor data comprises generating a first reprojection of the two-dimensional view based at least in part on a first sensor position of the first simulated sensor within the three-dimensional simulated environment; 2. The system of claim 1, wherein determining the second sensor data comprises generating a second reprojection of the two-dimensional view based at least in part on a second sensor position of the second simulated sensor within the three-dimensional simulated environment, the first sensor position being different from the second sensor position.
3. generating the first sensor data comprises generating a first reprojection of the two-dimensional view based at least in part on a first simulated sensor time associated with the first simulated sensor; 3. The system of claim 1, wherein generating the second sensor data comprises generating a second reprojection of the two-dimensional view based at least in part on a second simulated sensor time associated with the second simulated sensor, the first simulated sensor time being different from the second simulated sensor time.
4. the first simulated sensor includes a camera, and the first metadata includes light data associated with the area of the two-dimensional view; 3. The system of claim 1 or 2, wherein the second simulated sensor includes at least one of a lidar sensor or a radar sensor, and the second metadata includes at least one of speed data or material data associated with the region of the two-dimensional view.
5. Generating the first sensor data includes: determining a first sensor position associated with the first simulated sensor within the three-dimensional simulated environment; generating a reprojection of the two-dimensional view based at least in part on a difference between the first sensor position and a view focus position associated with the two-dimensional view; Equipped with generating the two-dimensional view comprises performing a rasterization process; The system of claim 1 or 2, wherein generating a reprojection of the two-dimensional view comprises performing a ray casting process.
6. Determining the first sensor data includes: determining a first simulated sensor time associated with the first simulated sensor; generating a reprojection of the two-dimensional view based at least in part on a time difference between the first simulated sensor time and a time associated with generating the two-dimensional view; Equipped with generating the two-dimensional view comprises performing a rasterization process; The system of claim 1 or 2, wherein generating the reprojection of the two-dimensional view comprises performing a ray casting process.
7. The operation includes: determining a first movement of the first simulated sensor within the three-dimensional simulated environment during a time period associated with the time difference; determining a second movement of a simulated object represented in the two-dimensional view during said period of time; Further equipped with The system of claim 6 , wherein generating the reprojection of the two-dimensional view is further based at least in part on the first motion and the second motion.
8. Generating the two-dimensional view includes: storing the camera data in a first storage location associated with the region; storing the lidar data in a second storage location associated with the region; and storing the radar data in a third storage location associated with the region; and storing an object identifier in a fourth storage location associated with the region; The system according to claim 1 or 2, comprising:
9. 1. A method comprising: receiving data representative of a three-dimensional simulated environment; generating a two-dimensional view of the three-dimensional simulated environment; determining first and second metadata associated with a region of the two-dimensional view; determining first sensor data based at least in part on the two-dimensional view, the first sensor data including the first metadata; providing the first sensor data to a first simulated sensor configured to detect the first metadata; determining second sensor data based at least in part on the two-dimensional view, the second sensor data including the second metadata; providing the second sensor data to a second simulated sensor configured to detect second metadata; The method includes:
10. determining the first sensor data includes generating a first reprojection of the two-dimensional view based at least in part on a first sensor position of the first simulated sensor within the three-dimensional simulated environment; 10. The method of claim 9, wherein determining the second sensor data includes generating a second reprojection of the two-dimensional view based at least in part on a second sensor position of the second simulated sensor within the three-dimensional simulated environment, the first sensor position being different from the second sensor position.
11. generating the first sensor data includes generating a first reprojection of the two-dimensional view based at least in part on a first simulated sensor time associated with the first simulated sensor; 11. The method of claim 9 or 10, wherein generating the second sensor data comprises generating a second reprojection of the two-dimensional view based at least in part on a second simulated sensor time associated with the second simulated sensor, the first simulated sensor time being different from the second simulated sensor time.
12. the first simulated sensor includes a camera, and the first metadata includes light data associated with the area of the two-dimensional view; 11. The method of claim 9 or 10, wherein the second simulated sensor includes at least one of a lidar sensor or a radar sensor, and the second metadata includes at least one of speed data or material data associated with the region of the two-dimensional view.
13. The step of generating the first sensor data includes: determining a first sensor position associated with the first simulated sensor within the three-dimensional simulated environment; generating a reprojection of the two-dimensional view based at least in part on a difference between the first sensor position and a view focus position associated with the two-dimensional view; Including, generating the two-dimensional view includes performing a rasterization process; The method according to claim 9 or 10, wherein generating a reprojection of the two-dimensional view comprises performing a ray casting process.
14. The step of determining the first sensor data includes: determining a first simulated sensor time associated with the first simulated sensor; generating a reprojection of the two-dimensional view based at least in part on a time difference between the first simulated sensor time and a time associated with generating the two-dimensional view; generating the two-dimensional view includes performing a rasterization process; The method of claim 9 or 10, wherein generating the reprojection of the two-dimensional view comprises performing a ray casting process.
15. One or more non-transitory computer-readable media comprising instructions that, when executed by one or more processors, cause the one or more processors to perform the method of claim 9 or 10.