aboutsummaryrefslogtreecommitdiffstats
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
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>
-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):