aboutsummaryrefslogtreecommitdiffstats
path: root/klippy/kinematics
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2018-10-08 21:49:56 -0400
committerKevin O'Connor <kevin@koconnor.net>2018-10-10 12:14:27 -0400
commitd4bf51231a6e23e200f5fed536afa338ad681af6 (patch)
tree2eec987cba25e374577a4ff3728d8c2b2324807c /klippy/kinematics
parent3db483e2702771775b7ae099a7a2089cb60a0309 (diff)
downloadkutter-d4bf51231a6e23e200f5fed536afa338ad681af6.tar.gz
kutter-d4bf51231a6e23e200f5fed536afa338ad681af6.tar.xz
kutter-d4bf51231a6e23e200f5fed536afa338ad681af6.zip
homing: Implement second home from homing.py
Move the logic for performing the second home from the kinematics classes to the generic homing code. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'klippy/kinematics')
-rw-r--r--klippy/kinematics/cartesian.py38
-rw-r--r--klippy/kinematics/corexy.py41
-rw-r--r--klippy/kinematics/delta.py19
3 files changed, 28 insertions, 70 deletions
diff --git a/klippy/kinematics/cartesian.py b/klippy/kinematics/cartesian.py
index e6882061..6e971fb5 100644
--- a/klippy/kinematics/cartesian.py
+++ b/klippy/kinematics/cartesian.py
@@ -55,38 +55,24 @@ class CartKinematics:
if i in homing_axes:
self.limits[i] = rail.get_range()
def _home_axis(self, homing_state, axis, rail):
- # Determine moves
+ # Determine movement
position_min, position_max = rail.get_range()
hi = rail.get_homing_info()
+ homepos = [None, None, None, None]
+ homepos[axis] = hi.position_endstop
+ forcepos = list(homepos)
if hi.positive_dir:
- pos = hi.position_endstop - 1.5*(hi.position_endstop - position_min)
- rpos = hi.position_endstop - hi.retract_dist
- r2pos = rpos - hi.retract_dist
+ forcepos[axis] -= 1.5 * (hi.position_endstop - position_min)
else:
- pos = hi.position_endstop + 1.5*(position_max - hi.position_endstop)
- rpos = hi.position_endstop + hi.retract_dist
- r2pos = rpos + hi.retract_dist
- # Initial homing
- homing_speed = hi.speed
- second_homing_speed = hi.second_homing_speed
+ forcepos[axis] += 1.5 * (position_max - hi.position_endstop)
+ # Perform homing
+ limit_speed = None
if axis == 2:
- homing_speed = min(homing_speed, self.max_z_velocity)
- second_homing_speed = min(second_homing_speed, self.max_z_velocity)
- homepos = [None, None, None, None]
- homepos[axis] = hi.position_endstop
- coord = [None, None, None, None]
- coord[axis] = pos
- homing_state.home(coord, homepos, rail.get_endstops(), homing_speed)
- # Retract
- coord[axis] = rpos
- homing_state.retract(coord, homing_speed)
- # Home again
- coord[axis] = r2pos
- homing_state.home(coord, homepos, rail.get_endstops(),
- second_homing_speed, second_home=True)
+ limit_speed = self.max_z_velocity
+ homing_state.home_rails([rail], forcepos, homepos, limit_speed)
# Set final homed position
- coord[axis] = hi.position_endstop + rail.get_homed_offset()
- homing_state.set_homed_position(coord)
+ forcepos[axis] = hi.position_endstop + rail.get_homed_offset()
+ homing_state.set_homed_position(forcepos)
def home(self, homing_state):
# Each axis is homed independently and in order
for axis in homing_state.get_axes():
diff --git a/klippy/kinematics/corexy.py b/klippy/kinematics/corexy.py
index 4121c4b6..99f48fbf 100644
--- a/klippy/kinematics/corexy.py
+++ b/klippy/kinematics/corexy.py
@@ -48,42 +48,25 @@ class CoreXYKinematics:
# Each axis is homed independently and in order
for axis in homing_state.get_axes():
rail = self.rails[axis]
- # Determine moves
+ # Determine movement
position_min, position_max = rail.get_range()
hi = rail.get_homing_info()
+ homepos = [None, None, None, None]
+ homepos[axis] = hi.position_endstop
+ forcepos = list(homepos)
if hi.positive_dir:
- pos = hi.position_endstop - 1.5*(
- hi.position_endstop - position_min)
- rpos = hi.position_endstop - hi.retract_dist
- r2pos = rpos - hi.retract_dist
+ forcepos[axis] -= 1.5 * (hi.position_endstop - position_min)
else:
- pos = hi.position_endstop + 1.5*(
- position_max - hi.position_endstop)
- rpos = hi.position_endstop + hi.retract_dist
- r2pos = rpos + hi.retract_dist
- # Initial homing
- homing_speed = hi.speed
- second_homing_speed = hi.second_homing_speed
+ forcepos[axis] += 1.5 * (position_max - hi.position_endstop)
+ # Perform homing
+ limit_speed = None
if axis == 2:
- homing_speed = min(homing_speed, self.max_z_velocity)
- second_homing_speed = min(second_homing_speed,
- self.max_z_velocity)
- homepos = [None, None, None, None]
- homepos[axis] = hi.position_endstop
- coord = [None, None, None, None]
- coord[axis] = pos
- homing_state.home(coord, homepos, rail.get_endstops(), homing_speed)
- # Retract
- coord[axis] = rpos
- homing_state.retract(coord, homing_speed)
- # Home again
- coord[axis] = r2pos
- homing_state.home(coord, homepos, rail.get_endstops(),
- second_homing_speed, second_home=True)
+ limit_speed = self.max_z_velocity
+ homing_state.home_rails([rail], forcepos, homepos, limit_speed)
if axis == 2:
# Support endstop phase detection on Z axis
- coord[axis] = hi.position_endstop + rail.get_homed_offset()
- homing_state.set_homed_position(coord)
+ forcepos[axis] = hi.position_endstop + rail.get_homed_offset()
+ homing_state.set_homed_position(forcepos)
def motor_off(self, print_time):
self.limits = [(1.0, -1.0)] * 3
for rail in self.rails:
diff --git a/klippy/kinematics/delta.py b/klippy/kinematics/delta.py
index f340f9b4..6be91661 100644
--- a/klippy/kinematics/delta.py
+++ b/klippy/kinematics/delta.py
@@ -97,22 +97,11 @@ class DeltaKinematics:
def home(self, homing_state):
# All axes are homed simultaneously
homing_state.set_axes([0, 1, 2])
- endstops = [es for rail in self.rails for es in rail.get_endstops()]
- # Initial homing - assume homing speed same for all steppers
- hi = self.rails[0].get_homing_info()
- homing_speed = min(hi.speed, self.max_z_velocity)
- second_homing_speed = min(hi.second_homing_speed, self.max_z_velocity)
homepos = [0., 0., self.max_z, None]
- coord = list(homepos)
- coord[2] = -1.5 * math.sqrt(max(self.arm2)-self.max_xy2)
- homing_state.home(coord, homepos, endstops, homing_speed)
- # Retract
- coord[2] = homepos[2] - hi.retract_dist
- homing_state.retract(coord, homing_speed)
- # Home again
- coord[2] -= hi.retract_dist
- homing_state.home(coord, homepos, endstops,
- second_homing_speed, second_home=True)
+ forcepos = list(homepos)
+ forcepos[2] = -1.5 * math.sqrt(max(self.arm2)-self.max_xy2)
+ homing_state.home_rails(self.rails, forcepos, homepos,
+ limit_speed=self.max_z_velocity)
# Set final homed position
spos = [ep + rail.get_homed_offset()
for ep, rail in zip(self.abs_endstops, self.rails)]