Modelo de robot dinámico
Ver el Robotics_DynamicModel.project
proyecto de ejemplo en el directorio de instalación de CODESYS por debajo ..\CODESYS SoftMotion\Examples
.
Para limitar los pares/fuerzas del eje durante un movimiento, se requiere un modelo dinámico que calcule estos valores a partir del estado actual del eje (posición, velocidad y aceleración). Este ejemplo incluye las siguientes partes:
La parte 1 muestra cómo utilizar un modelo dinámico existente en una aplicación y los resultados de algunos movimientos de muestra.
La parte 2 muestra cómo crear un modelo dinámico para un robot SCARA basado en un algoritmo que se presenta en el libro "Modern Robotics" de KM Lynch y FC Park.
Estructura de la aplicación
Parte 1: Uso de un modelo dinámico en una aplicación
El código para esta parte se encuentra en el
TorqueLimitationDemo
carpeta.PLC_PRG
es el programa principal, que incluye una máquina de estados que desencadena movimientos de prueba.Los movimientos se pueden controlar mediante el
Trace
.
Parte 2: Creación de un modelo de robot dinámico
El código para el modelo dinámico se encuentra en el
DynModel
carpeta.DynModel_Scara2_Z
es el modelo dinámico del robot SCARA.DynModel_Tests
ejecuta todas las pruebas deTest_DynModel_Scara2_Z
para comprobar si hay errores comunes.El modelo dinámico se basa en un robot SCARA con dos articulaciones giratorias y un eje Z prismático. A continuación se muestra una figura del robot con las dimensiones y sistemas de coordenadas requeridos para el modelo dinámico:
Dimensión en la figura
Nombre de variable correspondiente en el proyecto de muestra en el bloque de funciones DynModel_Scara2_Z
h0
baseHeight
h1
armOneHeight
h2
armTwoHeight
h3
zAxisLength
h4
zAxisOffset
l1
armOneLength
l1
armTwoLength
Parte 1: Uso de un modelo dinámico en una aplicación
El uso de un modelo dinámico en una aplicación requiere un modelo que implemente el ISMDynamics
interfaz de la SM3_Dynamics
biblioteca. El modelo dinámico de Parte 2: Creación de un modelo de robot dinámico se utiliza para esta demostración.
El modelo se puede asignar a un grupo de ejes usando SMC_GroupSetDynamics
. Este paso requiere configurar la aceleración gravitacional con respecto al MCS. Debido a que el SCARA en este ejemplo está montado en el piso, la aceleración gravitacional apunta en la dirección z0 positiva. La aceleración gravitatoria debe especificarse en unidades de usuario u/s². Debido a que todas las longitudes en este ejemplo se han definido en la unidad de usuario m, también se debe especificar la aceleración gravitacional en m/s².
SMC_ChangeDynamicLimits
se puede utilizar para ajustar los límites de cada eje. Tenga en cuenta que el grupo de ejes debe habilitarse nuevamente usando MC_GroupEnable
para activar los nuevos límites dinámicos.
Si se agregan masas adicionales al TCP (por ejemplo, una herramienta o un objeto que es recogido por el robot), entonces SMC_GroupSetLoad
se puede utilizar para definir la carga.
los PLC_PRG
El programa contiene todos los componentes anteriores y ejecuta dos movimientos de prueba:
Movimiento 1 | Movimiento 2 | ||
---|---|---|---|
Movimiento del brazo recto de (a0=0°, a1=0°, a2=0 m) a (a0=90°, a1=0°, a2=0,02 m):
| Movimiento del brazo en ángulo de (a0=0°, a1=-120°, a2=0 m) a (a0=90°, a1=-120°, a2=0,02 m):
|
Cada movimiento se ejecuta tres veces consecutivas con las siguientes condiciones de contorno:
El límite de par de todos los ejes es infinito (ilimitado).
El límite de par del Brazo 2 se establece en un valor inferior al par máximo alcanzado durante el movimiento ilimitado. El valor se fijó arbitrariamente en
2 Nm
.El límite de torque del brazo 2 todavía está
2 Nm
, y además se ha aplicado una carga en el TCP (mLoad=3 kg
,lLoad=0.2 m
):
![]() |
El cálculo de la inercia de la carga se ha simplificado utilizando varillas finas:
![]() |
Los movimientos pueden ser monitoreados en la traza. El movimiento 1 tiene los siguientes resultados:

Aunque el Brazo 2 no se mueve durante el Movimiento 1, el movimiento del Brazo 1 genera un par para el Brazo 2 durante la aceleración/desaceleración. El par calculado se envía al variador y puede mejorar potencialmente el lazo del controlador en el modo de controlador
SMC_velocity
oSMC_position
. Esto también se denomina control de avance de par.La segunda ejecución con par limitado muestra que aunque el Brazo 2 no se mueva, un límite de par para el Brazo 2 ralentiza el movimiento del Brazo 1. Sin el modelo dinámico, la aceleración y la desaceleración del Brazo 1 tendrían que reducirse manualmente para esto. movimiento para evitar una tensión mecánica excesiva en el Brazo 2.
La tercera carrera con carga ralentiza aún más el movimiento del Brazo 1 para no violar el límite de torsión del Brazo 2.
Las ventajas de usar un modelo dinámico son obvias. Para evitar un estrés mecánico excesivo sin un modelo dinámico:
Los límites dinámicos para cada movimiento tendrían que establecerse según el estado actual del robot.
O los límites dinámicos de todos los ejes tendrían que reducirse de tal manera que todos los movimientos potenciales no conduzcan a una tensión mecánica excesiva en ningún eje.
El primer método es una tarea compleja y puede ser difícil calcular límites razonables, mientras que el segundo método da como resultado movimientos que no son tan rápidos como sea posible la mayor parte del tiempo. Estos inconvenientes ya no existen con un modelo dinámico porque el robot siempre se mueve lo más rápido posible respetando los límites mecánicos de cada eje.
Estas ventajas se ilustran con los resultados del Movimiento 2:

Debido al brazo 2 en ángulo, el par resultante del brazo 2 es considerablemente más bajo que con el movimiento 1. Por lo tanto, las tres carreras nunca están limitadas por el par del eje. Si se hubieran utilizado límites dinámicos ajustados basados en el Movimiento 1 (aceleración y desaceleración reducidas para no violar el límite de torque del Brazo 2), entonces este movimiento habría sido más lento de lo necesario.
Parte 2: Creación de un modelo de robot dinámico
El modelo que se crea en este ejemplo se basa en un algoritmo para robots de cadena abierta como se presenta en el libro "Modern Robotics" de KM Lynch y FC Park (consulte el Capítulo 8 "Dinámica de cadenas abiertas"). La explicación de este algoritmo está más allá del alcance de este ejemplo. En su lugar, el ejemplo se centra en cómo definir los valores de entrada del algoritmo.
simplificaciones
Para hacer este ejemplo más comprensible, se han hecho algunas simplificaciones:
Las longitudes de los brazos
l1
yl2
(distancia entre los ejes de rotación) se utilizan como su respectiva longitud total del brazo.El centro de masa siempre está ubicado en el centro geométrico de cada eslabón.
Las matrices de inercia espacial de los brazos y el eje Z se calculan para varillas delgadas.
Requisitos del modelo dinámico
Para utilizar el modelo dinámico en una aplicación SoftMotion, este modelo tiene que implementar el ISMDynamics
interfaz de la SM3_Dynamics
biblioteca.
La posición cero, los sistemas de coordenadas y la dirección de rotación positiva del modelo dinámico teóricamente pueden desviarse del modelo cinemático. Sin embargo, estas diferencias deben tenerse en cuenta y, para simplificar el modelo dinámico, se recomienda utilizar las definiciones del modelo cinemático.
Debido a que el modelo dinámico debe calcular los valores de torque en Nm y las fuerzas en N, tiene que convertir la unidad de usuario u para longitudes a unidades SI m. El factor de conversión se puede establecer mediante SMC_GroupSetUnits
y está incluido en el addParams
entrada de ISMDynamics.AxesStateToTorque
. Este ejemplo usa solo m para longitudes y, por lo tanto, puede ignorar el factor de conversión.
Especificación de los datos geométricos y dinámicos del modelo.
La implementación IEC del algoritmo presentado en el libro "Modern Robotics" de KM Lynch y FC Park (consulte el Capítulo 8 "Dinámica de cadenas abiertas") requiere los siguientes valores de entrada:
La posición del centro de masa de cada enlace cuando el robot está en la posición inicial. La posición se especifica en el sistema de coordenadas del enlace anterior (el primer enlace se especifica en relación con el sistema de coordenadas base).
La matriz de inercia espacial y la masa de cada eslabón, expresadas en el marco de eslabón respectivo.
El eje del tornillo de cada junta, expresado en el marco base.
Posiciones del centro de masa
Los cuadros con la posición del centro de masa de cada eslabón son los siguientes:
Enlace | Cuadro | |
---|---|---|
Brazo 1 | El centro de masa del Brazo 1, expresado en el sistema de coordenadas base x0, y0, z0:
Tenga en cuenta que hay una rotación de 180° alrededor del eje x0. | |
brazo 2 | El centro de masa del Brazo 2, expresado en el sistema de coordenadas del Brazo 1:
| |
Eje Z | El centro de masa del eje Z expresado en el sistema de coordenadas del Brazo 2:
| |
Punto central de la herramienta (TCP) | Un marco adicional para manejar una carga arbitraria en el TCP (por ejemplo, por una herramienta, un producto o una combinación de ambos), expresada en el sistema de coordenadas del eje Z:
|
Matrices de inercia espacial
Los valores de inercia espacial deben expresarse en el marco de enlace respectivo. Dado que los marcos están definidos en el centro de masa, la inercia espacial se puede representar mediante una matriz de inercia rotacional de 3x3 y la masa del cuerpo.
![]() |
Con la simplificación de usar varillas delgadas para las juntas, los componentes de la matriz de inercia rotacional son los siguientes:
Enlace | Matriz de inercia espacial | |
---|---|---|
Brazo 1, Brazo 2 | Brazo 1 y Brazo 2 con su masa correspondiente
| |
Eje Z |
|
ejes de tornillo
Los ejes de los tornillos de todas las uniones deben expresarse en relación con el sistema de coordenadas base x0, y0, z0.
Enlace | Eje de tornillo | |||
---|---|---|---|---|
Brazo 1 | Imagine una plataforma giratoria girando alrededor de la articulación 1 en dirección positiva con una velocidad angular de 1 rad/s. Expresado en el sistema de coordenadas base, esta es una rotación positiva alrededor de la z0-eje según la regla de la mano derecha:
Debido a que el eje de rotación del Brazo 1 es igual al centro del sistema de coordenadas base, la velocidad lineal es cero: ![]() | |||
brazo 2 | Nuevamente, imagine una plataforma giratoria girando alrededor de la articulación 2 en dirección positiva con una velocidad angular de 1 rad/s, que se muestra en la vista superior del brazo 1 en la siguiente figura:
En cuanto al Brazo 1, la velocidad angular es:
La figura muestra la velocidad lineal resultante v2 años, que apunta en y negativa0 dirección y es igual a v2 años=-ω2,z * yo1.
| |||
Eje Z | El eje Z es un eje prismático para el que se aplican las siguientes reglas:
Esto conduce a los siguientes vectores, expresados en el sistema de coordenadas base x0, y0, z0:
|
Pruebas
Ahora se puede probar el modelo dinámico porque todos los parámetros del modelo están definidos. Esta sección incluye algunas pruebas básicas del modelo.
Comprobación de los ejes de los tornillos
Un eje de tornillo S
con velocidad angular ω y velocidad lineal v
puede expresarse como un elemento de se(3)
:
![]() |
Una transformación hacia adelante T
se puede ejecutar con los ejes de tornillo S
, un marco de efector final M
para la posición cero del robot y el ángulo de articulación θ
de cada articulación:
![]() |
El proyecto de muestra ya incluye una función que resuelve esta ecuación (ver SMC_OpenChainKinematics_SolveForward
). Para más detalles, consulte el libro "Modern Robotics" de KM Lynch y FC Park.
Usando la ecuación de transformación directa, ahora se puede ejecutar una prueba con posiciones de eje conocidas y verificar si la transformación conduce al resultado esperado.
Comprobación del cálculo del par en parada
Para verificar los marcos de posición del centro de masa, se puede calcular manualmente el par de eje resultante en reposo para posiciones de eje dadas y compararlos con los valores calculados por el modelo. Dado que este ejemplo se basa en un robot SCARA montado en el suelo, todas las posiciones de los ejes en reposo darán lugar a los mismos pares o fuerzas de los accionamientos:
Articulación | Par/fuerza resultante |
---|---|
Brazo 1 | Como el brazo 1 es un eje de revolución, el resultado es un par: |
brazo 2 | Como el brazo 2 es un eje de revolución, el resultado es un par: |
Eje Z | Como el eje Z es un eje prismático, el resultado es una fuerza: |