aboutsummaryrefslogtreecommitdiffstats
path: root/klippy/extras
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2021-08-28 12:59:01 -0400
committerKevin O'Connor <kevin@koconnor.net>2021-08-28 15:45:11 -0400
commit2e131497ca342514d543fc91cb559df2d2802462 (patch)
tree6bf64578ad76c37ee180325c34df26c1709a8364 /klippy/extras
parent8d4d16d51a3e3581b04b49b4fd216a40d4ae7c3d (diff)
downloadkutter-2e131497ca342514d543fc91cb559df2d2802462.tar.gz
kutter-2e131497ca342514d543fc91cb559df2d2802462.tar.xz
kutter-2e131497ca342514d543fc91cb559df2d2802462.zip
homing: Fix error in retract move causing "must home axis" errors
It's possible for the original homing move of an axis to alter the position of other axes. Make sure those other axes are not requested to move on a subsequent second home retract move, as that could cause an error if those other axes have not been homed. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'klippy/extras')
-rw-r--r--klippy/extras/homing.py27
1 files changed, 15 insertions, 12 deletions
diff --git a/klippy/extras/homing.py b/klippy/extras/homing.py
index 951f63ae..ff20a8e3 100644
--- a/klippy/extras/homing.py
+++ b/klippy/extras/homing.py
@@ -174,29 +174,31 @@ class Homing:
self.printer.send_event("homing:home_rails_begin", self, rails)
# Alter kinematics class to think printer is at forcepos
homing_axes = [axis for axis in range(3) if forcepos[axis] is not None]
- forcepos = self._fill_coord(forcepos)
- movepos = self._fill_coord(movepos)
- self.toolhead.set_position(forcepos, homing_axes=homing_axes)
+ startpos = self._fill_coord(forcepos)
+ homepos = self._fill_coord(movepos)
+ self.toolhead.set_position(startpos, homing_axes=homing_axes)
# Perform first home
endstops = [es for rail in rails for es in rail.get_endstops()]
hi = rails[0].get_homing_info()
hmove = HomingMove(self.printer, endstops)
- hmove.homing_move(movepos, hi.speed)
+ hmove.homing_move(homepos, hi.speed)
# Perform second home
if hi.retract_dist:
# Retract
- axes_d = [mp - fp for mp, fp in zip(movepos, forcepos)]
+ startpos = self._fill_coord(forcepos)
+ homepos = self._fill_coord(movepos)
+ axes_d = [hp - sp for hp, sp in zip(homepos, startpos)]
move_d = math.sqrt(sum([d*d for d in axes_d[:3]]))
retract_r = min(1., hi.retract_dist / move_d)
- retractpos = [mp - ad * retract_r
- for mp, ad in zip(movepos, axes_d)]
+ retractpos = [hp - ad * retract_r
+ for hp, ad in zip(homepos, axes_d)]
self.toolhead.move(retractpos, hi.retract_speed)
# Home again
- forcepos = [rp - ad * retract_r
+ startpos = [rp - ad * retract_r
for rp, ad in zip(retractpos, axes_d)]
- self.toolhead.set_position(forcepos)
+ self.toolhead.set_position(startpos)
hmove = HomingMove(self.printer, endstops)
- hmove.homing_move(movepos, hi.second_homing_speed)
+ hmove.homing_move(homepos, hi.second_homing_speed)
if hmove.check_no_movement() is not None:
raise self.printer.command_error(
"Endstop %s still triggered after retract"
@@ -210,13 +212,14 @@ class Homing:
if any(self.adjust_pos.values()):
# Apply any homing offsets
kin = self.toolhead.get_kinematics()
+ homepos = self.toolhead.get_position()
kin_spos = {s.get_name(): (s.get_commanded_position()
+ self.adjust_pos.get(s.get_name(), 0.))
for s in kin.get_steppers()}
newpos = kin.calc_position(kin_spos)
for axis in homing_axes:
- movepos[axis] = newpos[axis]
- self.toolhead.set_position(movepos)
+ homepos[axis] = newpos[axis]
+ self.toolhead.set_position(homepos)
class PrinterHoming:
def __init__(self, config):