diff options
author | Kevin O'Connor <kevin@koconnor.net> | 2018-06-08 21:30:38 -0400 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2018-06-20 09:26:10 -0400 |
commit | ca0d0135dc7c3c2a1bfb1cf49b97f039c97ca34d (patch) | |
tree | cfb567e4d43dd3ce0bf7098bba9f46247a23ccb3 /klippy/mcu.py | |
parent | 2511471b0dfa7dd60c65fffa9727ceb8a88b347b (diff) | |
download | kutter-ca0d0135dc7c3c2a1bfb1cf49b97f039c97ca34d.tar.gz kutter-ca0d0135dc7c3c2a1bfb1cf49b97f039c97ca34d.tar.xz kutter-ca0d0135dc7c3c2a1bfb1cf49b97f039c97ca34d.zip |
delta: Convert delta kinematics to use iterative solver
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'klippy/mcu.py')
-rw-r--r-- | klippy/mcu.py | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/klippy/mcu.py b/klippy/mcu.py index 4a34499a..d1f38c0e 100644 --- a/klippy/mcu.py +++ b/klippy/mcu.py @@ -26,7 +26,8 @@ class MCU_stepper: self._stepqueue = ffi_main.gc(self._ffi_lib.stepcompress_alloc(oid), self._ffi_lib.stepcompress_free) self._mcu.register_stepqueue(self._stepqueue) - self._stepcompress_push_const = self._stepcompress_push_delta = None + self._stepcompress_push_const = self._itersolve_gen_steps = None + self._stepper_kinematics = None self.set_ignore_move(False) def get_mcu(self): return self._mcu @@ -40,6 +41,10 @@ class MCU_stepper: def setup_step_distance(self, step_dist): self._step_dist = step_dist self._inv_step_dist = 1. / step_dist + def setup_itersolve(self, sk): + self._stepper_kinematics = sk + self._ffi_lib.itersolve_set_stepcompress( + sk, self._stepqueue, self._step_dist) def build_config(self): max_error = self._mcu.get_max_stepper_error() min_stop_interval = max(0., self._min_stop_interval - max_error) @@ -67,6 +72,9 @@ class MCU_stepper: def get_step_dist(self): return self._step_dist def set_position(self, pos): + if self._stepper_kinematics is not None: + self._ffi_lib.itersolve_set_commanded_pos( + self._stepper_kinematics, pos) steppos = pos * self._inv_step_dist self._mcu_position_offset += self._commanded_pos - steppos self._commanded_pos = steppos @@ -82,10 +90,10 @@ class MCU_stepper: is not self._ffi_lib.stepcompress_push_const) if ignore_move: self._stepcompress_push_const = (lambda *args: 0) - self._stepcompress_push_delta = (lambda *args: 0) + self._itersolve_gen_steps = (lambda *args: 0) else: self._stepcompress_push_const = self._ffi_lib.stepcompress_push_const - self._stepcompress_push_delta = self._ffi_lib.stepcompress_push_delta + self._itersolve_gen_steps = self._ffi_lib.itersolve_gen_steps return was_ignore def note_homing_start(self, homing_clock): ret = self._ffi_lib.stepcompress_set_homing( @@ -127,14 +135,8 @@ class MCU_stepper: if count == STEPCOMPRESS_ERROR_RET: raise error("Internal error in stepcompress") self._commanded_pos += count - def step_delta(self, print_time, dist, start_v, accel - , height_base, startxy_d, arm_d, movez_r): - inv_step_dist = self._inv_step_dist - height = self._commanded_pos - height_base * inv_step_dist - count = self._stepcompress_push_delta( - self._stepqueue, print_time, dist * inv_step_dist, - start_v * inv_step_dist, accel * inv_step_dist, - height, startxy_d * inv_step_dist, arm_d * inv_step_dist, movez_r) + def step_itersolve(self, cmove): + count = self._itersolve_gen_steps(self._stepper_kinematics, cmove) if count == STEPCOMPRESS_ERROR_RET: raise error("Internal error in stepcompress") self._commanded_pos += count |