@phaedrux Thanks a lot for the detailed explanation. It really cleared things up I was confused about.
What I want is:
- Automatic z=0 probing: So I don't have to worry about meanwhile changed bed height due to mechanical problems (lokbuild thickness changed due to mechanic impacts) or slight changes to the hotend mount (I often replace it with a laser cutter toolhead)
- Automatic bed mesh compensation: To also compensate for a meanwhile changed bed level (e.g. my bed corners come up when heated and I don't always print with heatbed on).
What I read from your text is that I first need to find z=0 and then run the MBC if I want an up to date z=0 and flatness compensation. Since needed time for MBC is nothing compared to the actual print time I want to do this at start of every print.
What I still don't understand is how the MBC is working in detail: Where will it position the previously measured z=0 when applying error compensation on z axis?
Somwhere I read about a least square error based bed mesh compensation but can't find it anymore. I got confused by that as it brings up the question if it adjusts the z=0 somehow for when the point we used for finding z=0 has an square error > 0. If not it would then just add an error to all points depending on the scale of the error of that measurement point. This would make the compensation obsolete as every point on the mesh map will inflict in this error.
So did I understand it correctly that MBC just finds a relative built plate z-offset map that is applied to all points respectively without any square error thing? It does NOT contain any additional z=0 setting, just an offset is applied?
Then I don't understand how the MBC knows that it does NOT need to add the offset to the centered point. Imaging that we have the following process:
- Use the center point A to find z=0 with
G30
- Use
G29
to build and store a correction mesh map
- All correction offset values are applied respectively to the corresponding point x/y point on the build plate when printing
- For the next print you find z=0 again with
G30
using a different measurement point B (which is lower on z than center A)
- You load the existing correction mesh map again with
G29 S1
(bed did not change, so mesh is still correct)
- All correction offset values are applied respectively to the corresponding point x/y point on the build plate when printing
The result: If the two measurement points have different correction offset values due to different real world heights of the built plate (we assumed that B is lower than A) the actually corrected z position for measurement points is different for when printing leveled at point A compared to when leveled at point B (using the same map).
This is because when probing z=0, using either point A or B, we do not store the information where on the build plate it was measured. In fact the first print (leveled with point A) is higher than the second (leveled with the lower point B) uniformly over the whole bed.
Of course using two different points is just the extreme situation constructed to maximise error for illustration. The problem obviously occurs for a single point, too, as the algorithm that applies the correction offsets to z axis while printing does not know on which point (and what error that point had) we used to find z=0.
My conclusion is that the MBC algorithm can only work if it actually sets where Z=0 is using its own measured z-values.
What am I thinking wrong?