-
Notifications
You must be signed in to change notification settings - Fork 5
DeltaMesh
The DeltaMesh is a tetrahedral mesh or tetramesh. Tetrameshes are used extensively for 3D modeling. A single tetrahedron provides linear interpolation of vertex data for any enclosed point via barycentric coordinate conversion. Therefore, a mesh of tetrahedra that fully spans a 3D volume can be used to interpolate data throughout that volume. Tetrameshes can also be refined as necessary for greater interpolation resolution and therefore greater accuracy.
FirePick Delta (FPD) is a non-linear robot that works in three dimensions. In addition, FPD non-linearity is such that it is difficult to model exactly. Although delta kinematic equations are readily available, these kinematic models tend to rely on idealistic 3-fold symmetry and often assume that similar parts are in fact identical in dimension. The real world rarely obliges such assumptions and the result is a machine that moves precisely but not as the kinematic model predicts. Indeed, all uncorrected FPDs will exhibit errors of as much as several millimetres at the limits of motion away from the central z-axis. The most common remark new FPD owners will utter is how they see "bowl shaped error around the z-axis".
Although it would be possible to painstakingly construct an asymmetric kinematic model for a rotational delta robot, such an endeavor would result in a vast number of coefficients that need to be measured. A simpler approach is to just use a tetramesh to model the 3D error vector field for all interpolable data. The tetramesh provides a simple tradeoff--if you want more accuracy, measure more tetramesh vertices. If you want faster calibration, measure fewer tetramesh vertices. This is how we use the DeltaMesh for FPD and why it features prominently in the firenodejs web application.
A tetramesh is a just grid of tetrahedra vertices. For proper interpolation, all vertices should have interpolable data. Such data can be either measured directly or calculated from the measured values. For example, we measure data such as the following for FPD:
- GridCellW is the average horizontal separation of grid cells measured by CalcGrid at a vertex
- GridCellH is the average vertical separation of grid cells measured by CalcGrid at a vertex
Measuring cell width and height is very helpful in calibrating the FPD movement in the z-direction (i.e., up/down). As the effector gets closer to the grid, the cells loom larger. As the effector rises above the grid, the cell width and height shrink. From perspective geometry, we have a simple relationship:
PerspectiveRatio = Δz / ΔGridCellW = Δz / ΔGridCellH
The perspective ratio lets us calculate the inconsistency of measured cell width/height values as z-displacement errors:
- ZErrorW is the z-error calculated from GridCellW at a vertex
- ZErrorH is the z-error calculated from GridCellH at a vertex
Finally, once we have z-errors at each DeltaMesh vertex, we use tetramesh math to interpolate the z-error at any xyz within the DeltaMesh.
To populate the DeltaMesh with data, we need to scan vertices in the region of interest (ROI). You can scan a selected vertex or scan the entire ROI. Click Scan to select a scanning action.
When data is scanned into the DeltaMesh, it shows up in the colored DeltaMesh chart (see above). The chart shows the currently selected property in one of two z-planes. The z-planes sandwich the scanned vertices and therefore define the 3D movement volume of maximum accuracy. Click on any vertex to see the information for that vertex or even MoveTo that vertex.
VIew DeltaMesh data using the View Mesh Data accordion. This table consists of columns whose headers are mnemonic abbreviations for vertex variables (e.g., "gcw" stands for "GridCellW"). Use a desktop computer to see tooltip explanations which may not display on touch displays. Click on any column header for descriptive statistics (e.g., mean, standard deviation, etc.).
Notice that measured data is sparse (see gch). Sparse data is normal and happens whenever sampled data exceeds maximum error limits (i.e., maxRMSE). Although perfect data is always nice to have, if you just have a hole or too in your data, simply click Mend. The DeltaMesh often has enough information to interpolate missing data. You'll need to click Mend after scanning data.
The other button is CalcProps, which you should click after mending the data. A mended, calculated DeltaMesh is ready for use. For example, you will have z-error data for correcting z-movements.
Once the DeltaMesh is mended and calculated, it can be used to interpolate data in the calibration volume. For example, you can MoveTo a selected vertex at either the corrected z or the uncorrected z.
Here's the DeltaMesh chart of ezw, which is the z-error calculation based on GridCellW. Notice that the error is almost 2mm for some points. Also notice the bowl-shaped of the z-error shown in the chart.