Marlin: AUTO BED LEVELING FEATURE crashes to the bed with latest RCBugFix

Created on 18 Sep 2016  Â·  37Comments  Â·  Source: MarlinFirmware/Marlin

After G29 start print and nozzle crashes to the bed.

Confirmed ! Calibration

Most helpful comment

Here's the fix:

- float measured_z = probe_pt(xProbe, yProbe, stow_probe_after_each, verbose_level);
+ measured_z = probe_pt(xProbe, yProbe, stow_probe_after_each, verbose_level);

All 37 comments

Do the coordinates appear to be wrong at the end of G29, before starting the print?

Could you do a G29 with DEBUG_LEVELING_FEATURE enabled (after M111 S255 or at least M111 S32), and post the log output?

Also, I have a set of changes pending, which includes some potential bug fixes, so you might want to test with that branch rather than just RCBugFix. I'd do more testing myself, but I don't have a 3D printer handy at this time.

https://github.com/thinkyhead/Marlin/tree/rc_marlin_reforms

I think I've ran into same issue (RCBugFix, last commit "d41eeb62af4bfff0094a6c293761dfbfc3bf0f75").

I'm using BLTouch with safe leveling, no other Z-endstops.

I started by clearing EEPROM (M502) after firmware update.

After I home with G28, level bed with G29, I set nozzle over bed with G1 X100 Y100 Z0

I then measure nozzle offset from bed to be 1.2mm.

Then I set the offset with M851 Z-1.2 and store it with M500

After that, G28 and G29 again. Everything looks good... except after G1 X100 Y100 Z0 the nozzle crashes to bed.

If I set the offset to -0.6 (half of the value) I get approximately correct offset. Could it be that the offset is applied twice?

Could it be that the offset is applied twice?

Just testing the RCbugfix, and came to that thought, too. After G28 everything nozzle just touches the bed as expected, after the following g29, nozzle would crash into bed.

Anyone feel like providing a log to help debug the issue?

I started by clearing EEPROM (M502) after firmware update.

M502 doesn't clear the EEPROM. It just applies default settings.

M502 doesn't clear the EEPROM.

True. And usually I start with M502 + M500 which should take values from firmware and store them to EEPROM, unless I'm mistaken? Bad wording.

I'll try to get the log out in few minutes.

Here's the Debuglog

Attempting connection at /dev/cu.usbserial-AH03EKZU...
READ: start
  Connected to machine!
READ: echo:Marlin 1.1.0-RCBugFix
Marlin 1.1.0-RCBugFix
READ: 
READ: echo: Last Updated: 2016-07-26 12:00 | Author: Jartza
Last Updated: 2016-07-26 12:00 | Author: Jartza
READ: Compiled: Sep 18 2016
READ: echo: Free Memory: 3222  PlannerBufferBytes: 1232
Free Memory: 3222  PlannerBufferBytes: 1232
READ: echo:Hardcoded Default Settings Loaded
Hardcoded Default Settings Loaded
READ: echo:Steps per unit:
Steps per unit:
READ: echo:  M92 X80.00 Y80.00 Z400.00 E97.00
M92 X80.00 Y80.00 Z400.00 E97.00
READ: echo:Maximum feedrates (mm/s):
Maximum feedrates (mm/s):
READ: echo:  M203 X300.00 Y300.00 Z12.00 E50.00
M203 X300.00 Y300.00 Z12.00 E50.00
READ: echo:Maximum Acceleration (mm/s2):
Maximum Acceleration (mm/s2):
READ: echo:  M201 X1500 Y1500 Z100 E10000
M201 X1500 Y1500 Z100 E10000
READ: echo:Accelerations: P=printing, R=retract and T=travel
Accelerations: P=printing, R=retract and T=travel
READ: echo:  M204 P900.00 R3000.00 T900.00
M204 P900.00 R3000.00 T900.00
READ: echo:Advanced variables: S=Min feedrate (mm/s), T=Min travel feedrate (mm/s), B=minimum segment time (ms), X=maximum XY jerk (mm/s),  Z=maximum Z jerk (mm/s),  E=maximum E jerk (mm/s)
Advanced variables: S=Min feedrate (mm/s), T=Min travel feedrate (mm/s), B=minimum segment time (ms), X=maximum XY jerk (mm/s),  Z=maximum Z jerk (mm/s),  E=maximum E jerk (mm/s)
READ: echo:  M205 S0.00 T0.00 B20000 X14.00 Z0.40 E5.00
M205 S0.00 T0.00 B20000 X14.00 Z0.40 E5.00
READ: echo:Home offset (mm)
Home offset (mm)
READ: echo:  M206 X0.00 Y0.00 Z0.00
M206 X0.00 Y0.00 Z0.00
READ: echo:Material heatup parameters:
Material heatup parameters:
READ: echo:  M145 S0 H195 B55 F0
M145 S0 H195 B55 F0
READ: echo:  M145 S1 H240 B75 F0
M145 S1 H240 B75 F0
READ: echo:PID settings:
PID settings:
READ: echo:  M301 P16.10 I0.76 D85.73
M301 P16.10 I0.76 D85.73
READ: echo:  M304 P450.06 I63.88 D792.67
M304 P450.06 I63.88 D792.67
READ: echo:Filament settings: Disabled
READ: echo:  M200 D3.00
READ: echo:  M200 D0
READ: echo:Z-Probe Offset (mm):
READ: echo:  M851 Z0.00
SENT: T0
SENT: M105
SENT: M105
READ: echo:SD init fail
READ: echo:Active Extruder: 0
READ: ok
READ: ok T:21.5 /0.0 B:21.7 /0.0 @:0 B@:0
READ: ok T:21.5 /0.0 B:21.7 /0.0 @:0 B@:0
SENT: M111 S255
READ: echo:DEBUG:ECHO,INFO,ERRORS,DRYRUN,COMMUNICATION,LEVELING
DEBUG:ECHO,INFO,ERRORS,DRYRUN,COMMUNICATION,LEVELING
READ: ok
SENT: G28
READ: echo:G28
READ: >>> gcode_G28
READ: Machine Type: Cartesian
READ: Probe: SERVO PROBE
READ: Probe Offset X:38 Y:-10 Z:0.00 (Right-Front & Same Z as Nozzle)
READ: reset_bed_level
READ: current_position=(0.00, 0.00, 0.00) : setup_for_endstop_or_probe_move
READ: > endstops.enable(true)
READ: Raise Z (before homing) to 10.00
READ: >>> do_blocking_move_to(0.00, 0.00, 10.00)
READ: >>> homeaxis(X)
READ: current_position=(0.00, 0.00, 10.00) : sync_plan_position
READ: > 1st Home -300.00
READ: current_position=(0.00, 0.00, 10.00) : sync_plan_position
READ: current_position=(0.00, 0.00, 10.00) : sync_plan_position
READ: > 2nd Home -10.00
READ: >>> set_axis_is_at_home(X)
READ: For X axis:
READ:  home_offset = 0.00
READ:  position_shift = 0.00
READ:  soft_endstop_min = 0.00
READ:  soft_endstop_max = 200.00
READ: > home_offset[X] = 0.00
READ: current_position=(1.00, 0.00, 10.00) : 
READ: <<< set_axis_is_at_home(X)
READ: current_position=(1.00, 0.00, 10.00) : sync_plan_position
READ: current_position=(1.00, 0.00, 10.00) : > AFTER set_axis_is_at_home
READ: <<< homeaxis(X)
READ: current_position=(1.00, 0.00, 10.00) : > homeX
READ: >>> homeaxis(Y)
READ: current_position=(1.00, 0.00, 10.00) : sync_plan_position
READ: > 1st Home -315.00
READ: current_position=(1.00, 0.00, 10.00) : sync_plan_position
READ: current_position=(1.00, 0.00, 10.00) : sync_plan_position
READ: > 2nd Home -10.00
READ: >>> set_axis_is_at_home(Y)
READ: For Y axis:
READ:  home_offset = 0.00
READ:  position_shift = 0.00
READ:  soft_endstop_min = 0.00
READ:  soft_endstop_max = 210.00
READ: > home_offset[Y] = 0.00
READ: current_position=(1.00, -19.00, 10.00) : 
READ: <<< set_axis_is_at_home(Y)
READ: current_position=(1.00, -19.00, 10.00) : sync_plan_position
READ: current_position=(1.00, -19.00, 10.00) : > AFTER set_axis_is_at_home
READ: <<< homeaxis(Y)
READ: current_position=(1.00, -19.00, 10.00) : > homeY
READ: Z_SAFE_HOMING >>>
READ: current_position=(1.00, -19.00, 10.00) : sync_plan_position
READ: destination=(62.00, 115.00, 10.00) : Z_SAFE_HOMING
READ: >>> do_blocking_move_to(62.00, 115.00, 10.00)
READ: >>> homeaxis(Z)
READ: current_position=(62.00, 115.00, 10.00) : set_probe_deployed
READ: deploy: 1
READ: do_probe_raise(15.00)
READ: >>> do_blocking_move_to(62.00, 115.00, 15.00)
READ: >>> do_blocking_move_to(62.00, 115.00, 15.00)
READ: current_position=(62.00, 115.00, 0.00) : sync_plan_position
READ: > 1st Home -315.00
READ: current_position=(62.00, 115.00, 0.00) : sync_plan_position
READ: current_position=(62.00, 115.00, 0.00) : sync_plan_position
READ: > 2nd Home -6.00
READ: >>> set_axis_is_at_home(Z)
READ: For Z axis:
READ:  home_offset = 0.00
READ:  position_shift = 0.00
READ:  soft_endstop_min = 0.00
READ:  soft_endstop_max = 210.00
READ: *** Z HOMED WITH PROBE (Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN) ***
READ: > zprobe_zoffset = 0.00
READ: > home_offset[Z] = 0.00
READ: current_position=(62.00, 115.00, 0.00) : 
READ: <<< set_axis_is_at_home(Z)
READ: current_position=(62.00, 115.00, 0.00) : sync_plan_position
READ: current_position=(62.00, 115.00, 0.00) : > AFTER set_axis_is_at_home
READ: current_position=(62.00, 115.00, 0.00) : set_probe_deployed
READ: deploy: 0
READ: do_probe_raise(15.00)
READ: >>> do_blocking_move_to(62.00, 115.00, 15.00)
READ: >>> do_blocking_move_to(62.00, 115.00, 15.00)
READ: <<< homeaxis(Z)
READ: <<< Z_SAFE_HOMING
READ: current_position=(62.00, 115.00, 15.00) : > (home_all_axis || homeZ) > final
READ: current_position=(62.00, 115.00, 15.00) : sync_plan_position
READ: current_position=(62.00, 115.00, 15.00) : clean_up_after_endstop_or_probe_move
READ: <<< gcode_G28
READ: X:62.00 Y:115.00 Z:15.00 E:0.00 Count X: 4960 Y:9200 Z:6000
READ: ok
SENT: G29
READ: echo:G29
READ: >>> gcode_G29
READ: current_position=(62.00, 115.00, 15.00) : 
READ: Machine Type: Cartesian
READ: Probe: SERVO PROBE
READ: Probe Offset X:38 Y:-10 Z:0.00 (Right-Front & Same Z as Nozzle)
READ: G29 Auto Bed Leveling
READ: reset_bed_level
READ: current_position=(62.00, 115.00, 15.00) : sync_plan_position
READ: current_position=(62.00, 115.00, 15.00) : setup_for_endstop_or_probe_move
READ: current_position=(62.00, 115.00, 15.00) : set_probe_deployed
READ: deploy: 1
READ: do_probe_raise(15.00)
READ: >>> do_blocking_move_to(62.00, 115.00, 15.00)
READ: >>> probe_pt(40.00, 20.00, no stow)
READ: current_position=(62.00, 115.00, 15.00) : 
READ: do_probe_raise(10.00)
READ: > do_blocking_move_to_xy(2.00, 30.00)
READ: >>> do_blocking_move_to(2.00, 30.00, 15.00)
READ: current_position=(2.00, 30.00, 15.00) : set_probe_deployed
READ: deploy: 1
READ: current_position=(2.00, 30.00, 15.00) : >>> run_z_probe
READ: current_position=(2.00, 30.00, 15.00) : >>> do_probe_move
READ: >>> do_blocking_move_to(2.00, 30.00, -220.00)
READ: current_position=(2.00, 30.00, -0.09) : sync_plan_position
READ: current_position=(2.00, 30.00, -0.09) : <<< do_probe_move
READ: >>> do_blocking_move_to(2.00, 30.00, 2.91)
READ: current_position=(2.00, 30.00, 2.91) : >>> do_probe_move
READ: >>> do_blocking_move_to(2.00, 30.00, -220.00)
READ: current_position=(2.00, 30.00, -0.08) : sync_plan_position
READ: current_position=(2.00, 30.00, -0.08) : <<< do_probe_move
READ: current_position=(2.00, 30.00, -0.08) : <<< run_z_probe
READ: > do_probe_raise
READ: do_probe_raise(10.00)
READ: >>> do_blocking_move_to(2.00, 30.00, 10.00)
READ: <<< probe_pt
READ: >>> probe_pt(100.00, 20.00, no stow)
READ: current_position=(2.00, 30.00, 10.00) : 
READ: do_probe_raise(10.00)
READ: > do_blocking_move_to_xy(62.00, 30.00)
READ: >>> do_blocking_move_to(62.00, 30.00, 10.00)
READ: current_position=(62.00, 30.00, 10.00) : set_probe_deployed
READ: deploy: 1
READ: current_position=(62.00, 30.00, 10.00) : >>> run_z_probe
READ: current_position=(62.00, 30.00, 10.00) : >>> do_probe_move
READ: >>> do_blocking_move_to(62.00, 30.00, -220.00)
READ: current_position=(62.00, 30.00, 0.02) : sync_plan_position
READ: current_position=(62.00, 30.00, 0.02) : <<< do_probe_move
READ: >>> do_blocking_move_to(62.00, 30.00, 3.02)
READ: current_position=(62.00, 30.00, 3.02) : >>> do_probe_move
READ: >>> do_blocking_move_to(62.00, 30.00, -220.00)
READ: current_position=(62.00, 30.00, 0.04) : sync_plan_position
READ: current_position=(62.00, 30.00, 0.04) : <<< do_probe_move
READ: current_position=(62.00, 30.00, 0.04) : <<< run_z_probe
READ: > do_probe_raise
READ: do_probe_raise(10.00)
READ: >>> do_blocking_move_to(62.00, 30.00, 10.00)
READ: <<< probe_pt
READ: >>> probe_pt(160.00, 20.00, no stow)
READ: current_position=(62.00, 30.00, 10.00) : 
READ: do_probe_raise(10.00)
READ: > do_blocking_move_to_xy(122.00, 30.00)
READ: >>> do_blocking_move_to(122.00, 30.00, 10.00)
READ: current_position=(122.00, 30.00, 10.00) : set_probe_deployed
READ: deploy: 1
READ: current_position=(122.00, 30.00, 10.00) : >>> run_z_probe
READ: current_position=(122.00, 30.00, 10.00) : >>> do_probe_move
READ: >>> do_blocking_move_to(122.00, 30.00, -220.00)
READ: current_position=(122.00, 30.00, -0.24) : sync_plan_position
READ: current_position=(122.00, 30.00, -0.24) : <<< do_probe_move
READ: >>> do_blocking_move_to(122.00, 30.00, 2.76)
READ: current_position=(122.00, 30.00, 2.76) : >>> do_probe_move
READ: >>> do_blocking_move_to(122.00, 30.00, -220.00)
READ: current_position=(122.00, 30.00, -0.23) : sync_plan_position
READ: current_position=(122.00, 30.00, -0.23) : <<< do_probe_move
READ: current_position=(122.00, 30.00, -0.23) : <<< run_z_probe
READ: > do_probe_raise
READ: do_probe_raise(10.00)
READ: >>> do_blocking_move_to(122.00, 30.00, 10.00)
READ: <<< probe_pt
READ: >>> probe_pt(160.00, 100.00, no stow)
READ: current_position=(122.00, 30.00, 10.00) : 
READ: do_probe_raise(10.00)
READ: > do_blocking_move_to_xy(122.00, 110.00)
READ: >>> do_blocking_move_to(122.00, 110.00, 10.00)
READ: current_position=(122.00, 110.00, 10.00) : set_probe_deployed
READ: deploy: 1
READ: current_position=(122.00, 110.00, 10.00) : >>> run_z_probe
READ: current_position=(122.00, 110.00, 10.00) : >>> do_probe_move
READ: >>> do_blocking_move_to(122.00, 110.00, -220.00)
READ: current_position=(122.00, 110.00, -0.09) : sync_plan_position
READ: current_position=(122.00, 110.00, -0.09) : <<< do_probe_move
READ: >>> do_blocking_move_to(122.00, 110.00, 2.91)
READ: current_position=(122.00, 110.00, 2.91) : >>> do_probe_move
READ: >>> do_blocking_move_to(122.00, 110.00, -220.00)
READ: current_position=(122.00, 110.00, -0.13) : sync_plan_position
READ: current_position=(122.00, 110.00, -0.13) : <<< do_probe_move
READ: current_position=(122.00, 110.00, -0.13) : <<< run_z_probe
READ: > do_probe_raise
READ: do_probe_raise(10.00)
READ: >>> do_blocking_move_to(122.00, 110.00, 10.00)
READ: <<< probe_pt
READ: >>> probe_pt(100.00, 100.00, no stow)
READ: current_position=(122.00, 110.00, 10.00) : 
READ: do_probe_raise(10.00)
READ: > do_blocking_move_to_xy(62.00, 110.00)
READ: >>> do_blocking_move_to(62.00, 110.00, 10.00)
READ: current_position=(62.00, 110.00, 10.00) : set_probe_deployed
READ: deploy: 1
READ: current_position=(62.00, 110.00, 10.00) : >>> run_z_probe
READ: current_position=(62.00, 110.00, 10.00) : >>> do_probe_move
READ: >>> do_blocking_move_to(62.00, 110.00, -220.00)
READ: current_position=(62.00, 110.00, 0.10) : sync_plan_position
READ: current_position=(62.00, 110.00, 0.10) : <<< do_probe_move
READ: >>> do_blocking_move_to(62.00, 110.00, 3.10)
READ: current_position=(62.00, 110.00, 3.10) : >>> do_probe_move
READ: >>> do_blocking_move_to(62.00, 110.00, -220.00)
READ: current_position=(62.00, 110.00, 0.06) : sync_plan_position
READ: current_position=(62.00, 110.00, 0.06) : <<< do_probe_move
READ: current_position=(62.00, 110.00, 0.06) : <<< run_z_probe
READ: > do_probe_raise
READ: do_probe_raise(10.00)
READ: >>> do_blocking_move_to(62.00, 110.00, 10.00)
READ: <<< probe_pt
READ: >>> probe_pt(40.00, 100.00, no stow)
READ: current_position=(62.00, 110.00, 10.00) : 
READ: do_probe_raise(10.00)
READ: > do_blocking_move_to_xy(2.00, 110.00)
READ: >>> do_blocking_move_to(2.00, 110.00, 10.00)
READ: current_position=(2.00, 110.00, 10.00) : set_probe_deployed
READ: deploy: 1
READ: current_position=(2.00, 110.00, 10.00) : >>> run_z_probe
READ: current_position=(2.00, 110.00, 10.00) : >>> do_probe_move
READ: >>> do_blocking_move_to(2.00, 110.00, -220.00)
READ: current_position=(2.00, 110.00, 0.19) : sync_plan_position
READ: current_position=(2.00, 110.00, 0.19) : <<< do_probe_move
READ: >>> do_blocking_move_to(2.00, 110.00, 3.19)
READ: current_position=(2.00, 110.00, 3.19) : >>> do_probe_move
READ: >>> do_blocking_move_to(2.00, 110.00, -220.00)
READ: current_position=(2.00, 110.00, 0.19) : sync_plan_position
READ: current_position=(2.00, 110.00, 0.19) : <<< do_probe_move
READ: current_position=(2.00, 110.00, 0.19) : <<< run_z_probe
READ: > do_probe_raise
READ: do_probe_raise(10.00)
READ: >>> do_blocking_move_to(2.00, 110.00, 10.00)
READ: <<< probe_pt
READ: >>> probe_pt(40.00, 180.00, no stow)
READ: current_position=(2.00, 110.00, 10.00) : 
READ: do_probe_raise(10.00)
READ: > do_blocking_move_to_xy(2.00, 190.00)
READ: >>> do_blocking_move_to(2.00, 190.00, 10.00)
READ: current_position=(2.00, 190.00, 10.00) : set_probe_deployed
READ: deploy: 1
READ: current_position=(2.00, 190.00, 10.00) : >>> run_z_probe
READ: current_position=(2.00, 190.00, 10.00) : >>> do_probe_move
READ: >>> do_blocking_move_to(2.00, 190.00, -220.00)
READ: current_position=(2.00, 190.00, 0.05) : sync_plan_position
READ: current_position=(2.00, 190.00, 0.05) : <<< do_probe_move
READ: >>> do_blocking_move_to(2.00, 190.00, 3.05)
READ: current_position=(2.00, 190.00, 3.05) : >>> do_probe_move
READ: >>> do_blocking_move_to(2.00, 190.00, -220.00)
READ: current_position=(2.00, 190.00, 0.03) : sync_plan_position
READ: current_position=(2.00, 190.00, 0.03) : <<< do_probe_move
READ: current_position=(2.00, 190.00, 0.03) : <<< run_z_probe
READ: > do_probe_raise
READ: do_probe_raise(10.00)
READ: >>> do_blocking_move_to(2.00, 190.00, 10.00)
READ: <<< probe_pt
READ: >>> probe_pt(100.00, 180.00, no stow)
READ: current_position=(2.00, 190.00, 10.00) : 
READ: do_probe_raise(10.00)
READ: > do_blocking_move_to_xy(62.00, 190.00)
READ: >>> do_blocking_move_to(62.00, 190.00, 10.00)
READ: current_position=(62.00, 190.00, 10.00) : set_probe_deployed
READ: deploy: 1
READ: current_position=(62.00, 190.00, 10.00) : >>> run_z_probe
READ: current_position=(62.00, 190.00, 10.00) : >>> do_probe_move
READ: >>> do_blocking_move_to(62.00, 190.00, -220.00)
READ: current_position=(62.00, 190.00, 0.00) : sync_plan_position
READ: current_position=(62.00, 190.00, 0.00) : <<< do_probe_move
READ: >>> do_blocking_move_to(62.00, 190.00, 3.00)
READ: current_position=(62.00, 190.00, 3.00) : >>> do_probe_move
READ: >>> do_blocking_move_to(62.00, 190.00, -220.00)
READ: current_position=(62.00, 190.00, 0.01) : sync_plan_position
READ: current_position=(62.00, 190.00, 0.01) : <<< do_probe_move
READ: current_position=(62.00, 190.00, 0.01) : <<< run_z_probe
READ: > do_probe_raise
READ: do_probe_raise(10.00)
READ: >>> do_blocking_move_to(62.00, 190.00, 10.00)
READ: <<< probe_pt
READ: >>> probe_pt(160.00, 180.00, no stow)
READ: current_position=(62.00, 190.00, 10.00) : 
READ: do_probe_raise(10.00)
READ: > do_blocking_move_to_xy(122.00, 190.00)
READ: >>> do_blocking_move_to(122.00, 190.00, 10.00)
READ: current_position=(122.00, 190.00, 10.00) : set_probe_deployed
READ: deploy: 1
READ: current_position=(122.00, 190.00, 10.00) : >>> run_z_probe
READ: current_position=(122.00, 190.00, 10.00) : >>> do_probe_move
READ: >>> do_blocking_move_to(122.00, 190.00, -220.00)
READ: current_position=(122.00, 190.00, -0.23) : sync_plan_position
READ: current_position=(122.00, 190.00, -0.23) : <<< do_probe_move
READ: >>> do_blocking_move_to(122.00, 190.00, 2.77)
READ: current_position=(122.00, 190.00, 2.77) : >>> do_probe_move
READ: >>> do_blocking_move_to(122.00, 190.00, -220.00)
READ: current_position=(122.00, 190.00, -0.22) : sync_plan_position
READ: current_position=(122.00, 190.00, -0.22) : <<< do_probe_move
READ: current_position=(122.00, 190.00, -0.22) : <<< run_z_probe
READ: > do_probe_raise
READ: do_probe_raise(10.00)
READ: >>> do_blocking_move_to(122.00, 190.00, 10.00)
READ: <<< probe_pt
READ: current_position=(122.00, 190.00, 10.00) : set_probe_deployed
READ: deploy: 0
READ: do_probe_raise(15.00)
READ: >>> do_blocking_move_to(122.00, 190.00, 15.00)
READ: >>> do_blocking_move_to(122.00, 190.00, 15.00)
READ: current_position=(122.00, 190.00, 15.00) : clean_up_after_endstop_or_probe_move
READ: current_position=(122.00, 190.00, 15.00) : > probing complete
READ: Eqn coefficients: a: -0.00199306 b: 0.00020312 d: 0.14427092
READ: 
READ: 
READ: Bed Level Correction Matrix:
READ: +0.999998 +0.000000 -0.001993 
READ: +0.000000 +1.000000 +0.000203 
READ: +0.001993 -0.000203 +0.999998 
READ: current_position=(122.00, 190.00, 15.00) : G29 uncorrected XYZ
READ: Z from Probe:15.00  Matrix:15.03  Discrepancy:-0.03
READ: current_position=(122.00, 190.00, 15.00) : sync_plan_position
READ: current_position=(122.00, 190.00, 15.00) : G29 corrected XYZ
READ: <<< gcode_G29
READ: X:122.00 Y:190.00 Z:15.00 E:0.00 Count X: 9762 Y:15200 Z:5989
READ: ok

The debug-log above had M851 set to 0.00, but if needed, I can get another log where Z-offset has been set to something else, if needed?

If M851 is not set to "the distance from the nozzle to the bed when the probe triggers" then the results may not be very useful.

Okay. I'll set it to -1.20mm which was the original measured distance and get new log in a minute.

It will also help if you use G29 V4 so it prints out the bed matrix.

@thinkyhead Coordinates is correct at the end of G29, but something wrong with offset.
Before the latest rcbugfix was everything fine.

The probe offset isn't actually used by G29. It's only used when doing G28 homing with a probe to determine the current Z.

EDIT: Well, actually, not entirely true… I just recently added an optional Z correction to the end of G29 that does make use of it. Almost forgot…

I don`t know whats wrong with this fix, but before latest fix is all good.

I don't know either. That's why we're here.

Log of G29

start
echo:Marlin 1.1.0-RCBugFix

echo: Last Updated: 2016-07-26 12:00 | Author: Jartza
Compiled: Sep 18 2016
echo: Free Memory: 3222  PlannerBufferBytes: 1232
echo:V25 stored settings retrieved (394 bytes)
echo:Steps per unit:
echo:  M92 X80.00 Y80.00 Z400.00 E97.00
echo:Maximum feedrates (mm/s):
echo:  M203 X300.00 Y300.00 Z12.00 E50.00
echo:Maximum Acceleration (mm/s2):
echo:  M201 X1500 Y1500 Z100 E10000
echo:Accelerations: P=printing, R=retract and T=travel
echo:  M204 P900.00 R3000.00 T900.00
echo:Advanced variables: S=Min feedrate (mm/s), T=Min travel feedrate (mm/s), B=minimum segment time (ms), X=maximum XY jerk (mm/s),  Z=maximum Z jerk (mm/s),  E=maximum E jerk (mm/s)
echo:  M205 S0.00 T0.00 B20000 X14.00 Z0.40 E5.00
echo:Home offset (mm)
echo:  M206 X0.00 Y0.00 Z0.00
echo:Material heatup parameters:
echo:  M145 S0 H195 B55 F0
echo:  M145 S1 H240 B75 F0
echo:PID settings:
echo:  M301 P16.10 I0.76 D85.73
echo:  M304 P450.06 I63.88 D792.67
echo:Filament settings: Disabled
echo:  M200 D3.00
echo:  M200 D0
echo:Z-Probe Offset (mm):
echo:  M851 Z-1.20
echo:SD init fail
echo:DEBUG:ECHO,INFO,ERRORS,DRYRUN,COMMUNICATION,LEVELING
ok
echo:G28
>>> gcode_G28
Machine Type: Cartesian
Probe: SERVO PROBE
Probe Offset X:38 Y:-10 Z:-1.20 (Right-Front & Below Nozzle)
reset_bed_level
current_position=(0.00, 0.00, 0.00) : setup_for_endstop_or_probe_move
> endstops.enable(true)
Raise Z (before homing) to 10.00
>>> do_blocking_move_to(0.00, 0.00, 10.00)
>>> homeaxis(X)
current_position=(0.00, 0.00, 10.00) : sync_plan_position
> 1st Home -300.00
current_position=(0.00, 0.00, 10.00) : sync_plan_position
current_position=(0.00, 0.00, 10.00) : sync_plan_position
> 2nd Home -10.00
>>> set_axis_is_at_home(X)
For X axis:
 home_offset = 0.00
 position_shift = 0.00
 soft_endstop_min = 0.00
 soft_endstop_max = 200.00
> home_offset[X] = 0.00
current_position=(1.00, 0.00, 10.00) : 
<<< set_axis_is_at_home(X)
current_position=(1.00, 0.00, 10.00) : sync_plan_position
current_position=(1.00, 0.00, 10.00) : > AFTER set_axis_is_at_home
<<< homeaxis(X)
current_position=(1.00, 0.00, 10.00) : > homeX
>>> homeaxis(Y)
current_position=(1.00, 0.00, 10.00) : sync_plan_position
> 1st Home -315.00
current_position=(1.00, 0.00, 10.00) : sync_plan_position
current_position=(1.00, 0.00, 10.00) : sync_plan_position
> 2nd Home -10.00
>>> set_axis_is_at_home(Y)
For Y axis:
 home_offset = 0.00
 position_shift = 0.00
 soft_endstop_min = 0.00
 soft_endstop_max = 210.00
> home_offset[Y] = 0.00
current_position=(1.00, -19.00, 10.00) : 
<<< set_axis_is_at_home(Y)
current_position=(1.00, -19.00, 10.00) : sync_plan_position
current_position=(1.00, -19.00, 10.00) : > AFTER set_axis_is_at_home
<<< homeaxis(Y)
current_position=(1.00, -19.00, 10.00) : > homeY
Z_SAFE_HOMING >>>
current_position=(1.00, -19.00, 10.00) : sync_plan_position
destination=(62.00, 115.00, 10.00) : Z_SAFE_HOMING
>>> do_blocking_move_to(62.00, 115.00, 10.00)
>>> homeaxis(Z)
current_position=(62.00, 115.00, 10.00) : set_probe_deployed
deploy: 1
do_probe_raise(15.00)
>>> do_blocking_move_to(62.00, 115.00, 15.00)
>>> do_blocking_move_to(62.00, 115.00, 15.00)
current_position=(62.00, 115.00, 0.00) : sync_plan_position
> 1st Home -315.00
current_position=(62.00, 115.00, 0.00) : sync_plan_position
current_position=(62.00, 115.00, 0.00) : sync_plan_position
> 2nd Home -6.00
>>> set_axis_is_at_home(Z)
For Z axis:
 home_offset = 0.00
 position_shift = 0.00
 soft_endstop_min = 0.00
 soft_endstop_max = 210.00
*** Z HOMED WITH PROBE (Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN) ***
> zprobe_zoffset = -1.20
> home_offset[Z] = 0.00
current_position=(62.00, 115.00, 1.20) : 
<<< set_axis_is_at_home(Z)
current_position=(62.00, 115.00, 1.20) : sync_plan_position
current_position=(62.00, 115.00, 1.20) : > AFTER set_axis_is_at_home
current_position=(62.00, 115.00, 1.20) : set_probe_deployed
deploy: 0
do_probe_raise(15.00)
>>> do_blocking_move_to(62.00, 115.00, 15.00)
>>> do_blocking_move_to(62.00, 115.00, 15.00)
<<< homeaxis(Z)
<<< Z_SAFE_HOMING
current_position=(62.00, 115.00, 15.00) : > (home_all_axis || homeZ) > final
current_position=(62.00, 115.00, 15.00) : sync_plan_position
current_position=(62.00, 115.00, 15.00) : clean_up_after_endstop_or_probe_move
<<< gcode_G28
X:62.00 Y:115.00 Z:15.00 E:0.00 Count X: 4960 Y:9200 Z:6000
ok
echo:G29 V4
>>> gcode_G29
current_position=(62.00, 115.00, 15.00) : 
Machine Type: Cartesian
Probe: SERVO PROBE
Probe Offset X:38 Y:-10 Z:-1.20 (Right-Front & Below Nozzle)
G29 Auto Bed Leveling
reset_bed_level
current_position=(62.00, 115.00, 15.00) : sync_plan_position
current_position=(62.00, 115.00, 15.00) : setup_for_endstop_or_probe_move
current_position=(62.00, 115.00, 15.00) : set_probe_deployed
deploy: 1
do_probe_raise(15.00)
>>> do_blocking_move_to(62.00, 115.00, 15.00)
>>> probe_pt(40.00, 20.00, no stow)
current_position=(62.00, 115.00, 15.00) : 
do_probe_raise(10.00)
> do_blocking_move_to_xy(2.00, 30.00)
>>> do_blocking_move_to(2.00, 30.00, 15.00)
current_position=(2.00, 30.00, 15.00) : set_probe_deployed
deploy: 1
current_position=(2.00, 30.00, 15.00) : >>> run_z_probe
current_position=(2.00, 30.00, 15.00) : >>> do_probe_move
>>> do_blocking_move_to(2.00, 30.00, -220.00)
current_position=(2.00, 30.00, 1.05) : sync_plan_position
current_position=(2.00, 30.00, 1.05) : <<< do_probe_move
>>> do_blocking_move_to(2.00, 30.00, 4.05)
current_position=(2.00, 30.00, 4.05) : >>> do_probe_move
>>> do_blocking_move_to(2.00, 30.00, -220.00)
current_position=(2.00, 30.00, 1.08) : sync_plan_position
current_position=(2.00, 30.00, 1.08) : <<< do_probe_move
current_position=(2.00, 30.00, 1.08) : <<< run_z_probe
> do_probe_raise
do_probe_raise(10.00)
>>> do_blocking_move_to(2.00, 30.00, 10.00)
Bed X: 40.000 Y: 20.000 Z: 1.085
<<< probe_pt
>>> probe_pt(100.00, 20.00, no stow)
current_position=(2.00, 30.00, 10.00) : 
do_probe_raise(10.00)
> do_blocking_move_to_xy(62.00, 30.00)
>>> do_blocking_move_to(62.00, 30.00, 10.00)
current_position=(62.00, 30.00, 10.00) : set_probe_deployed
deploy: 1
current_position=(62.00, 30.00, 10.00) : >>> run_z_probe
current_position=(62.00, 30.00, 10.00) : >>> do_probe_move
>>> do_blocking_move_to(62.00, 30.00, -220.00)
current_position=(62.00, 30.00, 1.16) : sync_plan_position
current_position=(62.00, 30.00, 1.16) : <<< do_probe_move
>>> do_blocking_move_to(62.00, 30.00, 4.16)
current_position=(62.00, 30.00, 4.16) : >>> do_probe_move
>>> do_blocking_move_to(62.00, 30.00, -220.00)
current_position=(62.00, 30.00, 1.17) : sync_plan_position
current_position=(62.00, 30.00, 1.17) : <<< do_probe_move
current_position=(62.00, 30.00, 1.17) : <<< run_z_probe
> do_probe_raise
do_probe_raise(10.00)
>>> do_blocking_move_to(62.00, 30.00, 10.00)
Bed X: 100.000 Y: 20.000 Z: 1.167
<<< probe_pt
>>> probe_pt(160.00, 20.00, no stow)
current_position=(62.00, 30.00, 10.00) : 
do_probe_raise(10.00)
> do_blocking_move_to_xy(122.00, 30.00)
>>> do_blocking_move_to(122.00, 30.00, 10.00)
current_position=(122.00, 30.00, 10.00) : set_probe_deployed
deploy: 1
current_position=(122.00, 30.00, 10.00) : >>> run_z_probe
current_position=(122.00, 30.00, 10.00) : >>> do_probe_move
>>> do_blocking_move_to(122.00, 30.00, -220.00)
current_position=(122.00, 30.00, 0.86) : sync_plan_position
current_position=(122.00, 30.00, 0.86) : <<< do_probe_move
>>> do_blocking_move_to(122.00, 30.00, 3.87)
current_position=(122.00, 30.00, 3.87) : >>> do_probe_move
>>> do_blocking_move_to(122.00, 30.00, -220.00)
current_position=(122.00, 30.00, 0.87) : sync_plan_position
current_position=(122.00, 30.00, 0.87) : <<< do_probe_move
current_position=(122.00, 30.00, 0.87) : <<< run_z_probe
> do_probe_raise
do_probe_raise(10.00)
>>> do_blocking_move_to(122.00, 30.00, 10.00)
Bed X: 160.000 Y: 20.000 Z: 0.873
<<< probe_pt
>>> probe_pt(160.00, 100.00, no stow)
current_position=(122.00, 30.00, 10.00) : 
do_probe_raise(10.00)
> do_blocking_move_to_xy(122.00, 110.00)
>>> do_blocking_move_to(122.00, 110.00, 10.00)
current_position=(122.00, 110.00, 10.00) : set_probe_deployed
deploy: 1
current_position=(122.00, 110.00, 10.00) : >>> run_z_probe
current_position=(122.00, 110.00, 10.00) : >>> do_probe_move
>>> do_blocking_move_to(122.00, 110.00, -220.00)
current_position=(122.00, 110.00, 1.00) : sync_plan_position
current_position=(122.00, 110.00, 1.00) : <<< do_probe_move
>>> do_blocking_move_to(122.00, 110.00, 4.01)
current_position=(122.00, 110.00, 4.01) : >>> do_probe_move
>>> do_blocking_move_to(122.00, 110.00, -220.00)
current_position=(122.00, 110.00, 1.01) : sync_plan_position
current_position=(122.00, 110.00, 1.01) : <<< do_probe_move
current_position=(122.00, 110.00, 1.01) : <<< run_z_probe
> do_probe_raise
do_probe_raise(10.00)
>>> do_blocking_move_to(122.00, 110.00, 10.00)
Bed X: 160.000 Y: 100.000 Z: 1.010
<<< probe_pt
>>> probe_pt(100.00, 100.00, no stow)
current_position=(122.00, 110.00, 10.00) : 
do_probe_raise(10.00)
> do_blocking_move_to_xy(62.00, 110.00)
>>> do_blocking_move_to(62.00, 110.00, 10.00)
current_position=(62.00, 110.00, 10.00) : set_probe_deployed
deploy: 1
current_position=(62.00, 110.00, 10.00) : >>> run_z_probe
current_position=(62.00, 110.00, 10.00) : >>> do_probe_move
>>> do_blocking_move_to(62.00, 110.00, -220.00)
current_position=(62.00, 110.00, 1.20) : sync_plan_position
current_position=(62.00, 110.00, 1.20) : <<< do_probe_move
>>> do_blocking_move_to(62.00, 110.00, 4.20)
current_position=(62.00, 110.00, 4.20) : >>> do_probe_move
>>> do_blocking_move_to(62.00, 110.00, -220.00)
current_position=(62.00, 110.00, 1.17) : sync_plan_position
current_position=(62.00, 110.00, 1.17) : <<< do_probe_move
current_position=(62.00, 110.00, 1.17) : <<< run_z_probe
> do_probe_raise
do_probe_raise(10.00)
>>> do_blocking_move_to(62.00, 110.00, 10.00)
Bed X: 100.000 Y: 100.000 Z: 1.170
<<< probe_pt
>>> probe_pt(40.00, 100.00, no stow)
current_position=(62.00, 110.00, 10.00) : 
do_probe_raise(10.00)
> do_blocking_move_to_xy(2.00, 110.00)
>>> do_blocking_move_to(2.00, 110.00, 10.00)
current_position=(2.00, 110.00, 10.00) : set_probe_deployed
deploy: 1
current_position=(2.00, 110.00, 10.00) : >>> run_z_probe
current_position=(2.00, 110.00, 10.00) : >>> do_probe_move
>>> do_blocking_move_to(2.00, 110.00, -220.00)
current_position=(2.00, 110.00, 1.29) : sync_plan_position
current_position=(2.00, 110.00, 1.29) : <<< do_probe_move
>>> do_blocking_move_to(2.00, 110.00, 4.30)
current_position=(2.00, 110.00, 4.30) : >>> do_probe_move
>>> do_blocking_move_to(2.00, 110.00, -220.00)
current_position=(2.00, 110.00, 1.29) : sync_plan_position
current_position=(2.00, 110.00, 1.29) : <<< do_probe_move
current_position=(2.00, 110.00, 1.29) : <<< run_z_probe
> do_probe_raise
do_probe_raise(10.00)
>>> do_blocking_move_to(2.00, 110.00, 10.00)
Bed X: 40.000 Y: 100.000 Z: 1.292
<<< probe_pt
>>> probe_pt(40.00, 180.00, no stow)
current_position=(2.00, 110.00, 10.00) : 
do_probe_raise(10.00)
> do_blocking_move_to_xy(2.00, 190.00)
>>> do_blocking_move_to(2.00, 190.00, 10.00)
current_position=(2.00, 190.00, 10.00) : set_probe_deployed
deploy: 1
current_position=(2.00, 190.00, 10.00) : >>> run_z_probe
current_position=(2.00, 190.00, 10.00) : >>> do_probe_move
>>> do_blocking_move_to(2.00, 190.00, -220.00)
current_position=(2.00, 190.00, 1.15) : sync_plan_position
current_position=(2.00, 190.00, 1.15) : <<< do_probe_move
>>> do_blocking_move_to(2.00, 190.00, 4.15)
current_position=(2.00, 190.00, 4.15) : >>> do_probe_move
>>> do_blocking_move_to(2.00, 190.00, -220.00)
current_position=(2.00, 190.00, 1.13) : sync_plan_position
current_position=(2.00, 190.00, 1.13) : <<< do_probe_move
current_position=(2.00, 190.00, 1.13) : <<< run_z_probe
> do_probe_raise
do_probe_raise(10.00)
>>> do_blocking_move_to(2.00, 190.00, 10.00)
Bed X: 40.000 Y: 180.000 Z: 1.127
<<< probe_pt
>>> probe_pt(100.00, 180.00, no stow)
current_position=(2.00, 190.00, 10.00) : 
do_probe_raise(10.00)
> do_blocking_move_to_xy(62.00, 190.00)
>>> do_blocking_move_to(62.00, 190.00, 10.00)
current_position=(62.00, 190.00, 10.00) : set_probe_deployed
deploy: 1
current_position=(62.00, 190.00, 10.00) : >>> run_z_probe
current_position=(62.00, 190.00, 10.00) : >>> do_probe_move
>>> do_blocking_move_to(62.00, 190.00, -220.00)
current_position=(62.00, 190.00, 1.10) : sync_plan_position
current_position=(62.00, 190.00, 1.10) : <<< do_probe_move
>>> do_blocking_move_to(62.00, 190.00, 4.10)
current_position=(62.00, 190.00, 4.10) : >>> do_probe_move
>>> do_blocking_move_to(62.00, 190.00, -220.00)
current_position=(62.00, 190.00, 1.08) : sync_plan_position
current_position=(62.00, 190.00, 1.08) : <<< do_probe_move
current_position=(62.00, 190.00, 1.08) : <<< run_z_probe
> do_probe_raise
do_probe_raise(10.00)
>>> do_blocking_move_to(62.00, 190.00, 10.00)
Bed X: 100.000 Y: 180.000 Z: 1.080
<<< probe_pt
>>> probe_pt(160.00, 180.00, no stow)
current_position=(62.00, 190.00, 10.00) : 
do_probe_raise(10.00)
> do_blocking_move_to_xy(122.00, 190.00)
>>> do_blocking_move_to(122.00, 190.00, 10.00)
current_position=(122.00, 190.00, 10.00) : set_probe_deployed
deploy: 1
current_position=(122.00, 190.00, 10.00) : >>> run_z_probe
current_position=(122.00, 190.00, 10.00) : >>> do_probe_move
>>> do_blocking_move_to(122.00, 190.00, -220.00)
current_position=(122.00, 190.00, 0.85) : sync_plan_position
current_position=(122.00, 190.00, 0.85) : <<< do_probe_move
>>> do_blocking_move_to(122.00, 190.00, 3.85)
current_position=(122.00, 190.00, 3.85) : >>> do_probe_move
>>> do_blocking_move_to(122.00, 190.00, -220.00)
current_position=(122.00, 190.00, 0.86) : sync_plan_position
current_position=(122.00, 190.00, 0.86) : <<< do_probe_move
current_position=(122.00, 190.00, 0.86) : <<< run_z_probe
> do_probe_raise
do_probe_raise(10.00)
>>> do_blocking_move_to(122.00, 190.00, 10.00)
Bed X: 160.000 Y: 180.000 Z: 0.860
<<< probe_pt
current_position=(122.00, 190.00, 10.00) : set_probe_deployed
deploy: 0
do_probe_raise(15.00)
>>> do_blocking_move_to(122.00, 190.00, 15.00)
>>> do_blocking_move_to(122.00, 190.00, 15.00)
current_position=(122.00, 190.00, 15.00) : clean_up_after_endstop_or_probe_move
current_position=(122.00, 190.00, 15.00) : > probing complete
Eqn coefficients: a: -0.00211806 b: -0.00011979 d: 1.29767358
Mean of sampled points: 1.07388889

Bed Height Topography:
   +--- BACK --+
   |           |
 L |    (+)    | R
 E |           | I
 F | (-) N (+) | G
 T |           | H
   |    (-)    | T
   |           |
   O-- FRONT --+
 (0,0)
 +0.05361 +0.00611 -0.21389
 +0.21861 +0.09611 -0.06389
 +0.01111 +0.09361 -0.20139


Corrected Bed Height vs. Bed Topology:
 +0.06167 +0.14125 +0.04833
 +0.21708 +0.22167 +0.18875
 +0.00000 +0.20958 +0.04167



Bed Level Correction Matrix:
+0.999998 +0.000000 -0.002118 
-0.000000 +1.000000 -0.000120 
+0.002118 +0.000120 +0.999998 
current_position=(122.00, 190.00, 15.00) : G29 uncorrected XYZ
Z from Probe:16.20  Matrix:15.06  Discrepancy:1.14
current_position=(122.00, 190.00, 16.20) : sync_plan_position
current_position=(122.00, 190.00, 16.20) : G29 corrected XYZ
<<< gcode_G29
X:122.00 Y:190.00 Z:16.20 E:0.00 Count X: 9763 Y:15200 Z:6457
ok

@Jartza Your probing seems very erratic, with offsets all over the place. Please run an M48 to see how reliable your probe is. Note that planar bed leveling will not produce good results if the probe is inaccurate or the bed is uneven. It only works well with a flat bed and an accurate probe.

Well, I had to remove the glass because there was buildtak attached to it, which now is pretty much scratched because I was too slow to hit the panic reset, and the nozzle started scraping the buildtak off 😢

8 of 8 z: 15.000000 mean: 1.225312 sigma: 0.023599
Mean: 1.225312
Standard Deviation: 0.023599

But the same happens when I put clean glass on, still the nozzle hits bed.

Same log but now with 4mm glass on bed

start
echo:Marlin 1.1.0-RCBugFix

echo: Last Updated: 2016-07-26 12:00 | Author: Jartza
Compiled: Sep 18 2016
echo: Free Memory: 3222  PlannerBufferBytes: 1232
echo:V25 stored settings retrieved (394 bytes)
echo:Steps per unit:
echo:  M92 X80.00 Y80.00 Z400.00 E97.00
echo:Maximum feedrates (mm/s):
echo:  M203 X300.00 Y300.00 Z12.00 E50.00
echo:Maximum Acceleration (mm/s2):
echo:  M201 X1500 Y1500 Z100 E10000
echo:Accelerations: P=printing, R=retract and T=travel
echo:  M204 P900.00 R3000.00 T900.00
echo:Advanced variables: S=Min feedrate (mm/s), T=Min travel feedrate (mm/s), B=minimum segment time (ms), X=maximum XY jerk (mm/s),  Z=maximum Z jerk (mm/s),  E=maximum E jerk (mm/s)
echo:  M205 S0.00 T0.00 B20000 X14.00 Z0.40 E5.00
echo:Home offset (mm)
echo:  M206 X0.00 Y0.00 Z0.00
echo:Material heatup parameters:
echo:  M145 S0 H195 B55 F0
echo:  M145 S1 H240 B75 F0
echo:PID settings:
echo:  M301 P16.10 I0.76 D85.73
echo:  M304 P450.06 I63.88 D792.67
echo:Filament settings: Disabled
echo:  M200 D3.00
echo:  M200 D0
echo:Z-Probe Offset (mm):
echo:  M851 Z-1.20
echo:SD init fail
echo:DEBUG:ECHO,INFO,ERRORS,DRYRUN,COMMUNICATION,LEVELING
ok
echo:G28
>>> gcode_G28
Machine Type: Cartesian
Probe: SERVO PROBE
Probe Offset X:38 Y:-10 Z:-1.20 (Right-Front & Below Nozzle)
reset_bed_level
current_position=(0.00, 0.00, 0.00) : setup_for_endstop_or_probe_move
> endstops.enable(true)
Raise Z (before homing) to 10.00
>>> do_blocking_move_to(0.00, 0.00, 10.00)
>>> homeaxis(X)
current_position=(0.00, 0.00, 10.00) : sync_plan_position
> 1st Home -300.00
current_position=(0.00, 0.00, 10.00) : sync_plan_position
current_position=(0.00, 0.00, 10.00) : sync_plan_position
> 2nd Home -10.00
>>> set_axis_is_at_home(X)
For X axis:
 home_offset = 0.00
 position_shift = 0.00
 soft_endstop_min = 0.00
 soft_endstop_max = 200.00
> home_offset[X] = 0.00
current_position=(1.00, 0.00, 10.00) : 
<<< set_axis_is_at_home(X)
current_position=(1.00, 0.00, 10.00) : sync_plan_position
current_position=(1.00, 0.00, 10.00) : > AFTER set_axis_is_at_home
<<< homeaxis(X)
current_position=(1.00, 0.00, 10.00) : > homeX
>>> homeaxis(Y)
current_position=(1.00, 0.00, 10.00) : sync_plan_position
> 1st Home -315.00
current_position=(1.00, 0.00, 10.00) : sync_plan_position
current_position=(1.00, 0.00, 10.00) : sync_plan_position
> 2nd Home -10.00
>>> set_axis_is_at_home(Y)
For Y axis:
 home_offset = 0.00
 position_shift = 0.00
 soft_endstop_min = 0.00
 soft_endstop_max = 210.00
> home_offset[Y] = 0.00
current_position=(1.00, -19.00, 10.00) : 
<<< set_axis_is_at_home(Y)
current_position=(1.00, -19.00, 10.00) : sync_plan_position
current_position=(1.00, -19.00, 10.00) : > AFTER set_axis_is_at_home
<<< homeaxis(Y)
current_position=(1.00, -19.00, 10.00) : > homeY
Z_SAFE_HOMING >>>
current_position=(1.00, -19.00, 10.00) : sync_plan_position
destination=(62.00, 115.00, 10.00) : Z_SAFE_HOMING
>>> do_blocking_move_to(62.00, 115.00, 10.00)
>>> homeaxis(Z)
current_position=(62.00, 115.00, 10.00) : set_probe_deployed
deploy: 1
do_probe_raise(15.00)
>>> do_blocking_move_to(62.00, 115.00, 15.00)
>>> do_blocking_move_to(62.00, 115.00, 15.00)
current_position=(62.00, 115.00, 0.00) : sync_plan_position
> 1st Home -315.00
current_position=(62.00, 115.00, 0.00) : sync_plan_position
current_position=(62.00, 115.00, 0.00) : sync_plan_position
> 2nd Home -6.00
>>> set_axis_is_at_home(Z)
For Z axis:
 home_offset = 0.00
 position_shift = 0.00
 soft_endstop_min = 0.00
 soft_endstop_max = 210.00
*** Z HOMED WITH PROBE (Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN) ***
> zprobe_zoffset = -1.20
> home_offset[Z] = 0.00
current_position=(62.00, 115.00, 1.20) : 
<<< set_axis_is_at_home(Z)
current_position=(62.00, 115.00, 1.20) : sync_plan_position
current_position=(62.00, 115.00, 1.20) : > AFTER set_axis_is_at_home
current_position=(62.00, 115.00, 1.20) : set_probe_deployed
deploy: 0
do_probe_raise(15.00)
>>> do_blocking_move_to(62.00, 115.00, 15.00)
>>> do_blocking_move_to(62.00, 115.00, 15.00)
<<< homeaxis(Z)
<<< Z_SAFE_HOMING
current_position=(62.00, 115.00, 15.00) : > (home_all_axis || homeZ) > final
current_position=(62.00, 115.00, 15.00) : sync_plan_position
current_position=(62.00, 115.00, 15.00) : clean_up_after_endstop_or_probe_move
<<< gcode_G28
X:62.00 Y:115.00 Z:15.00 E:0.00 Count X: 4960 Y:9200 Z:6000
ok
echo:G29 V4
>>> gcode_G29
current_position=(62.00, 115.00, 15.00) : 
Machine Type: Cartesian
Probe: SERVO PROBE
Probe Offset X:38 Y:-10 Z:-1.20 (Right-Front & Below Nozzle)
G29 Auto Bed Leveling
reset_bed_level
current_position=(62.00, 115.00, 15.00) : sync_plan_position
current_position=(62.00, 115.00, 15.00) : setup_for_endstop_or_probe_move
current_position=(62.00, 115.00, 15.00) : set_probe_deployed
deploy: 1
do_probe_raise(15.00)
>>> do_blocking_move_to(62.00, 115.00, 15.00)
>>> probe_pt(40.00, 20.00, no stow)
current_position=(62.00, 115.00, 15.00) : 
do_probe_raise(10.00)
> do_blocking_move_to_xy(2.00, 30.00)
>>> do_blocking_move_to(2.00, 30.00, 15.00)
current_position=(2.00, 30.00, 15.00) : set_probe_deployed
deploy: 1
current_position=(2.00, 30.00, 15.00) : >>> run_z_probe
current_position=(2.00, 30.00, 15.00) : >>> do_probe_move
>>> do_blocking_move_to(2.00, 30.00, -220.00)
current_position=(2.00, 30.00, 1.26) : sync_plan_position
current_position=(2.00, 30.00, 1.26) : <<< do_probe_move
>>> do_blocking_move_to(2.00, 30.00, 4.26)
current_position=(2.00, 30.00, 4.26) : >>> do_probe_move
>>> do_blocking_move_to(2.00, 30.00, -220.00)
current_position=(2.00, 30.00, 1.27) : sync_plan_position
current_position=(2.00, 30.00, 1.27) : <<< do_probe_move
current_position=(2.00, 30.00, 1.27) : <<< run_z_probe
> do_probe_raise
do_probe_raise(10.00)
>>> do_blocking_move_to(2.00, 30.00, 10.00)
Bed X: 40.000 Y: 20.000 Z: 1.267
<<< probe_pt
>>> probe_pt(100.00, 20.00, no stow)
current_position=(2.00, 30.00, 10.00) : 
do_probe_raise(10.00)
> do_blocking_move_to_xy(62.00, 30.00)
>>> do_blocking_move_to(62.00, 30.00, 10.00)
current_position=(62.00, 30.00, 10.00) : set_probe_deployed
deploy: 1
current_position=(62.00, 30.00, 10.00) : >>> run_z_probe
current_position=(62.00, 30.00, 10.00) : >>> do_probe_move
>>> do_blocking_move_to(62.00, 30.00, -220.00)
current_position=(62.00, 30.00, 1.26) : sync_plan_position
current_position=(62.00, 30.00, 1.26) : <<< do_probe_move
>>> do_blocking_move_to(62.00, 30.00, 4.26)
current_position=(62.00, 30.00, 4.26) : >>> do_probe_move
>>> do_blocking_move_to(62.00, 30.00, -220.00)
current_position=(62.00, 30.00, 1.23) : sync_plan_position
current_position=(62.00, 30.00, 1.23) : <<< do_probe_move
current_position=(62.00, 30.00, 1.23) : <<< run_z_probe
> do_probe_raise
do_probe_raise(10.00)
>>> do_blocking_move_to(62.00, 30.00, 10.00)
Bed X: 100.000 Y: 20.000 Z: 1.227
<<< probe_pt
>>> probe_pt(160.00, 20.00, no stow)
current_position=(62.00, 30.00, 10.00) : 
do_probe_raise(10.00)
> do_blocking_move_to_xy(122.00, 30.00)
>>> do_blocking_move_to(122.00, 30.00, 10.00)
current_position=(122.00, 30.00, 10.00) : set_probe_deployed
deploy: 1
current_position=(122.00, 30.00, 10.00) : >>> run_z_probe
current_position=(122.00, 30.00, 10.00) : >>> do_probe_move
>>> do_blocking_move_to(122.00, 30.00, -220.00)
current_position=(122.00, 30.00, 1.17) : sync_plan_position
current_position=(122.00, 30.00, 1.17) : <<< do_probe_move
>>> do_blocking_move_to(122.00, 30.00, 4.17)
current_position=(122.00, 30.00, 4.17) : >>> do_probe_move
>>> do_blocking_move_to(122.00, 30.00, -220.00)
current_position=(122.00, 30.00, 1.18) : sync_plan_position
current_position=(122.00, 30.00, 1.18) : <<< do_probe_move
current_position=(122.00, 30.00, 1.18) : <<< run_z_probe
> do_probe_raise
do_probe_raise(10.00)
>>> do_blocking_move_to(122.00, 30.00, 10.00)
Bed X: 160.000 Y: 20.000 Z: 1.182
<<< probe_pt
>>> probe_pt(160.00, 100.00, no stow)
current_position=(122.00, 30.00, 10.00) : 
do_probe_raise(10.00)
> do_blocking_move_to_xy(122.00, 110.00)
>>> do_blocking_move_to(122.00, 110.00, 10.00)
current_position=(122.00, 110.00, 10.00) : set_probe_deployed
deploy: 1
current_position=(122.00, 110.00, 10.00) : >>> run_z_probe
current_position=(122.00, 110.00, 10.00) : >>> do_probe_move
>>> do_blocking_move_to(122.00, 110.00, -220.00)
current_position=(122.00, 110.00, 1.16) : sync_plan_position
current_position=(122.00, 110.00, 1.16) : <<< do_probe_move
>>> do_blocking_move_to(122.00, 110.00, 4.17)
current_position=(122.00, 110.00, 4.17) : >>> do_probe_move
>>> do_blocking_move_to(122.00, 110.00, -220.00)
current_position=(122.00, 110.00, 1.15) : sync_plan_position
current_position=(122.00, 110.00, 1.15) : <<< do_probe_move
current_position=(122.00, 110.00, 1.15) : <<< run_z_probe
> do_probe_raise
do_probe_raise(10.00)
>>> do_blocking_move_to(122.00, 110.00, 10.00)
Bed X: 160.000 Y: 100.000 Z: 1.150
<<< probe_pt
>>> probe_pt(100.00, 100.00, no stow)
current_position=(122.00, 110.00, 10.00) : 
do_probe_raise(10.00)
> do_blocking_move_to_xy(62.00, 110.00)
>>> do_blocking_move_to(62.00, 110.00, 10.00)
current_position=(62.00, 110.00, 10.00) : set_probe_deployed
deploy: 1
current_position=(62.00, 110.00, 10.00) : >>> run_z_probe
current_position=(62.00, 110.00, 10.00) : >>> do_probe_move
>>> do_blocking_move_to(62.00, 110.00, -220.00)
current_position=(62.00, 110.00, 1.29) : sync_plan_position
current_position=(62.00, 110.00, 1.29) : <<< do_probe_move
>>> do_blocking_move_to(62.00, 110.00, 4.29)
current_position=(62.00, 110.00, 4.29) : >>> do_probe_move
>>> do_blocking_move_to(62.00, 110.00, -220.00)
current_position=(62.00, 110.00, 1.29) : sync_plan_position
current_position=(62.00, 110.00, 1.29) : <<< do_probe_move
current_position=(62.00, 110.00, 1.29) : <<< run_z_probe
> do_probe_raise
do_probe_raise(10.00)
>>> do_blocking_move_to(62.00, 110.00, 10.00)
Bed X: 100.000 Y: 100.000 Z: 1.295
<<< probe_pt
>>> probe_pt(40.00, 100.00, no stow)
current_position=(62.00, 110.00, 10.00) : 
do_probe_raise(10.00)
> do_blocking_move_to_xy(2.00, 110.00)
>>> do_blocking_move_to(2.00, 110.00, 10.00)
current_position=(2.00, 110.00, 10.00) : set_probe_deployed
deploy: 1
current_position=(2.00, 110.00, 10.00) : >>> run_z_probe
current_position=(2.00, 110.00, 10.00) : >>> do_probe_move
>>> do_blocking_move_to(2.00, 110.00, -220.00)
current_position=(2.00, 110.00, 1.37) : sync_plan_position
current_position=(2.00, 110.00, 1.37) : <<< do_probe_move
>>> do_blocking_move_to(2.00, 110.00, 4.38)
current_position=(2.00, 110.00, 4.38) : >>> do_probe_move
>>> do_blocking_move_to(2.00, 110.00, -220.00)
current_position=(2.00, 110.00, 1.36) : sync_plan_position
current_position=(2.00, 110.00, 1.36) : <<< do_probe_move
current_position=(2.00, 110.00, 1.36) : <<< run_z_probe
> do_probe_raise
do_probe_raise(10.00)
>>> do_blocking_move_to(2.00, 110.00, 10.00)
Bed X: 40.000 Y: 100.000 Z: 1.362
<<< probe_pt
>>> probe_pt(40.00, 180.00, no stow)
current_position=(2.00, 110.00, 10.00) : 
do_probe_raise(10.00)
> do_blocking_move_to_xy(2.00, 190.00)
>>> do_blocking_move_to(2.00, 190.00, 10.00)
current_position=(2.00, 190.00, 10.00) : set_probe_deployed
deploy: 1
current_position=(2.00, 190.00, 10.00) : >>> run_z_probe
current_position=(2.00, 190.00, 10.00) : >>> do_probe_move
>>> do_blocking_move_to(2.00, 190.00, -220.00)
current_position=(2.00, 190.00, 1.39) : sync_plan_position
current_position=(2.00, 190.00, 1.39) : <<< do_probe_move
>>> do_blocking_move_to(2.00, 190.00, 4.39)
current_position=(2.00, 190.00, 4.39) : >>> do_probe_move
>>> do_blocking_move_to(2.00, 190.00, -220.00)
current_position=(2.00, 190.00, 1.42) : sync_plan_position
current_position=(2.00, 190.00, 1.42) : <<< do_probe_move
current_position=(2.00, 190.00, 1.42) : <<< run_z_probe
> do_probe_raise
do_probe_raise(10.00)
>>> do_blocking_move_to(2.00, 190.00, 10.00)
Bed X: 40.000 Y: 180.000 Z: 1.425
<<< probe_pt
>>> probe_pt(100.00, 180.00, no stow)
current_position=(2.00, 190.00, 10.00) : 
do_probe_raise(10.00)
> do_blocking_move_to_xy(62.00, 190.00)
>>> do_blocking_move_to(62.00, 190.00, 10.00)
current_position=(62.00, 190.00, 10.00) : set_probe_deployed
deploy: 1
current_position=(62.00, 190.00, 10.00) : >>> run_z_probe
current_position=(62.00, 190.00, 10.00) : >>> do_probe_move
>>> do_blocking_move_to(62.00, 190.00, -220.00)
current_position=(62.00, 190.00, 1.29) : sync_plan_position
current_position=(62.00, 190.00, 1.29) : <<< do_probe_move
>>> do_blocking_move_to(62.00, 190.00, 4.29)
current_position=(62.00, 190.00, 4.29) : >>> do_probe_move
>>> do_blocking_move_to(62.00, 190.00, -220.00)
current_position=(62.00, 190.00, 1.30) : sync_plan_position
current_position=(62.00, 190.00, 1.30) : <<< do_probe_move
current_position=(62.00, 190.00, 1.30) : <<< run_z_probe
> do_probe_raise
do_probe_raise(10.00)
>>> do_blocking_move_to(62.00, 190.00, 10.00)
Bed X: 100.000 Y: 180.000 Z: 1.297
<<< probe_pt
>>> probe_pt(160.00, 180.00, no stow)
current_position=(62.00, 190.00, 10.00) : 
do_probe_raise(10.00)
> do_blocking_move_to_xy(122.00, 190.00)
>>> do_blocking_move_to(122.00, 190.00, 10.00)
current_position=(122.00, 190.00, 10.00) : set_probe_deployed
deploy: 1
current_position=(122.00, 190.00, 10.00) : >>> run_z_probe
current_position=(122.00, 190.00, 10.00) : >>> do_probe_move
>>> do_blocking_move_to(122.00, 190.00, -220.00)
current_position=(122.00, 190.00, 1.16) : sync_plan_position
current_position=(122.00, 190.00, 1.16) : <<< do_probe_move
>>> do_blocking_move_to(122.00, 190.00, 4.16)
current_position=(122.00, 190.00, 4.16) : >>> do_probe_move
>>> do_blocking_move_to(122.00, 190.00, -220.00)
current_position=(122.00, 190.00, 1.10) : sync_plan_position
current_position=(122.00, 190.00, 1.10) : <<< do_probe_move
current_position=(122.00, 190.00, 1.10) : <<< run_z_probe
> do_probe_raise
do_probe_raise(10.00)
>>> do_blocking_move_to(122.00, 190.00, 10.00)
Bed X: 160.000 Y: 180.000 Z: 1.102
<<< probe_pt
current_position=(122.00, 190.00, 10.00) : set_probe_deployed
deploy: 0
do_probe_raise(15.00)
>>> do_blocking_move_to(122.00, 190.00, 15.00)
>>> do_blocking_move_to(122.00, 190.00, 15.00)
current_position=(122.00, 190.00, 15.00) : clean_up_after_endstop_or_probe_move
current_position=(122.00, 190.00, 15.00) : > probing complete
Eqn coefficients: a: -0.00172222 b: 0.00030729 d: 1.39815950
Mean of sampled points: 1.25666666

Bed Height Topography:
   +--- BACK --+
   |           |
 L |    (+)    | R
 E |           | I
 F | (-) N (+) | G
 T |           | H
   |    (-)    | T
   |           |
   O-- FRONT --+
 (0,0)
 +0.16833 +0.04083 -0.15417
 +0.10583 +0.03833 -0.10667
 +0.01083 -0.02917 -0.07417


Corrected Bed Height vs. Bed Topology:
 +0.11583 +0.09167 +0.00000
 +0.07792 +0.11375 +0.07208
 +0.00750 +0.07083 +0.12917



Bed Level Correction Matrix:
+0.999999 +0.000000 -0.001722 
+0.000001 +1.000000 +0.000307 
+0.001722 -0.000307 +0.999998 
current_position=(122.00, 190.00, 15.00) : G29 uncorrected XYZ
Z from Probe:16.20  Matrix:15.01  Discrepancy:1.19
current_position=(122.00, 190.00, 16.20) : sync_plan_position
current_position=(122.00, 190.00, 16.20) : G29 corrected XYZ
<<< gcode_G29
X:122.00 Y:190.00 Z:16.20 E:0.00 Count X: 9762 Y:15200 Z:6475
ok

Hmm, well the probe seems accurate enough. I'm re-examining the way I'm doing the final Z correction, because this seems quite wrong…

Z from Probe:16.20  Matrix:15.06  Discrepancy:1.14

The "Z from Probe" value is supposed to determine where Z is based on the final probe point. It should be close to 15, but clearly here the probe offset is being included. Possibly a mistake in the code on my part. Checking into it now…

Tomorrow I will post the log output also, if the problem will not resolved.

Aha. I found it. Typo.

Here's the fix:

- float measured_z = probe_pt(xProbe, yProbe, stow_probe_after_each, verbose_level);
+ measured_z = probe_pt(xProbe, yProbe, stow_probe_after_each, verbose_level);

Okay, I patched this in RCBugFix. Time for more coffee!

Please confirm that it's fixed so I can pretend this never happened.

I will test.

float measured_z = probe_pt(xProbe, yProbe, stow_probe_after_each, verbose_level);

This code is on before latest rcbugfix and work fine.

@renzaaa With a recent patch the code declares measured_z earlier and needs to retain the value until probing is complete. That line conceals the original declaration and creates a temporary variable that is thrown away at the end of the block. Not good. By removing float the correct variable is set.

In the morning I will test.

Confirmed, works now!

Excellent. Thanks @Jartza for helping to track it down. This new Z correction at the end of probing will actually fix the Z position even in cases where the M851 offset is wrong. Theoretically…

Is this in RCBugFix now?

Yes

Latest rcbugfix is working fine.

Hello. I have a similar problem. This must have already been resolved.
When I command G29 the sensor levels the first point and the second point, but in the third point, the nozzle presses the table without stopping. I have to press e-stop every time.
I'm using AUTO_BED_LEVELING_BILINEAR and CONFIGURATION_H_VERSION 010107

@PabloSica — Please test with the latest bugfix-1.1.x (and/or bugfix-2.0.x) branch to see where it stands. If you still see the bad behavior we should investigate further.

I tested this version last night and the problem persists. I'm also using the Octoprint.
How can I generate a log to send you?
I have not found bugfix-2.0.x in your links.

I tested this version last night and the problem persists.

Please post a new issue. This issue is closed.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

Ciev picture Ciev  Â·  3Comments

Bobsta6 picture Bobsta6  Â·  3Comments

spanner888 picture spanner888  Â·  4Comments

esenapaj picture esenapaj  Â·  3Comments

StefanBruens picture StefanBruens  Â·  4Comments