Dynamisches Robotermodell
Sehen Sie hierzu das Beispielprojekt Robotics_DynamicModel.project
im Installationsverzeichnis von CODESYS unter ..\CODESYS SoftMotion\Examples
.
Um die Achsmomente/-kräfte während einer Bewegung zu begrenzen, ist ein dynamisches Modell erforderlich, das diese Werte aus dem aktuellen Achszustand (Position, Geschwindigkeit und Beschleunigung) berechnet. Dieses Beispiel umfasst die folgenden Teile:
Teil 1 zeigt, wie ein bestehendes dynamisches Modell in einer Anwendung verwendet wird und die Ergebnisse einiger Beispielbewegungen
Teil 2 zeigt, wie ein dynamisches Modell für einen SCARA-Roboter auf der Grundlage eines Algorithmus erstellt wird, der in dem Buch "Modern Robotics" von K. M. Lynch und F. C. Park vorgestellt wird
Struktur der Applikation
Teil 1: Verwendung eines dynamischen Modells in einer Anwendung
Der Code für diesen Teil befindet sich im Ordner
TorqueLimitationDemo
PLC_PRG
ist das Hauptprogramm, das eine Zustandsmaschine enthält, die Testbewegungen auslöstDie Bewegungen können mit dem
Trace
überwacht werden
Teil 2: Erstellen eines dynamischen Robotermodells
Der Code für das dynamische Modell befindet sich im Ordner
DynModel
DynModel_Scara2_Z
ist das dynamische Modell des SCARA-RobotersDynModel_Tests
führt alle Tests vonTest_DynModel_Scara2_Z
aus, um auf häufige Fehler zu prüfenDas dynamische Modell basiert auf einem SCARA-Roboter mit zwei rotatorischen Achsen und einer linearen Z-Achse. Eine Abbildung des Roboters mit den erforderlichen Abmessungen und Koordinatensystemen für das dynamische Modell ist unten dargestellt:
Abmessung in der Abbildung
Entsprechender Variablenname im Beispielprojekt im Funktionsbaustein DynModel_Scara2_Z
h0
baseHeight
h1
armOneHeight
h2
armTwoHeight
h3
zAxisLength
h4
zAxisOffset
l1
armOneLength
l1
armTwoLength
Teil 1: Verwendung eines dynamischen Modells in einer Anwendung
Die Verwendung eines dynamischen Modells in einer Anwendung erfordert ein Modell, das die Schnittstelle ISMDynamics
der Bibliothek SM3_Dynamics
implementiert. Das dynamische Modell aus Teil 2: Erstellen eines dynamischen Robotermodells wird für diese Demonstration verwendet.
Das Modell kann mit SMC_GroupSetDynamics
einer Achsengruppe zugewiesen werden. In diesem Schritt muss die Erdbeschleunigung in Bezug auf das MCS angegeben werden. Da der SCARA in diesem Beispiel am Boden montiert ist, zeigt die Erdbeschleunigung in die positive z0-Richtung. Die Erdbeschleunigung muss in Benutzereinheiten u/s² angegeben werden. Da alle Längen in diesem Beispiel in der Benutzereinheit m definiert wurden, muss auch die Erdbeschleunigung in m/s² angegeben werden.
SMC_ChangeDynamicLimits
kann verwendet werden, um die Grenzen jeder Achse anzupassen. Bitte beachten Sie, dass die Achsgruppe mit MC_GroupEnable
wieder aktiviert werden muss, um die neuen dynamischen Grenzen zu aktivieren.
Wenn dem TCP zusätzliche Massen hinzugefügt werden (beispielsweise ein Werkzeug oder ein Objekt, das vom Roboter aufgenommen wurde), kann SMC_GroupSetLoad
verwendet werden, um die Last zu definieren.
Das Programm PLC_PRG
enthält alle oben genannten Komponenten und führt zwei Testbewegungen aus:
Bewegung 1 | Bewegung 2 | ||
---|---|---|---|
Gerade Armbewegung von (a0=0°, a1=0°, a2=0 m) nach (a0=90°, a1=0°, a2=0,02 m):
| Abgewinkelte Armbewegung von (a0=0°, a1=-120°, a2=0 m) nach (a0=90°, a1=-120°, a2=0,02 m):
|
Jede Bewegung wird dreimal hintereinander mit den folgenden Randbedingungen ausgeführt:
Die Drehmomentgrenze aller Achsen ist unendlich (unbegrenzt).
Die Drehmomentgrenze von Arm 2 ist auf einen niedrigeren Wert als das maximal erreichte Drehmoment bei unbegrenzter Bewegung eingestellt. Der Wert wurde willkürlich auf
2 Nm
festgelegt.Die Drehmomentgrenze von Arm 2 beträgt immer noch
2 Nm
, und zusätzlich wurde eine Last am TCP angebracht (mLoad=3 kg
,lLoad=0,2 m
):
![]() |
Das Massenträgheitsmoment der Last wurde vereinfacht für dünne Stäbe berechnet:
![]() |
Die Bewegungen können im Trace verfolgt werden. Bewegung 1 hat die folgenden Ergebnisse:

Auch wenn sich Arm 2 während der Bewegung 1 nicht bewegt, führt die Beschleunnigung/Verzögerung von Arm 1 zu einem Drehmoment in Arm 2. Das berechnete Drehmoment wird an den Antrieb gesendet und kann den Regelkreis im Reglermodus
SMC_velocity
oderSMC_position
verbessern. Dies wird auch als Drehmoment-Vorsteuerung bezeichnet.Der zweite Durchlauf mit begrenztem Drehmoment zeigt, dass die Drehmomentbegrenzung von Arm 2 zu einer langsameren Bewegung von Arm 1 führt. Und das auch, wenn sich Arm 2 nicht bewegt. Ohne das dynamische Modell müsste die Beschleunigung und Abbremsung von Arm 1 für diese Bewegung manuell reduzieren werden, um eine übermäßige mechanische Belastung von Arm 2 zu vermeiden.
Beim dritten Durchlauf mit einer Last, wird die Bewegung von Arm 1 noch langsamer, um die Drehmomentgrenze von Arm 2 nicht zu verletzen.
Die Vorteile der Verwendung eines dynamischen Modells liegen auf der Hand. Um übermäßige mechanische Belastung ohne dynamisches Modell zu verhindern,
müssten entweder die dynamischen Grenzen für jede Bewegung in Abhängigkeit vom aktuellen Zustand des Roboters festgelegt werden.
müssten die dynamischen Grenzen aller Achsen so verringert werden, dass alle möglichen Bewegungen nicht zu einer übermäßigen mechanischen Belastung einer Achse führen.
Die erste Methode ist eine komplexe Aufgabe und es kann schwierig sein, vernünftige Grenzwerte zu berechnen, während die zweite Methode zu Bewegungen führt, die meistens nicht so schnell wie möglich sind. Diese Nachteile sind bei einem dynamischen Modell nicht mehr vorhanden, da sich der Roboter immer so schnell wie möglich bewegt und dabei die mechanischen Grenzen jeder Achse beachtet.
Diese Vorteile verdeutlichen die Ergebnisse von Bewegung 2:

Aufgrund des abgewinkelten Arms 2 ist das resultierende Drehmoment des Arms 2 wesentlich geringer als bei Bewegung 1. Daher werden alle drei Fahrten nie durch das Achsendrehmoment begrenzt. Hätte man auf der Grundlage von Bewegung 1 angepasste dynamische Grenzwerte verwendet (reduzierte Beschleunigung und Abbremsung, um die Drehmomentgrenze von Arm 2 nicht zu verletzen), wäre diese Bewegung langsamer als nötig gewesen.
Teil 2: Erstellen eines dynamischen Robotermodells
Das Modell, das in diesem Beispiel erstellt wird, basiert auf einem Algorithmus für Roboter mit offenen Ketten, der in dem Buch "Modern Robotics" von K. M. Lynch und F. C. Park vorgestellt wird (siehe Kapitel 8 "Dynamics of Open Chains"). Die Erläuterung dieses Algorithmus würde den Rahmen dieses Beispiels sprengen. Stattdessen konzentriert sich das Beispiel darauf, wie die Eingangswerte des Algorithmus definiert werden.
Vereinfachungen
Um dieses Beispiel verständlicher zu machen, wurden einige Vereinfachungen vorgenommen:
Die Armlängen
l1
undl2
(Abstand zwischen den Drehachsen) werden als ihre jeweilige Gesamtarmlänge verwendet.Der Massenschwerpunkt liegt immer in der geometrischen Mitte eines jeden Glieds.
Die räumlichen Massenträgheitsmomente der Arme und der z-Achse werden für dünne Stäbe berechnet.
Anforderungen an das dynamische Modell
Um das dynamische Modell in einer SoftMotion-Anwendung verwenden zu können, muss dieses Modelldie Schnittstelle ISMDynamics
der Bibliothek SM3_Dynamics
implementieren.
Die Nullposition, die Koordinatensysteme und die positive Drehrichtung des dynamischen Modells können theoretisch vom kinematischen Modell abweichen. Diese Unterschiede müssen jedoch berücksichtigt werden, und zur Vereinfachung des dynamischen Modells wird daher empfohlen, die Definitionen des kinematischen Modells zu verwenden.
Da das dynamische Modell Drehmomentwerte in Nm und Kräfte in N berechnen muss, muss es die Benutzereinheit u für Längen in die SI-Einheit m umrechnen. Der Umrechnungsfaktor kann mit SMC_GroupSetUnits
eingestellt werden und ist im Eingang addParams
von ISMDynamics.AxesStateToTorque
enthalten. Dieses Beispiel verwendet nur m für Längen und kann daher den Umrechnungsfaktor ignorieren.
Spezifizierung der geometrischen und dynamischen Daten des Modells
Die IEC-Implementierung des im Buch "Modern Robotics" von K. M. Lynch und F. C. Park vorgestellten Algorithmus (siehe Kapitel 8 "Dynamics of Open Chains") benötigt die folgenden Eingabewerte:
Die Position des Massenschwerpunkts jedes Glieds, wenn sich der Roboter in der Ausgangsposition befindet. Die Position wird im Koordinatensystem des vorherigen Glieds angegeben (das erste Glied wird relativ zum Basiskoordinatensystem angegeben).
Die räumliche Massenträgheitsmatrix und die Masse jedes Glieds, angegeben im Frame des jeweiligen Glieds
Die Schraubenachse jeder Verbindung, angegeben im Basis-Frame
Positionen des Massenschwerpunkts
Die Frames mit der Position des Massenschwerpunkts jedes Glieds sind:
Glied | Frame | |
---|---|---|
Arm 1 | Der Massenschwerpunkt von Arm 1, ausgedrückt im Basiskoordinatensystem x0, y0, z0:
Bitte beachten Sie, dass es eine Drehung um 180° um die x0-Achse gibt. | |
Arm 2 | Der Massenschwerpunkt von Arm 2, ausgedrückt im Koordinatensystem von Arm 1:
| |
Z-Achse | Der Massenschwerpunkt der Z-Achse, ausgedrückt im Koordinatensystem von Arm 2:
| |
Werkzeugmittelpunkt (TCP) | Ein zusätzlicher Frame zur Behandlung einer beliebigen Belastung am TCP (beispielsweise durch ein Werkzeug, ein Objekt oder eine Kombination aus beidem), ausgedrückt im Koordinatensystem der Z-Achse:
|
Räumliche Massenträgheitsmomente
Die Trägheitsmomente müssen in dem Frame des jeweiligen Glieds angegeben werden. Da der Frame im Massenschwerpunkt liegt, kann das räumliche Massenträgheitsmoment mithilfe einer 3x3-Matrix und der Masse dargestellt werden.
![]() |
Durch die Vereinfachung, dünne Stäbe zu verwenden, berechnen sich die Komponenten der Matrix folgendermaßen:
Glied | Komponenten der Trägheitsmatrix | |
---|---|---|
Arm 1, Arm 2 | Arm 1 und 2 mit ihrer jeweiligen Masse
| |
Z-Achse |
|
Schraubenachsen
Die Schraubenachsen aller Gelenke müssen in Bezug auf das Basiskoordinatensystem x0, y0, z0 angegeben werden.
Glied | Schraubenachse | |||
---|---|---|---|---|
Arm 1 | Stellen Sie sich einen Drehtisch vor, der sich um das Gelenk 1 in positiver Richtung mit einer Winkelgeschwindigkeit von 1 rad/s dreht. Im Basiskoordinatensystem ausgedrückt, handelt es sich nach der Rechten-Hand-Regel um eine positive Drehung um die z0-Achse:
Da die Drehachse von Arm 1 mit dem Mittelpunkt des Basiskoordinatensystems übereinstimmt, ist die lineare Geschwindigkeit gleich Null: ![]() | |||
Arm 2 | Stellen Sie sich wiederum einen Drehtisch vor, der sich um das Gelenk 2 in positiver Richtung mit einer Winkelgeschwindigkeit von 1 rad/s dreht. Dieser Fall ist nachfolgend als Draufsicht von Arm 1 dargestellt:
Wie für Arm 1, beträgt die Winkelgeschwindigkeit:
Die Abbildung zeigt die resultierende lineare Geschwindigkeit v2,y, die in negative y0-Richtung zeigt und gleich v2,y=-ω2,z * l1 ist.
| |||
Z-Achse | Die Z-Achse ist eine lineare Achse, für die die folgenden Regeln gelten:
Daraus ergeben sich die folgenden Vektoren, ausgedrückt im Basiskoordinatensystem x0, y0, z0:
|
Tests
Das dynamische Modell kann nun getestet werden, da alle Modellparameter definiert sind. Dieser Abschnitt enthält einige grundlegende Tests des Modells.
Kontrolle der Schraubenachsen
Eine Schraubenachse S
mit der Winkelgeschwindigkeit ω und der linearen Geschwindigkeit v
kann als ein Element von se(3)
ausgedrückt werden:
![]() |
Eine Vorwärtstransformation T
kann mit den Schraubenachsen S
, einem Endeffektor-Frame M
für die Nullposition des Roboters und dem Gelenkwinkel θ
jedes Gelenks ausgeführt werden:
![]() |
Das Beispielprojekt enthält bereits eine Funktion, die diese Gleichung löst (siehe SMC_OpenChainKinematics_SolveForward
). Für weitere Details siehe das Buch "Modern Robotics" von K. M. Lynch und F. C. Park.
Wenn die Vorwärtstransformation mit bekannten Achswerten ausführt wird, kann überprüft werden, ob die Transformation zum erwarteten Ergebnis führt.
Überprüfung der Drehmomente im Stillstand
Um die grundsätzliche Berechnung des Drehmoments zu überprüfen, können manuell Drehmomente für bestimmte Achspositionen im Stillstand berechnet und diese mit dem Modell verglichen werden. Da der SCARA-Roboter in diesem Beispiel auf dem Boden montiert ist, führen alle Achsenpositionen im Stillstand zu den gleichen Drehmomenten oder Kräften der Antriebe:
Gelenk | Resultierendes Drehmoment/Kraft |
---|---|
Arm 1 | Da es sich bei Arm 1 um eine Drehachse handelt, ist das Ergebnis ein Drehmoment: |
Arm 2 | Da es sich bei Arm 2 um eine Drehachse handelt, ist das Ergebnis ein Drehmoment: |
Z-Achse | Da die Z-Achse eine prismatische Achse ist, ergibt sich daraus eine Kraft: |