Commit ebe96bf4 authored by Guillaume Seguin's avatar Guillaume Seguin

Fix g-code duration estimator when move duration is faster than acceleration

parent d56973d0
...@@ -382,17 +382,20 @@ class GCode(object): ...@@ -382,17 +382,20 @@ class GCode(object):
# then calculate the time taken to complete the remaining distance # then calculate the time taken to complete the remaining distance
currenttravel = math.hypot(x - lastx, y - lasty) currenttravel = math.hypot(x - lastx, y - lasty)
if f == lastf: # Feedrate hasn't changed, no acceleration/decceleration planned
moveduration = currenttravel / f
else:
# FIXME: review this better # FIXME: review this better
# this looks wrong : there's little chance that the feedrate we'll decelerate to is the previous feedrate # this looks wrong : there's little chance that the feedrate we'll decelerate to is the previous feedrate
# shouldn't we instead look at three consecutive moves ? # shouldn't we instead look at three consecutive moves ?
distance = 2 * abs(((lastf + f) * (f - lastf) * 0.5) / acceleration) # multiply by 2 because we have to accelerate and decelerate distance = 2 * abs(((lastf + f) * (f - lastf) * 0.5) / acceleration) # multiply by 2 because we have to accelerate and decelerate
if distance <= currenttravel and lastf + f != 0 and f != 0: if distance <= currenttravel and lastf + f != 0 and f != 0:
# Unsure about this formula -- iXce reviewing this code moveduration = 2 * distance / (lastf + f) # This is distance / mean(lastf, f)
moveduration = 2 * distance / (lastf + f) moveduration += (currenttravel - distance) / f
currenttravel -= distance
moveduration += currenttravel/f
else: else:
moveduration = math.sqrt(2 * distance / acceleration) # probably buggy : not taking actual travel into account moveduration = 2 * currenttravel / (lastf + f) # This is currenttravel / mean(lastf, f)
# FIXME: probably a little bit optimistic, but probably a much better estimate than the previous one:
# moveduration = math.sqrt(2 * distance / acceleration) # probably buggy : not taking actual travel into account
totalduration += moveduration totalduration += moveduration
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment