README.md
April 27, 2026 ยท View on GitHub
Instantaneous Motion Generation for Robots and Machines.
Port of ruckig to Structured Text, TwinCAT 3.
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
- Full docs: stefanbesler.github.io/struckig
- Installation guide: User guide installation
- API reference: API Reference
Installation
- Download the latest release from Releases.
- Add the library to your TwinCAT project.
- Instantiate
Struckig.Otgand callotg()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
Otgor globally in library parameters.
| Flag | Description |
|---|---|
SmoothBrake | In 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. |