I write some Octave (MATLAB) scripts to model the delta bot commands and compute the actual effector position of a Delta bot. I can introduce errors to the Delta bot definition, and plot the results of its response to an ideal command. In this case, I am just raster scanning the bed of the printer.
When the DELtA_RADIUS is too small, we see center-low distortion (bowl), and XY scale expansion.
When the DELTA_RADIUS is too large, we get a center-up distortion (bra), and XY scale shrinkage.
When the rod length is longer than reported, we get a bowl (and shift down).
Rod length errors seem to be roughly half as sensitive as radius setting errors.
I intend to measure rod length carefully, and calibrate the radius setting only.
Tower position error causes this curve in the direction of the misplaced tower.
XY distortions are harder to plot. The tower shift does make some lines curve.
The grid points should all be equally spaced at 5mm.
I would recommend setting the compiled in MAX_Z setting at slightly less than your actual endstop height. You can use endstop offsets (M666) to adjust proper center location and home z-height.
Calibrate the compiled in DELTA_RADIUS setting to remove any bowl distortions.
The M666 endstop offsets should be able to remove tilt and potato-chip shaped distortions.
It might be worth the effort to write a script that runs a fast-converging optimization search algorithm that can adjust these four parameters. Unfortunately, since DELTA_RADIUS currently requires a re-compile, I can’t write a simple procedure. I am giving serious thought to putting a DELTA_RADIUS adjustment in the EEPROM which can be altered by an M code. The drawback is that Marlin uses macros for about 10 quantitles, all dependent on DELTA_RADIUS, so it will require replacing some of these macro number definitions with variables that need to be initialized at start-up.