The present invention relates to computer assisted design and manufacturing, and more particularly, is related to determining a wiring path through an assembly for manufacture.
Routing wiring through assemblies with a combination of electrical and mechanical components may be challenging. In general, it is desirable to minimize the point-to-point distance between wiring connections, yet the geometry of an assembly may make it difficult to facilitate such connections while avoiding collisions with electro-mechanical components of the assembly. Wires begin at a first connection point and end at a second connection point, typically on electrical devices such as batteries, motors, and control boards, passing through various points or regions in the assembly. Finding a good/clear path through the assembly from the first connection point on a first component to the second connection point on a second component can be a time consuming and error prone process.
Computer Assisted Drafting tools such as SolidWorks Electrical rely on pre-defined paths for the wires to follow. Those products with automatic routing capabilities, such as SolidWorks Routing, do not consider collisions with the geometry of other components during their auto-routing processes, and as such the user must manually modify the result to avoid the collision. Therefore, there is a need in the industry to address the abovementioned shortcomings.
Embodiments of the present invention provide collision avoidance for wiring through modeled assemblies. Briefly described, the present invention is directed to determining an efficient wire route through an assembly avoiding collisions with a plurality of electrical-mechanical assembly components. A first wire route termination location and a second wire route termination location in a received three dimensional (3D) model of the assembly. The received 3D model is converted into a volume model distinguishing between occupied and available space. A wire route is found from the first wire route termination location through the assembly available space to the second wire route termination location, and an image of the wire route in the model of the assembly is displayed.
Other systems, methods and features of the present invention will be or become apparent to one having ordinary skill in the art upon examining the following drawings and detailed description. It is intended that all such additional systems, methods, and features be included in this description, be within the scope of the present invention and protected by the accompanying claims.
The accompanying drawings are included to provide a further understanding of the invention, and are incorporated in and constitute a part of this specification. The components in the drawings are not necessarily to scale, emphasis instead being placed upon clearly illustrating the principles of the present invention. The drawings illustrate embodiments of the invention and, together with the description, serve to explain the principles of the invention.
The following definitions are useful for interpreting terms applied to features of the embodiments disclosed herein, and are meant only to define elements within the disclosure.
As used within this disclosure, an “assembly” refers to a combination of components that together form a product. An “assembly occupied space” refers to a volume of the assembly with a mechanical or electrical component.
As used within this disclosure, a “voxel” refers to one of a set of uniform three dimensional blocks that may be used to approximate the volume of a three dimensionally modelled object. While the embodiments described herein generally refer to cube shaped voxels, voxels of a different shape may be used in alternative embodiments. Voxels are analogous to three dimensional pixels, and may represent any 3D geometry. An “occupied voxel” refers to a voxel intersecting with an assembly occupied space. An “available voxel” refers to a voxel not intersecting with an assembly occupied space. A “path voxel” refers to an available voxel intersecting with a proposed or determined wiring route within the assembly.
As used within this disclosure, a “mesh” refers to a mathematical fabric of triangles used to model a contiguous surface.
As used within this disclosure, “automatic wire routing” refers to a process that receives a three dimensional (3D) model of an assembly as input, and determines a wiring path between assembly components.
As used within this disclosure “clearance distance” between a first object and a second object indicates the first object and the second object do not intersect at any point.
As used within this disclosure “cost” refers to a measure of distance, and a “cost function” is the length of a path and to be minimized by a path finding process. In particular, a cost function measures the length of a path from between a first point, here a start voxel, to as second point, here an end voxel. The embodiments described below include steps to minimize the cost function to find a path with the shortest length. The distance between two voxels may be measured as distance between their two center points. If there are no obstacles between the start voxel and the end voxel, the shortest path is the line segment between the center points of the voxels. If there is at least one obstacle, a path includes line segments passing the center points of two or more voxels. The cost function may involve a combination of iterative processes for expanding a plurality of paths (ideally all possible paths) beginning at the start voxel and proceeding through some number of intermediate voxels, for example, three intermediate voxels v1, v2, v3. For example, some voxels are checked at an iterative step where the cost function can be computed by a summation of two parts F(v)=G(v)+H(v), where F(v) is the total cost of passing an intermediate voxel v between the start voxel and the end voxel. G(v) is the total cost from the start voxel to voxel v. G(v) is determined at each iterative step, while H(v) is an estimation of cost from voxel v to the end voxel, which may heuristically estimated over the iterations.
As used within this disclosure, a “computer numerical control” (CNC) machine refers to a manufacturing device or system configured to receive a design or model of an assembly, and employs computer software to dictate the operation and/or movement of factory tools and machinery to manufacture the assembly. Examples of a CNC machine may include a one of or a combination of a milling machine, a lathe, a grinder, a mill, a printed circuit board production machine, a CNC router, a pick and place machine, a laser and/or plasma cutter, a wire harness assembler, a wire harness installer, and a 3D printer, among others.
Reference will now be made in detail to embodiments of the present invention, examples of which are illustrated in the accompanying drawings. Wherever possible, the same reference numbers are used in the drawings and the description to refer to the same or like parts.
Exemplary embodiments of the present invention illustrate a method to automatically route a wire through electro-mechanical components of an assembly without colliding with the other components and maintaining the shortest possible wire length.
Electro-mechanical assemblies typically involve electrical and/or optical wiring between assembly components. However previous assembly design tools have not properly addressed wiring routing. The exemplary embodiments create a routing for wires in a 3D modeled assembly. The wires begin and end at different connection points, typically on electrical devices such as batteries, motors, and control boards, and pass through various points or regions in the device. Since wiring is typically a time consuming and/or error prone process, the exemplary embodiments advantageously identify an efficient, clear path through the assembly from a first connection point on a first component to a second connection point on a second component. For example, the wiring path may pass through openings or other control points (for example, clamps) between the first component and the second component. The present embodiments provide a system and method for automatic wire routing.
In general, automatic wire routing in a 3D modeled assembly according to the present embodiments has two major steps. The first step is to voxelize the modeled into small volumes called voxels (typically cubes) and identify available voxels (free voxels) and unavailable voxels (boundary voxels). Here, a free voxel is available for a possible wire route, while an unavailable voxel is not (for example, is otherwise occupied). The second step is to search the available voxels to find shortest wire routes. The 3D modeled assembly may be received by automated manufacturing machinery such as a CNC machine for manufacturing the assembly with the specified wire route.
For explanatory purposes, under the embodiments the “design space” refers to a bounding box around the 3D modeled assembly in a CAD system. The bounding box encloses all the geometry models within the modeled assembly. The design space is partitioned into voxels.
Under the first embodiment, the voxels are implemented as small cubes along x,y,z directions in 3D space. The voxel size may be selectable, where smaller voxels yield more accurate results. Given an arbitrary bounding box shape, cube shaped voxels may not always lie within the bounding box surface along each of the directions x, y, z. Therefore, some voxels may extend outside the surface of the bounding box. The user may specify a voxel side length ‘a.’
When voxelizing a bounding box for a modeled assembly, it may be useful to assume, on an x, y, z oriented grid, the lowest point of the model bounding box is (Xmin, Ymin, Zmin) and the highest point of the model bounding box is (Xmax, Ymax, Zmax). There are (n1, n2, n3) voxels.
A voxel is indexed along x, y, z directions (i, j, k), where 0≤i≤n1−1, 0≤j≤n2−1, 0≤k≤n3−1. A voxel itself is its own bounding box with two extremes (Xmin+ia, Ymin+ja, Zmin+ka), (Xmin+ia+a,Ymin+ja+a, Zmin+ka+a).
For any point p=(x, y, z) in the model bounding box, it sits in a voxel whose index is
Under the exemplary embodiments, voxels are used to identify space that is available for wire routing. If a voxel intersects with a 3D geometry model, then it is identified as being unavailable for a wire route.
For routing purposes, the method may assume a wire radius r and that may account for additional clearance for the wire routes beyond the physical wire so that the routed wires do not collide with model components. The wire radius r may be user selectable, and may be specified to include the aforementioned additional clearance. It should be noted that while the wire routes must be within the specified wire clearance within the model bounding box, wire routes outside of the boundary of models may have a radius exceeding the specified wire clearance. That is, voxels lying outside the clearance around boundary are considered as available or free for wire routing. Any voxels intersecting with a clearance around model boundary are considered as boundary voxels. Equivalently, if the minimum distance between a voxel and a model is smaller than the clearance, then the voxel is a boundary voxel. Other voxels are free voxels that can be used for wire routing.
There are multiple ways to calculate a minimum distance between modeled components. For example, one common practice is to use triangle meshes of models to calculate distance between geometry models. In CAD systems, geometry models typically have triangular meshes generated for display and other computations. A voxel may also be triangulated by splitting each square face into two triangles. A straightforward way is to use Bounding Volume Hierarchy (BVH) tree to find minimum distance between two triangular meshes.
An approximate and more efficient way of identifying boundary voxels is to check the minimum distance of the center of a voxel and model triangle meshes. If the minimum distance is smaller than half of voxel size a and the clearance value r from a triangle of model mesh, the method marks the voxel as a boundary voxel.
A more conservative way is checking the diagonal distance
For one triangle, since not all the voxels in space need to be checked, only the free voxels that are close to the bounding box of a triangle are potentially identified as boundary voxels. The bounding box of a triangle is determined by two extreme points—one minimum (min) point Pmin=(xmin, ymin, zmin) and one maximum (max) point Pmax=(xmax, ymax, zmax). Given the coordinates of three points P1=(x1, y1, z1), and P2=(x2, y2, z2), P3=(x3, y3, z3),
Only the voxels touching this bounding box are considered as potential boundary voxels. If Pmin is in voxel (imin, jmin, kmin) and Pmax is in voxel (imax, jmax, kmax), it is sufficient for the embodiments to check all the voxels imin≤i≤imax, jmin≤j≤jmax, kmin≤k≤kmax.
An assembly bounding box is determined for an assembly having a plurality of components, as shown by block 810. The assembly is partitioned into a plurality of voxels (n1, n2, n3) in x, y, z directions, as shown by block 820. A triangle mesh is determined for each of the plurality of components, as shown by block 830. Extreme points Pmin and Pmax are located for each mesh triangle for each mesh, as shown by block 840. A mesh bounding box two voxel indexes (imin, jmin, kmin) and (imax, jmax, kmax), containing Pmin and Pmax is determined for each triangle of each triangle mesh as shown by block 850.
All the voxels intersecting with the mesh bounding box for the indexes imin≤i≤imax, jmin≤j≤jmax, kmin≤k≤kmax are found, as shown by block 860. A voxel-to-triangle distance is calculated from the center of each intersecting voxel (i, j, k) to each triangle, as shown by block 870. The voxel for each voxel-to-triangle distance smaller than a predetermined clearance value is marked voxel as a boundary voxel, as shown by block 880.
The free voxels may be thought of as islands in space separated by boundary voxels. For two connection points, the exemplary method locates two voxels that contain the connection points, as described further below.
Voxels form a natural weighted graph in 3D space, a “voxel graph.” A voxel can have neighbors by sharing faces, edges, and vertices. For each voxel, there are 6 faces, 12 edges, and 8 vertices, resulting in 26 total possible neighbors. Voxels may be thought of as nodes in graph. Neighbors determines connectivity relationship. The 3D Euclidean distance between two center points of two neighbor voxels is the weight between the two connected nodes in the graph.
Several known path finding algorithms may be used to find the shortest path between any two nodes in a graph, which are employed, for example, in gaming artificial intelligence (AI) and robotics path finding. A* (pronounced “A-star”) and its mutations are the most popular path finding algorithms due to their simplicity and efficiency (see among polyhedral obstacles.” Communications of the ACM 22.10 (1979): 560-570). These methods begin with a start voxel s and iteratively expand to neighbor voxels by choosing the path with the smallest cost until the end voxel e is reached. The path finding algorithms produce a path from the start voxel s to the end voxel e.
The cost of path finding algorithms are based on the distance definition between two neighbor nodes or voxels. The produced paths are not necessarily the shortest distance in real 3D space, but may approximate the real shortest distance in 3D space. The embodiments use path finding algorithms to find the shortest distance path in the voxel graph and as starting point for the eventual wire route.
A* method can only search in certain directions across faces, edges, and vertices. There may be many turning points in an A* produced path. The embodiments may remove a turning point if the resulting path does not cross boundary voxels, yielding a shorter path. It is desirable to remove as many intermediate turning points along the path as possible. If a line between two points does not cross boundary voxels, the two points may be connected directly. Checking if a straight line between two points crosses boundary voxels is referred to as checking for “line of sight.” If there are no boundary voxels between two points, then these two points satisfy line of sight.
For example,
If A* method is used to find a path of voxels, the method of the embodiments may use line of sight to remove potential turning points using an iterative process starting with checking the first voxel and the third voxel in the path. If the center points of the first and the third voxels satisfy line of sight condition, then the second voxel can be removed from the path. In a subsequent iteration, the method similarly checks if the third voxel can be removed in the same way. If the third voxel cannot be removed, the second voxel likewise cannot be removed, and the process continues to check second voxel and the fourth voxel. The method iterates with line-of-sight accordingly until no voxels may be removed.
The following is a more detailed description of the embodiment incorporating the A* and line of sight approaches.
The method maintains a “parent map” P(v) to keep track of the voxel in the previous step(s) along the path. In the path from the start voxel s to a current voxel v, the voxel P(v) immediately precedes the voxel v.
The cost function used in A* algorithm has two parts F(v)=G(v)+H(v). The cost function G(v) is the total weight or distance of the path from start voxel s to the current voxel v. The heuristic cost function H(v) is a heuristic distance from current voxel v to the end voxel e. The heuristic function has many forms of estimation (see Nash, Alex, Sven Koenig, and Craig Tovey. “Lazy Theta*: Any-angle path planning and path length analysis in 3D.” Proceedings of the AAAI Conference on Artificial Intelligence. Vol. 24. No. 1. 2010). For example, a simple center distance between the current voxel v and the end voxel e can be used such that h(v)=Dist(v, e). The total cost function is F(v)=G(v)+H(v). A closed set C is used to record all the voxels that are already in the paths. A voxel already in the set C is not considered as candidate voxels for the following iterations.
The embodiments use a priority queue Q to keep track of all the voxels that are candidate to be extended in subsequent iterations. The voxels in the priority queue Q are neighbors of some voxels in the set C. The steps for path selection are summarized below.
The method checks if the priority queue Q is empty. If the priority queue is empty, the method determines a path is not found. Other wise, the method determines a top element which is the voxel v with the smallest cost function from Q such that
The method adds v to the closed set C, as shown by block 1020.
If v is not the end voxel e, the method finds neighbor voxels n of v such that n E Neighbor(v) that are not boundary voxels and not in the closed set C, such that n V C, as shown by block 1030. For each valid neighbor voxel n the method calculates a tentative G cost of voxel n by adding the distance between voxel v and its neighbor voxel to G(v) v such that
If the value G(n) is smaller than the original G cost, the embodiment uses this new value ask the G cost of voxel n, updates the F cost by F(n)=G(n)+H(n) and updates the parent map P(n)=v. The new pair (n, F(n)) is inserted to the priority queue Q.
The method generate the path from the start voxel to the end voxel by iteratively adding parent voxels from the parent map, as shown by block 1040.
If a path is not found, then the method determines there is no available wire route, and returns an empty wire route. If there is a path, the method employs line of sight to remove turning voxels, as shown by block 1050. For the rest of the voxels, the method performs a spline interpolation of the center points and returns the curve as the resulting wire route, as shown by block 1060.
An enhancement of the above described embodiment is to use line of sight during iterations to free search directions. The enhancement is effectively an any-angle path finding method. An example of this approach is called the Lazy Theta star method (see Nash, Alex, Sven Koenig, and Craig Tovey. “Lazy Theta*: Any-angle path planning and path length analysis in 3D.” Proceedings of the AAAI Conference on Artificial Intelligence. Vol. 24. No. 1. 2010). As described above regarding
The method checks if the priority queue Q is empty. If the priority queue is empty, the method determines a path is not found. Other wise, the method determines a top element which is the voxel v with the smallest cost function from Q such that
The method adds v to the closed set C, as shown by block 1020.
The second embodiment checks if voxel v and its parent P(v) satisfy line of sight (LoS) conditions. If not, P(v) needs an update as shown by block 1200. Block 1200 is expanded in
Neighbor voxels of voxel v that are also in the closed set are found, as shown by block 1210. Here, the embodiment finds all the neighbors n of voxel v such that n∈Neighbor(v) that are also in close set C. A tentative cost is calculated for each found neighbor voxel, as shown by block 1220, where the tentative cost F(n)=G (v)+Dist(v, n) for all neighbors n found as per block 1210. A replacement parent with a minimum tentative cost is found, as shown by block 1230. Here, the voxel p with minimum tentative cost F(p) becomes the new parent of voxel v such that
The replacement parent of voxel v is set such that P(v)=p as the parent of voxel v, as shown by block 1240. The costs are updated, where the update costs are G(v)=G(p)+a and F(v)=G(v)+H(v), as shown by block 1250.
Returning to
If the value G(n) is smaller than the original G cost, the embodiment uses this new value ask the G cost of voxel n, updates the F cost by F(n)=G(n)+H(n) and updates the parent map P(n)=v. The new pair (n, F(n)) is inserted to the priority queue Q.
The method generates the path from the start voxel to the end voxel by iteratively adding parent voxels from the parent map, as shown by block 1040.
If a path is not found, then the method determines there is no available wire route, and returns an empty wire route. If there is a path, the method employs line of sight to remove turning voxels, as shown by block 1050. For the rest of the voxels, the method performs a spline interpolation of the center points and returns the curve as the resulting wire route, as shown by block 1060.
In the following example, the second embodiment (Lazy Theta star) method is applied to the battery assembly model 600 of
Voxel implementation is an easy and fast way to generate 3D grid cells, and is also convenient for path finding algorithms. While less desirable, other types of 3D grids may be used with path finding algorithms for auto-routing. The exemplary embodiments may be naturally adapted to other 3D grids. For example, all 3D Finite Element grids such as tetrahedral elements and hexahedron elements can be directly used. These grids can construct graphs with connectivity defined by vertices, edges or faces, where two neighbor grids are connected by vertices, edges, or faces. Finite Element grids are more accurate on the boundaries than voxels as they can interpolate to the original geometry. However, they are much more expensive to generate and the subsequent path finding requires more computation for grid distance and line of sight checking.
In alternative embodiments, other path finding algorithms may be used for searching for shortest wire route distance. For example, Breadth First Search algorithm (BFS), Depth First Search Algorithm (DFS), and Dijkstra Algorithm are all feasible with some adaptations. BFS and DFS algorithms are considered much more expensive than A Star or Theta Star methods. Even Dijkstra Algorithm is more time consuming as it does not consider search directions. To avoid artifacts of routing, Line of Sight may be preferable to remove turns and spline interpolation or fitting before final routing results.
As previously mentioned, the present system for executing the functionality described in detail above may be a computer, an example of which is shown in the schematic diagram of
The processor 502 is a hardware device for executing software, particularly that stored in the memory 506. The processor 502 can be any custom made or commercially available single core or multi-core processor, a central processing unit (CPU), an auxiliary processor among several processors associated with the present system 500, a semiconductor based microprocessor (in the form of a microchip or chip set), a macroprocessor, or generally any device for executing software instructions.
The memory 506 can include any one or combination of volatile memory elements (e.g., random access memory (RAM, such as DRAM, SRAM, SDRAM, etc.)) and nonvolatile memory elements (e.g., ROM, hard drive, tape, CDROM, etc.). Moreover, the memory 506 may incorporate electronic, magnetic, optical, and/or other types of storage media. Note that the memory 506 can have a distributed architecture, where various components are situated remotely from one another, but can be accessed by the processor 502.
The software 508 defines functionality performed by the system 500, in accordance with the present invention. The software 508 in the memory 506 may include one or more separate programs, each of which contains an ordered listing of executable instructions for implementing logical functions of the system 500, as described below. The memory 506 may contain an operating system (O/S) 520. The operating system essentially controls the execution of programs within the system 500 and provides scheduling, input-output control, file and data management, memory management, and communication control and related services.
The I/O devices 510 may include input devices, for example but not limited to, a keyboard, mouse, scanner, microphone, etc. Furthermore, the I/O devices 510 may also include output devices, for example but not limited to, a printer, display, etc. Finally, the I/O devices 510 may further include devices that communicate via both inputs and outputs, for instance but not limited to, a modulator/demodulator (modem; for accessing another device, system, or network), a radio frequency (RF) or other transceiver, a telephonic interface, a bridge, a router, or other device.
When the system 500 is in operation, the processor 502 is configured to execute the software 508 stored within the memory 506, to communicate data to and from the memory 506, and to generally control operations of the system 500 pursuant to the software 508, as explained above.
When the functionality of the system 500 is in operation, the processor 502 is configured to execute the software 508 stored within the memory 506, to communicate data to and from the memory 506, and to generally control operations of the system 500 pursuant to the software 508. The operating system 520 is read by the processor 502, perhaps buffered within the processor 502, and then executed.
When the system 500 is implemented in software 508, it should be noted that instructions for implementing the system 500 can be stored on any computer-readable medium for use by or in connection with any computer-related device, system, or method. Such a computer-readable medium may, in some embodiments, correspond to either or both the memory 506 or the storage device 504. In the context of this document, a computer-readable medium is an electronic, magnetic, optical, or other physical device or means that can contain or store a computer program for use by or in connection with a computer-related device, system, or method.
Instructions for implementing the system can be embodied in any computer-readable medium for use by or in connection with the processor or other such instruction execution system, apparatus, or device. Although the processor 502 has been mentioned by way of example, such instruction execution system, apparatus, or device may, in some embodiments, be any computer-based system, processor-containing system, or other system that can fetch the instructions from the instruction execution system, apparatus, or device and execute the instructions. In the context of this document, a “computer-readable medium” can be any means that can store, communicate, propagate, or transport the program for use by or in connection with the processor or other such instruction execution system, apparatus, or device.
Such a computer-readable medium can be, for example but not limited to, an electronic, magnetic, optical, electromagnetic, infrared, or semiconductor system, apparatus, device, or propagation medium. More specific examples (a nonexhaustive list) of the computer-readable medium would include the following: an electrical connection (electronic) having one or more wires, a portable computer diskette (magnetic), a random access memory (RAM) (electronic), a read-only memory (ROM) (electronic), an erasable programmable read-only memory (EPROM, EEPROM, or Flash memory) (electronic), an optical fiber (optical), and a portable compact disc read-only memory (CDROM) (optical). Note that the computer-readable medium could even be paper or another suitable medium upon which the program is printed, as the program can be electronically captured, via for instance optical scanning of the paper or other medium, then compiled, interpreted, or otherwise processed in a suitable manner if necessary, and then stored in a computer memory.
In an alternative embodiment, where the system 500 is implemented in hardware, the system 500 can be implemented with any or a combination of the following technologies, which are each well known in the art: a discrete logic circuit(s) having logic gates for implementing logic functions upon data signals, an application specific integrated circuit (ASIC) having appropriate combinational logic gates, a programmable gate array(s) (PGA), a field programmable gate array (FPGA), etc.
The above-described methods may be used for controlling a manufacturing system to produce an assembly with collision avoidance wire routing, as shown by
A computer assisted drafting (CAD) system 1510 includes a processor 1512 and a memory 1514. The processor is configured to execute non-transient instructions received from the memory. When executed by the processor 1512, the CAD system 1510 performs the steps of receiving a three dimensional (3D) model of the assembly, identifying a first wire route termination location and as second wire route termination location, converting the received 3D model into a volume model distinguishing between occupied and available space, and finding a wire route from the first wire route termination location through the assembly available space to the second wire route termination location. The CAD system 1510 displays the wire rout on a display device 1515. Automated manufacturing machinery such as a computer numerical control (CNC) machine 1520 is configured to receive the 3D wire-routed assembly model from the CAD system 1510 and manufacture the wire-routed assembly according to the 3D wire-routed assembly model received from the CAD system 1510. For example, a wire harness assembly device may receive the wire-routed assembly model to manufacture a wiring harness according to the wiring path in the wire-routed assembly model. Similarly, a wiring machine may be used to install a wiring harness in the wire-routed assembly according to the received wire-routed assembly model.
The above embodiments offer several advantages over previous wire routing techniques. For example, the system/method inputs are simple, such that users provide a geometry model corresponding to a real environment, tolerance or voxel size for accuracy and connection points. Thereafter, from the user perspective the wire routing is fully automatic. The embodiments determine the shortest path from a start connection point to an end connection point. The embodiments only search for wire routes in available space, avoiding interference with existing geometry and wires. The resulting path is (or is close to) the shortest possible path. The embodiments adjust the route along its course so as to ensure a valid mathematical result for the underlying path.
It will be apparent to those skilled in the art that various modifications and variations can be made to the structure of the present invention without departing from the scope or spirit of the invention. In view of the foregoing, it is intended that the present invention cover modifications and variations of this invention provided they fall within the scope of the following claims and their equivalents.