aboutsummaryrefslogtreecommitdiffstats
path: root/klippy/cartesian.py
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2016-07-25 23:47:30 -0400
committerKevin O'Connor <kevin@koconnor.net>2016-07-25 23:47:30 -0400
commit92f81d51f4a88dd6f32a2507e8c3d754c62f4b03 (patch)
tree0d6ad81b8f8e2152e0e7c6a85f773b7f3df0a69d /klippy/cartesian.py
parente9c03f2e4a1807de2730de370ea374c4edeea438 (diff)
downloadkutter-92f81d51f4a88dd6f32a2507e8c3d754c62f4b03.tar.gz
kutter-92f81d51f4a88dd6f32a2507e8c3d754c62f4b03.tar.xz
kutter-92f81d51f4a88dd6f32a2507e8c3d754c62f4b03.zip
homing: Move low-level coordinate manipulation to kinematic class
Rework the code so that the kinematic class (currently just cartesian.py) has more control over the homing process. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'klippy/cartesian.py')
-rw-r--r--klippy/cartesian.py31
1 files changed, 27 insertions, 4 deletions
diff --git a/klippy/cartesian.py b/klippy/cartesian.py
index 67c68be5..f061f673 100644
--- a/klippy/cartesian.py
+++ b/klippy/cartesian.py
@@ -33,11 +33,34 @@ class CartKinematics:
accel_factor = min([self.steppers[i].max_accel / abs(axes_d[i])
for i in StepList if axes_d[i]])
return velocity_factor * move_d, accel_factor * move_d
- def home(self, toolhead, axis):
+ def home(self, toolhead, axes):
# Each axis is homed independently and in order
- homing_state = homing.Homing(toolhead, self.steppers) # XXX
- for a in axis:
- homing_state.plan_home(a)
+ homing_state = homing.Homing(toolhead, axes)
+ for axis in axes:
+ s = self.steppers[axis]
+ # Determine moves
+ if s.homing_positive_dir:
+ pos = s.position_endstop + 1.5*(
+ s.position_min - s.position_endstop)
+ rpos = s.position_endstop - s.homing_retract_dist
+ r2pos = rpos - s.homing_retract_dist
+ else:
+ pos = s.position_endstop + 1.5*(
+ s.position_max - s.position_endstop)
+ rpos = s.position_endstop + s.homing_retract_dist
+ r2pos = rpos + s.homing_retract_dist
+ # Initial homing
+ homepos = [None, None, None, None]
+ homepos[axis] = s.position_endstop
+ coord = [None, None, None, None]
+ coord[axis] = pos
+ homing_state.plan_home(list(coord), homepos, [s], s.homing_speed)
+ # Retract
+ coord[axis] = rpos
+ homing_state.plan_move(list(coord), s.homing_speed)
+ # Home again
+ coord[axis] = r2pos
+ homing_state.plan_home(list(coord), homepos, [s], s.homing_speed/2.0)
return homing_state
def motor_off(self, move_time):
for stepper in self.steppers: