Custom probe points for mesh bed leveling
-
I have a printer with an unusually shaped print area. It prints arounds itself, forming a donut like usable area.
The usual shapes, square and circle, defined by M557 does not work for this type of printer.
I can not find out how to define custom probing points.
Is it even possible?
-
After poking around a bit in the source code of the firmware it looks like G29 mesh bed leveling is based on a grid. Points are filtered out if you select a round area.
Looks like I have to put on my c++ hat and do some coding to get it to do what I want. Love open source!
-
@bondus said in Custom probe points for mesh bed leveling:
Looks like I have to put on my c++ hat and do some coding to get it to do what I want. Love open source!
The down side is that you will need to merge your changes to upgrade to future releases. Unless if you manage to get your changes merged back into the main code line.
-
Why do not use G29 as intended?
Read:
https://duet3d.dozuki.com/Wiki/Gcode#Section_G29_Detailed_Z_Probeand define your grid
https://duet3d.dozuki.com/Wiki/Gcode#Section_M557_Set_Z_probe_point_or_define_probing_grid -
@bondus said in Custom probe points for mesh bed leveling:
I have a printer with an unusually shaped print area. It prints arounds itself, forming a donut like usable area.
The usual shapes, square and circle, defined by M557 does not work for this type of printer.
I can not find out how to define custom probing points.
Is it even possible?
What printer kinematics are you using? If the kinematics define correctly which points are reachable and which are not, then mesh probing should work except that you will get some "skipped, not reachable" messages during probing.
-
@thwe those features are not available in 2.0 firmware, deprecated.
@dc42 It's my own homemade kinematics. And I have not implemented the IsReachable() function, yet.
Sounds like implementing IsReachable() will solve the mesh leveling problem.
And it will prevent the small accidents I have all the time, banging the hotend against the center body of the printer or trying to reach mechanically unreachable points where the math of the kinematics returns NaN.I may get other problems though. When calibrating, and doing other other moves, the printer may
have(edit) want to make moves from one side of the unreachable center area (point A in the picture) to the other side (point B).
If the motion planner selects the shortest straight line in stepper coordinate space it should work fine, but if it works in cartesian space it will try to travel though the unreachable area. Non-cartesian printers are fun
The printer has a rotating tower with an arm that moves in two dimensions:
I'll bring the printer to 3D Meetup Sweden 2019 this weekend (April 27-28) if you want to see it live.
-
Yes, I'd like to see that printer.
-
After some testing with some simple G0 commands I can see that the motion planner indeed uses the closest path in stepper coordinate space. A movement from negative X, left, to positive X, right, creates a beautiful arc around the center.
A naive behaviour that works in my favor.The thread should be moved to firmware development, the discussion ended up there.
-
@dc42 . I'll install the dev environment on my laptop and bring a stool for you. I have some ideas and questions
-
@bondus said in Custom probe points for mesh bed leveling:
but if it works in cartesian space it will try to travel though the unreachable area. Non-cartesian printers are fun
I think it's call non convex https://en.wikipedia.org/wiki/Convex_set , that is, there are pairs of reachable points where some points on the straight line between them are non reachable.
The fall back may be to assumption of connectivity. That is, for each two reachable points, there is a path between them whose all points are reachable.
-
Implementing IsReachable() worked.
It looks like my tower is at an angle. One point is also totally off since the hotend bumped into one of the side feet. -
@bondus said in Custom probe points for mesh bed leveling:
One point is also totally off
You can actually edit the heightmap.csv to alter any completely bogus points to be more reasonable.