Methods, apparatus, and articles of manufacture to iteratively model an environment
The method addresses the challenges of 3D reconstruction by iteratively optimizing camera positions and parameters using autonomous cameras and an edge compute device, resulting in a dense and suitable 3D model with reduced computational burden and improved data quality.
Patent Information
- Application Number
- PCT/CN2023/138148
- Authority / Receiving Office
- WO · WO
- Patent Type
- Applications
- Current Assignee / Owner
- Filing Date
- 2023-12-12
- Publication Date
- 2025-06-19
AI Technical Summary
Existing 3D reconstruction techniques face challenges such as redundant input images, failure to capture relevant viewpoints, and complications due to occlusions, lack of texture, and varying illumination conditions, which result in sparse and unsuitable 3D models for navigation or other tasks.
The proposed method employs an iterative approach using autonomous cameras (ACs) and an edge compute device to detect missing or less accurate portions of a 3D reconstruction, providing feedback on camera positions and parameters to optimize subsequent image captures. This method plans and executes coordinated captures to minimize redundant scans and improve data density in the 3D model.
The approach reduces the number of iterations and captures required for 3D reconstruction, generates high-definition 3D details, and produces a composite 3D model that is dense and suitable for navigation and other physical domain tasks, while also being computationally efficient and scalable.
Smart Images

Figure CN2023138148_19062025_PF_FP_ABST
Abstract
Description
METHODS, APPARATUS, AND ARTICLES OF MANUFACTURE TO ITERATIVELY MODEL AN ENVIRONMENT
[0001] FIELD OF THE DISCLOSURE
[0002] This disclosure relates generally to three-dimensional (3D) reconstruction and, more particularly, to methods, apparatus, and articles of manufacture to iteratively model an environment.BACKGROUND
[0003] Computer vision and computer graphics utilize 3D reconstruction to capture the shape and appearance of real-world objects. For example, 3D reconstruction can be applied in the field of computer aided geometric design (CAGD) , computer graphics, computer animation, computer vision, medical imaging, computational science, virtual reality, digital media, among others. 3D reconstruction can be performed via active techniques and / or passive techniques. Active 3D reconstruction techniques include reconstructing a 3D profile of an object by interfering (e.g., mechanically, radiometrically, etc. ) with the object to generate a depth map that can be used to numerically approximate the object. Passive 3D reconstruction techniques include reconstructing a 3D profile of an object without interfering with the object. For example, passive 3D reconstruction techniques utilize sensors that measure the radiance reflected or emitted by an object to infer the 3D profile of the object through image understanding.BRIEF DESCRIPTION OF THE DRAWINGS
[0004] FIG. 1 is a block diagram of an example environment including an example edge compute device and example autonomous cameras (ACs) to model an example object.
[0005] FIG. 2 is a block diagram of an example implementation of the edge compute device of FIG. 1.
[0006] FIG. 3 is a block diagram of an example implementation of the AC control circuitry of FIG. 1.
[0007] FIG. 4 is a graphical representation of a 3D model of an environment generated by the edge compute device and / or the AC control circuitry of FIG. 1.
[0008] FIG. 5 is a graphical representation of an example octree representation of data.
[0009] FIG. 6 is a graphical representation of example connectivity of a voxel.
[0010] FIG. 7 is a graphical representation of an example octree representation of the 3D model of FIG. 4.
[0011] FIG. 8 is an illustration of example techniques to avoid blind spots when capturing images on an example object from at least two viewpoints.
[0012] FIG. 9 is an illustration of example 3D representation of an example object via stereo matching of images captured from at least two viewpoints.
[0013] FIG. 10 is an illustration of an example octree representation of objects captured from at least two viewpoints.
[0014] FIG. 11 is an illustration of techniques to match two or more images captured from at least two viewpoints.
[0015] FIG. 12 is a flowchart representative of example machine-readable instructions and / or example operations that may be executed, instantiated, and / or performed by example programmable circuitry to implement the edge compute device of FIG. 2.
[0016] FIG. 13 is a flowchart representative of example machine-readable instructions and / or example operations that may be executed, instantiated, and / or performed by example programmable circuitry to implement the edge compute device of FIG. 2 to schedule captures of an environment for ACs based on respective AC models of the ACs and a composite 3D model of the environment.
[0017] FIG. 14 is a flowchart representative of example machine-readable instructions and / or example operations that may be executed, instantiated, and / or performed by example programmable circuitry to implement the AC control circuitry of FIG. 3.
[0018] FIG. 15 is a block diagram of an example processing platform including programmable circuitry structured to execute, instantiate, and / or perform the example machine-readable instructions and / or perform the example operations of FIGS. 12 and / or 13 to implement the edge compute device of FIG. 2.
[0019] FIG. 16 is a block diagram of an example processing platform including programmable circuitry structured to execute, instantiate, and / or perform the example machine-readable instructions and / or perform the example operations of FIG. 14 to implement the AC control circuitry of FIG. 3.
[0020] FIG. 17 is a block diagram of an example implementation of the programmable circuitry of FIG. 15 and / or the programmable circuitry of FIG. 16.
[0021] FIG. 18 is a block diagram of another example implementation of the programmable circuitry of FIG. 15 and / or the programmable circuitry of FIG. 16.
[0022] FIG. 19 is a block diagram of an example software / firmware / instructions distribution platform (e.g., one or more servers) to distribute software, instructions, and / or firmware (e.g., corresponding to the example machine-readable instructions of FIGS. 12, 13, and / or 14) to client devices associated with end users and / or consumers (e.g., for license, sale, and / or use) , retailers (e.g., for sale, re-sale, license, and / or sub-license) , and / or original equipment manufacturers (OEMs) (e.g., for inclusion in products to be distributed to, for example, retailers and / or to other end users such as direct buy customers) .
[0023] In general, the same reference numbers will be used throughout the drawing (s) and accompanying written description to refer to the same or like parts. The figures are not necessarily to scale.DETAILED DESCRIPTION
[0024] Image-based 3D reconstruction can be used to create a 3D model of an object from a set of diverse vantage points. For example, a set of images of an object can be captured from different poses and / or exposures to synthesize 3D features of the object from viewpoint variations while mitigating inherent occlusions in the set of images. An iterative process can be used to capture a set of images of an object (which may include surrounding objects) using one or more cameras having prototypical poses (e.g., predefined and / or fixed poses) . The computational cost of generating a 3D reconstruction of an object may be based on the number of iterations utilized to capture a set of images. For example, the less iterations, the less cost and / or time for 3D reconstruction of a given object.
[0025] In some examples, images of an object may be captured using a swarm of drones. Additionally or alternatively, a large set of random pictures may be utilized to model an object. For example, a 3D reconstruction of a building can be generated from a large set of photos including the building (e.g., photos taken by travelers visiting the building) . However, such techniques utilize a large amount of redundant input images and / or fail to capture relevant viewpoints of an object. For example, if a human operator is controlling a camera, the human operator may not be able to capture an image from a viewpoint if that viewpoint is in a hazardous zone. Additionally, human-assisted maneuvering (e.g., of drones) may be ineffective and / or inaccurate for gathering high quality images (e.g., images that do not include occlusions) for 3D reconstruction.
[0026] For example, occlusions may be produced from misalignments and noise (e.g., due to human-assisted maneuvering) that are not inherent from the 3D structure of an object in a scene. Furthermore, images taken from different cameras and / or positions usually include varying illumination conditions, which lead to exposure and chromatic inconsistencies between images. Such inconsistencies complicate feature correlation that is used for 3D reconstruction. Additionally, passive 3D reconstruction is complicated by the lack of texture on surfaces of an object. For example, due to lack of texture on surfaces, some 3D reconstruction techniques cannot distinguish features on the surfaces that are used to estimate 3D position by using two or more views. Without prior images over scene structure (e.g., coplanarity of gestalt principles) , lack of texture on surfaces results in 3D models that are sparse and unsuitable for navigation or other tasks in the physical domain.
[0027] Examples disclosed herein provide an efficient and iterative approach for generating a 3D model of an environment and / or an object in the environment. For example, disclosed methods, apparatus, and articles of manufacture detect missing or less accurate portions of a reconstructed 3D space and provide feedback of camera positions and / or parameters (e.g., intrinsic and / or extrinsic parameters) to facilitate subsequent iterations of image capture. Accordingly, examples disclosed herein reduce the number of iterations and captures to generate a 3D reconstruction. For example, disclosed methods, apparatus, and articles of manufacture capture the “best” viewpoints (e.g., a viewpoint that increases the density of 3D data in a voxel of interest of a 3D model) to be used by cameras in the next iteration of captures.
[0028] Additionally, examples disclosed herein automate 3D reconstruction and do not utilize a random swamp of images to generate a 3D reconstruction. Examples disclosed herein plan a 3D reconstruction and execute the plan via coordinated ACs (e.g., drones, robots, etc. including mounted cameras) . For example, an edge server collects image captures from multiple ACs, builds a 3D data structure based on the collected image captures, and issues one or more commands (including camera settings such as positions, angles, light sensitivity, aperture size, and / or shutter speed) to one or more of the ACs (e.g., autonomous drones) to make a subsequent iteration of image capture. Additionally, an example edge server utilizes an occupancy-based next view planning algorithm to determine one or more action sequences to be executed by one or more ACs to collect an image.
[0029] FIG. 1 is a block diagram of an example environment 100 including an example edge compute device 102 and example autonomous cameras (ACs) 104 to model an example object 106. For example, the environment 100 includes an example first AC 104A, an example second AC 104B, and an example third AC 104C. In the example of FIG. 1, the object 106 is a building. In the example of FIG. 1, each of the ACs 104 includes example autonomous camera (AC) control circuitry 108. For example, the first AC 104A includes example first AC control circuitry 108A, the second AC 104B includes example second AC control circuitry 108B, and the third AC 104C includes example third AC control circuitry 108C.
[0030] In the illustrated example of FIG. 1, the edge compute device 102 is in communication with the ACs 104. In the illustrated example of FIG. 1, the edge compute device 102 is implemented by one or more computer servers. In the example of FIG. 1, the edge compute device 102 interacts with the ACs 104 to coordinate actions of the ACs 104. For example, the edge compute device 102 provides coarse navigation instructions to one or more of the ACs 104. Additionally or alternatively, the edge compute device 102 provides fine six dimensional (6D) pose instructions for one or more cameras of one or more of the ACs 104.
[0031] In the illustrated example of FIG. 1, the edge compute device 102 gathers images and / or partial 3D reconstructions (e.g., 3D reconstructions of the local environments of one or more of the ACs 104) of the object 106 from one or more of the ACs 104. Based on the images gathered from the ACs 104, the edge compute device 102 generates partial 3D reconstructions of the object 106. Additionally, the edge compute device 102 evaluates the images and / or the partial 3D reconstructions from the ACs 104 and constructs a composite 3D model based on the image data (e.g., images and / or partial 3D reconstructions) .
[0032] In the illustrated example of FIG. 1, the dual capability to operate based on images and / or partial 3D reconstructions allows the edge compute device 102 to utilize images collected from the ACs 104 (e.g., acting as mobile cameras) and / or, when there are sufficient computational resources on one or more of the ACs 104, partial 3D point clouds or dense disparity maps. For example, the ACs 104 send dense disparity maps with associated camera parameters and / or baseline parameters. Accordingly, the dual capability provides scalability of the modeling process while also allowing for proactive refinement of local 3D partial reconstructions (e.g., at the ACs 104) .
[0033] As described above, the edge compute device 102 evaluates the image and / or the partial 3D reconstructions from the ACs 104 and constructs a composite 3D model. For example, the edge compute device 102 stitches the partial 3D reconstructions together into a composite 3D reconstruction of the object 106 and analyzes the composite 3D reconstruction of the object 106 to determine one or more voxels of the composite 3D reconstruction have less than a threshold density of 3D data. Based on the one or more voxels, the edge compute device 102 plans a next view for one or more of the ACs 104.
[0034] In the illustrated example of FIG. 1, the edge compute device 102 implements a modeling time threshold and / or a computational burden threshold to make modeling of the object 106 tractable. For example, the modeling time threshold and / or the computational burden threshold are set by a user of the edge compute device 102. By implementing the modeling time threshold and / or the computational burden threshold, the edge compute device 102 allows for a user to implement a tradeoff between (1) modeling time and / or computational burden and (2) quality of the 3D composite model. As such, the modeling time threshold and / or the computational burden threshold serve as proxies for mobility of the ACs 104 and / or energy consumption of the ACs 104 (e.g., percentage of battery power) .
[0035] In some examples, the edge compute device 102 coordinates with the ACs 104 to perform an iterative 3D reconstruction process that converges when high-definition 3D details are captured and / or when the modeling time threshold and / or the computational burden threshold have been satisfied. For example, when the possible set of 6D poses attainable by the ACs 104 cannot provide substantial increases in the composite 3D model structure and / or appearance, the iterative 3D reconstruction process performed by the edge compute device 102 converges. To determine whether the possible set of 6D poses attainable by the ACs 104 can provide substantial increases in the composite 3D model structure or appearance, the edge compute device 102 compares the density of 3D data in each voxel of the composite 3D model to a threshold density.
[0036] In the illustrated example of FIG. 1, based on the spatial analysis of the composite 3D model (e.g., via octree analysis as described below) , the edge compute device 102 can detect missing areas of the object 106 in the composite 3D model that can be reached by one or more of the ACs 104 (e.g., the one or more areas are reachable) . Additionally, based on the spatial analysis of the composite 3D model (e.g., via octree analysis as described below) , the edge compute device 102 can detect one or more areas of the object 106 for which the composite 3D model includes uncertainty in the 3D data. As such, the edge compute device 102 can identify one or more areas of the object 106 for which additional scans are to be scheduled to provide spatial consensus for the composite 3D model. Thus, the edge compute device 102 can direct one or more of the ACs 104 to advantageous 6D poses to trigger on-demand scans of the object 106.
[0037] In the illustrated example of FIG. 1, one or more of the ACs 104 is implemented by a camera mounted on a movable platform. For example, the first AC 104A is a drone including a camera mounted on the drone. Additionally, for example, the second AC 104B is a wheeled robot including a camera mounted on the wheeled robot. In some examples, one or more of the ACs 104 is fixed on an object without a movable platform. For example, the third AC 104C is a camera fixed to a post that is movable with respect to the post.
[0038] In the illustrated example of FIG. 1, actuators and / or imaging devices of each of the ACs 104 have different capabilities (e.g., dynamic focus length, exposure, roll-pitch-yaw granularity, repeatability, etc. ) . Each of the ACs 104 can be described by one or more AC models. For example, an AC can be described by a platform motion model, a camera on-board motion model, and / or a camera dynamic photometric model. A platform motion model describes how an AC can move with respect to an environment. For example, a platform motion model describes AC platform motion as a collection of discrete strides of the platform (e.g., base) of the AC such as translations and / or rotations of the platform with coarse granularity (e.g., 5-10 centimeters (cm) , 5-10 degrees, etc. ) .
[0039] In the illustrated example of FIG. 1, a camera on-board motion model describes a collection of possible 6D poses for a camera of an AC with respect to the platform on the AC. For example, a camera on-board motion model describes AC camera motion as translations and / or rotations with a fine granularity (e.g., 5-10 millimeters (mm) , 0.5-1 degrees, etc. ) . In the example of FIG. 1, a camera dynamic photometric model describes the photometric parameters of an imaging device of an AC. For example, a camera dynamic photometric model describes exposure time of the camera (e.g., in microseconds (μs) ) , a radiometric transfer function of the camera, a composed focal length range of the camera (e.g., in mm) , among others.
[0040] In the illustrated example of FIG. 1, the edge compute device 102 can utilize tunable parameters (e.g., actuators and / or imaging device capabilities) of the ACs 104 to orchestrate the ACs 104 to capture a next view of the object 106. For example, the edge compute device 102 plans the next view to minimize the number of scans and / or motions of the ACs 104 in the environment 100 as described above. In the example of FIG. 1, a user of the edge compute device 102 can set the granularity of strides of the platform motion models, the camera on-board motion models, and / or the camera dynamic photometric models of the ACs 104 to make the search space for the next view computationally tractable.
[0041] In some examples, the granularity of strides of the platform motion models, the camera on-board motion models, and / or the camera dynamic photometric models of the ACs 104 may be restricted to the mechanical capabilities of the ACs 104. As such, the granularity of strides of the platform motion model, the camera on-board motion model, and / or the camera dynamic photometric model may be different depending on the AC. For example, a robot AC may have different granularities than a drone AC. Furthermore, a user of the edge compute device 102 can set the platform motion models, the camera on-board motion models, and / or the camera dynamic photometric models of the ACs 104 depending on the environment and / or object to be modeled.
[0042] In the example operation, the edge compute device 102 initializes a composite 3D model of an environment or object. For example, the edge compute device 102 defines a target resolution for the composite 3D model, a modeling time threshold for the composite 3D model, and / or a computational burden threshold for the composite 3D model. Additionally, the edge compute device 102 initializes one or more 3D sub-models corresponding to the ACs 104 deployed in the environment 100. In the example of FIG. 1, the 3D sub-models (e.g., partial 3D models) include egocentric coordinates corresponding to respective ACs. For example, a 3D sub-model initialized for the first AC 104A includes a coordinate system that utilizes the first AC 104A as the origin of the coordinate system (e.g., egocentric coordinates) .
[0043] In the illustrated example of FIG. 1, the edge compute device 102 accesses one or more AC models (e.g., at least one autonomous camera model) from each of the ACs 104. For example, the edge compute device 102 accesses a platform motion model, a camera on-board motion model, and / or a camera dynamic photometric model from the first AC 104A. Additionally or alternatively, the edge compute device 102 accesses a platform motion model, a camera on-board motion model, and / or a camera dynamic photometric model from the second AC 104B. The edge compute device 102 also accesses a platform motion model, a camera on-board motion model, and / or a camera dynamic photometric model from the third AC 104C.
[0044] In the illustrated example of FIG. 1, the edge compute device 102 accesses one or more intrinsic parameters from each of the ACs 104. For example, the edge compute device 102 accesses one or more intrinsic parameters from the first AC 104A. Additionally or alternatively, the edge compute device 102 accesses one or more intrinsic parameters from the second AC 104B. The edge compute device 102 also accesses one or more intrinsic parameters from the third AC 104C. Example intrinsic parameters of an AC include a focal distance of an imaging device of the AC, axis skew of pixels of the imaging device, and / or principal point of the imaging device. A principal point refers to a point on an image plane of an imaging device onto which the perspective center of the imaging device is projected.
[0045] In the illustrated example of FIG. 1, the edge compute device 102 schedules one or more captures of the environment 100 and / or the object 106 for one or more of the ACs 104. For example, the edge compute device 102 schedules the one or more captures based on the respective AC models of the ACs 104 and the current status of the composite 3D model. In the example of FIG. 1, the edge compute device 102 preemptively plans motions of the ACs 104 to ensure that the ACs 104 do not collide with one another (e.g., collision preemptive scanning) while also coordinating to capture new areas of and / or refine the composite 3D model of the environment 100 and / or the object 106.
[0046] In the illustrated example of FIG. 1, the edge compute device 102 instructs the ACs 104 to perform the one or more planned scans. As such, each of the ACs 104 travels to a local area of the environment 100 to capture an image. As described above, the scans are planned to avoid collision. Thus, by performing the scans, the ACs 104 achieve collision preventative scanning. Additionally, as described above, the scans are planned such that the ACs 104 coordinate to capture new areas of and / or refine the composite 3D model of the environment 100 and / or the object 106. For example, the edge device 102 implements sequential greed planning and prioritization based on energy and / or dynamic AC model cardinality to schedule scans for the ACs 104 to avoid path collision and redundant scans (e.g., social scanning) .
[0047] In some examples, the edge compute device 102 instructs one or more of the ACs 104 to perform one or more scans not in coordination with other ones of the ACs 104. As such, the edge compute device 102 can instruct one or more of the ACs 104 to explore the environment 100 to scan disconnected areas of the environment 100 that may have been missed in earlier scans. In the example of FIG. 1, based on the scheduled captures, one or more of the ACs 104 capture an image of the environment 100 and / or the object 106.
[0048] In some examples, one or more of the ACs 104 generate a partial 3D scan of the environment 100 and / or the object 106 based on the one or more captured images. In the example of FIG. 1, an AC may generate a partial 3D scan of the environment 100 and / or the object 106 based on the computational resources (e.g., processing resources, power resources, memory resources, etc. ) available at the AC and the computational cost of transmitting data to the edge compute device 102. For example, transmitting data over a wireless fidelity network is generally less computationally expensive than transmitting data over a cellular network. As such, generating a partial 3D scan at an AC and transmitting the scan from the AC to the edge compute device 102 may be more efficient than transmitting raw images to the edge compute device 102 when cellular transmission is available and transmission is unavailable.
[0049] In the illustrated example of FIG. 1, after capturing one or more images and / or generating one or more partial 3D scans, the ACs 104 transmit the one or more images and / or the one or more partial 3D scans to the edge compute device 102. The edge compute device 102 collects the image data (e.g., the one or more images and / or the one or more partial 3D scans) from the ACs 104. For images collected from an AC, the edge compute device 102 generates a partial 3D scan. Additionally, the edge compute device 102 aggregates partial 3D scans depending on AC localization status. For example, a localization status of an AC indicates the position of an AC in the environment 100.
[0050] In the illustrated example of FIG. 1, the edge compute device 102 analyzes features of the images and / or the partial 3D scans to link the 6D poses to the composite 3D model. For example, if at least three features (e.g., corner of a space, edge of object, etc. ) overlap between two 6D poses, the edge compute device 102 can correlate two images and / or two partial 3D scans. Accordingly, the edge compute device 102 can make a consistent rigid body transformation between the two 6D poses. Thus, the composite 3D model can be updated based on the captures and / or partial 3D scans.
[0051] In the illustrated example of FIG. 1, the edge compute device 102 checks the modeling of the environment 100 and / or the object 106 against the modeling time threshold and / or the computational burden threshold. If the modeling time threshold and / or the computational burden threshold are satisfied, the edge compute device 102 can halt the modeling of the environment 100 and / or the object 106 and output the composite 3D model (e.g., to a user) . If the modeling time threshold and / or the computational burden threshold are satisfied are not satisfied, the edge compute device 102 determines if the composite 3D model includes one or more voxels that have less than a threshold density of 3D data. If the composite 3D model includes one or more voxels that have less than threshold density of 3D data, the edge compute device 102 schedules a subsequent scan. As such, the edge compute device 102 evaluates the octree representation of the environment 100 and / or the object 106 with respect to scanned, unknown, and currently unobservable regions of the environment and / or the object 106.
[0052] FIG. 2 is a block diagram of an example implementation of the edge compute device 102 of FIG. 1. In the example of FIG. 2, the edge compute device 102 includes example three-dimensional (3D) modeling circuitry 202, example interface circuitry 204, example three-dimensional (3D) model management circuitry 206, example path planning circuitry 208, example path evaluation circuitry 210, and an example datastore 212. In the example of FIG. 2, the 3D modeling circuitry 202, the interface circuitry 204, the 3D model management circuitry 206, the path planning circuitry 208, the path evaluation circuitry 210, and the datastore 212 are coupled via an example bus 214. In the example of FIG. 2, the bus 214 may be implemented using any suitable wired and / or wireless communication. In additional or alternative examples, the bus 214 includes software, machine-readable instructions, and / or communication protocols by which information is communicated among the 3D modeling circuitry 202, the interface circuitry 204, the 3D model management circuitry 206, the path planning circuitry 208, the path evaluation circuitry 210, and the datastore 212.
[0053] In the illustrated example of FIG. 2, the edge compute device 102 may be instantiated (e.g., creating an instance of, bring into being for any length of time, materialize, implement, etc. ) by programmable circuitry such as a Central Processor Unit (CPU) executing first instructions. Additionally or alternatively, the edge compute device 102 of FIG. 2 may be instantiated (e.g., creating an instance of, bring into being for any length of time, materialize, implement, etc. ) by (i) an Application Specific Integrated Circuit (ASIC) and / or (ii) a Field Programmable Gate Array (FPGA) structured and / or configured in response to execution of second instructions to perform operations corresponding to the first instructions. It should be understood that some or all of the circuitry of FIG. 2 may, thus, be instantiated at the same or different times. Some or all of the circuitry of FIG. 2 may be instantiated, for example, in one or more threads executing concurrently on hardware and / or in series on hardware. Moreover, in some examples, some or all of the circuitry of FIG. 2 may be implemented by microprocessor circuitry executing instructions and / or FPGA circuitry performing operations to implement one or more virtual machines and / or containers.
[0054] As described above, an environment and / or an object can be modeled by one or more ACs. For example, in the example of FIG. 1, the edge compute device 102 is to construct a 3D model of the object 106. As such, in the example of FIG. 1, several ACs (e.g., the ACs 104) are distributed around the object 106. In the example of FIG. 2, the 3D modeling circuitry 202 initializes a composite 3D model of an environment. For example, the 3D modeling circuitry 202 creates an octree T (Pi) =∪T0 (p) in the datastore 212 for the environment. Additionally, the 3D modeling circuitry 202 initializes one or more 3D sub-models corresponding to respective ACs deployed in the environment.
[0055] In the illustrated example of FIG. 2, the edge compute device 102 controls the routines and / or actions of the one or more ACs deployed in the environment. Based on images and / or partial scans retrieved from the one or more ACs, the 3D modeling circuitry 202 updates the composite 3D model and / or the one or more 3D sub-models. For example, for images retrieved from the one or more ACs, the 3D modeling circuitry 202 generates a partial 3D scan of the environment based on the images. Additionally, the 3D modeling circuitry 202 generates a partial 3D scan based on location data of a corresponding AC and pose data of the AC.After generating a partial 3D scan, the 3D modeling circuitry 202 updates a corresponding 3D sub-model for an AC based on the partial 3D scan.
[0056] In examples disclosed herein, a partial 3D scan (e.g., a point cloud) can be represented as a 3D point set that can be contained within a set of discrete volumetric units of resolution ∈ for the objective or scanning planning. The set of discrete volumetric units is illustrated below in Equation 1.
[0057] In the illustrated example of Equation 1, and denote the unitary basis vector spawning (e.g., the Cartesian coordinate system) . In the example of Equation 1, the floor operator converts the ∈-modulated dimensions into 3-integer indices in Z3 tractable by efficient computational resources. As described above, the 3D modeling circuitry 202 represents the discrete set of volumetric units (e.g., cube-shaped regions) as a 3D representation by storing the discrete set of volumetric units as an octree T. Equation 2 illustrates the octree T below.
[0058] In the example of Equation 2, the last node in an octree path (e.g., a leaf node) may be denoted as In examples disclosed herein, an octree is a sparse data structure that defines an associative map between continuous points in 3D space and nodes in the octree graph structure. Advantageously, processing 3D data in an octree representation is more computationally efficient than processing 3D data in other representations. For example, by representing 3D data via an octree it is computationally feasible for the edge compute device 102 to compute or query an octree path (α0, .. αL) from the root node in an octree to the container voxel N. Additionally, by representing 3D data via an octree it is computationally feasible for the edge compute device 102 to obtain the empty set in case a point is outside of the subspace captured by the octree.
[0059] In examples disclosed herein, an octree is a three-dimensional representation of data. For example, an octree refers to a data structure including eight voxels. Each voxel represents an index that defines a spatial representation in view of (e.g., relative to) a center point of the octree. For example, a first voxel represents spatial information located in an x-axis subspace, y-axis subspace and z-axis subspace having values greater than the center point of the octree. In another example, a second voxel represents spatial information located in a y-axis and z-axis positive subspace, and an x-axis negative subspace (e.g., x-axis spatial value lower than that of the center point of the octree) .
[0060] Each voxel (sometimes referred to as a “node” ) describes a spatial partition subspace that may include a leaf node (e.g., a lowest level of detail / resolution) and one or more intermediary resolution nodes (e.g., internal nodes) . As such, each voxel stores content of a bounded cube in space within a delimited space interval where each voxel exposes one or more properties to determine if the voxel is a leaf node, an internal node with content, an internal node without content, or the root (e.g., the center point of an octree) . As such, an example octree data structure facilitates a non-uniform resolution to improve scalability and flexibility.
[0061] Additionally, because an octree data structure is a data structure representation of index values that maps real-world spatial areas, such representations of the spatial areas do not consume platform physical memory and / or storage for empty space within such spatial areas of interest. In this manner, an amount of memory and / or computational power used to manage spatial data can grow and adapt to different applications and nuances the spatial data may include. The content of the example voxels is flexible and can include spatial values and metadata. Additionally, extensible metadata may be combined with the example voxels to accommodate improved scalability and flexibility with coordinated ACs. In other words, example voxels may include metadata representations (e.g., pointers, uniform resource locators (URLs) , uniform resource identifiers (URIs) , etc. ) .
[0062] Returning to the illustrated example of FIG. 2, representing 3D data via an octree representation allows the 3D modeling circuitry 202 to apply image segmentation techniques and / or diffusion techniques such as region growing or morphological operator in 3D space rather than pixel space. For example, the 3D modeling circuitry 202 implements a feature extraction algorithm, a feature matching algorithm, and / or triangulation to perform a transformation of partial 3D scans and updates the composite 3D model based on the transformation. Additionally, for example, the 3D modeling circuitry 202 implements a feature extraction algorithm (e.g., the Harris corner algorithm, the scale-invariant feature transform (SIFT) algorithm, the speeded up robust features (SURF) algorithm, etc. ) to detect features (e.g., corner point descriptors) from images. In the example of FIG. 2, the 3D modeling circuitry 202 analyzes features of the images and / or the partial 3D scans to link the 6D poses to one another.
[0063] In the illustrated example of FIG. 2, the 3D modeling circuitry 202 implements a feature matching algorithm (e.g., the brute-force matcher algorithm, the fast library for approximate nearest neighbors (FLANN) matcher algorithm, etc. ) to convert from optical flow (e.g., images, partial 3D scans, image data generally, etc. ) into image pairs by matching correspondences between detected features (e.g., corner points) in images. Based on linking images and / or partial 3D scans, the 3D modeling circuitry 202 estimates a 3D structure of the scene from the pair. For example, by matching corresponding features, the 3D modeling circuitry 202 can triangulate points in 3D space based on the projection of the points onto two or more images.
[0064] In some examples, the 3D modeling circuitry 202 attempts to perform bundle adjustment on the composite 3D model. For example, a bundle refers to a geometric bundle of light rays originating from a 3D feature and converging on the optical center of one or more cameras. To perform bundle adjustment, the 3D modeling circuitry 202 adjusts the geometric bundles of light rays from two or more images according to a goal criterion involving the corresponding image projections of all points of the two or more images. As such, by performing bundle adjustment, the 3D modeling circuitry 202 attempts to refine the 3D coordinates describing scene geometry, parameters of relative motion between cameras, and optical characteristics of the cameras utilized to acquire a number of images depicting a number of 3D points from different viewpoints. In some examples, the 3D modeling circuitry 202 is instantiated by programmable circuitry executing 3D modeling instructions and / or configured to perform operations such as those represented by the flowchart of FIG. 12.
[0065] In some examples, the edge compute device 102 includes means for modeling an object. For example, the means for modeling may be implemented by the 3D modeling circuitry 202. In some examples, the 3D modeling circuitry 202 may be instantiated by programmable circuitry such as the example programmable circuitry 1512 of FIG. 15. For instance, the 3D modeling circuitry 202 may be instantiated by the example microprocessor 1700 of FIG. 17 executing machine-executable instructions such as those implemented by at least blocks 1202, 1204, 1216, 1218, 1220, 1222, and 1230 of FIG. 12. In some examples, the 3D modeling circuitry 202 may be instantiated by hardware logic circuitry, which may be implemented by an ASIC, XPU, or the FPGA circuitry 1800 of FIG. 18 configured and / or structured to perform operations corresponding to the machine-readable instructions. Additionally or alternatively, the 3D modeling circuitry 202 may be instantiated by any other combination of hardware, software, and / or firmware. For example, the 3D modeling circuitry 202 may be implemented by at least one or more hardware circuits (e.g., processor circuitry, discrete and / or integrated analog and / or digital circuitry, an FPGA, an ASIC, an XPU, a comparator, an operational-amplifier (op-amp) , a logic circuit, etc. ) configured and / or structured to execute some or all of the machine-readable instructions and / or to perform some or all of the operations corresponding to the machine-readable instructions without executing software or firmware, but other structures are likewise appropriate.
[0066] In the illustrated example of FIG. 2, the interface circuitry 204 is in communication with one or more ACs (e.g., the ACs 104) . In the example of FIG. 2, the interface circuitry 204 accesses one or more AC models from each of the ACs (e.g., the ACs 104) . For example, the interface circuitry 204 accesses a platform motion model, a camera on-board motion model, and / or a camera dynamic photometric model from each AC. Additionally, the interface circuitry 204 accesses one or more intrinsic parameters from each of the ACs (e.g., the ACs 104) .
[0067] For example, the interface circuitry 204 accesses an intrinsic parameter matrix from each AC. An example intrinsic parameter matrix k is illustrated below in Equation 3.
[0068] In the example of Equation 3, fx represents a focal distance of an imaging device of an AC in the x-direction with respect to the AC, s represents an axis skew of pixels of the imaging device, and cx represents an x-coordinate of the principal point of the imaging device with respect to the AC. Additionally, fy represents a focal distance of an imaging device of an AC in the y-direction with respect to the AC and cy represents a y-coordinate of the principal point of the imaging device with respect to the AC.
[0069] In the illustrated example of FIG. 2, the interface circuitry 204 accesses images and / or partial 3D scans from each of the ACs (e.g., the ACs 104) . Additionally, the interface circuitry 204 accesses respective location data and respective pose data from each of the ACs (e.g., the ACs 104) . For example, location data is represented as global positioning system (GPS) coordinates of an AC. In the example of FIG. 2, pose data is representative of pose information of a gyroscopic sensor of an AC.
[0070] For example, the interface circuitry 204 accesses a rotation matrix from each AC when the interface circuitry 204 accesses an image and / or a partial 3D scan from an AC. An example rotation matrix r is illustrated below in Equation 4. In the example of Equation 4, α represents a Euler angle for the orientation of an AC with respect to the x-coordinate of the coordinate system of the AC, β represents a Euler angle for the orientation of an AC with respect to the y-coordinate of the coordinate system of the AC, and γ represents a Euler angle for the orientation of an AC with respect to the z-coordinate of the coordinate system of the AC.In the example of Equation 4, the rotation matrix r is computed by taking the cross product of the three sub-matrices of the rotation matrix r.
[0071] In the illustrated example of FIG. 2, after a composite 3D model is generated, the interface circuitry 204 outputs the composite 3D model. For example, the interface circuitry 204 outputs the composite 3D model to a user of the edge compute device 102. In some examples, the interface circuitry 204 is instantiated by programmable circuitry executing interfacing instructions and / or configured to perform operations such as those represented by the flowcharts of FIGS. 12 and 13.
[0072] In some examples, the edge compute device 102 includes means for interfacing with a device. For example, the means for interfacing may be implemented by the interface circuitry 204. In some examples, the interface circuitry 204 may be instantiated by programmable circuitry such as the example programmable circuitry 1512 of FIG. 15. For instance, the interface circuitry 204 may be instantiated by the example microprocessor 1700 of FIG. 17 executing machine-executable instructions such as those implemented by at least blocks 1206, 1208, 1212, 1214, and 1232 of FIG. 12 and / or at least blocks 1316 and 1318 of FIG. 13. In some examples, the interface circuitry 204 may be instantiated by hardware logic circuitry, which may be implemented by an ASIC, XPU, or the FPGA circuitry 1800 of FIG. 18 configured and / or structured to perform operations corresponding to the machine-readable instructions. Additionally or alternatively, the interface circuitry 204 may be instantiated by any other combination of hardware, software, and / or firmware. For example, the interface circuitry 204 may be implemented by at least one or more hardware circuits (e.g., processor circuitry, discrete and / or integrated analog and / or digital circuitry, an FPGA, an ASIC, an XPU, a comparator, an operational-amplifier (op-amp) , a logic circuit, etc. ) configured and / or structured to execute some or all of the machine-readable instructions and / or to perform some or all of the operations corresponding to the machine-readable instructions without executing software or firmware, but other structures are likewise appropriate.
[0073] In the illustrated example of FIG. 2, the 3D model management circuitry 206 analyzes a composite 3D model and / or modeling effort of the edge compute device 102 and / or one or more ACs. For example, the 3D model management circuitry 206 analyzes a composite 3D model and / or the modeling effort to determine whether to continue modeling an object and / or an environment. In the example of FIG. 2, the 3D model management circuitry 206 determines whether at least one voxel of the composite 3D model has less than a threshold density of 3D data.
[0074] For example, by exploiting the 26-point connectivity of voxels (described further below in connection with FIG. 6) , the 3D model management circuitry 206 can determine the state of neighboring voxels as a propagation of occupancy. For example, if the center of voxel N is represented as then the 26-point connectivity zone for voxel N can be represented as illustrated in Equation 5 below.
[0075] In the illustrated example of FIG. 2, each voxel stores a sampling density attribute that facilitates analysis of whether the voxel includes less than a threshold density of 3D data. For example, the sampling density attribute is defined as follows: Depending on the status of each neighboring voxel, the 3D model management circuitry 206 may identify the neighboring voxels as candidates for additional scans. Table 1 below illustrates example voxel statuses.
[0076] Table 1
[0077] For example, Table 1 illustrates states of spatial regions according to scanned action and the obtained state of the spatial regions with respect to occupancy (e.g., occupied versus free space) . Accordingly, Table 1 illustrates which spatial regions (e.g., with respect to voxels or bounding boxes) are reliably observed by one or more ACs and those spatial regions that may not be reachable in a reliable manner by the one or more ACs regardless of the combined capabilities of the one or more ACs. Furthermore, the sampling density attribute stored in each voxel is a user-defined value. As such, a user can define the 3D point density that allows the edge compute device 102 to qualify a voxel or region as high confidence occupied space or high confidence free space (e.g., to transition a voxel or region from cell 3 (c) to cell 1 (a) or cell 2 (a) in Table 1 above) . For example, the user-defined 3D point density can be set via a normalized slider or other user interface (UI) .
[0078] In the illustrated example of FIG. 2, the 3D model management circuitry 206 implements Equation 6 to determine the set of voxels q that are connected to an occupied voxel. φ (p, d0) : = {Ψ (p) | qz∈ δ (Ψ (p) ) , δ (qz) ≤ d0 ^ δ (T0 (p) ) > d0} Equation 6
[0079] In the illustrated example of FIG. 2, to determine at least one connected voxel of the composite 3D model that has not been sufficiently scanned (e.g., has less than a threshold density of 3D data) , the 3D model management circuitry 206 implements Equation 7 below. Γ (d0) : = {qz∈φ (p, d0) } Equation 7
[0080] In the illustrated example of FIG. 2, if the 3D model management circuitry 206 determines that at least one voxel of the composite 3D model does not have less than a threshold density of 3D data, then the 3D modeling circuitry 202 performs bundle adjustment on the composite 3D model before the composite 3D model is output (e.g., to a user) . If the 3D model management circuitry 206 determines that at least one voxel of the composite 3D model has less than a threshold density of 3D data, then the 3D model management circuitry 206 identifies (e.g., determines) at least one voxel of the composite 3D model that has less than the threshold density of 3D data. Additionally, if the 3D model management circuitry 206 determines that at least one voxel of the composite 3D model has less than a threshold density of 3D data, then the 3D model management circuitry 206 determines whether a threshold number of instructions have been transmitted to the one or more ACs. For example, the threshold number of instructions is a user-defined parameter that corresponds to the computational burden threshold described above.
[0081] In the illustrated example of FIG. 2, if the 3D model management circuitry 206 determines that the threshold number of instructions have been transmitted to the one or more ACs, then the 3D modeling circuitry 202 performs bundle adjustment on the composite 3D model before the composite 3D model is output (e.g., to a user) . If the 3D model management circuitry 206 determines that the threshold number of instructions have not been transmitted to the one or more ACs, then the 3D model management circuitry 206 determines whether a threshold amount of time has passed since modeling commenced. For example, the threshold amount of time is a user-defined parameter that corresponds to the modeling time threshold described above.
[0082] In the illustrated example of FIG. 2, if the 3D model management circuitry 206 determines that the threshold amount of time has passed, then the 3D modeling circuitry 202 performs bundle adjustment on the composite 3D model before the composite 3D model is output (e.g., to a user) . If the 3D model management circuitry 206 determines that the threshold amount of time has not passed, then modeling of an object and / or environment continues. For example, the edge compute device 102 schedules additional captures of an object and / or environment to refine the composite 3D model. In some examples, the 3D model management circuitry 206 is instantiated by programmable circuitry executing 3D model management instructions and / or configured to perform operations such as those represented by the flowcharts of FIGS. 12 and 13.
[0083] In some examples, the edge compute device 102 includes means for managing modeling. For example, the means for managing may be implemented by the 3D model management circuitry 206. In some examples, the 3D model management circuitry 206 may be instantiated by programmable circuitry such as the example programmable circuitry 1512 of FIG. 15. For instance, the 3D model management circuitry 206 may be instantiated by the example microprocessor 1700 of FIG. 17 executing machine-executable instructions such as those implemented by at least blocks 1224, 1226, and 1228 of FIG. 12 and / or at least block 1302 of FIG. 13. In some examples, the 3D model management circuitry 206 may be instantiated by hardware logic circuitry, which may be implemented by an ASIC, XPU, or the FPGA circuitry 1800 of FIG. 18 configured and / or structured to perform operations corresponding to the machine-readable instructions. Additionally or alternatively, the 3D model management circuitry 206 may be instantiated by any other combination of hardware, software, and / or firmware. For example, the 3D model management circuitry 206 may be implemented by at least one or more hardware circuits (e.g., processor circuitry, discrete and / or integrated analog and / or digital circuitry, an FPGA, an ASIC, an XPU, a comparator, an operational-amplifier (op-amp) , a logic circuit, etc. ) configured and / or structured to execute some or all of the machine-readable instructions and / or to perform some or all of the operations corresponding to the machine-readable instructions without executing software or firmware, but other structures are likewise appropriate.
[0084] In the illustrated example of FIG. 2, the path planning circuitry 208 plans respective groups of action sequences to place one or more areas of the environment corresponding to at least one voxel of the composite 3D model lacking a threshold density of 3D data into respective fields of view of one or more ACs. For example, for each element qs in Γ (d0) (see Equation 7) , the path planning circuitry 208 implements Equation 8 to compute a sequence of actions to place the element qs inside the field of view of an AC.
[0085] In the example of Equation 8, (Rb, Tb) represents a transformation of the base (e.g., platform) of an AC. Additionally, in the example of Equation 8, (Rc, Tc) represents a transformation of a camera of the AC. For example, the path planning circuitry 208 utilizes the platform motion model and the camera on-board motion model to determine the base transformation and the camera transformation. As described above, the platform motion model is a collection of discrete strides of the platform of an AC with respect to an environment. Additionally, as described above, the camera on-board motion model is a collection of discrete strides of the camera of an AC with respect to the platform of the AC.
[0086] As such, in the example of Equation 8, the base transformations and the camera transformations are determined from discrete sets of values. As such, the path planning circuitry 208 may not perform continuous computation to evaluate Equation 8 and can evaluate Equation 8 via combinatory tests in a tessellated space. Additionally, in Equation 8, F denotes a possible camera configuration with respect to exposure and / or other photometric parameters as described in camera dynamic photometric model. To bound Equation 8 (e.g., in terms of time duration of and / or energy consumption of computations) , the path planning circuitry 208 computes up to m actions per action sequence. In some examples, the path planning circuitry 208 is instantiated by programmable circuitry executing path planning instructions and / or configured to perform operations such as those represented by the flowchart of FIG. 13.
[0087] In some examples, the edge compute device 102 includes means for planning a path. For example, the means for planning may be implemented by the path planning circuitry 208. In some examples, the path planning circuitry 208 may be instantiated by programmable circuitry such as the example programmable circuitry 1512 of FIG. 15. For instance, the path planning circuitry 208 may be instantiated by the example microprocessor 1700 of FIG. 17 executing machine-executable instructions such as those implemented by at least blocks 1304 and 1306 of FIG. 13. In some examples, the path planning circuitry 208 may be instantiated by hardware logic circuitry, which may be implemented by an ASIC, XPU, or the FPGA circuitry 1800 of FIG. 18 configured and / or structured to perform operations corresponding to the machine-readable instructions. Additionally or alternatively, the path planning circuitry 208 may be instantiated by any other combination of hardware, software, and / or firmware. For example, the path planning circuitry 208 may be implemented by at least one or more hardware circuits (e.g., processor circuitry, discrete and / or integrated analog and / or digital circuitry, an FPGA, an ASIC, an XPU, a comparator, an operational-amplifier (op-amp) , a logic circuit, etc. ) configured and / or structured to execute some or all of the machine-readable instructions and / or to perform some or all of the operations corresponding to the machine- readable instructions without executing software or firmware, but other structures are likewise appropriate.
[0088] In the illustrated example of FIG. 2, the path evaluation circuitry 210 evaluates cost functions for respective groups of action sequences (e.g., H (qz) in Equation 8) determined by the path planning circuitry 208. For example, Equation 9 illustrates a cost function for an action sequence. In the example of Equation 9, the cost function incorporates the expected duration of an action sequence, the expected energy to be consumed to implement the action sequence, and an expected uncertainty involved with the cost function.
[0089] In the example of Equation 9, the expected energy to be consumed by an AC to move and / or orient the AC can be modeled offline (e.g., ahead-of-time before modeling commences) . As such, expected energy consumption can be accurately modeled for each possible implementation of an AC. Additionally, in the example of Equation 9, the expected uncertainty associated as a cost function refers reflect the reality that each motion and / or action in an action sequence may not be executed by an AC with 1: 1 accuracy. For example, because the platform motion model and the camera on-board motion model are approximations of the real-world motion of the platform and the camera of an AC, there is a degree of uncertainty between (1) the platform motion model and the camera on-board motion model and (2) the platform and the camera of the AC. For example, the wheels of an AC may drift while moving and even if the AC has visual odometry capabilities, there may be pose uncertainty.
[0090] In the illustrated example of FIG. 2, the path evaluation circuitry 210 selects an action sequence from a group of action sequences. For example, the path evaluation circuitry 210 selects an action sequence that corresponds to a lowest cost function evaluated by the path evaluation circuitry 210. To select an action sequence that corresponds to a lowest cost function, the path evaluation circuitry 210 implements Equation 10. Υ (qz) =argmin Ω (H (T (Pi) ) ) Equation 10
[0091] Accordingly, the selected action sequence to be executed by an AC is denoted as follows: Ω (Υ (N) ) . By evaluating Equation 10 for a single AC, the path evaluation circuitry 210 selects an action sequence to scan (e.g., optimally scan) an environment when the AC is not connected to a composite 3D model (e.g., not coordinated with other ACs) and there is no knowledge of other ACs in the scanning. Where the edge compute device 102 is coordinating more than one AC (e.g., social scanning) , the path planning circuitry 208 and the path evaluation circuitry 210 evaluate multiple groups of action sequences to facilitate collective optimized behavior. To evaluate multiple groups of action sequences and select action sequences for multiple ACs, the path evaluation circuitry 210 implements Equation 11. Υ (qz, Hs) =argmin Ω (Hs (T (Pi) ) ) Equation 11
[0092] In the illustrated example of FIG. 2, the 3D modeling circuitry 202 updates the 3D sub-models for respective ACs based on the images and / or partial 3D scans collected by the respective ACs based on the selected action sequences. By doing so, the 3D modeling circuitry 202 facilitates that the modeling is improved (e.g., optimized) and avoids redundant scans. In some examples, some examples, the path evaluation circuitry 210 is instantiated by programmable circuitry executing path evaluation instructions and / or configured to perform operations such as those represented by the flowchart of FIG. 13.
[0093] In some examples, the edge compute device 102 includes means for evaluating a path. For example, the means for evaluating may be implemented by the path evaluation circuitry 210. In some examples, the path evaluation circuitry 210 may be instantiated by programmable circuitry such as the example programmable circuitry 1512 of FIG. 15. For instance, the path evaluation circuitry 210 may be instantiated by the example microprocessor 1700 of FIG. 17 executing machine-executable instructions such as those implemented by at least blocks 1308, 1310, 1312, and 1314 of FIG. 13. In some examples, the path evaluation circuitry 210 may be instantiated by hardware logic circuitry, which may be implemented by an ASIC, XPU, or the FPGA circuitry 1800 of FIG. 18 configured and / or structured to perform operations corresponding to the machine-readable instructions. Additionally or alternatively, the path evaluation circuitry 210 may be instantiated by any other combination of hardware, software, and / or firmware. For example, the path evaluation circuitry 210 may be implemented by at least one or more hardware circuits (e.g., processor circuitry, discrete and / or integrated analog and / or digital circuitry, an FPGA, an ASIC, an XPU, a comparator, an operational-amplifier (op-amp) , a logic circuit, etc. ) configured and / or structured to execute some or all of the machine-readable instructions and / or to perform some or all of the operations corresponding to the machine-readable instructions without executing software or firmware, but other structures are likewise appropriate.
[0094] In the illustrated example of FIG. 2, the datastore 212 records data (e.g., a composite 3D model, one or more 3D sub-models, one or more AC models (e.g., a platform motion model, a camera on-board motion model, a camera dynamic photometric model, etc. ) , etc. ) . The datastore 212 may be implemented by a volatile memory (e.g., a Synchronous Dynamic Random Access Memory (SDRAM) , Dynamic Random Access Memory (DRAM) , RAMBUS Dynamic Random Access Memory (RDRAM) , etc. ) and / or a non-volatile memory (e.g., flash memory) . The datastore 212 may additionally or alternatively be implemented by one or more double data rate (DDR) memories, such as DDR, DDR2, DDR3, DDR4, DDR5, mobile DDR (mDDR) , DDR SDRAM, etc.
[0095] In the illustrated example of FIG. 2, the datastore 212 may additionally or alternatively be implemented by one or more mass storage devices such as hard disk drive (s) (HDD (s) ) , compact disk (CD) drive (s) , digital versatile disk (DVD) drive (s) , solid-state disk (SSD) drive (s) , Secure Digital (SD) card (s) , CompactFlash (CF) card (s) , etc. While in the illustrated example the datastore 212 is illustrated as a single datastore, the datastore 212 may be implemented by any number and / or type (s) of datastores. Furthermore, the data stored in the datastore 212 may be in any data format such as, for example, binary data, comma delimited data, tab delimited data, structured query language (SQL) structures, etc.
[0096] While an example manner of implementing the edge compute device 102 of FIG. 1 is illustrated in FIG. 2, one or more of the elements, processes, and / or devices illustrated in FIG. 2 may be combined, divided, re-arranged, omitted, eliminated, and / or implemented in any other way. Further, the example 3D modeling circuitry 202, the example interface circuitry 204, the example 3D model management circuitry 206, the example path planning circuitry 208, the example path evaluation circuitry 210, the datastore 212, and / or, more generally, the example edge compute device 102 of FIG. 2, may be implemented by hardware alone or by hardware in combination with software and / or firmware. Thus, for example, any of the example 3D modeling circuitry 202, the example interface circuitry 204, the example 3D model management circuitry 206, the example path planning circuitry 208, the example path evaluation circuitry 210, the datastore 212, and / or, more generally, the example edge compute device 102 of FIG. 2, could be implemented by programmable circuitry in combination with machine-readable instructions (e.g., firmware or software) , processor circuitry, analog circuit (s) , digital circuit (s) , logic circuit (s) , programmable processor (s) , programmable microcontroller (s) , graphics processing unit (s) (GPU (s) ) , digital signal processor (s) (DSP (s) ) , ASIC (s) , programmable logic device (s) (PLD (s) ) , and / or field programmable logic device (s) (FPLD (s) ) such as FPGAs. Further still, the example edge compute device 102 of FIG. 2 may include one or more elements, processes, and / or devices in addition to, or instead of, those illustrated in FIG. 2, and / or may include more than one of any or all of the illustrated elements, processes, and devices.
[0097] FIG. 3 is a block diagram of an example implementation of the AC control circuitry 108 of FIG. 1. In the example of FIG. 3, the AC control circuitry 108 includes example three-dimensional (3D) modeling control circuitry 302, example interface circuitry 304, example imaging control circuitry 306, and an example datastore 308. In some examples, the AC control circuitry 108 includes example three-dimensional (3D) modeling circuitry 310. In the example of FIG. 3, the 3D modeling control circuitry 302, the interface circuitry 304, the imaging control circuitry 306, the datastore 308, and / or the 3D modeling circuitry 310 are coupled via an example bus 312. In the example of FIG. 3, the bus 312 may be implemented using any suitable wired and / or wireless communication. In additional or alternative examples, the bus 312 includes software, machine-readable instructions, and / or communication protocols by which information is communicated among the 3D modeling control circuitry 302, the interface circuitry 304, the imaging control circuitry 306, the datastore 308, and / or the 3D modeling circuitry 310.
[0098] In the illustrated example of FIG. 3, the AC control circuitry 108 may be instantiated (e.g., creating an instance of, bring into being for any length of time, materialize, implement, etc. ) by programmable circuitry such as a Central Processor Unit (CPU) executing first instructions. Additionally or alternatively, the AC control circuitry 108 of FIG. 3 may be instantiated (e.g., creating an instance of, bring into being for any length of time, materialize, implement, etc. ) by (i) an Application Specific Integrated Circuit (ASIC) and / or (ii) a Field Programmable Gate Array (FPGA) structured and / or configured in response to execution of second instructions to perform operations corresponding to the first instructions. It should be understood that some or all of the circuitry of FIG. 3 may, thus, be instantiated at the same or different times. Some or all of the circuitry of FIG. 3 may be instantiated, for example, in one or more threads executing concurrently on hardware and / or in series on hardware. Moreover, in some examples, some or all of the circuitry of FIG. 3 may be implemented by microprocessor circuitry executing instructions and / or FPGA circuitry performing operations to implement one or more virtual machines and / or containers.
[0099] In the illustrated example of FIG. 3, the 3D modeling control circuitry 302 initializes a 3D sub-model corresponding to an AC deployed in an environment. For example, the 3D sub-model corresponds to a partial 3D model (e.g., three-dimensional model) of an environment that is to be captured by the AC on which the AC control circuitry 108 is operating. Additionally, the 3D modeling control circuitry 302 determines whether an instruction has been received from a control device (e.g., the edge compute device 102) . As such, when an instruction is received, the 3D modeling control circuitry 302 initiates a modeling procedure. In some examples, the 3D modeling control circuitry 302 is instantiated by programmable circuitry executing 3D modeling control instructions and / or configured to perform operations such as those represented by the flowchart of FIG. 14.
[0100] In some examples, the AC control circuitry 108 includes means for controlling 3D modeling. For example, the means for controlling may be implemented by the 3D modeling control circuitry 302. In some examples, the 3D modeling control circuitry 302 may be instantiated by programmable circuitry such as the example programmable circuitry 1612 of FIG. 16. For instance, the 3D modeling control circuitry 302 may be instantiated by the example microprocessor 1700 of FIG. 17 executing machine-executable instructions such as those implemented by at least blocks 1402 and 1416 of FIG. 14. In some examples, the 3D modeling control circuitry 302 may be instantiated by hardware logic circuitry, which may be implemented by an ASIC, XPU, or the FPGA circuitry 1800 of FIG. 18 configured and / or structured to perform operations corresponding to the machine-readable instructions. Additionally or alternatively, the 3D modeling control circuitry 302 may be instantiated by any other combination of hardware, software, and / or firmware. For example, the 3D modeling control circuitry 302 may be implemented by at least one or more hardware circuits (e.g., processor circuitry, discrete and / or integrated analog and / or digital circuitry, an FPGA, an ASIC, an XPU, a comparator, an operational-amplifier (op-amp) , a logic circuit, etc. ) configured and / or structured to execute some or all of the machine-readable instructions and / or to perform some or all of the operations corresponding to the machine-readable instructions without executing software or firmware, but other structures are likewise appropriate.
[0101] In the illustrated example of FIG. 3, the interface circuitry 304 is in communication with an edge device (e.g., the edge compute device 102) . In the example of FIG. 3, the interface circuitry 304 transmits at least one AC model of the AC to an edge device. For example, the interface circuitry 304 transmits at least one of a platform motion model, a camera on-board motion model, and / or a camera dynamic photometric model of the AC to the edge compute device 102. Additionally, the interface circuitry 304 transmits intrinsic parameters of an imaging device of the AC to the edge device. For example, the interface circuitry 304 transmits the intrinsic parameter matrix k (see Equation 3 above) for the AC to the edge compute device 102.
[0102] In the illustrated example of FIG. 3, after an image is captured by the AC and / or a partial 3D scan is generated by the AC, the interface circuitry 304 transmits the image and / or the partial 3D scan to the edge device. For example, the interface circuitry 304 transmits the image and / or the partial 3D scan to the edge compute device 102. Additionally, the interface circuitry 304 transmits location data and pose data of the AC to the edge device. For example, the interface circuitry 304 transmits GPS coordinates of the AC and the rotation matrix r (see Equation 4 above) for the AC to the edge compute device 102. In some examples, the interface circuitry 304 is instantiated by programmable circuitry executing interfacing instructions and / or configured to perform operations such as those represented by the flowchart of FIG. 14.
[0103] In some examples, the AC control circuitry 108 includes means for interfacing with a device. For example, the means for interfacing may be implemented by the interface circuitry 304. In some examples, the interface circuitry 304 may be instantiated by programmable circuitry such as the example programmable circuitry 1612 of FIG. 16. For instance, the interface circuitry 304 may be instantiated by the example microprocessor 1700 of FIG. 17 executing machine-executable instructions such as those implemented by at least blocks 1404, 1406, 1412, and 1414 of FIG. 14. In some examples, the interface circuitry 304 may be instantiated by hardware logic circuitry, which may be implemented by an ASIC, XPU, or the FPGA circuitry 1800 of FIG. 18 configured and / or structured to perform operations corresponding to the machine-readable instructions. Additionally or alternatively, the interface circuitry 304 may be instantiated by any other combination of hardware, software, and / or firmware. For example, the interface circuitry 304 may be implemented by at least one or more hardware circuits (e.g., processor circuitry, discrete and / or integrated analog and / or digital circuitry, an FPGA, an ASIC, an XPU, a comparator, an operational-amplifier (op-amp) , a logic circuit, etc. ) configured and / or structured to execute some or all of the machine-readable instructions and / or to perform some or all of the operations corresponding to the machine-readable instructions without executing software or firmware, but other structures are likewise appropriate.
[0104] In the illustrated example of FIG. 3, the imaging control circuitry 306 controls an imaging device (e.g., a camera) of the AC. For example, the imaging control circuitry 306 causes an imaging device to capture an image of an environment based on an instruction from the edge device (e.g., the edge compute device 102) . In some examples, the imaging control circuitry 306 is instantiated by programmable circuitry executing imagining control instructions and / or configured to perform operations such as those represented by the flowchart of FIG. 14.
[0105] In some examples, the AC control circuitry 108 includes means for controlling imaging. For example, the means for controlling may be implemented by the imaging control circuitry 306. In some examples, the imaging control circuitry 306 may be instantiated by programmable circuitry such as the example programmable circuitry 1612 of FIG. 16. For instance, the imaging control circuitry 306 may be instantiated by the example microprocessor 1700 of FIG. 17 executing machine-executable instructions such as those implemented by at least block 1408 of FIG. 14. In some examples, the imaging control circuitry 306 may be instantiated by hardware logic circuitry, which may be implemented by an ASIC, XPU, or the FPGA circuitry 1800 of FIG. 18 configured and / or structured to perform operations corresponding to the machine-readable instructions. Additionally or alternatively, the imaging control circuitry 306 may be instantiated by any other combination of hardware, software, and / or firmware. For example, the imaging control circuitry 306 may be implemented by at least one or more hardware circuits (e.g., processor circuitry, discrete and / or integrated analog and / or digital circuitry, an FPGA, an ASIC, an XPU, a comparator, an operational-amplifier (op-amp) , a logic circuit, etc. ) configured and / or structured to execute some or all of the machine-readable instructions and / or to perform some or all of the operations corresponding to the machine-readable instructions without executing software or firmware, but other structures are likewise appropriate.
[0106] In the illustrated example of FIG. 3, the datastore 308 records data (e.g., a 3D sub-model, one or more AC models (e.g., a platform motion model, a camera on-board motion model, a camera dynamic photometric model, intrinsic parameters of the AC, a rotation matrix of the AC, one or more images, one or more partial 3D scans, etc. ) , etc. ) . The datastore 308 may be implemented by a volatile memory (e.g., a SDRAM, DRAM, RDRAM, etc. ) and / or a non-volatile memory (e.g., flash memory) . The datastore 308 may additionally or alternatively be implemented by one or more DDR memories, such as DDR, DDR2, DDR3, DDR4, DDR5, mDDR, DDR SDRAM, etc.
[0107] In the illustrated example of FIG. 3, the datastore 308 may additionally or alternatively be implemented by one or more mass storage devices such as HDD (s) , CD drive (s) , DVD drive (s) , SSD drive (s) , SD card (s) , CF card (s) , etc. While in the illustrated example the datastore 308 is illustrated as a single datastore, the datastore 308 may be implemented by any number and / or type (s) of datastores. Furthermore, the data stored in the datastore 308 may be in any data format such as, for example, binary data, comma delimited data, tab delimited data, SQL structures, etc.
[0108] In the illustrated example of FIG. 3, the AC control circuitry 108 may include the 3D modeling circuitry 310. For example, depending on the computational capabilities of the AC control circuitry 108 (which is included in the AC) , the AC control circuitry 108 can generate a partial 3D scan of an environment based on an image captured by the AC, location data of the AC, and pose data of the AC. In such examples, the 3D modeling circuitry 310 generates a partial 3D scan of an environment based on an image captured by the AC, location data of the AC, and pose data of the AC. In some examples, the 3D modeling circuitry 310 is instantiated by programmable circuitry executing 3D modeling instructions and / or configured to perform operations such as those represented by the flowchart of FIG. 14.
[0109] In some examples, the AC control circuitry 108 includes means for modeling an object. For example, the means for modeling may be implemented by the 3D modeling circuitry 310. In some examples, the 3D modeling circuitry 310 may be instantiated by programmable circuitry such as the example programmable circuitry 1612 of FIG. 16. For instance, the 3D modeling circuitry 310 may be instantiated by the example microprocessor 1700 of FIG. 17 executing machine-executable instructions such as those implemented by at least block 1410 of FIG. 14. In some examples, the 3D modeling circuitry 310 may be instantiated by hardware logic circuitry, which may be implemented by an ASIC, XPU, or the FPGA circuitry 1800 of FIG. 18 configured and / or structured to perform operations corresponding to the machine-readable instructions. Additionally or alternatively, the 3D modeling circuitry 310 may be instantiated by any other combination of hardware, software, and / or firmware. For example, the 3D modeling circuitry 310 may be implemented by at least one or more hardware circuits (e.g., processor circuitry, discrete and / or integrated analog and / or digital circuitry, an FPGA, an ASIC, an XPU, a comparator, an operational-amplifier (op-amp) , a logic circuit, etc. ) configured and / or structured to execute some or all of the machine-readable instructions and / or to perform some or all of the operations corresponding to the machine-readable instructions without executing software or firmware, but other structures are likewise appropriate.
[0110] While an example manner of implementing the AC control circuitry 108 of FIG. 1 is illustrated in FIG. 3, one or more of the elements, processes, and / or devices illustrated in FIG. 3 may be combined, divided, re-arranged, omitted, eliminated, and / or implemented in any other way. Further, the example 3D modeling control circuitry 302, the example interface circuitry 304, the example imaging control circuitry 306, the example datastore 308, the example 3D modeling circuitry 310, and / or, more generally, the example AC control circuitry 108 of FIG. 3, may be implemented by hardware alone or by hardware in combination with software and / or firmware. Thus, for example, any of the example 3D modeling control circuitry 302, the example interface circuitry 304, the example imaging control circuitry 306, the example datastore 308, the example 3D modeling circuitry 310, and / or, more generally, the example AC control circuitry 108 of FIG. 3, could be implemented by programmable circuitry in combination with machine-readable instructions (e.g., firmware or software) , processor circuitry, analog circuit (s) , digital circuit (s) , logic circuit (s) , programmable processor (s) , programmable microcontroller (s) , graphics processing unit (s) (GPU (s) ) , digital signal processor (s) (DSP (s) ) , ASIC (s) , programmable logic device (s) (PLD (s) ) , and / or field programmable logic device (s) (FPLD (s) ) such as FPGAs. Further still, the example AC control circuitry 108 of FIG. 3 may include one or more elements, processes, and / or devices in addition to, or instead of, those illustrated in FIG. 3, and / or may include more than one of any or all of the illustrated elements, processes, and devices.
[0111] FIG. 4 is a graphical representation of a 3D model 400 of an environment generated by the edge compute device 102 and / or the AC control circuitry 108 of FIG. 1. In the example of FIG. 4, the 3D model 400 illustrates a partial 3D model (e.g., a 3D sub-model) of an indoor environment that is reconstructed by the edge compute device 102 and / or the AC control circuitry 108 of FIG. 1 as described in connection with FIGS. 1, 2, and 3. In the example of FIG. 4, the 3D model 400 includes point cloud data. For example, the point cloud data (e.g., a 3D point set ) can be contained within an octree such as that described above in connection with Equations 1 and 2. Such a representation is described below in connection with FIG. 7.
[0112] FIG. 5 is a graphical representation of an example octree representation 500 of data. In the example of FIG. 5, the octree representation 500 describes a graph structure allowing sparse connected discrete space management. For example, the octree representation 500 includes an example first voxel 502, an example second voxel 504, an example third voxel 506, an example fourth voxel 508, an example fifth voxel 510, an example sixth voxel 512, an example seventh voxel 514, and an example eighth voxel 516. Each voxel represents an index that defines a spatial representation in view of (e.g., relative to) a center point of the octree representation 500.
[0113] Each voxel describes a spatial partition subspace that may include a leaf node (e.g., a lowest level of detail / resolution) and one or more intermediary resolution nodes (e.g., internal nodes) . As such, each voxel stores content of a bounded cube in space within a delimited space interval where each voxel exposes one or more properties to determine if the voxel is a leaf node, an internal node with content, an internal node without content, or the root (e.g., the center point of an octree) . In the example of FIG. 5, an example leaf node 518 in the octree representation 500 may be denoted as and may be accessed by the edge compute device 102 via a query of an octree path (α0, .. αL) from the root node to the leaf node 518.
[0114] FIG. 6 is a graphical representation of example connectivity 600 of a voxel. For example, the connectivity 600 includes example face connectivity 602 of the voxel, example edge and face connectivity 604 of the voxel, and example vertex, edge, and face connectivity 606 of the voxel. In the example of FIG. 6, the face connectivity 602 illustrates 6-points of connectivity to the voxel. For example, the voxel represents a cube of space in an environment including six faces. As such, the face connectivity 602 illustrates the 6-points of connectivity of the six faces of the cube to six neighboring voxels.
[0115] In the illustrated example of FIG. 6, the edge and face connectivity 604 illustrates 18-points of connectivity to the voxel. For example, the voxel represents a cube of space in an environment that includes six faces and 12 edges. As such, the edge and face connectivity 604 illustrates the 18-points of connectivity of the six faces and 12 edges of the cube to 18 neighboring voxels. In the example of FIG. 6, the vertex, edge, and face connectivity 606 illustrates 26-points of connectivity to the voxel. For example, the voxel represents a cube of space in an environment that includes six faces, 12 edges, and eight vertices. As such, the vertex, edge, and face connectivity 606 illustrates the 26-points of connectivity of the six faces, 12 edges, and eight vertices of the cube to 26 neighboring voxels. As described above, by exploiting the 26-points of connectivity of a voxel, the 3D model management circuitry 206 can determine the state of neighboring voxels as a propagation of occupancy.
[0116] FIG. 7 is a graphical representation of an example octree representation 700 of the 3D model 400 of FIG. 4. In the example of FIG. 7, the octree representation 700 illustrates a voxelization of the 3D model 400 of FIG. 4. For example, the octree representation 700 illustrates the occupancy of the 3D model 400 (e.g., whether a voxel of the octree representation 700 is occupied space, free space, etc. ) . In the example of FIG. 7, black regions of the octree representation 700 represent regions of the 3D model 400 that are occupied space. Additionally, light gray regions of the octree representation 700 represent regions of the 3D model 400 that are free space and connected to occupied space. In the example of FIG. 7, transparent regions of the octree representation 700 represent regions of the 3D model 400 with an unknown state (e.g., candidates for additional scans) .
[0117] FIG. 8 is an illustration of example techniques to avoid blind spots when capturing images on an example object 802 from at least two viewpoints. In the example of FIG. 8, the object 802 is a building. In the example of FIG. 8, by ensuring that a field of view of an example first AC 804 overlaps with a field of view of an example second AC 806, the edge compute device 102 can capture images of the object 802 without blind spots. Additionally, for example, if the edge compute device 102 instructs an example third AC 808 to conduct a disconnected scan (e.g., an explorer scan) of the object 802, the edge compute device 102 can schedule subsequence scans of an intervening area of the object 802 to ensure that a resulting composite 3D model does not include blind spots.
[0118] There are many techniques to avoid blinds spots. For example, FIG. 9 is an illustration of example 3D representation 900 of an example object 902 via stereo matching of images captured from at least two viewpoints. The example of FIG. 9 illustrates an example first image 904 of the object 902 from an example first viewpoint 906 and an example second image 908 of the object 902 from an example second viewpoint 910.
[0119] In the illustrated example of FIG. 9, the edge compute device 102 queries location data and / or pose data associated with the first viewpoint 906 and the second viewpoint 910. Based on the location data and / or pose data, the edge compute device 102 performs stereo matching between the first image 904 and the second image 908. By performing stereo matching, the edge compute device 102 can determine an example depth 912 of the scene captured by the first image 904 and the second image 908. Assuming the depth 912 changes dynamically, the edge compute device 102 detects an example foreground 914 and an example background 916 of the scene captured by the first image 904 and the second image 908. As such, the edge compute device 102 determines obstacles existing in the example foreground 914 and example blind spots (e.g., unseen areas) of the background 916.
[0120] FIG. 10 is an illustration an example octree representation 1000 of objects captured from at least two viewpoints. For example, the octree representation 1000 of FIG. 10 illustrates a voxels of an example first object 1002 and an example second object 1004. In the example of FIG. 10, the first object 1002 and the second object 1004 occlude areas of one another. In the example of FIG. 10, the edge compute device 102 uses spatial Boolean operators on the octree representation 1000 to determine spatial differences between the first object 1002 and the second object 1004 from different viewpoints.
[0121] For example, the edge compute device 102 can determine an example intersection 1006 between the first object 1002 and the second object 1004. Additionally, the edge compute device 102 can determine an example union 1008 of the first object 1002 and the second object 1004. In some examples, the edge compute device 102 can determine an example difference 1010 between the first object 1002 and the second object 1004. By performing spatial Boolean operations on the octree representation 1000, the edge compute device 102 can determine where and what kind of deviations occurred between different viewpoints. As such, the edge compute device 102 can determine the next view for iterative capture and / or parameters for the next view.
[0122] FIG. 11 is an illustration of techniques to match two or more images captured from at least two viewpoints. For example, FIG. 11 illustrates an example first image 1102 captured from an example first viewpoint 1104, an example second image 1106 captured from an example second viewpoint 1108, an example third image 1110 captured from an example third viewpoint 1112, and an example fourth image 1114 captured from an example fourth viewpoint 1116. In the example of FIG. 11, the edge compute device 102 validates features detected in the first image 1102, the second image 1106, the third image 1110, and / or the fourth image 1114.
[0123] For example, the 3D modeling circuitry 202 implements a feature extraction algorithm such as the Harris corner algorithm, the SIFT algorithm, the SURF algorithm, etc. to detect features from the first image 1102, the second image 1106, the third image 1110, and / or the fourth image 1114. For example, the 3D modeling circuitry 202 detects an example first person 1118 and an example second person 1120. Additionally, the 3D modeling circuitry 202 implements a feature matching algorithm such as the brute-force matcher algorithm, the FLANN matcher algorithm, etc. to match the first person 1118 and / or the second person 1120 between the first image 1102, the second image 1106, the third image 1110, and / or the fourth image 1114.
[0124] As such, the edge compute device 102 can determine areas of the environment captured by the first image 1102, the second image 1106, the third image 1110, and / or the fourth image 1114 that are occluded. Thus, the edge compute device 102 can control ACs to capture images from different viewpoints to detect the occluded areas. For example, the instructions from the edge compute device 102 to the ACs include instructions to capture an additional image in a manner that does not capture an image from the same location by only rotating a camera with respect to a platform of an AC.
[0125] Flowchart (s) representative of example machine-readable instructions, which may be executed by programmable circuitry to (e.g., the instructions cause programmable circuitry to) implement and / or instantiate the edge compute device 102 of FIG. 2 and / or the AC control circuitry 108 of FIG. 3 and / or representative of example operations which may be performed by programmable circuitry to implement and / or instantiate the edge compute device 102 of FIG. 2 and / or the AC control circuitry 108 of FIG. 3, are shown in FIGS. 12, 13, and / or 14. The machine-readable instructions may be one or more executable programs or portion (s) of one or more executable programs for execution by programmable circuitry such as the programmable circuitry 1512 shown in the example programmable circuitry platform 1500 and / or the programmable circuitry 1612 shown in the example programmable circuitry platform 1600 discussed below in connection with FIGS. 15 and 16 and / or may be one or more function (s) or portion (s) of functions to be performed by the example programmable circuitry (e.g., an FPGA) discussed below in connection with FIGS. 17 and / or 18. In some examples, the machine-readable instructions cause an operation, a task, etc., to be carried out and / or performed in an automated manner in the real world. As used herein, “automated” means without human involvement.
[0126] The program may be embodied in instructions (e.g., software and / or firmware) stored on one or more non-transitory computer-readable and / or machine-readable storage medium such as cache memory, a magnetic-storage device or disk (e.g., a floppy disk, a Hard Disk Drive (HDD) , etc. ) , an optical-storage device or disk (e.g., a Blu-ray disk, a Compact Disk (CD) , a Digital Versatile Disk (DVD) , etc. ) , a Redundant Array of Independent Disks (RAID) , a register, ROM, a solid-state drive (SSD) , SSD memory, non-volatile memory (e.g., electrically erasable programmable read-only memory (EEPROM) , flash memory, etc. ) , volatile memory (e.g., Random Access Memory (RAM) of any type, etc. ) , and / or any other storage device or storage disk. The instructions of the non-transitory computer-readable and / or machine-readable medium may program and / or be executed by programmable circuitry located in one or more hardware devices, but the entire program and / or parts thereof could alternatively be executed and / or instantiated by one or more hardware devices other than the programmable circuitry and / or embodied in dedicated hardware. The machine-readable instructions may be distributed across multiple hardware devices and / or executed by two or more hardware devices (e.g., a server and a client hardware device) . For example, the client hardware device may be implemented by an endpoint client hardware device (e.g., a hardware device associated with a human and / or machine user) or an intermediate client hardware device gateway (e.g., a radio access network (RAN) ) that may facilitate communication between a server and an endpoint client hardware device. Similarly, the non-transitory computer-readable storage medium may include one or more mediums. Further, although the example program is described with reference to the flowchart (s) illustrated in FIGS. 12, 13, and / or 14, many other methods of implementing the edge compute device 102 and / or the AC control circuitry 108 may alternatively be used. For example, the order of execution of the blocks of the flowchart (s) may be changed, and / or some of the blocks described may be changed, eliminated, or combined. Additionally or alternatively, any or all of the blocks of the flow chart may be implemented by one or more hardware circuits (e.g., processor circuitry, discrete and / or integrated analog and / or digital circuitry, an FPGA, an ASIC, a comparator, an operational-amplifier (op-amp) , a logic circuit, etc. ) structured to perform the corresponding operation without executing software or firmware. The programmable circuitry may be distributed in different network locations and / or local to one or more hardware devices (e.g., a single-core processor (e.g., a single core CPU) , a multi-core processor (e.g., a multi-core CPU, an XPU, etc. ) ) . For example, the programmable circuitry may be a CPU and / or an FPGA located in the same package (e.g., the same integrated circuit (IC) package or in two or more separate housings) , one or more processors in a single machine, multiple processors distributed across multiple servers of a server rack, multiple processors distributed across one or more server racks, etc., and / or any combination (s) thereof.
[0127] The machine-readable instructions described herein may be stored in one or more of a compressed format, an encrypted format, a fragmented format, a compiled format, an executable format, a packaged format, etc. Machine-readable instructions as described herein may be stored as data (e.g., computer-readable data, machine-readable data, one or more bits (e.g., one or more computer-readable bits, one or more machine-readable bits, etc. ) , a bitstream (e.g., a computer-readable bitstream, a machine-readable bitstream, etc. ) , etc. ) or a data structure (e.g., as portion (s) of instructions, code, representations of code, etc. ) that may be utilized to create, manufacture, and / or produce machine-executable instructions. For example, the machine-readable instructions may be fragmented and stored on one or more storage devices, disks and / or computing devices (e.g., servers) located at the same or different locations of a network or collection of networks (e.g., in the cloud, in edge devices, etc. ) . The machine-readable instructions may require one or more of installation, modification, adaptation, updating, combining, supplementing, configuring, decryption, decompression, unpacking, distribution, reassignment, compilation, etc., in order to make them directly readable, interpretable, and / or executable by a computing device and / or other machine. For example, the machine-readable instructions may be stored in multiple parts, which are individually compressed, encrypted, and / or stored on separate computing devices, wherein the parts when decrypted, decompressed, and / or combined form a set of computer-executable and / or machine-executable instructions that implement one or more functions and / or operations that may together form a program such as that described herein.
[0128] In another example, the machine-readable instructions may be stored in a state in which they may be read by programmable circuitry, but require addition of a library (e.g., a dynamic link library (DLL) ) , a software development kit (SDK) , an application programming interface (API) , etc., in order to execute the machine-readable instructions on a particular computing device or other device. In another example, the machine-readable instructions may need to be configured (e.g., settings stored, data input, network addresses recorded, etc. ) before the machine-readable instructions and / or the corresponding program (s) can be executed in whole or in part. Thus, machine-readable, computer-readable and / or machine-readable media, as used herein, may include instructions and / or program (s) regardless of the particular format or state of the machine-readable instructions and / or program (s) .
[0129] The machine-readable instructions described herein can be represented by any past, present, or future instruction language, scripting language, programming language, etc. For example, the machine-readable instructions may be represented using any of the following languages: C, C++, Java, C#, Perl, Python, JavaScript, HyperText Markup Language (HTML) , Structured Query Language (SQL) , Swift, etc.
[0130] As mentioned above, the example operations of FIGS. 12, 13, and / or 14 may be implemented using executable instructions (e.g., computer-readable and / or machine-readable instructions) stored on one or more non-transitory computer-readable and / or machine-readable media. As used herein, the terms non-transitory computer-readable medium, non-transitory computer-readable storage medium, non-transitory machine-readable medium, and / or non-transitory machine-readable storage medium are expressly defined to include any type of computer-readable storage device and / or storage disk and to exclude propagating signals and to exclude transmission media. Examples of such non-transitory computer-readable medium, non-transitory computer-readable storage medium, non-transitory machine-readable medium, and / or non-transitory machine-readable storage medium include optical storage devices, magnetic storage devices, an HDD, a flash memory, a read-only memory (ROM) , a CD, a DVD, a cache, a RAM of any type, a register, and / or any other storage device or storage disk in which information is stored for any duration (e.g., for extended time periods, permanently, for brief instances, for temporarily buffering, and / or for caching of the information) . As used herein, the terms “non-transitory computer-readable storage device” and “non-transitory machine-readable storage device” are defined to include any physical (mechanical, magnetic and / or electrical) hardware to retain information for a time period, but to exclude propagating signals and to exclude transmission media. Examples of non-transitory computer-readable storage devices and / or non-transitory machine-readable storage devices include random access memory of any type, read only memory of any type, solid state memory, flash memory, optical discs, magnetic disks, disk drives, and / or redundant array of independent disks (RAID) systems. As used herein, the term “device” refers to physical structure such as mechanical and / or electrical equipment, hardware, and / or circuitry that may or may not be configured by computer-readable instructions, machine-readable instructions, etc., and / or manufactured to execute computer-readable instructions, machine-readable instructions, etc.
[0131] FIG. 12 is a flowchart representative of example machine-readable instructions and / or example operations 1200 that may be executed, instantiated, and / or performed by example programmable circuitry to implement the edge compute device 102 of FIG. 2. The example machine-readable instructions and / or the example operations 1200 of FIG. 12 begin at block 1202, at which the 3D modeling circuitry 202 initializes a composite 3D model of an environment. Additionally, at block 1204, the 3D modeling circuitry 202 initializes one or more 3D sub-models corresponding to one or more ACs deployed in the environment.
[0132] In the illustrated example of FIG. 12, at block 1206, the interface circuitry 204 accesses respective AC models of the one or more ACs. For example, for each AC deployed in the environment, the interface circuitry 204 accesses at least one of a camera on-board motion model, or a camera dynamic photometric model of the AC. At block 1208, the interface circuitry 204 accesses respective intrinsic parameters of the one or more ACs. For example, for each AC deployed in the environment, the interface circuitry 204 accesses an intrinsic parameter of the AC.
[0133] In the illustrated example of FIG. 12, at block 1210, the edge compute device 102 schedules captures of the environment for the one or more ACs based on the respective AC models and the composite 3D model. For example, FIG. 13 illustrates example machine-readable instructions and / or example operations to schedule captures of the environment for the one or more ACs. Subsequently, the one or more ACs capture images of the environment based on one or more instructions from the edge compute device 102.
[0134] In the illustrated example of FIG. 12, at block 1212, the interface circuitry 204 accesses two or more images and / or two or more partial 3D scans of the environment. For example, the two or more images and / or the two or more partial 3D scans are generated by the one or more ACs deployed in the environment. At block 1214, the interface circuitry 204 accesses respective location data and respective pose data of the one or more ACs. For example, the interface circuitry 204 accesses respective GPS coordinates from the one or more ACs. Additionally, for example, the interface circuitry 204 accesses respective rotation matrices from the one or more ACs.
[0135] In some examples, at block 1216, the 3D modeling circuitry 202 generates one or more partial 3D scans of the environment based on two or more images, respective location data, and respective pose data accesses from one or more ACs. For example, when the edge compute device 102 receives two or more images from one or more ACs deployed in the environment, the 3D modeling circuitry 202 generates one or more partial 3D scans of the environment based on the two or more images, respective location data of the one or more ACs, and respective pose data of the one or more ACs. At block 1218, the 3D modeling circuitry 202 updates the one or more 3D sub-models with the two or more partial scans (e.g., received from the ACs or generated by the 3D modeling circuitry 202) .
[0136] In the illustrated example of FIG. 12, at block 1220, the 3D modeling circuitry 202 performs a transformation of the partial 3D scans. For example, the 3D modeling circuitry 202 performs a consistent rigid body transformation between the two 6D poses. At block 1222, the 3D modeling circuitry 202 updates the composite 3D model based on the transformation. At block 1224, the 3D model management circuitry 206 determines whether at least one voxel of the composite 3D model has less than a threshold density of 3D data. For example, the 3D model management circuitry 206 implements Equation 7 described above.
[0137] In the illustrated example of FIG. 12, based on (e.g., in response to) the 3D model management circuitry 206 determining that at least one voxel of the composite 3D model does not have less than a threshold density of 3D data (block 1224: NO) , the machine-readable instructions and / or the operations 1200 proceed to block 1230. Based on (e.g., in response to) the 3D model management circuitry 206 determining that at least one voxel of the composite 3D model has less than a threshold density of 3D data (block 1224: YES) , the machine-readable instructions and / or the operations 1200 proceed to block 1226. At block 1226, the 3D model management circuitry 206 determines whether a threshold number of instructions have been transmitted to the one or more ACs.
[0138] In the illustrated example of FIG. 12, based on (e.g., in response to) the 3D model management circuitry 206 determining that a threshold number of instructions have been transmitted to the one or more ACs (block 1226: YES) , the machine-readable instructions and / or the operations 1200 proceed to block 1230. Based on (e.g., in response to) the 3D model management circuitry 206 determining that a threshold number of instructions have not been transmitted to the one or more ACs (block 1226: NO) , the machine-readable instructions and / or the operations 1200 proceed to block 1228. At block 1228, the 3D model management circuitry 206 determines whether a threshold amount of time has passed.
[0139] In the illustrated example of FIG. 12, based on (e.g., in response to) the 3D model management circuitry 206 determining that a threshold amount of time has not passed (block 1228: NO) , the machine-readable instructions and / or the operations 1200 return to block 1210. Based on (e.g., in response to) the 3D model management circuitry 206 determining that a threshold amount of time has passed (block 1228: YES) , the machine-readable instructions and / or the operations 1200 proceed to block 1230. At block 1230, the 3D modeling circuitry 202 performs bundle adjustment on the composite 3D model. At block 1232, the interface circuitry 204 outputs the composite 3D model (e.g., to a user of the edge compute device 102) .
[0140] FIG. 13 is a flowchart representative of example machine-readable instructions and / or example operations 1300 that may be executed, instantiated, and / or performed by example programmable circuitry to implement the edge compute device 102 of FIG. 2 to schedule captures of an environment for ACs based on respective AC models of the ACs and a composite 3D model of the environment. The example machine-readable instructions and / or the example operations 1300 of FIG. 13 begin at block 1302, at which the 3D model management circuitry 206 determines at least one voxel of the composite 3D model that has less than a threshold density of 3D data. For example, the 3D model management circuitry 206 identifies at least one voxel determined as a result of implementing Equation 7.
[0141] In the illustrated example of FIG. 13, at block 1304, the path planning circuitry 208 determines a first group of action sequences to place at least one area of the environment corresponding to the at least one voxel into a first field of view of a first AC based on first AC model of the first AC. For example, the path planning circuitry 208 implements Equation 8 for the first AC. As such, the path planning circuitry 208 can compute camera pose refinements and / or photometric parameter (e.g., exposure and / or auto-white balance parameter) changes for the first AC based on the current status of the current status of the 3D reconstruction.
[0142] In the illustrated example of FIG. 13, at block 1306, the path planning circuitry 208 determines a second group of action sequences to place the at least one area of the environment corresponding to the at least one voxel into a second field of view of a second AC based on second AC model of the second AC. For example, the path planning circuitry 208 implements Equation 8 for the second AC. As such, the path planning circuitry 208 can compute camera pose refinements and / or photometric parameter (e.g., exposure and / or auto-white balance parameter) changes for the second AC based on the current status of the current status of the 3D reconstruction.
[0143] In the illustrated example of FIG. 13, at block 1308, the path evaluation circuitry 210 evaluates first costs functions for the first group of action sequences. At block 1310, the path evaluation circuitry 210 evaluates second cost functions for the second group of action sequences. In the example of FIG. 13, at block 1312, the path evaluation circuitry 210 selects a first action sequence from the first group of action sequences. For example, the path evaluation circuitry 210 selects the action sequence that corresponds to a lowest one of the first cost functions. Additionally, at block 1314, the path evaluation circuitry 210 selects a second action sequence from the second group of action sequences. For example, the path evaluation circuitry 210 selects the action sequence that corresponds to a lowest one of the second cost functions. In some examples, the path evaluation circuitry 210 implements Equation 11 to implement blocks 1308, 1310, 1312, and 1314 of FIG. 13.
[0144] In the illustrated example of FIG. 13, at block 1316, the interface circuitry 204 transmits a first instruction to the first AC to cause the first AC to perform the first action sequence. For example, programmable circuitry (e.g., the 3D modeling control circuitry 302) is to cause interface circuitry (e.g., the interface circuitry 304) to transmit the first instruction to the first AC. At block 1318, the interface circuitry 204 transmits a second instruction to the second AC to cause the second AC to perform the second action sequence. As such, the edge compute device 102 notifies the first AC and the second AC of the respective camera pose refinements and / or respective photometric parameter (e.g., exposure and / or auto-white balance parameter) changes for the first AC and the second AC.
[0145] FIG. 14 is a flowchart representative of example machine-readable instructions and / or example operations 1400 that may be executed, instantiated, and / or performed by example programmable circuitry to implement the AC control circuitry 108 of FIG. 3. The example machine-readable instructions and / or the example operations 1400 of FIG. 14 begin at block 1402, at which the 3D modeling control circuitry 302 initializes a 3D sub-model corresponding to an AC deployed in an environment. At block 1404, the interface circuitry 304 transmits at least one AC model of the AC to an edge device. For example, at block 1404, the interface circuitry 304 transmits at least one of a platform motion model, a camera on-board motion model, and / or a camera dynamic photometric model of the AC to the edge compute device 102.
[0146] In the illustrated example of FIG. 14, at block 1406, the interface circuitry 304 transmits one or more intrinsic parameters of the AC to the edge device. For example, at block 1406, the interface circuitry 304 transmits an intrinsic parameter matrix for the AC to the edge compute device 102. In the example of FIG. 14, at block 1408, the imaging control circuitry 306 captures an image of the environment based on an instruction from the edge device. For example, based on an instruction including an action sequence, the imaging control circuitry 306 causes the AC to move to a position in the environment, orient an imaging device of the AC, set one or more photometric parameters of the AC, and capture an image of environment.
[0147] In some examples, at block 1410, the 3D modeling circuitry 310 generates a partial 3D scan of the environment based on the image, location data of the AC, and pose data of the AC. For example, depending on the computational capabilities of the AC control circuitry 108 (which is included in the AC) , the 3D modeling circuitry 310 generates a partial 3D scan of an environment based on the image, location data of the AC, and pose data of the AC.For example, the 3D modeling circuitry 310 can estimate a 3D structure captured by the image and / or perform bundle adjustment on the 3D structure.
[0148] In the illustrated example of FIG. 14, at block 1412, the interface circuitry 304 transmits the image and / or the partial 3D scan of the environment to the edge device. At block 1414, the interface circuitry 304 transmits the location data and the pose data to the edge device. For example, the location data corresponds to GPS coordinates of the AC. Additionally, for example, the pose data corresponds to a rotation matrix of the AC.
[0149] In the illustrated example of FIG. 14, at block 1416, the 3D modeling control circuitry 302 determines whether an additional instruction to scan the environment has been received. Based on (e.g., in response to) the 3D modeling control circuitry 302 determining that an additional instruction to scan the environment has been received (block 1416: YES) , the machine-readable instructions and / or the operations 1400 return to block 1408. Based on (e.g., in response to) the 3D modeling control circuitry 302 determining that an additional instruction to scan the environment has not been received (block 1416: NO) , the machine-readable instructions and / or the operations 1400 terminate.
[0150] FIG. 15 is a block diagram of an example programmable circuitry platform 1500 structured to execute and / or instantiate the example machine-readable instructions and / or the example operations of FIGS. 12 and / or 13 to implement the edge compute device 102 of FIG. 2. The programmable circuitry platform 1500 can be, for example, a server, a personal computer, a workstation, a self-learning machine (e.g., a neural network) , a mobile device (e.g., a cell phone, a smart phone, a tablet such as an iPadTM) , a personal digital assistant (PDA) , an Internet appliance, a DVD player, a CD player, a digital video recorder, a Blu-ray player, a gaming console, a personal video recorder, a set top box, a headset (e.g., an augmented reality (AR) headset, a virtual reality (VR) headset, etc. ) or other wearable device, or any other type of computing and / or electronic device.
[0151] The programmable circuitry platform 1500 of the illustrated example includes programmable circuitry 1512. The programmable circuitry 1512 of the illustrated example is hardware. For example, the programmable circuitry 1512 can be implemented by one or more integrated circuits, logic circuits, FPGAs, microprocessors, CPUs, GPUs, DSPs, and / or microcontrollers from any desired family or manufacturer. The programmable circuitry 1512 may be implemented by one or more semiconductor based (e.g., silicon based) devices. In this example, the programmable circuitry 1512 implements the example 3D modeling circuitry 202, the example 3D model management circuitry 206, the example path planning circuitry 208, and the example path evaluation circuitry 210.
[0152] The programmable circuitry 1512 of the illustrated example includes a local memory 1513 (e.g., a cache, registers, etc. ) . The programmable circuitry 1512 of the illustrated example is in communication with main memory 1514, 1516, which includes a volatile memory 1514 and a non-volatile memory 1516, by a bus 1518. The volatile memory 1514 may be implemented by Synchronous Dynamic Random Access Memory (SDRAM) , Dynamic Random Access Memory (DRAM) , Dynamic Random Access Memory and / or any other type of RAM device. The non-volatile memory 1516 may be implemented by flash memory and / or any other desired type of memory device. Access to the main memory 1514, 1516 of the illustrated example is controlled by a memory controller 1517. In some examples, the memory controller 1517 may be implemented by one or more integrated circuits, logic circuits, microcontrollers from any desired family or manufacturer, or any other type of circuitry to manage the flow of data going to and from the main memory 1514, 1516.
[0153] The programmable circuitry platform 1500 of the illustrated example also includes interface circuitry 1520. The interface circuitry 1520 may be implemented by hardware in accordance with any type of interface standard, such as an Ethernet interface, a universal serial bus (USB) interface, a interface, a near field communication (NFC) interface, a Peripheral Component Interconnect (PCI) interface, and / or a Peripheral Component Interconnect Express (PCIe) interface.
[0154] In the illustrated example, one or more input devices 1522 are connected to the interface circuitry 1520. The input device (s) 1522 permit (s) a user (e.g., a human user, a machine user, etc. ) to enter data and / or commands into the programmable circuitry 1512. The input device (s) 1522 can be implemented by, for example, an audio sensor, a microphone, a camera (still or video) , a keyboard, a button, a mouse, a touchscreen, a trackpad, a trackball, an isopoint device, and / or a voice recognition system.
[0155] One or more output devices 1524 are also connected to the interface circuitry 1520 of the illustrated example. The output device (s) 1524 can be implemented, for example, by display devices (e.g., a light emitting diode (LED) , an organic light emitting diode (OLED) , a liquid crystal display (LCD) , a cathode ray tube (CRT) display, an in-place switching (IPS) display, a touchscreen, etc. ) , a tactile output device, a printer, and / or speaker. The interface circuitry 1520 of the illustrated example, thus, typically includes a graphics driver card, a graphics driver chip, and / or graphics processor circuitry such as a GPU.
[0156] The interface circuitry 1520 of the illustrated example also includes a communication device such as a transmitter, a receiver, a transceiver, a modem, a residential gateway, a wireless access point, and / or a network interface to facilitate exchange of data with external machines (e.g., computing devices of any kind) by a network 1526. The communication can be by, for example, an Ethernet connection, a digital subscriber line (DSL) connection, a telephone line connection, a coaxial cable system, a satellite system, a beyond-line-of-sight wireless system, a line-of-sight wireless system, a cellular telephone system, an optical connection, etc. In some examples, the interface circuitry 1520 implements the example interface circuitry 204.
[0157] The programmable circuitry platform 1500 of the illustrated example also includes one or more mass storage discs or devices 1528 to store firmware, software, and / or data. Examples of such mass storage discs or devices 1528 include magnetic storage devices (e.g., floppy disk, drives, HDDs, etc. ) , optical storage devices (e.g., Blu-ray disks, CDs, DVDs, etc. ) , RAID systems, and / or solid-state storage discs or devices such as flash memory devices and / or SSDs. In some examples, the one or more mass storage discs or devices 1528 implement the datastore 212.
[0158] The machine-readable instructions 1532, which may be implemented by the machine-readable instructions of FIGS. 12 and / or 13, may be stored in the mass storage device 1528, in the volatile memory 1514, in the non-volatile memory 1516, and / or on at least one non-transitory computer-readable storage medium such as a CD or DVD which may be removable.
[0159] FIG. 16 is a block diagram of an example programmable circuitry platform 1600 structured to execute and / or instantiate the example machine-readable instructions and / or the example operations of FIG. 14 to implement the AC control circuitry 108 of FIG. 3. The programmable circuitry platform 1600 can be, for example, a server, a personal computer, a workstation, a self-learning machine (e.g., a neural network) , a mobile device (e.g., a cell phone, a smart phone, a tablet such as an iPadTM) , a personal digital assistant (PDA) , an Internet appliance, a DVD player, a CD player, a digital video recorder, a Blu-ray player, a gaming console, a personal video recorder, a set top box, a headset (e.g., an augmented reality (AR) headset, a virtual reality (VR) headset, etc. ) or other wearable device, or any other type of computing and / or electronic device.
[0160] The programmable circuitry platform 1600 of the illustrated example includes programmable circuitry 1612. The programmable circuitry 1612 of the illustrated example is hardware. For example, the programmable circuitry 1612 can be implemented by one or more integrated circuits, logic circuits, FPGAs, microprocessors, CPUs, GPUs, DSPs, and / or microcontrollers from any desired family or manufacturer. The programmable circuitry 1612 may be implemented by one or more semiconductor based (e.g., silicon based) devices. In this example, the programmable circuitry 1612 implements the example 3D modeling control circuitry 302 and the example imaging control circuitry 306. In some examples, the programmable circuitry 1612 implements the example 3D modeling circuitry 310.
[0161] The programmable circuitry 1612 of the illustrated example includes a local memory 1613 (e.g., a cache, registers, etc. ) . The programmable circuitry 1612 of the illustrated example is in communication with main memory 1614, 1616, which includes a volatile memory 1614 and a non-volatile memory 1616, by a bus 1618. The volatile memory 1614 may be implemented by Synchronous Dynamic Random Access Memory (SDRAM) , Dynamic Random Access Memory (DRAM) , Dynamic Random Access Memory and / or any other type of RAM device. The non-volatile memory 1616 may be implemented by flash memory and / or any other desired type of memory device. Access to the main memory 1614, 1616 of the illustrated example is controlled by a memory controller 1617. In some examples, the memory controller 1617 may be implemented by one or more integrated circuits, logic circuits, microcontrollers from any desired family or manufacturer, or any other type of circuitry to manage the flow of data going to and from the main memory 1614, 1616.
[0162] The programmable circuitry platform 1600 of the illustrated example also includes interface circuitry 1620. The interface circuitry 1620 may be implemented by hardware in accordance with any type of interface standard, such as an Ethernet interface, a universal serial bus (USB) interface, a interface, a near field communication (NFC) interface, a Peripheral Component Interconnect (PCI) interface, and / or a Peripheral Component Interconnect Express (PCIe) interface.
[0163] In the illustrated example, one or more input devices 1622 are connected to the interface circuitry 1620. The input device (s) 1622 permit (s) a user (e.g., a human user, a machine user, etc. ) to enter data and / or commands into the programmable circuitry 1612. The input device (s) 1622 can be implemented by, for example, an audio sensor, a microphone, a camera (still or video) , a keyboard, a button, a mouse, a touchscreen, a trackpad, a trackball, an isopoint device, and / or a voice recognition system.
[0164] One or more output devices 1624 are also connected to the interface circuitry 1620 of the illustrated example. The output device (s) 1624 can be implemented, for example, by display devices (e.g., a light emitting diode (LED) , an organic light emitting diode (OLED) , a liquid crystal display (LCD) , a cathode ray tube (CRT) display, an in-place switching (IPS) display, a touchscreen, etc. ) , a tactile output device, a printer, and / or speaker. The interface circuitry 1620 of the illustrated example, thus, typically includes a graphics driver card, a graphics driver chip, and / or graphics processor circuitry such as a GPU.
[0165] The interface circuitry 1620 of the illustrated example also includes a communication device such as a transmitter, a receiver, a transceiver, a modem, a residential gateway, a wireless access point, and / or a network interface to facilitate exchange of data with external machines (e.g., computing devices of any kind) by a network 1626. The communication can be by, for example, an Ethernet connection, a digital subscriber line (DSL) connection, a telephone line connection, a coaxial cable system, a satellite system, a beyond-line-of-sight wireless system, a line-of-sight wireless system, a cellular telephone system, an optical connection, etc. In some examples, the interface circuitry 1620 implements the example interface circuitry 304.
[0166] The programmable circuitry platform 1600 of the illustrated example also includes one or more mass storage discs or devices 1628 to store firmware, software, and / or data. Examples of such mass storage discs or devices 1628 include magnetic storage devices (e.g., floppy disk, drives, HDDs, etc. ) , optical storage devices (e.g., Blu-ray disks, CDs, DVDs, etc. ) , RAID systems, and / or solid-state storage discs or devices such as flash memory devices and / or SSDs. In some examples, the one or more mass storage discs or devices 1628 implement the example datastore 308.
[0167] The machine-readable instructions 1632, which may be implemented by the machine-readable instructions of FIG. 14, may be stored in the mass storage device 1628, in the volatile memory 1614, in the non-volatile memory 1616, and / or on at least one non-transitory computer-readable storage medium such as a CD or DVD which may be removable.
[0168] FIG. 17 is a block diagram of an example implementation of the programmable circuitry 1512 of FIG. 15 and / or the programmable circuitry 1612 of FIG. 16. In this example, the programmable circuitry 1512 of FIG. 15 and / or the programmable circuitry 1612 of FIG. 16 is / are implemented by a microprocessor 1700. For example, the microprocessor 1700 may be a general-purpose microprocessor (e.g., general-purpose microprocessor circuitry) . The microprocessor 1700 executes some or all of the machine-readable instructions of the flowcharts of FIGS. 12, 13, and / or 14 to effectively instantiate the circuitry of FIGS. 2 and / or 3 as logic circuits to perform operations corresponding to those machine-readable instructions. In some such examples, the circuitry of FIGS. 2 and / or 3 is instantiated by the hardware circuits of the microprocessor 1700 in combination with the machine-readable instructions. For example, the microprocessor 1700 may be implemented by multi-core hardware circuitry such as a CPU, a DSP, a GPU, an XPU, etc. Although it may include any number of example cores 1702 (e.g., 1 core) , the microprocessor 1700 of this example is a multi-core semiconductor device including N cores. The cores 1702 of the microprocessor 1700 may operate independently or may cooperate to execute machine-readable instructions. For example, machine code corresponding to a firmware program, an embedded software program, or a software program may be executed by one of the cores 1702 or may be executed by multiple ones of the cores 1702 at the same or different times. In some examples, the machine code corresponding to the firmware program, the embedded software program, or the software program is split into threads and executed in parallel by two or more of the cores 1702. The software program may correspond to a portion or all of the machine-readable instructions and / or operations represented by the flowcharts of FIGS. 12, 13, and / or 14.
[0169] The cores 1702 may communicate by a first example bus 1704. In some examples, the first bus 1704 may be implemented by a communication bus to effectuate communication associated with one (s) of the cores 1702. For example, the first bus 1704 may be implemented by at least one of an Inter-Integrated Circuit (I2C) bus, a Serial Peripheral Interface (SPI) bus, a PCI bus, or a PCIe bus. Additionally or alternatively, the first bus 1704 may be implemented by any other type of computing or electrical bus. The cores 1702 may obtain data, instructions, and / or signals from one or more external devices by example interface circuitry 1706. The cores 1702 may output data, instructions, and / or signals to the one or more external devices by the interface circuitry 1706. Although the cores 1702 of this example include example local memory 1720 (e.g., Level 1 (L1) cache that may be split into an L1 data cache and an L1 instruction cache) , the microprocessor 1700 also includes example shared memory 1710 that may be shared by the cores (e.g., Level 2 (L2 cache) ) for high-speed access to data and / or instructions. Data and / or instructions may be transferred (e.g., shared) by writing to and / or reading from the shared memory 1710. The local memory 1720 of each of the cores 1702 and the shared memory 1710 may be part of a hierarchy of storage devices including multiple levels of cache memory and the main memory (e.g., the main memory 1514, 1516 of FIG. 15 and / or the main memory 1614, 1616 of FIG. 16) . Typically, higher levels of memory in the hierarchy exhibit lower access time and have smaller storage capacity than lower levels of memory. Changes in the various levels of the cache hierarchy are managed (e.g., coordinated) by a cache coherency policy.
[0170] Each core 1702 may be referred to as a CPU, DSP, GPU, etc., or any other type of hardware circuitry. Each core 1702 includes control unit circuitry 1714, arithmetic and logic (AL) circuitry 1716 (sometimes referred to as an ALU) , a plurality of registers 1718, the local memory 1720, and a second example bus 1722. Other structures may be present. For example, each core 1702 may include vector unit circuitry, single instruction multiple data (SIMD) unit circuitry, load / store unit (LSU) circuitry, branch / jump unit circuitry, floating-point unit (FPU) circuitry, etc. The control unit circuitry 1714 includes semiconductor-based circuits structured to control (e.g., coordinate) data movement within the corresponding core 1702. The AL circuitry 1716 includes semiconductor-based circuits structured to perform one or more mathematic and / or logic operations on the data within the corresponding core 1702. The AL circuitry 1716 of some examples performs integer-based operations. In other examples, the AL circuitry 1716 also performs floating-point operations. In yet other examples, the AL circuitry 1716 may include first AL circuitry that performs integer-based operations and second AL circuitry that performs floating-point operations. In some examples, the AL circuitry 1716 may be referred to as an Arithmetic Logic Unit (ALU) .
[0171] The registers 1718 are semiconductor-based structures to store data and / or instructions such as results of one or more of the operations performed by the AL circuitry 1716 of the corresponding core 1702. For example, the registers 1718 may include vector register (s) , SIMD register (s) , general-purpose register (s) , flag register (s) , segment register (s) , machine-specific register (s) , instruction pointer register (s) , control register (s) , debug register (s) , memory management register (s) , machine check register (s) , etc. The registers 1718 may be arranged in a bank as shown in FIG. 17. Alternatively, the registers 1718 may be organized in any other arrangement, format, or structure, such as by being distributed throughout the core 1702 to shorten access time. The second bus 1722 may be implemented by at least one of an I2C bus, a SPI bus, a PCI bus, or a PCIe bus.
[0172] Each core 1702 and / or, more generally, the microprocessor 1700 may include additional and / or alternate structures to those shown and described above. For example, one or more clock circuits, one or more power supplies, one or more power gates, one or more cache home agents (CHAs) , one or more converged / common mesh stops (CMSs) , one or more shifters (e.g., barrel shifter (s) ) and / or other circuitry may be present. The microprocessor 1700 is a semiconductor device fabricated to include many transistors interconnected to implement the structures described above in one or more integrated circuits (ICs) contained in one or more packages.
[0173] The microprocessor 1700 may include and / or cooperate with one or more accelerators (e.g., acceleration circuitry, hardware accelerators, etc. ) . In some examples, accelerators are implemented by logic circuitry to perform certain tasks more quickly and / or efficiently than can be done by a general-purpose processor. Examples of accelerators include ASICs and FPGAs such as those discussed herein. A GPU, DSP and / or other programmable device can also be an accelerator. Accelerators may be on-board the microprocessor 1700, in the same chip package as the microprocessor 1700 and / or in one or more separate packages from the microprocessor 1700.
[0174] FIG. 18 is a block diagram of another example implementation of the programmable circuitry 1512 of FIG. 15 and / or the programmable circuitry 1612 of FIG. 16. In this example, the programmable circuitry 1512 of FIG. 15 and / or the programmable circuitry 1612 of FIG. 16 is / are implemented by FPGA circuitry 1800. For example, the FPGA circuitry 1800 may be implemented by an FPGA. The FPGA circuitry 1800 can be used, for example, to perform operations that could otherwise be performed by the example microprocessor 1700 of FIG. 17 executing corresponding machine-readable instructions. However, once configured, the FPGA circuitry 1800 instantiates the operations and / or functions corresponding to the machine-readable instructions in hardware and, thus, can often execute the operations / functions faster than they could be performed by a general-purpose microprocessor executing the corresponding software.
[0175] More specifically, in contrast to the microprocessor 1700 of FIG. 17 described above (which is a general purpose device that may be programmed to execute some or all of the machine-readable instructions represented by the flowchart (s) of FIGS. 12, 13, and / or 14 but whose interconnections and logic circuitry are fixed once fabricated) , the FPGA circuitry 1800 of the example of FIG. 18 includes interconnections and logic circuitry that may be configured, structured, programmed, and / or interconnected in different ways after fabrication to instantiate, for example, some or all of the operations / functions corresponding to the machine-readable instructions represented by the flowchart (s) of FIGS. 12, 13, and / or 14. In particular, the FPGA circuitry 1800 may be thought of as an array of logic gates, interconnections, and switches. The switches can be programmed to change how the logic gates are interconnected by the interconnections, effectively forming one or more dedicated logic circuits (unless and until the FPGA circuitry 1800 is reprogrammed) . The configured logic circuits enable the logic gates to cooperate in different ways to perform different operations on data received by input circuitry. Those operations may correspond to some or all of the instructions (e.g., the software and / or firmware) represented by the flowchart (s) of FIGS. 12, 13, and / or 14. As such, the FPGA circuitry 1800 may be configured and / or structured to effectively instantiate some or all of the operations / functions corresponding to the machine-readable instructions of the flowchart (s) of FIGS. 12, 13, and / or 14 as dedicated logic circuits to perform the operations / functions corresponding to those software instructions in a dedicated manner analogous to an ASIC. Therefore, the FPGA circuitry 1800 may perform the operations / functions corresponding to the some or all of the machine-readable instructions of FIGS. 12, 13, and / or 14 faster than the general-purpose microprocessor can execute the same.
[0176] In the example of FIG. 18, the FPGA circuitry 1800 is configured and / or structured in response to being programmed (and / or reprogrammed one or more times) based on a binary file. In some examples, the binary file may be compiled and / or generated based on instructions in a hardware description language (HDL) such as Lucid, Very High Speed Integrated Circuits (VHSIC) Hardware Description Language (VHDL) , or Verilog. For example, a user (e.g., a human user, a machine user, etc. ) may write code or a program corresponding to one or more operations / functions in an HDL; the code / program may be translated into a low-level language as needed; and the code / program (e.g., the code / program in the low-level language) may be converted (e.g., by a compiler, a software application, etc. ) into the binary file. In some examples, the FPGA circuitry 1800 of FIG. 18 may access and / or load the binary file to cause the FPGA circuitry 1800 of FIG. 18 to be configured and / or structured to perform the one or more operations / functions. For example, the binary file may be implemented by a bit stream (e.g., one or more computer-readable bits, one or more machine-readable bits, etc. ) , data (e.g., computer-readable data, machine-readable data, etc. ) , and / or machine-readable instructions accessible to the FPGA circuitry 1800 of FIG. 18 to cause configuration and / or structuring of the FPGA circuitry 1800 of FIG. 18, or portion (s) thereof.
[0177] In some examples, the binary file is compiled, generated, transformed, and / or otherwise output from a uniform software platform utilized to program FPGAs. For example, the uniform software platform may translate first instructions (e.g., code or a program) that correspond to one or more operations / functions in a high-level language (e.g., C, C++, Python, etc. ) into second instructions that correspond to the one or more operations / functions in an HDL. In some such examples, the binary file is compiled, generated, and / or otherwise output from the uniform software platform based on the second instructions. In some examples, the FPGA circuitry 1800 of FIG. 18 may access and / or load the binary file to cause the FPGA circuitry 1800 of FIG. 18 to be configured and / or structured to perform the one or more operations / functions. For example, the binary file may be implemented by a bit stream (e.g., one or more computer-readable bits, one or more machine-readable bits, etc. ) , data (e.g., computer-readable data, machine-readable data, etc. ) , and / or machine-readable instructions accessible to the FPGA circuitry 1800 of FIG. 18 to cause configuration and / or structuring of the FPGA circuitry 1800 of FIG. 18, or portion (s) thereof.
[0178] The FPGA circuitry 1800 of FIG. 18, includes example input / output (I / O) circuitry 1802 to obtain and / or output data to / from example configuration circuitry 1804 and / or external hardware 1806. For example, the configuration circuitry 1804 may be implemented by interface circuitry that may obtain a binary file, which may be implemented by a bit stream, data, and / or machine-readable instructions, to configure the FPGA circuitry 1800, or portion (s) thereof. In some such examples, the configuration circuitry 1804 may obtain the binary file from a user, a machine (e.g., hardware circuitry (e.g., programmable or dedicated circuitry) that may implement an Artificial Intelligence / Machine Learning (AI / ML) model to generate the binary file) , etc., and / or any combination (s) thereof) . In some examples, the external hardware 1806 may be implemented by external hardware circuitry. For example, the external hardware 1806 may be implemented by the microprocessor 1700 of FIG. 17.
[0179] The FPGA circuitry 1800 also includes an array of example logic gate circuitry 1808, a plurality of example configurable interconnections 1810, and example storage circuitry 1812. The logic gate circuitry 1808 and the configurable interconnections 1810 are configurable to instantiate one or more operations / functions that may correspond to at least some of the machine-readable instructions of FIGS. 12, 13, and / or 14 and / or other desired operations. The logic gate circuitry 1808 shown in FIG. 18 is fabricated in blocks or groups. Each block includes semiconductor-based electrical structures that may be configured into logic circuits. In some examples, the electrical structures include logic gates (e.g., And gates, Or gates, Nor gates, etc. ) that provide basic building blocks for logic circuits. Electrically controllable switches (e.g., transistors) are present within each of the logic gate circuitry 1808 to enable configuration of the electrical structures and / or the logic gates to form circuits to perform desired operations / functions. The logic gate circuitry 1808 may include other electrical structures such as look-up tables (LUTs) , registers (e.g., flip-flops or latches) , multiplexers, etc.
[0180] The configurable interconnections 1810 of the illustrated example are conductive pathways, traces, vias, or the like that may include electrically controllable switches (e.g., transistors) whose state can be changed by programming (e.g., using an HDL instruction language) to activate or deactivate one or more connections between one or more of the logic gate circuitry 1808 to program desired logic circuits.
[0181] The storage circuitry 1812 of the illustrated example is structured to store result (s) of the one or more of the operations performed by corresponding logic gates. The storage circuitry 1812 may be implemented by registers or the like. In the illustrated example, the storage circuitry 1812 is distributed amongst the logic gate circuitry 1808 to facilitate access and increase execution speed.
[0182] The example FPGA circuitry 1800 of FIG. 18 also includes example dedicated operations circuitry 1814. In this example, the dedicated operations circuitry 1814 includes special purpose circuitry 1816 that may be invoked to implement commonly used functions to avoid the need to program those functions in the field. Examples of such special purpose circuitry 1816 include memory (e.g., DRAM) controller circuitry, PCIe controller circuitry, clock circuitry, transceiver circuitry, memory, and multiplier-accumulator circuitry. Other types of special purpose circuitry may be present. In some examples, the FPGA circuitry 1800 may also include example general purpose programmable circuitry 1818 such as an example CPU 1820 and / or an example DSP 1822. Other general purpose programmable circuitry 1818 may additionally or alternatively be present such as a GPU, an XPU, etc., that can be programmed to perform other operations.
[0183] Although FIGS. 17 and 18 illustrate two example implementations of the programmable circuitry 1512 of FIG. 15 and / or the programmable circuitry 1612 of FIG. 16, many other approaches are contemplated. For example, FPGA circuitry may include an on-board CPU, such as one or more of the example CPU 1820 of FIG. 17. Therefore, the programmable circuitry 1512 of FIG. 15 and / or the programmable circuitry 1612 of FIG. 16 may additionally be implemented by combining at least the example microprocessor 1700 of FIG. 17 and the example FPGA circuitry 1800 of FIG. 18. In some such hybrid examples, one or more cores 1702 of FIG. 17 may execute a first portion of the machine-readable instructions represented by the flowchart (s) of FIGS. 12, 13, and / or 14 to perform first operation (s) / function (s) , the FPGA circuitry 1800 of FIG. 18 may be configured and / or structured to perform second operation (s) / function (s) corresponding to a second portion of the machine-readable instructions represented by the flowcharts of FIGS. 12, 13, and / or 14, and / or an ASIC may be configured and / or structured to perform third operation (s) / function (s) corresponding to a third portion of the machine-readable instructions represented by the flowcharts of FIGS. 12, 13, and / or 14.
[0184] It should be understood that some or all of the circuitry of FIGS. 2 and / or 3 may, thus, be instantiated at the same or different times. For example, same and / or different portion (s) of the microprocessor 1700 of FIG. 17 may be programmed to execute portion (s) of machine-readable instructions at the same and / or different times. In some examples, same and / or different portion (s) of the FPGA circuitry 1800 of FIG. 18 may be configured and / or structured to perform operations / functions corresponding to portion (s) of machine-readable instructions at the same and / or different times.
[0185] In some examples, some or all of the circuitry of FIGS. 2 and / or 3 may be instantiated, for example, in one or more threads executing concurrently and / or in series. For example, the microprocessor 1700 of FIG. 17 may execute machine-readable instructions in one or more threads executing concurrently and / or in series. In some examples, the FPGA circuitry 1800 of FIG. 18 may be configured and / or structured to carry out operations / functions concurrently and / or in series. Moreover, in some examples, some or all of the circuitry of FIGS. 2 and / or 3 may be implemented within one or more virtual machines and / or containers executing on the microprocessor 1700 of FIG. 17.
[0186] In some examples, the programmable circuitry 1512 of FIG. 15 and / or the programmable circuitry 1612 of FIG. 16 may be in one or more packages. For example, the microprocessor 1700 of FIG. 17 and / or the FPGA circuitry 1800 of FIG. 18 may be in one or more packages. In some examples, an XPU may be implemented by the programmable circuitry 1512 of FIG. 15 and / or the programmable circuitry 1612 of FIG. 16, which may be in one or more packages. For example, the XPU may include a CPU (e.g., the microprocessor 1700 of FIG. 17, the CPU 1820 of FIG. 18, etc. ) in one package, a DSP (e.g., the DSP 1822 of FIG. 18) in another package, a GPU in yet another package, and an FPGA (e.g., the FPGA circuitry 1800 of FIG. 18) in still yet another package.
[0187] A block diagram illustrating an example software distribution platform 1905 to distribute software such as the example machine-readable instructions 1532 of FIG. 15 and / or the example machine-readable instructions 1632 of FIG. 16 to other hardware devices (e.g., hardware devices owned and / or operated by third parties from the owner and / or operator of the software distribution platform) is illustrated in FIG. 19. The example software distribution platform 1905 may be implemented by any computer server, data facility, cloud service, etc., capable of storing and transmitting software to other computing devices. The third parties may be customers of the entity owning and / or operating the software distribution platform 1905. For example, the entity that owns and / or operates the software distribution platform 1905 may be a developer, a seller, and / or a licensor of software such as the example machine-readable instructions 1532 of FIG. 15 and / or the example machine-readable instructions 1632 of FIG. 16. The third parties may be consumers, users, retailers, OEMs, etc., who purchase and / or license the software for use and / or re-sale and / or sub-licensing. In the illustrated example, the software distribution platform 1905 includes one or more servers and one or more storage devices. The storage devices store the machine-readable instructions 1532 and / or the machine-readable instructions 1632, which may correspond to the example machine-readable instructions of FIGS. 12, 13, and / or 14, as described above. The one or more servers of the example software distribution platform 1905 are in communication with an example network 1910, which may correspond to any one or more of the Internet and / or any of the example networks described above. In some examples, the one or more servers are responsive to requests to transmit the software to a requesting party as part of a commercial transaction. Payment for the delivery, sale, and / or license of the software may be handled by the one or more servers of the software distribution platform and / or by a third-party payment entity. The servers enable purchasers and / or licensors to download the machine-readable instructions 1532 and / or the machine-readable instructions 1632 from the software distribution platform 1905. For example, the software, which may correspond to the example machine-readable instructions of FIGS. 12, 13, and / or 14, may be downloaded to the example programmable circuitry platform 1500 and / or the example programmable circuitry platform 1600, which is to execute the machine-readable instructions 1532 and / or the machine-readable instructions 1632 to implement the example edge compute device 102 and / or the example AC control circuitry 108. In some examples, one or more servers of the software distribution platform 1905 periodically offer, transmit, and / or force updates to the software (e.g., the example machine-readable instructions 1532 of FIG. 15 and / or the example machine-readable instructions 1632 of FIG. 16) to ensure improvements, patches, updates, etc., are distributed and applied to the software at the end user devices. Although referred to as software above, the distributed “software” could alternatively be firmware.
[0188] “Including” and “comprising” (and all forms and tenses thereof) are used herein to be open ended terms. Thus, whenever a claim employs any form of “include” or “comprise” (e.g., comprises, includes, comprising, including, having, etc. ) as a preamble or within a claim recitation of any kind, it is to be understood that additional elements, terms, etc., may be present without falling outside the scope of the corresponding claim or recitation. As used herein, when the phrase “at least” is used as the transition term in, for example, a preamble of a claim, it is open-ended in the same manner as the term “comprising” and “including” are open ended. The term “and / or” when used, for example, in a form such as A, B, and / or C refers to any combination or subset of A, B, C such as (1) A alone, (2) B alone, (3) C alone, (4) A with B, (5) A with C, (6) B with C, or (7) A with B and with C. As used herein in the context of describing structures, components, items, objects and / or things, the phrase “at least one of A and B” is intended to refer to implementations including any of (1) at least one A, (2) at least one B, or (3) at least one A and at least one B. Similarly, as used herein in the context of describing structures, components, items, objects and / or things, the phrase “at least one of A or B” is intended to refer to implementations including any of (1) at least one A, (2) at least one B, or (3) at least one A and at least one B. As used herein in the context of describing the performance or execution of processes, instructions, actions, activities, etc., the phrase “at least one of A and B” is intended to refer to implementations including any of (1) at least one A, (2) at least one B, or (3) at least one A and at least one B. Similarly, as used herein in the context of describing the performance or execution of processes, instructions, actions, activities, etc., the phrase “at least one of A or B” is intended to refer to implementations including any of (1) at least one A, (2) at least one B, or (3) at least one A and at least one B.
[0189] As used herein, singular references (e.g., “a, ” “an, ” “first, ” “second, ” etc. ) do not exclude a plurality. The term “a” or “an” object, as used herein, refers to one or more of that object. The terms “a” (or “an” ) , “one or more, ” and “at least one” are used interchangeably herein. Furthermore, although individually listed, a plurality of means, elements, or actions may be implemented by, e.g., the same entity or object. Additionally, although individual features may be included in different examples or claims, these may possibly be combined, and the inclusion in different examples or claims does not imply that a combination of features is not feasible and / or advantageous.
[0190] As used herein, connection references (e.g., attached, coupled, connected, and joined) may include intermediate members between the elements referenced by the connection reference and / or relative movement between those elements unless otherwise indicated. As such, connection references do not necessarily infer that two elements are directly connected and / or in fixed relation to each other.
[0191] Unless specifically stated otherwise, descriptors such as “first, ” “second, ” “third, ” etc., are used herein without imputing or otherwise indicating any meaning of priority, physical order, arrangement in a list, and / or ordering in any way, but are merely used as labels and / or arbitrary names to distinguish elements for ease of understanding the disclosed examples. In some examples, the descriptor “first” may be used to refer to an element in the detailed description, while the same element may be referred to in a claim with a different descriptor such as “second” or “third. ” In such instances, it should be understood that such descriptors are used merely for identifying those elements distinctly within the context of the discussion (e.g., within a claim) in which the elements might, for example, otherwise share a same name.
[0192] As used herein, “approximately” and / or variations thereof modify their subjects / values to recognize the potential presence of variations that occur in real world applications. For example, “approximately” may modify dimensions that may not be exact due to manufacturing tolerances and / or other real-world imperfections as will be understood by persons of ordinary skill in the art. For example, “approximately” may indicate such dimensions may be within a tolerance range of + / -10%unless otherwise specified herein.
[0193] As used herein, the phrase “in communication, ” including variations thereof, encompasses direct communication and / or indirect communication through one or more intermediary components, and does not require direct physical (e.g., wired) communication and / or constant communication, but rather additionally includes selective communication at periodic intervals, scheduled intervals, aperiodic intervals, and / or one-time events.
[0194] As used herein, “programmable circuitry” is defined to include (i) one or more special purpose electrical circuits (e.g., an application specific circuit (ASIC) ) structured to perform specific operation (s) and including one or more semiconductor-based logic devices (e.g., electrical hardware implemented by one or more transistors) , and / or (ii) one or more general purpose semiconductor-based electrical circuits programmable with instructions to perform specific functions (s) and / or operation (s) and including one or more semiconductor-based logic devices (e.g., electrical hardware implemented by one or more transistors) . Examples of programmable circuitry include programmable microprocessors such as Central Processor Units (CPUs) that may execute first instructions to perform one or more operations and / or functions, Field Programmable Gate Arrays (FPGAs) that may be programmed with second instructions to cause configuration and / or structuring of the FPGAs to instantiate one or more operations and / or functions corresponding to the first instructions, Graphics Processor Units (GPUs) that may execute first instructions to perform one or more operations and / or functions, Digital Signal Processors (DSPs) that may execute first instructions to perform one or more operations and / or functions, XPUs, Network Processing Units (NPUs) one or more microcontrollers that may execute first instructions to perform one or more operations and / or functions and / or integrated circuits such as Application Specific Integrated Circuits (ASICs) . For example, an XPU may be implemented by a heterogeneous computing system including multiple types of programmable circuitry (e.g., one or more FPGAs, one or more CPUs, one or more GPUs, one or more NPUs, one or more DSPs, etc., and / or any combination (s) thereof) , and orchestration technology (e.g., application programming interface (s) (API (s) ) that may assign computing task (s) to whichever one (s) of the multiple types of programmable circuitry is / are suited and available to perform the computing task (s) .
[0195] As used herein integrated circuit / circuitry is defined as one or more semiconductor packages containing one or more circuit elements such as transistors, capacitors, inductors, resistors, current paths, diodes, etc. For example an integrated circuit may be implemented as one or more of an ASIC, an FPGA, a chip, a microchip, programmable circuitry, a semiconductor substrate coupling multiple circuit elements, a system on chip (SoC) , etc.
[0196] From the foregoing, it will be appreciated that example systems, apparatus, articles of manufacture, and methods have been disclosed that iteratively model an environment. For example, disclosed examples relocate ACs deployed in an environment and / or localize a newly deployed AC to capture a 3D point. For example, methods, apparatus, and articles of manufacture disclosed herein dispatch ACs to optimize 3D points observed in a capture (e.g., to observe the most 3D points currently in the scene) .
[0197] Based on captured images, examples disclosed herein estimate a 3D structure and perform bundle adjustment on the 3D structure if the 3D structure has been refined by the captured images. As such, examples disclosed herein can iteratively capture images until the deployed ACs have been localized in the environment and a comprehensive 3D model has been generated. For example, disclosed methods, apparatus, and articles of manufacture orchestrate and direct ACs cameras to improve the performance and quality of 3D reconstruction.
[0198] With example edge-based AC 3D construction disclosed herein, various techniques can be used to improve 3D model reconstruction results. For example, outlier scans are omitted to improve performance. Additionally, for example, camera poses are re- localized to capture additional structure and produce robust estimations of a 3D structure. Furthermore, for example, camera photometric parameters are controlled to ensure consistent exposure and brightness between captures. Additionally, for example, camera calibration (e.g., intrinsic) parameters are captured to aid in 3D estimation.
[0199] As described above, examples disclosed include ACs communicating with an edge server dynamically to optimize 3D reconstruction results. Accordingly, examples disclosed herein validate feature detect and feature match scores to control ACs to capture images with rich texture and avoid texture-less images (e.g., a white wall) . For example, disclosed examples analyze brightness variation of images from ACs and / or control AC settings to ensure the ACs capture images in similar illumination conditions and / or avoid high dynamic range scenes. Furthermore, examples disclosed herein provide image capture settings to ACs such as exposure time, exposure value, focal length (e.g., f-stop) , shutter speed, among others.
[0200] Additionally, disclosed examples validate feature match results to control ACs to capture images that avoid blind spots and / or to maintain a reasonable range of overlap between images. Furthermore, methods, apparatus, and articles of manufacture disclosed herein validate feature detect and feature match scores to control ACs to capture images from different viewpoints such that an AC does not take images from the same location by only rotating the imaging device of an AC camera. Additionally, examples disclosed herein control ACs to capture images with appropriate frame rates.
[0201] Accordingly, examples disclosed herein provide mobility to model an environment via distributed ACs while controlling each AC to move to an appropriate position to capture the environment. As such, disclosed examples include coordinated image crowdsourcing through multiple ACs that reduce redundant captures and shorten the time to produce a 3D model. Methods, apparatus, and articles of manufacture disclosed herein include an edge server to coordinate one or multiple ACs and an iterative and computationally efficient process to capture and reconstruct 3D objects. For example, examples disclosed herein achieve efficient 3D reconstruction via clear path planning (e.g., positions and / or photometric parameters of each AC) for each iteration and enhancement in 3D reconstruction. As such, examples disclosed herein reduce redundance capture (e.g., to zero) .
[0202] Disclosed systems, apparatus, articles of manufacture, and methods improve the efficiency of using a computing device by reducing the amount of redundant captures of an environment. For example, disclosed systems, apparatus, articles of manufacture, and methods evaluate whether to continue exploring an environment (e.g., because there is insufficient but accessible 3D data) or if the environment lacks texture, in which case modeling can cease. Additionally, systems, apparatus, articles of manufacture, and methods disclosed herein provide collision free scanning that reduce (e.g., minimize) the space not observed during the modeling. As such, examples disclosed herein improve connectivity (e.g., for maximal connectivity when possible) between spatially adjacent regions of an environment to ensure the occupied or empty state of the regions is accurate in a 3D model. Disclosed systems, apparatus, articles of manufacture, and methods are accordingly directed to one or more improvement (s) in the operation of a machine such as a computer or other electronic and / or mechanical device.
[0203] Example methods, apparatus, systems, and articles of manufacture to iteratively model an environment are disclosed herein. Further examples and combinations thereof include the following:
[0204] Example 1 includes an apparatus comprising interface circuitry to access first image data corresponding to an environment, the first image data generated by a first autonomous camera, machine-readable instructions, and programmable circuitry to operate based on the machine-readable instructions to cause the interface circuitry to instruct at least a second autonomous camera to generate second image data representative of an area of the environment corresponding to a voxel of a three-dimensional (3D) model of the environment, the voxel to have less than a threshold density of 3D data, the 3D model based on the first image data.
[0205] Example 2 includes the apparatus of example 1, wherein the programmable circuitry is to generate the 3D model of the environment based on the first image data, determine that the voxel of the 3D model has less than the threshold density of 3D data, and identify the area of the environment based on the voxel.
[0206] Example 3 includes the apparatus of any of examples 1 or 2, wherein the programmable circuitry is to generate an instruction to cause the second autonomous camera to at least one of (a) move the second autonomous camera to place the area in a field of view of the second autonomous camera or (b) adjust at least one photometric parameter of the second autonomous camera, and cause the interface circuitry to transmit the instruction to the second autonomous camera.
[0207] Example 4 includes the apparatus of example 3, wherein the second autonomous camera includes an imaging device and a platform, and the programmable circuitry is to generate the instruction based on an autonomous camera model of the second autonomous camera, the model to at least one of (i) describe how the platform is to move with respect to the environment, (ii) describe how the imaging device is to move with respect to the platform, or (iii) describe the at least one photometric parameter of the imaging device.
[0208] Example 5 includes the apparatus of any of examples 3 or 4, wherein the instruction includes a sequence of actions to be performed by the second autonomous camera to at least one of (a) move the second autonomous camera to place the area in the field of view of the second autonomous camera or (b) adjust the at least one photometric parameter of the second autonomous camera.
[0209] Example 6 includes the apparatus of any of examples 1, 2, 3, 4, or 5, wherein the programmable circuitry is to output the 3D model based on a determination that a threshold number of instructions has been transmitted to the at least the second autonomous camera.
[0210] Example 7 includes the apparatus of any of examples 1, 2, 3, 4, 5, or 6, wherein the programmable circuitry is to output the 3D model based on a determination that the environment has been modeled for a threshold amount of time.
[0211] Example 8 includes the apparatus of any of examples 1, 2, 3, 4, 5, 6, or 7, wherein the programmable circuitry is to update the 3D model based on the second image data.
[0212] Example 9 includes the apparatus of any of examples 1, 2, 3, 4, 5, 6, 7, or 8, wherein the threshold density of 3D data is a user-defined value.
[0213] Example 10 includes a non-transitory machine-readable storage medium comprising machine-readable instructions to cause programmable circuitry to at least generate a three-dimensional model of an environment based on first image data corresponding to the environment, the first image data generated by a first autonomous camera, and cause interface circuitry to instruct at least a second autonomous camera to generate second image data representative of an area of the environment corresponding to a voxel of a three-dimensional (3D) model of the environment, the voxel to have less than a threshold density of 3D data.
[0214] Example 11 includes the non-transitory machine-readable storage medium of example 10, wherein the machine-readable instructions cause the programmable circuitry to determine that the voxel of the 3D model has less than the threshold density of 3D data, and identify the area of the environment based on the voxel.
[0215] Example 12 includes the non-transitory machine-readable storage medium of any of examples 10 or 11, wherein the machine-readable instructions cause the programmable circuitry to generate an instruction to cause the second autonomous camera to at least one of (a) move the second autonomous camera to place the area in a field of view of the second autonomous camera or (b) adjust at least one photometric parameter of the second autonomous camera, and cause the interface circuitry to transmit the instruction to the second autonomous camera.
[0216] Example 13 includes the non-transitory machine-readable storage medium of example 12, wherein the second autonomous camera includes an imaging device and a platform, and the machine-readable instructions cause the programmable circuitry to generate the instruction based on a model of the second autonomous camera, the model to at least one of (i) describe how the platform is to move with respect to the environment, (ii) describe how the imaging device is to move with respect to the platform, or (iii) describe the at least one photometric parameter of the imaging device.
[0217] Example 14 includes the non-transitory machine-readable storage medium of any of examples 12 or 13, wherein the instruction includes a sequence of actions to be performed by the second autonomous camera to at least one of (a) move the second autonomous camera to place the area in the field of view of the second autonomous camera or (b) adjust the at least one photometric parameter of the second autonomous camera.
[0218] Example 15 includes the non-transitory machine-readable storage medium of any of examples 10, 11, 12, 13, or 14, wherein the machine-readable instructions cause the programmable circuitry to output the 3D model based on a determination that a threshold number of instructions has been transmitted to the at least the second autonomous camera.
[0219] Example 16 includes the non-transitory machine-readable storage medium of any of examples 10, 11, 12, 13, 14, or 15, wherein the machine-readable instructions cause the programmable circuitry to output the 3D model based on a determination that the environment has been modeled for a threshold amount of time.
[0220] Example 17 includes a method comprising accessing, with interface circuitry, first image data corresponding to an environment, the first image data generated by a first autonomous camera, and transmitting, with the interface circuitry, an instruction to cause at least a second autonomous camera to generate second image data representative of an area of the environment corresponding to a voxel of a three-dimensional (3D) model of the environment, the voxel to have less than a threshold density of 3D data, the 3D model based on the first image data.
[0221] Example 18 includes the method of example 17, further including generating the 3D model of the environment based on the first image data, determining that the voxel of the 3D model has less than the threshold density of 3D data, and identifying the area of the environment based on the voxel.
[0222] Example 19 includes the method of any of examples 17 or 18, further including generating the instruction to cause the second autonomous camera to at least one of (a) move the second autonomous camera to place the area in a field of view of the second autonomous camera or (b) adjust at least one photometric parameter of the second autonomous camera.
[0223] Example 20 includes the method of any of examples, 17, 18, or 19, wherein the second autonomous camera includes an imaging device and a platform, and the method further includes generating the instruction based on an autonomous camera model of the second autonomous camera, the model to at least one of (i) describe how the platform is to move with respect to the environment, (ii) describe how the imaging device is to move with respect to the platform, or (iii) describe at least one photometric parameter of the imaging device.
[0224] The following claims are hereby incorporated into this Detailed Description by this reference. Although certain example systems, apparatus, articles of manufacture, and methods have been disclosed herein, the scope of coverage of this patent is not limited thereto. On the contrary, this patent covers all systems, apparatus, articles of manufacture, and methods fairly falling within the scope of the claims of this patent.
Claims
1.An apparatus comprising:interface circuitry to access first image data corresponding to an environment, the first image data generated by a first autonomous camera;machine-readable instructions; andprogrammable circuitry to operate based on the machine-readable instructions to cause the interface circuitry to instruct at least a second autonomous camera to generate second image data representative of an area of the environment corresponding to a voxel of a three-dimensional (3D) model of the environment, the voxel to have less than a threshold density of 3D data, the 3D model based on the first image data.2.The apparatus of claim 1, wherein the programmable circuitry is to:generate the 3D model of the environment based on the first image data;determine that the voxel of the 3D model has less than the threshold density of 3D data; andidentify the area of the environment based on the voxel.3.The apparatus of claim 1, wherein the programmable circuitry is to:generate an instruction to cause the second autonomous camera to at least one of (a) move the second autonomous camera to place the area in a field of view of the second autonomous camera or (b) adjust at least one photometric parameter of the second autonomous camera; andcause the interface circuitry to transmit the instruction to the second autonomous camera.4.The apparatus of claim 3, wherein the second autonomous camera includes an imaging device and a platform, and the programmable circuitry is to generate the instruction based on an autonomous camera model of the second autonomous camera, the model to at least one of (i) describe how the platform is to move with respect to the environment, (ii) describe how the imaging device is to move with respect to the platform, or (iii) describe the at least one photometric parameter of the imaging device.5.The apparatus of claim 3, wherein the instruction includes a sequence of actions to be performed by the second autonomous camera to at least one of (a) move the second autonomous camera to place the area in the field of view of the second autonomous camera or (b) adjust the at least one photometric parameter of the second autonomous camera.6.The apparatus of claim 1, wherein the programmable circuitry is to output the 3D model based on a determination that a threshold number of instructions has been transmitted to the at least the second autonomous camera.7.The apparatus of claim 1, wherein the programmable circuitry is to output the 3D model based on a determination that the environment has been modeled for a threshold amount of time.8.The apparatus of claim 1, wherein the programmable circuitry is to update the 3D model based on the second image data.9.The apparatus of claim 1, wherein the threshold density of 3D data is a user-defined value.10.A non-transitory machine-readable storage medium comprising machine-readable instructions to cause programmable circuitry to at least:generate a three-dimensional model of an environment based on first image data corresponding to the environment, the first image data generated by a first autonomous camera; andcause interface circuitry to instruct at least a second autonomous camera to generate second image data representative of an area of the environment corresponding to a voxel of a three-dimensional (3D) model of the environment, the voxel to have less than a threshold density of 3D data.11.The non-transitory machine-readable storage medium of claim 10, wherein the machine-readable instructions cause the programmable circuitry to:determine that the voxel of the 3D model has less than the threshold density of 3D data; andidentify the area of the environment based on the voxel.12.The non-transitory machine-readable storage medium of claim 10, wherein the machine-readable instructions cause the programmable circuitry to:generate an instruction to cause the second autonomous camera to at least one of (a) move the second autonomous camera to place the area in a field of view of the second autonomous camera or (b) adjust at least one photometric parameter of the second autonomous camera; andcause the interface circuitry to transmit the instruction to the second autonomous camera.13.The non-transitory machine-readable storage medium of claim 12, wherein the second autonomous camera includes an imaging device and a platform, and the machine-readable instructions cause the programmable circuitry to generate the instruction based on a model of the second autonomous camera, the model to at least one of (i) describe how the platform is to move with respect to the environment, (ii) describe how the imaging device is to move with respect to the platform, or (iii) describe the at least one photometric parameter of the imaging device.14.The non-transitory machine-readable storage medium of claim 12, wherein the instruction includes a sequence of actions to be performed by the second autonomous camera to at least one of (a) move the second autonomous camera to place the area in the field of view of the second autonomous camera or (b) adjust the at least one photometric parameter of the second autonomous camera.15.The non-transitory machine-readable storage medium of claim 10, wherein the machine-readable instructions cause the programmable circuitry to output the 3D model based on a determination that a threshold number of instructions has been transmitted to the at least the second autonomous camera.16.The non-transitory machine-readable storage medium of claim 10, wherein the machine-readable instructions cause the programmable circuitry to output the 3D model based on a determination that the environment has been modeled for a threshold amount of time.17.A method comprising:accessing, with interface circuitry, first image data corresponding to an environment, the first image data generated by a first autonomous camera; andtransmitting, with the interface circuitry, an instruction to cause at least a second autonomous camera to generate second image data representative of an area of the environment corresponding to a voxel of a three-dimensional (3D) model of the environment, the voxel to have less than a threshold density of 3D data, the 3D model based on the first image data.18.The method of claim 17, further including:generating the 3D model of the environment based on the first image data;determining that the voxel of the 3D model has less than the threshold density of 3D data; andidentifying the area of the environment based on the voxel.19.The method of claim 17, further including generating the instruction to cause the second autonomous camera to at least one of (a) move the second autonomous camera to place the area in a field of view of the second autonomous camera or (b) adjust at least one photometric parameter of the second autonomous camera.20.The method of claim 17, wherein the second autonomous camera includes an imaging device and a platform, and the method further includes generating the instruction based on an autonomous camera model of the second autonomous camera, the model to at least one of (i) describe how the platform is to move with respect to the environment, (ii) describe how the imaging device is to move with respect to the platform, or (iii) describe at least one photometric parameter of the imaging device.
Citation Information
Patent Citations
Object structure reconstruction method and related equipment
CN115187682A
Three-dimensional model generation method and device, equipment and storage medium
CN115457206A
Nerve radiation field three-dimensional reconstruction method based on fused voxels
CN116664782A
Image processing apparatus, image processing method and program
JP2018032938A
Filter processing device and program
JP2018132925A