3rd order motion control

58 views
Skip to first unread message

Harjit Singh

unread,
Nov 27, 2021, 1:19:27 AM11/27/21
to OpenPnP
@mark -  in a previous thread you pointed me to the Java code that builds the command queue (links below).

I read through it and am still missing a piece of the puzzle.

In particular, you mentioned two approaches:
1) Smoothieware and Duet - have a queue where you can send motion commands. This is shown as the dark lines here: https://github.com/openpnp/openpnp/wiki/GcodeAsyncDriver#interpolation
2) For other controllers, you generate small segments and approximate the smoother curves (they look like quantized version of the smooth curve). This is shown as the light lines in the graph in the section at the link above.

In this section you also mention the planner_queue_size.

Where can I get details on the commands/planner mechanism for #1? I looked up M595 for Duet and didn't follow all the details and need more context.

Thanks.

mark maker

unread,
Nov 27, 2021, 8:30:27 AM11/27/21
to ope...@googlegroups.com

@Harjit

No, Smoothieware and Duet do not support 3rd order motion control ("jerk control"). Instead the interpolation is used, i.e. Jerk control is only simulated:

https://youtu.be/cH0SF2D6FhM

Only TinyG supports a simplified form of jerk control. It is the only controller that I know of, that can natively do it, and I have added the M201.3 command to control it dynamically:

https://youtu.be/6SBDApObbz0

Marlin claims to have simple 3rd order control too, but I haven't explored that.

We had huge discussions about what the differences between true 7-segment 3rd order motion control and simplified 5-segment 3rd order motion control is. You'll find it on the list.

_Mark

--
You received this message because you are subscribed to the Google Groups "OpenPnP" group.
To unsubscribe from this group and stop receiving emails from it, send an email to openpnp+u...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/openpnp/f7f16c58-1c37-4ef0-8b33-998d1292144cn%40googlegroups.com.

mark maker

unread,
Nov 27, 2021, 9:19:19 AM11/27/21
to ope...@googlegroups.com

I just re-read my answer and your question, and I'm not happy (still a foreign language 😅).

To make it clearer:
  1. For others reading this, why does it matter?  Jerk control is used to reduce vibrations/shaking of the machine to reduce settling times for the camera and to improve nozzle pick&placement accuracy (reduce shaking of the nozzle). This is probably only needed for "mechanically challenged" machines like the Liteplacer and similar DIY designs.
  2. Only TinyG can do jerk control. In SimpleSCurve mode, OpenPnP sends one command for one movement and TinyG does the jerk control on the board.
    https://youtu.be/6SBDApObbz0
  3. Duet and Smoothieware cannot do Jerk control, but they are powerful enough, i.e. have enough RAM for fine-grained queues, so OpenPnP can simulate the jerk control in the Simulated3rdOrderControl mode. For each motion, it sends a burst of short segments with varying acceleration, to simulate the jerk control. See Interpolation.
    https://youtu.be/cH0SF2D6FhM
  4. All the other controllers only support 2nd order motion control, i.e. constant acceleration motion control. OpenPnP sends one constant acceleration command for one motion. Jerk control is not supported. This can be somewhat improved by using the ModeratedConstantAcceleration mode, where the acceleration is at least reduced for smaller moves, where shaking usually is the worst, because acceleration and deceleration are close together in time and space, i.e. agitation near the mechanical resonance of the machine is more likely.

See the motion modes here:

https://github.com/openpnp/openpnp/wiki/GcodeAsyncDriver#gcodedriver-new-settings

_Mark

Reply all
Reply to author
Forward
0 new messages