Skip to content

Commit

Permalink
bed_mesh: Implement adaptive bed mesh
Browse files Browse the repository at this point in the history
Adaptive bed mesh allows the bed mesh algorithm
to probe only the area of the bed that is being
used by the current print.

It uses [exclude_objects] to get a list of the
printed objects and their area on the bed. It,
then, modifies the bed mesh parameters so only
the area used by the objects is measured.

Adaptive bed mesh works on both cartesian and
delta kinematics printers. On Delta printers,
the algorithm, adjusts the origin point and
radius in order to translate the area of the
bed being probe.

Signed-off-by: Mitko Haralanov <[email protected]>
Signed off-by: Kyle Hansen <[email protected]>
  • Loading branch information
voidtrance committed Jan 18, 2024
1 parent 7a74888 commit 08a8a1d
Show file tree
Hide file tree
Showing 4 changed files with 171 additions and 4 deletions.
46 changes: 44 additions & 2 deletions docs/Bed_Mesh.md
Original file line number Diff line number Diff line change
Expand Up @@ -370,14 +370,54 @@ are identified in green.

![bedmesh_interpolated](img/bedmesh_faulty_regions.svg)

### Adaptive Meshes

Adaptive bed meshing is a way to speed up the bed mesh generation by only probing
the area of the bed used by the objects being printed. When used, the method will
automatically adjust the mesh parameters based on the area occupied by the defined
print objects.

The adapted mesh area will be computed from the area defined by the boundaries of all
the defined print object so it covers every object, including any margins defined in
the configuration. After the area is computed, the number of probe points will be
scaled down based on the ratio of the default mesh area and the adapted mesh area. To
illustrate this consider the following example:

For a 150mmx150mm bed with `mesh_min` set to `25,25` and `mesh_max` set to `125,125`,
the default mesh area is a 100mmx100mm square. An adapted mesh area of `50,50`
means a ratio of `0.5x0.5` between the adapted area and default mesh area.

If the `bed_mesh` configuration specified `probe_count` as `7x7`, the adapted bed
mesh will use 4x4 probe points (roundUp(7 * 0.5)).

![adaptive_bedmesh](img/adaptive_bed_mesh.svg)
```
[bed_mesh]
speed: 120
horizontal_move_z: 5
mesh_min: 35, 6
mesh_max: 240, 198
probe_count: 5, 3
mesh_margin: 5
```

- `mesh_margin` \
_Default Value: 0_ \
Margin (in mm) to add around the area of the bed used by the defined objects. The diagram
below shows the adapted bed mesh area with a `mesh_margin` set to 5mm. The adapted mesh area
(area in green) is computed as the used bed area (area in blue) plus the defined margin.

![adaptive_bedmesh_margin](img/adaptive_bed_mesh_margin.svg)
## Bed Mesh Gcodes

### Calibration

`BED_MESH_CALIBRATE PROFILE=<name> METHOD=[manual | automatic] [<probe_parameter>=<value>]
[<mesh_parameter>=<value>]`\
[<mesh_parameter>=<value>] [ADAPTIVE=[0|1] [ADAPTIVE_MARGIN=<value>]`\
_Default Profile: default_\
_Default Method: automatic if a probe is detected, otherwise manual_
_Default Method: automatic if a probe is detected, otherwise manual_ \
_Default Adaptive: 0_ \
_Default Adaptive Margin: 0_

Initiates the probing procedure for Bed Mesh Calibration.

Expand All @@ -399,6 +439,8 @@ following parameters are available:
- `ROUND_PROBE_COUNT`
- All beds:
- `ALGORITHM`
- `ADAPTIVE`
- `ADAPTIVE_MARGIN`

See the configuration documentation above for details on how each parameter
applies to the mesh.
Expand Down
4 changes: 4 additions & 0 deletions docs/img/adaptive_bed_mesh.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading

0 comments on commit 08a8a1d

Please sign in to comment.