aboutsummaryrefslogtreecommitdiffstats
path: root/klippy/kinematics/delta.py
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2018-10-08 15:36:41 -0400
committerKevin O'Connor <kevin@koconnor.net>2018-10-10 12:18:22 -0400
commit459e5219910cb57888768f0096355d9be1389024 (patch)
tree58e3899031c871db78f469ab82e553f9fe2fcaab /klippy/kinematics/delta.py
parentbd1ba8683977e73d5cce63d45fdc73881b121446 (diff)
downloadkutter-459e5219910cb57888768f0096355d9be1389024.tar.gz
kutter-459e5219910cb57888768f0096355d9be1389024.tar.xz
kutter-459e5219910cb57888768f0096355d9be1389024.zip
delta: Add a special case to the limit checks for the homing position
When a delta printer has different arm lengths or different endstop positions then the homing position falls outside of the normal printable area. Add a special check to the range checking code to permit this move instead of homing to a position near the actual homing position. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'klippy/kinematics/delta.py')
-rw-r--r--klippy/kinematics/delta.py9
1 files changed, 5 insertions, 4 deletions
diff --git a/klippy/kinematics/delta.py b/klippy/kinematics/delta.py
index d74b458e..3f453578 100644
--- a/klippy/kinematics/delta.py
+++ b/klippy/kinematics/delta.py
@@ -54,6 +54,8 @@ class DeltaKinematics:
# Setup boundary checks
self.need_motor_enable = self.need_home = True
self.limit_xy2 = -1.
+ self.home_position = tuple(
+ self._actuator_to_cartesian(self.abs_endstops))
self.max_z = min([rail.get_homing_info().position_endstop
for rail in self.rails])
self.min_z = config.getfloat('minimum_z_position', 0, maxval=self.max_z)
@@ -97,10 +99,9 @@ class DeltaKinematics:
def home(self, homing_state):
# All axes are homed simultaneously
homing_state.set_axes([0, 1, 2])
- homepos = [0., 0., self.max_z, None]
- forcepos = list(homepos)
+ forcepos = list(self.home_position)
forcepos[2] = -1.5 * math.sqrt(max(self.arm2)-self.max_xy2)
- homing_state.home_rails(self.rails, forcepos, homepos,
+ homing_state.home_rails(self.rails, forcepos, self.home_position,
limit_speed=self.max_z_velocity)
# Set final homed position
spos = [ep + rail.get_homed_offset()
@@ -127,7 +128,7 @@ class DeltaKinematics:
if end_pos[2] > self.limit_z:
limit_xy2 = min(limit_xy2, (self.max_z - end_pos[2])**2)
if (xy2 > limit_xy2 or end_pos[2] < self.min_z
- or end_pos[2] > self.max_z):
+ or end_pos[2] > self.max_z) and end_pos[:3] != self.home_position:
raise homing.EndstopMoveError(end_pos)
if move.axes_d[2]:
move.limit_speed(self.max_z_velocity, move.accel)