I've been working on that code for awhile. I don't think it's likely to work on all printers, although it might magically work on the one it was developed on. For me and wolfmanjm, it tends to get slightly closer to a solution at first, but then it just diverges more and more with each pass. I can watch the "bed center" migrating to the right, across X+.
The problem, as I see it, is that they attempt to calibrate delta radius, arm length, and tower angle all at the same time. In other words, it can change up to
nine variables at the same time (three kinds of adjustment times three towers). If you tweak nine variables at once in a decidedly non-linear system, how do you know the proportion of the change each one is responsible for? It tries to use some heuristics, but those heuristics don't know the difference between the author's printer and mine, and whatever specific stuff is going on with his printer may be more amenable to these algorithms than mine.
I think the solution is to break down the calibration into discrete steps, where you test
only one tower at a time (or at least you only change one
kind of variable at a time, which the endstop leveling code already does fairly well.)
- Level endstops (code's already there)
- Calculate delta radius (code's already there)
- Do my
laborious tower angle adjustment (needs to be written)
- Skip the individual tower radius delta (adjusting this by hand leads to prints that slant off to the side, so why bother)
- Skip the arm length adjustment, at least for now
At that point, the geometry of the printer should be dialed in "good enough" to print inside the triangle. To fix the outside of the triangle, another step has to be added:
- Walk the print surface with the probe, generating a height map, and use this to silently adjust both position and filament flow when Z is within the min height to max height envelope (1st layer or so)
If anyone has suggestions on improving this, I'm all ears.