# [0.92.8, Delta] G33 moves to forbidden x/y coordinates with high number of correction points

Hey!

Fyi: When using DISTORTION_CORRECTION_POINTS > 9 (approximately) and using Delta kinematics, the head moves outside the radial boundary when sending the G33 command. Chances are stepper motors loose steps and crash the head into the bed.

It seems like that for the first and last row "just" the first and last measurement are omitted to get nearer to a circle geometry. But this only works for a very low number of DISTORTION_CORRECTION_POINTS. I suggest to either include a calculation of the validity of x/y coordinates before sending the move commands (sqrt(x^2+y^2) < DELTA_MAX_RADIUS?) or to include a case-sensitive approach (e.g. if DISTORTION_CORRECTION_POINTS > 7; first row omit first and last 2, second row omit first and last measurement etc.).

• It still works with 9 points and more. But you set the rectangle for measurement and that must be sufficient small to fit into the bed. Just skipping impossible points would be ok for measurement but then we get the extrapolation problem. Will think if there is a algorithm to fill them with boundary values somehow.
• edited February 2016
Yes, I understand. But setting the rectangle to be sufficiently small will inhibit the possibility to distort-correct the complete printable radius. In the worst case one will only be able to distort-correct 0.707 * printable radius of the whole bed.

Stupid question... why would anybody need an extrapolation into the *corners* of the rectangle if he or she uses a delta printer, which will never be able to move to those corners? I.e. wouldn't it be easier / more straight forward to extrapolate one extra point into every outward direction (*IF* extrapolation is needed anyhow)?
• You need it as the last workign point might be no the edge of printing area. After that area you still need a good correction. That's also what is missing if elimiante 3 or 6 points in a corner. There is currently no good mapping implemented to give thee points good values to play with.
• Yes, I understand you. Right now, the extrapolated points are (X extrapolated, O measured):

XOOOX
OOOOO
OOOOO
OOOOO
XOOOX

So I assume that the X's are either the average of the two O's next to them or a linear extrapolation.

With three X's the thing would look like this:

XXOXX
XOOOX
OOOOO
XOOOX
XXOXX

And you run into problems extrapolating the extra X's in the corner, as you got no clear extrapolation values for that, right? The other X's can again be either averages of two O's next to them or linear extrapolations. But you will never need the corner X's (in contrast to the first example), as the print head will never be able to move to a position where these values would be needed.

What I am suggesting is to just extrapolate "one additional X" in every corner, so:

XOX
XOOOX
OOOOO
XOOOX
XOX

That is sufficient for every position the hot end might move to - you are able to calculate the height correction via the four nearest points.

No? Yes? Maybe?
• Maybe, depending on z probe offset and density. I would not like to extrapolate more then one field as it is linear interpolation and errors would get bigger with distance and reality might be different. I guess best would be to preset all values with 32000 = INVALID/NOT_MEASURED and then iterate all cases away with 2 edges set, then with one edge set and repeat until all are set. And then not interpolate but copy or average known corner values. Might not be perfect but since we can not measure probably the best we can get. After that you could still set corrections by hand. So only problem left is detecting illegal points before sending them. What you saw as error message is detection while moving.
• edited February 2016
Unfortunately no error message at all. It just went outside bounds (for me to a radius > 80 mm) and tried to measure there. When trying to move to the next position, the stepper lost steps and the whole thing ... well you know what happens next.

As for G33 there is plenty of time, why not check the points for validity prior to the measurements. I.e. check coordinate: if (sqrt(x^2+y^2) > r_max) -> skip/invalid, else continue with measurement.
• Sure, that is what i would do for the case of delta printers. Now I only need the time to do all the stuff:-) But would make configuration easier at least.