README.md

April 27, 2026 ยท View on GitHub

Struckig logo

Instantaneous Motion Generation for Robots and Machines.
Port of ruckig to Structured Text, TwinCAT 3.

Build/Test Documentation Issues Releases GPLv3

Read the Documentation:
https://stefanbesler.github.io/struckig/

Struckig ports pantor/ruckig to Structured Text and brings open-source online trajectory generation to TwinCAT 3. It targets deterministic PLC task loops and multi-axis synchronization in machine control scenarios.

Only the Community Version of Ruckig is ported and pro features are not available. Struckig is dual licensed:

  • GPLv3 for open-source usage
  • commercial custom license for closed-source usage (contact stefan@besler.me)

Documentation

Installation

  1. Download the latest release from Releases.
  2. Add the library to your TwinCAT project.
  3. Instantiate Struckig.Otg and call otg() once per PLC cycle.

For screenshots and TwinCAT step-by-step instructions, use the installation docs.

Quick example (single axis)

PROGRAM Example
VAR
  otg : Struckig.Otg(cycletime:=0.001, dofs:=1) := (
    EnableAutoPropagate := TRUE,
    Synchronization := SynchronizationType.TimeSync,
    MinDuration := 10.0,
    MaxVelocity := [2000.0],
    MaxAcceleration := [20000.0],
    MaxJerk := [800000.0],
    CurrentPosition := [0.0],
    CurrentVelocity := [0.0],
    CurrentAcceleration := [0.0],
    TargetPosition := [100.0],
    TargetVelocity := [0.0],
    TargetAcceleration := [0.0]
  );
END_VAR

otg();

Map otg.NewPosition, otg.NewVelocity, and optionally otg.NewAcceleration to your axis interface each cycle.

Extra features

  • While the port stays close to upstream, additional behavior can be enabled via feature flags on Otg or globally in library parameters.
FlagDescription
SmoothBrakeIn ruckig, reducing MaxVelocity below the current velocity triggers a brake ramp to velocity = 0 before transitioning to the new limit. Enable this flag to bypass that behavior and switch to the new MaxVelocity immediately.

Development

  • CI uses zkbuild
  • Docs generation uses zkdoc
  • Unit tests can be run with TcUnit via test\Struckig\Struckig_unittest.sln