Implementations of the present disclosure relate to hybrid manufacturing.
Additive manufacturing (often known as 3D printing) enables the production of structures that are complicated in shape and not achievable by subtractive manufacturing methods. For example, hollow structures that are expensive or difficult to achieve in machining processes (i.e., removal of materials by turning, drilling, and milling) may be created layer by layer in additive manufacturing. Many forms of additive manufacturing make use of transforming matters from one state to another, such as from liquid to solid, by chemical reactions, or by heat (e.g., melting materials at specific locations and solidifying when cooled).
Some additive manufacturing techniques, such as material jetting or fused deposition modeling (FDM), require support structures to provide a substrate for overhangs (e.g., protrusions of the target shape, when sliced in the production direction, being lack of materials in the previous layer). For example, in material jetting, a layer of photo-sensitive polymer is jetted (similar to ink-jet printing) on a flat surface formed by the previous layer and cured into solid by ultra-violet (UV) light. The flat surface may include the model to be formed as well as support materials necessary to support the polymer in the current layer. The support materials can be removed upon completion, such as by melting or dissolving. In FDM, a molten string of filament is extruded and deposited by a hot-end nozzle into a sliced pattern in each layer, the molten string solidifies after exiting the hot-end nozzle. The same molten string is used to form the support structures for subsequent layers. Upon completion, the support structures can be manually removed in a post processing procedure that uses subtractive manufacturing. The manufacturing of a part using a combination of additive and subtractive techniques may be referred to as hybrid manufacturing (HM).
The described embodiments and the advantages thereof may best be understood by reference to the following description taken in conjunction with the accompanying drawings. These drawings in no way limit any changes in form and detail that may be made to the described embodiments by one skilled in the art without departing from the spirit and scope of the described embodiments.
Like numerals indicate like elements.
The present disclosure provides various techniques for automated generation of hybrid additive and subtractive manufacturing process plans. Current hybrid manufacturing approaches generally leverage a two-step process in which an additive manufacturing (AM) step is used to generate a near-net shape, which is close to the final design and may include support structure, followed by a subtractive manufacturing (SM) post-processing step in which the support structure is removed and the part is brought to the net-shape part. However, the design space allowed by this two-step process is limited and may incur a large amount of material waste.
In accordance with embodiments of the present techniques, a hybrid manufacturing (HM) plan can be generated that incorporates additive and subtractive manufacturing (AM/SM) technologies in a multi-modal manufacturing process that combines the advantages of both manufacturing processes. The generated HM plan may be a multi-stage process with interleaved AM and SM operations to enable the cost-optimal manufacture of complex parts.
Embodiments of the present techniques can be used to automatically generate a tree graph that includes a plurality of nodes and edges, wherein each edge represents a selected manufacturing operation, and each node represents a shape of the object resulting from the manufacturing operation of the corresponding edge.
The root node represents the initial object definition, intermediate child nodes represent an intermediate state of the object, and leaf nodes representing the final object definition. The selected manufacturing operation applied at each edge may be selected from a plurality of predefined manufacturing operations, which include subtractive manufacturing operations and additive manufacturing operations. Each path through the tree from the root node to a leaf node represents a different manufacturing process plan, which may include interleaved AM operations and SM operations. The construction of the tree may be guided based on a cost estimate, which may be generated for each node. When the construction of the tree is complete, a lowest cost manufacturing plan may be identified by traversing the tree through a sequence of manufacturing operations connecting the parent node and one of the leaf nodes.
The HM process tree 140 may be generated based at least in part on the design input 108, which may include starting geometry 110, an object model 112, AM capability information 114, and SM tooling information 116. The object model 112 describes the 3D object to be manufactured. More specifically, the object model 112 is an object definition describing a shape of the 3D object to be formed through the manufacturing plan. The shape of the object defined by the object model 112 may be referred to herein as the target shape. The object model 112 may be designed by a user using 3D modeling software. The object model 112 a computer-aided design (CAD) model (e.g., in AutoCAD™, Solidworks™, STEP, VRML, IGES, or DXF formats), a standard triangle language (STL) model or similar point cloud models (e.g., .obj, .x3d, files and the like), or files that can be converted to such files (e.g., .png image files with user-defined thickness information).
The starting geometry 110 describes an initial object definition describing an initial state of a manufacturing plan prior to the application of any manufacturing processes. For example, the starting geometry 110 may be an empty volume, in which case, the first manufacturing processes to be applied would be additive. The starting geometry 110 may also be a solid volume with a simple geometric shape, such as a rectangular block of material, in which case, the first manufacturing processes to be applied would be subtractive. Any suitable shape may be input by the user as the starting geometry 110.
The AM capability information 114 refers to features and limitations of the 3D printing system, such as height range of the 3D printing system (i.e., tallest printable part), minimum feature size, overhang constraints, and others. The SM tooling information 116 describes the features and capabilities of one or more SM tools. For example, the SM tooling information 116 may describe the geometry of various cutting tools that may be available for SM manufacturing operations.
The manufacturing information 118 may include data that enables the cost estimator 144 to compute a cost or cost estimate for each HM process plan. For example, the manufacturing information 114 may include business knowledge related to the cost of materials, the labor cost and time involved in various AM or SM processes, and others.
Some or all of the design input 108 may be received from a user such as an HM practitioner over a network 130 and stored to a data storage device 120. For example, design input 108 may be received from the client device 122, which can include a graphical user interface (GUI) 124 for providing input and viewing the output generated by the HM plan generator 104.
An example HM process tree 140 includes a root node, which represents the starting geometry 110, one or more leaf nodes, which represent the object model 112 (i.e., the as-designed finished object), and one or more intermediate nodes, which represent intermediate stages of the object's shape. Each node is connected by an edge which represents the manufacturing operation applied to the object shape at the parent node to arrive at the object shape of the child node. A path through the tree from the root node to a leaf node represents a sequence of manufacturing steps in the HM process plan 106. Although referred to herein as the HM process plan 106, it will be appreciated that, in some cases, the HM process plan 106 may include all AM manufacturing steps or all SM manufacturing steps depending on the details of a particular job, such as starting geometry and the object model 112. In other embodiments, the HM process plan 106 may alternate between AM manufacturing steps and SM manufacturing steps.
The HM plan generator 104 can include a shape modifier 142 that can be used to alter the shape of the 3D object in accordance with a specified AM or SM manufacturing process. More specifically, the shape modifier 142 modifies the shape of the 3D object at a parent node in accordance with the manufacturing operation described by the edge that connects the parent node to a child node to generate the shape at the resulting child node.
Each edge may describe a particular AM or SM operation, and may also include a rotation step that reorients the 3D object prior the performance of the operation. The process described at each edge specifies where to deposit material in the case of AM operations, or where to remove material in the case of SM operations. The material to be added or subtracted will depend on the current shape of the object at the parent node and the remainder of the target shape that is unfilled and/or the extra material that exists outside of the target shape.
In some embodiments, the process performed at each edge may be selected from a limited set of predefined operations. For example, in some embodiments, there are two possible AM operations and two possible SM operations for the HM plan generator 104 to select from. The AM operations may be referred to as an aggressive addition (illustrated in
The SM processes may be referred to as an aggressive subtraction (illustrated in
Starting at the root node, the HM plan generator 104 may generate a plurality of edges for each parent node, wherein each edge specifies an object orientation and one of the predefined AM or SM manufacturing processes. In some embodiments, the orientation and manufacturing processes may be selected randomly to explore the space of possible solutions. However, in some cases, HM plan generator may use the AM capability information 114 and/or SM tooling information 116 to identify infeasible or impractical solutions to limit the number of child nodes that may be generated for a particular parent node. For example, an infeasible orientation may be identified based on the 3D object being too tall for the 3D printer to deposit material. Another infeasible orientation may be one in which all or a large number of the surfaces are inaccessible. Various heuristics may be defined to determine which orientations and/or which AM or SM processes may be more beneficial any particular stage. For example, one heuristic may dictate that if the previous process was an AM process, then the HM plan generator 104 may be configured to only consider SM processes for the next set of edges, and vice-versa. However, it will be appreciated that in other embodiments, two or more AM processes and two or more SM processed may be performed in a row.
For each edge, the shape modifier 142 generates a new shape according to the specified operation and correlates that new shape to the new node. The new node may then become a parent node from which additional child nodes can be generated.
The HM plan generator 104 can include a cost estimator 144 used to compute an estimated cost to manufacture the 3D object. The cost estimate may be computed based at least in part on the manufacturing information 118, which may describe material cost, labor cost, and others. The cost estimate may be computed for an entire HM process plan to identify a lowest cost plan.
In some embodiments, the cost estimate is computed for each node during the generation of the tree. This estimate cost computed at each node is the estimated cost for the entire HM process plan, including manufacturing processes leading to the node and manufacturing processes have not been performed but may be added to the HM process plan to arrive at the target shape. The cost estimate may be used to determine whether to compute additional child nodes for that specific node. For example, if the cost estimate for a child node is above a threshold, the child node may be flagged and treated as a dead end, in which case the process may move to a different node to generate new branches of the tree. In this way, the over-all size of the resulting tree can be reduced, thereby saving processing resources and enabling the process to converge upon a solution more quickly.
The cost estimator 144 may also be used to generate a cost estimate for a full HM process plan, wherein each of the processes from the root node to the leaf node have been generated. This cost estimate may be computed after the generation of each leaf node and stored in association with the corresponding leaf node. In some embodiments, cost estimates for each leaf node may be computed after the final HM process tree 140 has been computed.
In some embodiments, the HM process tree 140 may be displayed to a user. For example, the HM process tree 140 may be sent to the client device 122 to be displayed using the GUI 124. This may allow the user to see the decisions made by the HM plan generator 104 and may enable the user to manually define new child nodes for further exploration of the solution space. In some embodiments, the user may receive one or more HM process plans 106 instead of or in addition to the full tree. For example, the user may receive a single HM process plan 106 that has been identified as the least costly, or a specified number of the least expensive HM process plans 106.
Once the user has a suitable HM process plan 106, the user may begin manufacturing the 3D object accordingly. For those steps involving AM manufacturing, the material addition for that stage of the process may be converted into printing instructions 126 and sent to a 3D printer 128 for printing. For example, a program referred to as a slicer may be used to transform the edge specification from a CAD or STL file to a G-code file.
Although the processing device 102 and the client device 122 are illustrated as two separate devices, in some cases, the processing device 102 and the client device 122 may be included in a same computational system (or two modules on a common computational platform). In some embodiments, the GUI 124 may be included as a component of the HM plan generator 104. In some cases, the client device 122 may be a consumer terminal (e.g., a personal computer, a smart phone, etc.) that enables a user to upload designs and relevant information to the data storage 120, and the processing device 102 may behave as a server performing requested services to generate the HM process tree 140 and/or HM plans 106 and present them via the network 130. It will be appreciated that other computing system configurations may be used to implement the techniques described herein without deviating from the scope of the present disclosure.
As discussed above, the operation performed at an edge of the tree graph is performed on the starting shape represented by the parent node, and the resulting shape is the shape represented by the child node. In the example of
The final shape 204 may be generated by performing a query at each voxel in the grid to determine whether there are filled voxels directly above the query voxel relative to the force of gravity. For each voxel, if there are filled voxels above it, the voxel is also identified as a filled voxel for purposes of generating the final shape 204. For example, as shown in
In the example of
The final shape 304 may be generated by performing a query at each filled voxel in the target shape 302 to determine whether there are unfilled voxels directly below the query voxel relative to the force of gravity. For each queried voxel, if there are unfilled voxels below it, the voxel is also identified as an unfilled voxel for purposes of generating the final shape 304. For example, as shown in
In the example of
In the first iteration, the SM tool 404 is compared to the initial obstacle, O0, to determine what parts of the targeted material are accessible (accessible material, A0), what parts of the targeted material are inaccessible, and what material would have to be removed to make the inaccessible material accessible (referred to herein as collateral material, C0). The accessible material, A0, is the material that can be removed by the active portion 406 without cause a collision (overlapping volumes) between the inactive portion 408 and the initial obstacle, O0. The inaccessible material is material that cannot be removed by the active portion without causing a collision between the initial obstacle and any part of the tool. The inaccessible material can be identified by subtracting the accessible material, A0, from the unfilled volume, P c (i.e., the inverse of the initial obstacle). The collateral material, C0, can be identified by determining the areas of overlap between the SM tool 404 and the initial obstacle O0 that occur as the active portion 406 of the SM tool 404 is scanned over the inaccessible material, PC-A0.
Next an updated obstacle, O1, is formed by subtracting the collateral material, C0, from the initial obstacle, O0. The process performed above is then repeated to identify accessible material, inaccessible material, and collateral material. It can be seen that the updated obstacle allows for much more material to be accessed, but still blocks some material. The inaccessible material can be identified by subtracting the accessible area from the unfilled volume, PC(i.e., the inverse of the updated obstacle). The collateral material can be identified by determining the areas of overlap between the SM tool and the initial obstacle that occur as the active portion of the SM tool is scanned over the inaccessible material.
The updated obstacle, O1, is then updated again by subtracting the additional collateral material, C1, from the updated obstacle, O1, to form a new updated obstacle, O2. At this stage, all of the targeted material (i.e., material that is not part of the target shape) has been removed while minimizing the amount of material that must be removed to provide access to the targeted material. Accordingly, the process then ends and the updated obstacle, O2, becomes the new object shape for the child node. If not all of the targeted material had been removed, additional iterations would be performed.
In the example of
The final object shape is determined after a series of iterations in which the SM tool 404 is compared to the obstacle to determine what material is to be removed in order to access the targeted material without removing any additional material.
In the first iteration, the SM tool 404 is compared to the initial obstacle, O0, to determine what parts of the targeted material are accessible (accessible material, A0), what parts of the targeted material are inaccessible. The accessible material, A0, is the material that can be removed by the active portion 406 without cause a collision (overlapping volumes) between the inactive portion 408 and the initial obstacle, O0. The inaccessible material is material that cannot be removed by the active portion without causing a collision between the initial obstacle and any part of the tool. The inaccessible material can be identified by subtracting the accessible material, A0, from the unfilled volume, PC(i.e., the inverse of the initial obstacle).
Next an updated obstacle, O1, is formed by subtracting the accessible material, A0, from the shape of the 3D object at the parent node, Pi. The process performed above is then repeated to identify additional inaccessible material that cannot be removed.
It can be seen that the updated obstacle allows for more material to be accessed, but still blocks some material. The inaccessible material can be identified by subtracting the accessible area from the unfilled volume, PC(i.e., the inverse of the updated obstacle). The updated obstacle, O1, then updated again by subtracting the additional accessible material, Ai, from the shape of the 3D object at the parent node, Pi, to form a new updated obstacle, O2. At this stage, as much of the targeted material (i.e., material that is not part of the target shape) has been removed that can be removed without removing any additional material. Accordingly, the process then ends and the updated obstacle, O2, becomes the new object shape for the child node. If more of the targeted material can been removed, additional iterations are performed.
In this example, the process for generating the example HM process tree 600 starts with a root node 602 that is an empty volume. Accordingly, the first set of child nodes will be connected to the root node 602 by edges that describe an AM operation. Child node 604 represents the object shape after applying the conservative AM operation, as described above in relation to
Since the actual object shape does not match the target shape, additional child nodes may be generated for each of child nodes 604 and 606.
Additional child nodes below nodes 608 and 610 may also be generated until the 3D object is complete (i.e., the final shape of the object matches the target shape) or until the cost estimates exceed a threshold cost set by the use. For example, the child node 612 may be formed below child node 608 by rotating the shape represented at child node 608 by 90 degrees clockwise and performing an AM operation. In this case, the aggressive AM operation and the conservative AM operation would yield the same resulting object shape. Additionally, now that the object shape matches the target shape, the child node 612 can be identified as a leaf node.
It will be appreciated that the HM process tree 600 shows a limited number of nodes and that various additional nodes may be generated for the full tree depending on the details of a specific implementation. For example, additional child nodes may be generated for child node 604, possibly resulting in additional leaf nodes.
At block 702, design input is received. The design input may include any of the design input 108 described in relation to
At block 704, the root node is generated. The root node may include shape information that comes from the starting geometry. In other embodiments, the shape information of the root node may be determined automatically. The shape information may be an empty volume (e.g., an empty build platform) or a solid block of material, for example.
At block 706, a determination is made regarding whether the current shape of the 3D object, i.e. the shape represented by the current node, is the same as the target shape within a specified threshold. It should be noted that the current shape of the 3D object is unlikely to match the target shape at the first iteration of the process. If the shapes are the same, the process advances to block 708 and the node is flagged as a leaf node. In some embodiments, the process may end at block 708 after the identification of a first leaf node, as described further below. In other embodiments, the process may continue and additional leaf nodes may be identified. Accordingly, although not shown, the process flow may advance from block 708 to bock 720. If the current shape of the 3D object is not the same as the target shape, the process flow advances to block 710.
At block 710, HM processes are identified. The HM process is associated with a specific edge within the HM process tree and is used to generate the connected child node. The HM process may include a specific AM or SM operation and orientation information describing an orientation of the 3D object used for performing the AM or SM operation. The AM operation and SM operations may be selected from a set of predefined operations, such as the aggressive addition, conservative addition, aggressive subtraction, and a conservative subtraction operations described above. In some embodiments, all of the feasible HM processes are identified and a child node is added to the tree for each one, resulting in a full layer of child nodes.
The HM processes may be identified automatically (i.e., without human involvement). For example, in some embodiments, a child node may be generated for each possible combination of the object's orientation, and each AM operation, and SM operation. Accordingly, identifying the HM process may simply involve incrementing through a predetermined list of HM operations. In some embodiments, heuristics are used to identify the HM process. For example, a heuristic may be used to identify one or more feasible or favorable orientations by determining the degree to which the relevant surfaces are accessible for addition or subtraction of material in a given orientation. Another heuristic may determine whether the HM process should include an AM or SM operation. For example, one example heuristic may dictate that an SM operation should always follow an AM operation, and vice-versa. Another example heuristic may determine whether AM or SM operation is more favorable based on a current ratio of the amount of missing material (i.e., the amount of material to be deposited) and the amount of extra material (i.e., the amount of material to be removed). The amount of missing material may be determined by subtracting the shape of the 3D object at the parent node from the target shape, and the amount of extra material may be determined by subtracting the target shape from the shape of the 3D object at the parent node. Various additional heuristics may be used.
In some cases, it may be possible that no feasible HM processes are identified for the current node. For example, this may be caused by a case where no HM processes are applicable, or where the HM processes do not result in a child node that is geometrically distinct from the parent node.
At block 712, a determination is made regarding whether additional child nodes exist for the current node, i.e., whether additional HM processes were identified at block 710. If no child nodes exist for the current node, the process flow advances to block 714, and the current node is flagged as a dead end. The process flow then advances from block 714 to block 720. If child nodes do exist for the current node, the process flow advances to block 716.
At block 716, the identified HM processes are used to generate the shape information for the child nodes, and the child nodes may be added to the HM process tree. Additionally, an estimated cost is computed for each of the newly generated child nodes. The estimated cost is the cost that will be incurred to manufacture the 3D object using the current HM process plan that the current node is a part of. This estimated cost may include the cost for HM processes that have been completed leading to the current node. For nodes that are not leaf nodes, the cost can also include the estimated cost for completing the manufacture of the 3D object. The estimated cost for completing the manufacture of the 3D object may be determined by computing an estimated AM cost of the material to be added to portions of the target shape that are unfilled, and computing an estimated SM cost of removing portions outside the target shape that have material deposited, and adding the estimated AM cost the estimated SM cost.
At block 718, a determination is made for each child node regarding whether the estimated cost for that child node is above a specified threshold. The threshold may be specified, for example, by the user as a way of limiting the growth of the HM process tree to those solutions that are cost effective. For each child node, if the estimated cost is above the threshold, that child node may be flagged as a dead end, meaning that no additional child nodes will be computed for that child node. The process flow may then advance to block 720.
At block 720, one of the nodes in the tree is identified as an exploration node, i.e., a node for which additional child nodes may be added. In some embodiments, the lowest cost node of the current layer that hasn't already been explored is identified as the exploration node. If there are no potential nodes in the current layer, for example, if all of the nodes are leaf nodes, or dead ends, or have already been explored, the process may traverse the tree back up to the previous layer, i.e., parent of the current layer of nodes. If there are no additional child nodes to be computed for that node, the process may climb up through the tree until a node is identified as having additional child nodes that are yet to be generated. Other embodiments are also possible. Once the new exploration node has been established, the process flow returns to block 706 with the new exploration node selected as the current node so that the selected node can either be identified as a leaf node or have new child nodes added.
The process described above may continue until a sufficient portion of the tree has been explored. The basis for determining whether to terminate the process may depend on the details of a specific implementation. For example, in some embodiments, the method may continue to generate child nodes until a leaf node is generated that has a cost estimate that is below the threshold. Once such a leaf is generated, the process ends and the path between the root node and the leaf node becomes the HM process plan 106 (
It will be appreciated that embodiments of the method 700 may include additional blocks not shown in
The exemplary computer system 800 includes a processing device 802, a main memory 804 (e.g., read-only memory (ROM), flash memory, dynamic random access memory (DRAM), a static memory 806 (e.g., flash memory, static random access memory (SRAM), etc.), and a data storage device 818, which communicate with each other via a bus 830. The processing logic 826 and/or the instructions 822 may include a HM plan generator 827 which can be configured to enable the processing device 802 to perform any of the tasks associated with the HM plan generator 104 of
Processing device 802 represents one or more general-purpose processing devices such as a microprocessor, central processing unit, or the like. More particularly, the processing device may be complex instruction set computing (CISC) microprocessor, reduced instruction set computer (RISC) microprocessor, very long instruction word (VLIW) microprocessor, or processor implementing other instruction sets, or processors implementing a combination of instruction sets. Processing device 802 may also be one or more special-purpose processing devices such as an application specific integrated circuit (ASIC), a field programmable gate array (FPGA), a digital signal processor (DSP), network processor, or the like. The processing device 802 may execute processing logic 826, which may be one example of system 100 shown in
The data storage device 818 may include a machine-readable storage medium 828, on which is stored one or more set of instructions 822 (e.g., software) embodying any one or more of the methodologies of functions described herein, including instructions to cause the processing device 802 to execute system 100. The instructions 822 may also reside, completely or at least partially, within the main memory 804 or within the processing device 802 during execution thereof by the computer system 800; the main memory 804 and the processing device 802 also constituting machine-readable storage media. The instructions 822 may further be transmitted or received over a network 820 via the network interface device 808.
While the machine-readable storage medium 828 is shown in an exemplary embodiment to be a single medium, the term “machine-readable storage medium” should be taken to include a single medium or multiple media (e.g., a centralized or distributed database, or associated caches and servers) that store the one or more sets of instructions. A machine-readable medium includes any mechanism for storing information in a form (e.g., software, processing application) readable by a machine (e.g., a computer). The machine-readable medium may include, but is not limited to, magnetic storage medium (e.g., floppy diskette); optical storage medium (e.g., CD-ROM); magneto-optical storage medium; read-only memory (ROM); random-access memory (RAM); erasable programmable memory (e.g., EPROM and EEPROM); flash memory; or another type of medium suitable for storing electronic instructions.
The preceding description sets forth numerous specific details such as examples of specific systems, components, methods, and so forth, in order to provide a good understanding of several embodiments of the present disclosure. It will be apparent to one skilled in the art, however, that at least some embodiments of the present disclosure may be practiced without these specific details. In other instances, well-known components or methods are not described in detail or are presented in simple block diagram format in order to avoid unnecessarily obscuring the present disclosure. Thus, the specific details set forth are merely exemplary. Particular embodiments may vary from these exemplary details and still be contemplated to be within the scope of the present disclosure.
Additionally, some embodiments may be practiced in distributed computing environments where the machine-readable medium is stored on and or executed by more than one computer system. In addition, the information transferred between computer systems may either be pulled or pushed across the communication medium connecting the computer systems.
Embodiments of the claimed subject matter include, but are not limited to, various operations described herein. These operations may be performed by hardware components, software, firmware, or a combination thereof.
Although the operations of the methods herein are shown and described in a particular order, the order of the operations of each method may be altered so that certain operations may be performed in an inverse order or so that certain operation may be performed, at least in part, concurrently with other operations. In another embodiment, instructions or sub-operations of distinct operations may be in an intermittent or alternating manner.
The above description of illustrated implementations of the invention, including what is described in the Abstract, is not intended to be exhaustive or to limit the invention to the precise forms disclosed. While specific implementations of, and examples for, the invention are described herein for illustrative purposes, various equivalent modifications are possible within the scope of the invention, as those skilled in the relevant art will recognize. The words “example” or “exemplary” are used herein to mean serving as an example, instance, or illustration. Any aspect or design described herein as “example” or “exemplary” is not necessarily to be construed as preferred or advantageous over other aspects or designs. Rather, use of the words “example” or “exemplary” is intended to present concepts in a concrete fashion. As used in this application, the term “or” is intended to mean an inclusive “or” rather than an exclusive “or”. That is, unless specified otherwise, or clear from context, “X includes A or B” is intended to mean any of the natural inclusive permutations. That is, if X includes A; X includes B; or X includes both A and B, then “X includes A or B” is satisfied under any of the foregoing instances. In addition, the articles “a” and “an” as used in this application and the appended claims should generally be construed to mean “one or more” unless specified otherwise or clear from context to be directed to a singular form. Moreover, use of the term “an embodiment” or “one embodiment” or “an implementation” or “one implementation” throughout is not intended to mean the same embodiment or implementation unless described as such. Furthermore, the terms “first,” “second,” “third,” “fourth,” etc. as used herein are meant as labels to distinguish among different elements and may not necessarily have an ordinal meaning according to their numerical designation.
It will be appreciated that variants of the above-disclosed and other features and functions, or alternatives thereof, may be combined into may other different systems or applications. Various presently unforeseen or unanticipated alternatives, modifications, variations, or improvements therein may be subsequently made by those skilled in the art which are also intended to be encompassed by the following claims. The claims may encompass embodiments in hardware, software, or a combination thereof