diff options
author | Dmitry Butyugin <dmbutyugin@google.com> | 2022-10-10 02:07:04 +0300 |
---|---|---|
committer | KevinOConnor <kevin@koconnor.net> | 2022-10-17 18:08:56 +0300 |
commit | 0d9b2cc1fa297b9adedb14be31a8d5c8d7868681 (patch) | |
tree | 19cda0618e3f14cd4d5fa38ee748d28b842cbd0c | |
parent | e4c8a24711b575e42e5a020c5684f61c19fac52d (diff) |
toolhead: Capture current junction_deviation in a Move class
If a maximum acceleration is changed between two consecutive moves,
this allows to correctly compute the junction velocity between them.
Signed-off-by: Dmitry Butyugin <dmbutyugin@google.com>
-rw-r--r-- | klippy/toolhead.py | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/klippy/toolhead.py b/klippy/toolhead.py index b72854203..2398d7ca1 100644 --- a/klippy/toolhead.py +++ b/klippy/toolhead.py @@ -17,6 +17,7 @@ class Move: self.start_pos = tuple(start_pos) self.end_pos = tuple(end_pos) self.accel = toolhead.max_accel + self.junction_deviation = toolhead.junction_deviation self.timing_callbacks = [] velocity = min(speed, toolhead.max_velocity) self.is_kinematic_move = True @@ -73,8 +74,7 @@ class Move: return junction_cos_theta = max(junction_cos_theta, -0.999999) sin_theta_d2 = math.sqrt(0.5*(1.0-junction_cos_theta)) - R = (self.toolhead.junction_deviation * sin_theta_d2 - / (1. - sin_theta_d2)) + R_jd = sin_theta_d2 / (1. - sin_theta_d2) # Approximated circle must contact moves no further away than mid-move tan_theta_d2 = sin_theta_d2 / math.sqrt(0.5*(1.0+junction_cos_theta)) move_centripetal_v2 = .5 * self.move_d * tan_theta_d2 * self.accel @@ -82,7 +82,8 @@ class Move: * prev_move.accel) # Apply limits self.max_start_v2 = min( - R * self.accel, R * prev_move.accel, + R_jd * self.junction_deviation * self.accel, + R_jd * prev_move.junction_deviation * prev_move.accel, move_centripetal_v2, prev_move_centripetal_v2, extruder_v2, self.max_cruise_v2, prev_move.max_cruise_v2, prev_move.max_start_v2 + prev_move.delta_v2) |