From cc6736c3e35cb6f6e660d973be67ab4cef78ffb9 Mon Sep 17 00:00:00 2001 From: Dmitry Butyugin Date: Wed, 7 May 2025 00:06:36 +0200 Subject: kinematics: Generic Cartesian kinematics implementation (#6815) * tests: Added a regression test for generic_cartesian kinematics * kinematics: An intial implementation of generic_cartesian kinematics * generic_cartesian: Refactored kinematics configuration API * generic_cartesian: Use stepper instead of kinematic_stepper in configs * generic_cartesian: Added SET_STEPPER_KINEMATICS command * generic_cartesian: Fixed parsing of section names * docs: Generic Caretsian kinematics documentation and config samples * generic_cartesian: Implemented multi-mcu homing validation * generic_cartesian: Fixed typos in docs, minor fixes * generic_cartesian: Renamed `kinematics` option to `carriages` * generic_cartesian: Moved kinematic_stepper.py file * idex_modes: Internal refactoring of handling dual carriages * stepper: Refactored the code to not store a reference to config object * config: Updated example-generic-cartesian config * generic_cartesian: Restricted SET_STEPPER_CARRIAGES and exported status * idex_modes: Fixed handling stepper kinematics with input shaper enabled * config: Updated configs and tests for SET_DUAL_CARRIAGE new params * generic_cartesian: Avoid inheritance in the added classes Signed-off-by: Dmitry Butyugin --- klippy/extras/homing.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'klippy/extras/homing.py') diff --git a/klippy/extras/homing.py b/klippy/extras/homing.py index add209ec..723648c1 100644 --- a/klippy/extras/homing.py +++ b/klippy/extras/homing.py @@ -45,7 +45,7 @@ class StepperPosition: class HomingMove: def __init__(self, printer, endstops, toolhead=None): self.printer = printer - self.endstops = endstops + self.endstops = [es for es in endstops if es[0].get_steppers()] if toolhead is None: toolhead = printer.lookup_object('toolhead') self.toolhead = toolhead @@ -71,7 +71,9 @@ class HomingMove: sname = stepper.get_name() kin_spos[sname] += offsets.get(sname, 0) * stepper.get_step_dist() thpos = self.toolhead.get_position() - return list(kin.calc_position(kin_spos))[:3] + thpos[3:] + cpos = kin.calc_position(kin_spos) + return [cp if cp is not None else tp + for cp, tp in zip(cpos, thpos[:3])] + thpos[3:] def homing_move(self, movepos, speed, probe_pos=False, triggered=True, check_triggered=True): # Notify start of homing/probing move @@ -233,6 +235,10 @@ class Homing: for s in kin.get_steppers()} newpos = kin.calc_position(kin_spos) for axis in force_axes: + if newpos[axis] is None: + raise self.printer.command_error( + "Cannot determine position of toolhead on " + "axis %s after homing" % "xyz"[axis]) homepos[axis] = newpos[axis] self.toolhead.set_position(homepos) -- cgit v1.2.3-70-g09d2