After spending a week or more reading all about the calibration problems we all seem to be having (me too) I'm taking a stab at understanding them myself. I made my own z-probe which seems repeatable enough, got out all my measuring tools, started fiddling... and now I have some questions.
ASSUMING a perfect delta printer, do the following assumptions hold?
1. When the extruder is positioned DELTA_RADIUS away from center, towards one of the columns, that delta arm is vertical
2. When a delta arm is vertical, the Z position depends only on the delta arm length
3. When at X=0,Y=0, the Z-heights of each carriage are identical, and the distance from the extruder to each column is identical. (if they're not, how do you know which to correct?)
4. The X and Y calibration depends on DELTA_DIAGONAL_ROD and DELTA_RADIUS (i.e. you can't just fiddle those to correct for a warped bed)
Given those assumptions, one should be able to set the Z stops and measure the DELTA_RADIUS and arm angle corrections by locating these "arms are vertical" spots. Reversing the above assumptions, we have...
1. If you position the extruder such that a delta arm is vertical, it's distance from X=0,Y=0 tells you the DELTA RADIUS for that arm
2. You can adjust that end stop screw for Z=0 at that location, and it'll be correct
If you can measure "vertical" accurately enough, and can measure your delta arm length accurately enough, this should let us directly measure delta radius (per arm), angle corrections (per arm), and correct for z offset (per arm). Add delta arm length, and I think that's all the core measurements (not including column tilt).
Having said that... I did some experiments with measuring my bed. I wrote a script to probe the whole surface on a grid and plot the variance, and had the same "too high between columns" as everyone else. I also wrote a delta simulator where I could simulate miscalibrations to see what causes that effect. I was able to reproduce it by assuming the rod length was off by a few mm, and corrected for via z-height and bed radius. However, that "miscalibration" also changed the X and Y scale. I recalibrated my printer so that X and Y dimensions were accurate and re-scanned the bed. Still off.
Next I removed the glass and scanned the onyx directly. Different shape. So I put three bits of thick tape on it and replaced the glass - but no clips - so nothing was trying to flex the glass. Rescan, different shape. Turn the glass 90 degrees. Different shape (and not just rotated 90 degrees).
The variance was +- about 0.2mm. So I put my best straightedge on the surface and checked the edges with feeler gauges. Yup, they're low about 8 thou, or 0.2mm.
So I'm thinking... If I use the above assumptions to properly measure my printer (some of which can be done with a z-probe) and plug the "real world" numbers into the firmware, and use a calibration print to check X,Y scale... if I then print something large with a "flat" top (or even a grid of buttons with the same Z top), should *those* be "flat"?
I'm thinking, should we calibrate assuming a flat bed, or calibrate for a flat build plane and correct for the bed?
Also, a tool I find useful: I milled a bar of aluminum about 4" long such that it's 9.2mm high on one end, and 10.8mm high on the other. Moving to Z=10 lets you easily measure the height to within 0.1mm just by sliding the bar under it. I have a dozen buttons in pronterface to move to Z=10 at various locations and one to quickly re-home.
Also, if anyone is interested in the simulator (in C) or the grid probe script (in Python), I'm willing to share them, it'll just take time to put them somewhere in a useful state