(EDIT) Already supported in RRF - Mesh probing with Rel Ref Ind
-
Some pseudo code here (something like this could be applied if the zpoint flag is applied):
bool HeightMap::AdjustToZPoint(uint32_t zPointNo) const noexcept { if (zPointNo < 0 || zPointNo > def.NumPoint() || !gridHeightSet.IsBitSet(zPointNo)) { // Return error return false; } double zBase = gridHeights[zPointNo]; for (uint32_t i = 0; i < def.NumPoints(); ++i) { if (gridHeightSet.IsBitSet(i)) { gridHeights[i] -= zBase; } } return true; }
-
@gixxerfast said in Relative mesh probing:
Then when applying the mesh the responsibility of keeping the Z0 point ad zero is up to the user.
The mesh is already relative to Z=0 assuming you set Z=0 before creating the height map, which is a suggested part of the process of creating the height map.
But perhaps you mean something different and I have misunderstood.
So I suggest an extra parameter to the G29 gcode say, L## (Level point) where the ## is the point number. or L##:## to specify which point is the Z0 point.
That is certainly doable but it wouldn't apply for those of us that don't use a grid point as the Z=0 reference.
I, for instance, use the center of the bed as the Z=0 reference point.
The reference point chosen is "zeroed" with the G30 command and that process is called Setting the Z=0 Datum.
Since I use the same Z=0 reference point when creating the height map and then again when loading the height map any Z difference due to say, heat, is compensated for.
Except of course for actual changes in the unevenness of the bed as it heats.
If I have entirely failed to understand your post I apologize.
Frederick
-
Please also read that this concerns printers that uses two probes. a Z-pin endstop which is relative to the bed surface and a toolhead probe. If you don't have such a setup, this is of no interest for you.
I also would like to add that to this date there are more than 2500 serialized Voron model 1 and 2 out there and a whole bunch that haven't been serialized. The numbers are increasing very quickly as many manufacturers are assembling and selling kits. More Vorons are beeing built right now than there are parts available. The absolute majority of those uses Klipper and we are very few that doesn't. I would like for more people to have Vorons with Duets and RRF.
@fcwilt said in Relative mesh probing:
@gixxerfast said in Relative mesh probing:
Then when applying the mesh the responsibility of keeping the Z0 point ad zero is up to the user.
The mesh is already relative to Z=0 assuming you set Z=0 before creating the height map, which is a suggested part of the process of creating the height map.
But perhaps you mean something different and I have misunderstood.
Yes of course, but you are required to set the Z0 datum using the probe and to do that accuratlely you have to have have the z probes offset calibrated to not have a mismatch between the Z0 set by homing the Z-pin endstop.
---So I suggest an extra parameter to the G29 gcode say, L## (Level point) where the ## is the point number. or L##:## to specify which point is the Z0 point.
That is certainly doable but it wouldn't apply for those of us that don't use a grid point as the Z=0 reference.
I, for instance, use the center of the bed as the Z=0 reference point.
The reference point chosen is "zeroed" with the G30 command and that process is called Setting the Z=0 Datum.
Since I use the same Z=0 reference point when creating the height map and then again when loading the height map any Z difference due to say, heat, is compensated for.
Except of course for actual changes in the unevenness of the bed as it heats.
If I have entirely failed to understand your post I apologize.
Frederick
For this to work you have to have one of your probe points set at a Z0. I guess that people aren't probing their Z0 at random locations? This will of course never be totally true which is adjusted by baby stepping or auto-z calibration (https://github.com/protoloft/klipper_z_calibration) which I have a macro for.
The whole point of this is that the Z-endstop is used for setting the Z0 and not the probe. The probe is only used for relative measurements. This may not be a problem when printing PLA at low temperatures but when printing enclosed, probes (inductive and others) while not having a problem with accuracy they do have a probelm with heat drift even the kinds that is suppose to have built in compensation.
Please read this part about The Relative Reference Index here: https://www.klipper3d.org/Bed_Mesh.html
Also, if you like many do, replace nozzles and printheads, you can do so without beeing affected by the probe offset.
It's fully possible that I have misunderstood how you do perform mesh probing in RRF and then maybe someone can exoplain how I can do that without beeing dependent on the probe offset.
-
Yes probe readings can vary with temps, humidity, etc.
But they would affect relative readings and "absolute" readings alike.
If I understand what you have posted you would like to be able to specify one of the grid points as your Z=0 reference in the G29 command? Correct?
The current approach is to first set your Z=0 reference using a single G30 at the desired location, which can be one of the grid points.
Then the G29 probes the entire grid and all readings are relative to the reading just taken by the G30.
Same probe, same time (within a matter of seconds), same environment. So anything effecting the G29 readings is also going to effect the G30 reading as well.
So, if I understand your suggestion, you are replacing the G30 reading with one of the specified G29 readings to set your Z=0 reference.
Or have I got it wrong?
Frederick
-
@fcwilt
Yes, they will affect relative readings, but as all thiose are made under the same circumstances, it should matter less.What I am saying, as described in the link to the Klipper documentation, I would not like to rely on the probe for absolute Z0 measurements. The Z-pin is used for that.
As I understand, If I do a G30 on a point and because of the probe offset it differs from what the Z-pin says with for example 0.1 mm the the mesh will float 0.1 mm above Z after z home.
-
@gixxerfast said in Mesh probing with Relative Reference Index:
@fcwilt
Yes, they will affect relative readings, but as all thiose are made under the same circumstances, it should matter less.What I am saying, as described in the link to the Klipper documentation, I would not like to rely on the probe for absolute Z0 measurements. The Z-pin is used for that.
Well on my printers I have typical endstop sensors on the Z axis and I use them for homing.
I only use the probe for establishing the Z=0 reference and leveling the bed or creating/loading the height map all which are done relative to the Z=0 reference.
So it seems to me, aside of being able to specify your Z=0 reference point in G29 the system works the way you want.
But perhaps I've missed something.
Frederick
-
@fcwilt Well, I could have missed something absolutely.
But the it's the requirements to set the Z0 datum when mesh probing. I don't want to do that. I just want to have a mesh list of the point z value realtive to one other point. That will always be true (ish) and represent the surface of the bed (and the gantry perhaps which is more problematic), regardless of temp drift (unless it takes too long to probe) then whenever I want I establish Z0 of that point and I adjust that up or down as I like.
I already have to calibrate the offset between the z-pin and the bed, I don't want to do the same with the probe. This approach works as it's used with Klipper all the time.
Hopwever, if you only use the toolhead probe, this is all useless.
It should be fairly easy to implement and let people do what they want with it. I might do it myself when I figure out how the probing exactly works. I used to work as a C++ programmer for a long time but that was years ago and things have happened in C++ since...
-
It isn't that complicated.....
Generate the mesh with the sensor and then re-home Z with the endstop at the nozzle. In this order, the offset of the probe relative to the nozzle is no longer relevant.
Disadvantage is that you have to home Z at the nozzle 2 times .(Before and after mesh generation)
But you can also save the mesh and load it automatically.
It depends on how you want to do it.
I create the mesh only from time to time and always load it by z-homing.Edit:
My buddy has a voron, i think that's the way he does it. -
@diy-o-sphere So the mesh values are absolute or relative? Imagine the toolhead probe probe offset being off alot, will it matter or not?
Beeing homed or not is not the issue here as I tried to explain more than a few times.
-
@gixxerfast said in Mesh probing with Relative Reference Index:
@fcwilt Well, I could have missed something absolutely.
But the it's the requirements to set the Z0 datum when mesh probing.
If they made a change to allow specifying a particular grid point to be used as the Z=0 reference then you have simply moved setting the Z=0 Datum into the G29 process rather than as a single G30 just before the G29.
The setting of the Z=0 Datum would be done in either case.
And the advantage of being able to do it with the G30 is folks like me can use a XY point as the Z=0 reference that is not one of the grid points.
I see nothing wrong with being able to specify a grid point to use as the Z=0 reference in the G29 command but it really doesn't seem to be providing a large advantage.
Frederick
-
@fcwilt
Imagine if we could meet somewhere and over a beer and scribble something down on a napkin.I don't know if we would agree but it would so much more fun.Cheers
Ulf -
@gixxerfast said in Mesh probing with Relative Reference Index:
@fcwilt
Imagine if we could meet somewhere and over a beer and scribble something down on a napkin.I don't know if we would agree but it would so much more fun.Cheers
UlfAbsolutely.
Doing things via email/forums is just harder to do - so many visual cues missing and the "back and forth" takes so much longer.
Still quite of lot of problems are worked out here - better than most forums I visit.
Frederick
-
@gixxerfast said in Mesh probing with Relative Reference Index:
offset being off alot, will it matter or not?
The mesh compensation is always relative to Z0.
For the generation you use the sensor (standard G29). So it is relative to the probe.
By homing at the end stop (nozzle) and reloading the mesh values from the file, the mesh is then relative to the nozzle.
You cheat the mesh with another reference point.Edit:
Compared to a function adjustment, it is only a work around. -
I have now adjusted the firmware for a first try.
I'm probably doing this at the wrong places and some should be moved elsewhere. The reading and the validation of the parameters for example:
and:
So that now, I can do this:
And it results in a mesh (which is cold now, so not much deviation at all but anyway) not dependent on probe offset at all:
Where probe point #24 (zero based) is zero.
Now I can apply this (or better a mesh for a warm bed and printer) of course given that I have made sure that point 24 (center of the bed) is at the height i wish.
Which I do with the auto-z calibration macro: https://github.com/gixxerfast/rrf-voron2/tree/master/macros/autoz
-
First print using the modified firmware.
A one layer print ABS 245 C 110 bed 0.2 mm Z and 260 x 260 mm using the bed mesh.
It's not perfect but it's not bad . I'm quite happy. Since it's all automatic and I just start the print and walk away.
Note, this is the underside not the top side.
It's a tad too squished on the outmost of Y edge. Don't know why but that's something for another day.
-
@gixxerfast I don't think you understand what @fcwilt is suggesting:
- Use the inductive etc. probe to generate the mesh using G29
- After loading the height map, use the nozzle contact probe to set the Z=0 level using G30.
So you need to specify an accurate Z offset for the nozzle contact probe, but not for the inductive probe. No firmware changes are needed, because RRF already supports multiple Z probes.
-
@dc42 Thanks for your reply. Well I might not. But I have checked the code:
The height value that is stored is (or an avergage of):
g30zHeightError = g30zStoppedHeight - zp->GetActualTriggerHeight();
and GetActualTriggerHeight returns -offsets[Z_AXIS]
As far as I can see the offset is stored with the G31
float triggerHeight; if (gb.TryGetFValue(axisLetters[Z_AXIS], triggerHeight, seen)) { offsets[Z_AXIS] = -triggerHeight; // logically, the Z offset of the Z probe is the negative of the trigger height }
So the mesh height value that is stored is calculated using the configured probe offset.
Is this not correct?
So if this above is correct, yes you can set the Z0 whichever way you want but you will be dependent on the triggerHeight value that's configured with the G31.
Using the process I have described I'm not.
What have I missed?
/U
-
@gixxerfast said in Mesh probing with Relative Reference Index:
What have I missed?
That a G30 command will prove the bed and set the Z origin accordingly, in effect moving the entire mesh up or down. Maybe you have also missed that you can use one Z probe to generate the mesh and another one to set the Z=0 origin.
-
@dc42 I apologize if my questions seem stupid but my intentions are only to understand how to get it to work as I want.
I have now done some more testing and ...
... Yes, I have misunderstood the term of setting Z0 with the probe as I read that as setting the absolute Z0 position using the probe.
So by issuing the G30 command I set the z coordinate to the probe trigger height (probe offset) and thereby effectively cancelling the probe offset from the rest of the mesh points.
Then it works as I like and I can scrap this whole thread.
My config (that I borrowed starting with RRF a couple of weeks ago) didn't produce a correct mesh since it was obviously configured wrongly and together with a height value that differed a bit from zero probably due to probing inaccuracy led me to believe it worked in a different way than it does.
Well, I learned something new today, it took awhile though
BTW: The -3 flag to the G30 will produce the same result just the other way around, adjusting the probe offset instead of the read height value ?
Thanks
/U -
@gixxerfast said in (EDIT) Already supported in RRF - Mesh probing with Rel Ref Ind:
BTW: The -3 flag to the G30 will produce the same result just the other way around, adjusting the probe offset instead of the read height value ?
Yes, G30 S-1 will adjust the trigger height to match the current Z instead f the other way round.
Use the K parameter on the G30 and G29 commands to select which Z probe to use for each command.