toolhead: Avoid using a dummy_move for an empty move_queue
Explicitly check for when the move_queue is empty and only call move.calc_junction() when there is a previous move. This avoids the need to create a dummy "sentinal" move object and it simplifies the code. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
parent
9bb1ae079f
commit
5829aa8bd7
|
@ -25,8 +25,6 @@ class Move:
|
||||||
# Find max start junction velocity using approximated
|
# Find max start junction velocity using approximated
|
||||||
# centripetal velocity as described at:
|
# centripetal velocity as described at:
|
||||||
# https://onehossshay.wordpress.com/2011/09/24/improving_grbl_cornering_algorithm/
|
# https://onehossshay.wordpress.com/2011/09/24/improving_grbl_cornering_algorithm/
|
||||||
if not prev_move.move_d:
|
|
||||||
return
|
|
||||||
junction_cos_theta = -((self.axes_d[0] * prev_move.axes_d[0]
|
junction_cos_theta = -((self.axes_d[0] * prev_move.axes_d[0]
|
||||||
+ self.axes_d[1] * prev_move.axes_d[1])
|
+ self.axes_d[1] * prev_move.axes_d[1])
|
||||||
/ (self.move_d * prev_move.move_d))
|
/ (self.move_d * prev_move.move_d))
|
||||||
|
@ -68,15 +66,10 @@ class Move:
|
||||||
# Class to track a list of pending move requests and to facilitate
|
# Class to track a list of pending move requests and to facilitate
|
||||||
# "look-ahead" across moves to reduce acceleration between moves.
|
# "look-ahead" across moves to reduce acceleration between moves.
|
||||||
class MoveQueue:
|
class MoveQueue:
|
||||||
def __init__(self, dummy_move):
|
def __init__(self):
|
||||||
self.dummy_move = dummy_move
|
|
||||||
self.queue = []
|
self.queue = []
|
||||||
self.prev_junction_max = 0.
|
self.prev_junction_max = 0.
|
||||||
self.junction_flush = 0.
|
self.junction_flush = 0.
|
||||||
def prev_move(self):
|
|
||||||
if self.queue:
|
|
||||||
return self.queue[-1]
|
|
||||||
return self.dummy_move
|
|
||||||
def flush(self, lazy=False):
|
def flush(self, lazy=False):
|
||||||
next_junction_max = 0.
|
next_junction_max = 0.
|
||||||
can_flush = not lazy
|
can_flush = not lazy
|
||||||
|
@ -108,6 +101,7 @@ class MoveQueue:
|
||||||
if len(self.queue) == 1:
|
if len(self.queue) == 1:
|
||||||
self.junction_flush = move.junction_max
|
self.junction_flush = move.junction_max
|
||||||
return
|
return
|
||||||
|
move.calc_junction(self.queue[-2])
|
||||||
self.junction_flush -= move.junction_delta
|
self.junction_flush -= move.junction_delta
|
||||||
if self.junction_flush <= 0.:
|
if self.junction_flush <= 0.:
|
||||||
self.flush(lazy=True)
|
self.flush(lazy=True)
|
||||||
|
@ -122,8 +116,7 @@ class ToolHead:
|
||||||
self.kin = cartesian.CartKinematics(printer, config)
|
self.kin = cartesian.CartKinematics(printer, config)
|
||||||
self.max_xy_speed, self.max_xy_accel = self.kin.get_max_xy_speed()
|
self.max_xy_speed, self.max_xy_accel = self.kin.get_max_xy_speed()
|
||||||
self.junction_deviation = config.getfloat('junction_deviation', 0.02)
|
self.junction_deviation = config.getfloat('junction_deviation', 0.02)
|
||||||
dummy_move = Move(self, [0.]*4, 0., [0.]*4, 0., 0.)
|
self.move_queue = MoveQueue()
|
||||||
self.move_queue = MoveQueue(dummy_move)
|
|
||||||
self.commanded_pos = [0., 0., 0., 0.]
|
self.commanded_pos = [0., 0., 0., 0.]
|
||||||
# Print time tracking
|
# Print time tracking
|
||||||
self.buffer_time_high = config.getfloat('buffer_time_high', 5.000)
|
self.buffer_time_high = config.getfloat('buffer_time_high', 5.000)
|
||||||
|
@ -235,7 +228,6 @@ class ToolHead:
|
||||||
# Common xy move - create move and queue it
|
# Common xy move - create move and queue it
|
||||||
speed = min(speed, self.max_xy_speed)
|
speed = min(speed, self.max_xy_speed)
|
||||||
move = Move(self, newpos, move_d, axes_d, speed, self.max_xy_accel)
|
move = Move(self, newpos, move_d, axes_d, speed, self.max_xy_accel)
|
||||||
move.calc_junction(self.move_queue.prev_move())
|
|
||||||
self.move_queue.add_move(move)
|
self.move_queue.add_move(move)
|
||||||
def home(self, axis):
|
def home(self, axis):
|
||||||
return self.kin.home(self, axis)
|
return self.kin.home(self, axis)
|
||||||
|
|
Loading…
Reference in New Issue