aboutsummaryrefslogtreecommitdiffstats
path: root/klippy/kinematics/cartesian.py
diff options
context:
space:
mode:
authorDmitry Butyugin <dmbutyugin@google.com>2025-05-07 00:06:36 +0200
committerGitHub <noreply@github.com>2025-05-06 18:06:36 -0400
commitcc6736c3e35cb6f6e660d973be67ab4cef78ffb9 (patch)
treeac402e87f007dec73e7dd551088600252cb1437f /klippy/kinematics/cartesian.py
parent1cc63980747b80516f8fc4f022eedf18ae739086 (diff)
downloadkutter-cc6736c3e35cb6f6e660d973be67ab4cef78ffb9.tar.gz
kutter-cc6736c3e35cb6f6e660d973be67ab4cef78ffb9.tar.xz
kutter-cc6736c3e35cb6f6e660d973be67ab4cef78ffb9.zip
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 <dmbutyugin@google.com>
Diffstat (limited to 'klippy/kinematics/cartesian.py')
-rw-r--r--klippy/kinematics/cartesian.py23
1 files changed, 10 insertions, 13 deletions
diff --git a/klippy/kinematics/cartesian.py b/klippy/kinematics/cartesian.py
index 2a50a05d..0524469a 100644
--- a/klippy/kinematics/cartesian.py
+++ b/klippy/kinematics/cartesian.py
@@ -29,14 +29,10 @@ class CartKinematics:
self.rails.append(stepper.LookupMultiRail(dc_config))
self.rails[3].setup_itersolve('cartesian_stepper_alloc',
dc_axis.encode())
- dc_rail_0 = idex_modes.DualCarriagesRail(
- self.rails[self.dual_carriage_axis],
- axis=self.dual_carriage_axis, active=True)
- dc_rail_1 = idex_modes.DualCarriagesRail(
- self.rails[3], axis=self.dual_carriage_axis, active=False)
self.dc_module = idex_modes.DualCarriages(
- dc_config, dc_rail_0, dc_rail_1,
- axis=self.dual_carriage_axis)
+ self.printer, [self.rails[self.dual_carriage_axis]],
+ [self.rails[3]], axes=[self.dual_carriage_axis],
+ safe_dist=config.getfloat('safe_distance', None, minval=0.))
for s in self.get_steppers():
s.set_trapq(toolhead.get_trapq())
toolhead.register_step_generator(s.generate_steps)
@@ -52,9 +48,10 @@ class CartKinematics:
def calc_position(self, stepper_positions):
rails = self.rails
if self.dc_module:
- primary_rail = self.dc_module.get_primary_rail().get_rail()
- rails = (rails[:self.dc_module.axis] +
- [primary_rail] + rails[self.dc_module.axis+1:])
+ primary_rail = self.dc_module.get_primary_rail(
+ self.dual_carriage_axis)
+ rails = (rails[:self.dual_carriage_axis] +
+ [primary_rail] + rails[self.dual_carriage_axis+1:])
return [stepper_positions[rail.get_name()] for rail in rails]
def update_limits(self, i, range):
l, h = self.limits[i]
@@ -67,8 +64,8 @@ class CartKinematics:
rail.set_position(newpos)
for axis_name in homing_axes:
axis = "xyz".index(axis_name)
- if self.dc_module and axis == self.dc_module.axis:
- rail = self.dc_module.get_primary_rail().get_rail()
+ if self.dc_module and axis == self.dual_carriage_axis:
+ rail = self.dc_module.get_primary_rail(self.dual_carriage_axis)
else:
rail = self.rails[axis]
self.limits[axis] = rail.get_range()
@@ -93,7 +90,7 @@ class CartKinematics:
# Each axis is homed independently and in order
for axis in homing_state.get_axes():
if self.dc_module is not None and axis == self.dual_carriage_axis:
- self.dc_module.home(homing_state)
+ self.dc_module.home(homing_state, self.dual_carriage_axis)
else:
self.home_axis(homing_state, axis, self.rails[axis])
def _check_endstops(self, move):