You are on page 1of 382

UNIVERSIDAD PÚBLICA DE NAVARRA

D EPARTAMENTO DE I NGENIERÍA M ECÁNICA


E NERGÉTICA Y DE M ATERIALES

T ESIS D OCTORAL

PREPROCESADOR PARA LA SIMULACIÓN


DINÁMICA DE SISTEMAS MULTICUERPO
BASADO EN ÁLGEBRA SIMBÓLICA

AUTOR : D. José Javier Gil Soto


D IRECTOR : Dr. Javier Ros Ganuza

Pamplona, febrero de 2005


Índice general

1. Introducción 3
1.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1.1. Clasificación de los Códigos DSM . . . . . . . . . . . . 5
1.2. Estado de la cuestión . . . . . . . . . . . . . . . . . . . . . . . . 8
1.3. Objeto de la Tesis Doctoral . . . . . . . . . . . . . . . . . . . . . 10
1.4. Organización del contenido de la Tesis Doctoral . . . . . . . . . . 10

2. Cinemática 13
2.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.2. Ecuaciones cinemáticas . . . . . . . . . . . . . . . . . . . . . . . 14
2.2.1. Planteamiento de ecuaciones geométricas . . . . . . . . . 16
2.2.2. Planteamiento de ecuaciones no holónomas . . . . . . . . 17
2.2.3. Elección del tipo de coordenadas . . . . . . . . . . . . . . 18
2.3. Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.3.1. Coordenadas Relativas . . . . . . . . . . . . . . . . . . . 19
2.3.2. Coordenadas Cartesianas . . . . . . . . . . . . . . . . . . 22
2.3.3. Coordenadas Naturales . . . . . . . . . . . . . . . . . . . 25

3. Dinámica 27
3.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.1.1. Tipos de acciones . . . . . . . . . . . . . . . . . . . . . . 28
3.2. Principio de las Potencias Virtuales para un sistema de partículas . 29
3.2.1. Principio de las Potencias Virtuales Sistematizado . . . . 31
Ecuaciones de Lagrange . . . . . . . . . . . . . . . . . . 33
II ÍNDICE GENERAL

Ecuaciones de Newton . . . . . . . . . . . . . . . . . . . 35
3.3. Pcpo. de las Potencias Virtuales para sistemas de sólidos rígidos . 35
3.3.1. Principio de las Potencias Virtuales sistematizado . . . . . 38
Ecuaciones de Lagrange . . . . . . . . . . . . . . . . . . 39
Ecuaciones de Newton-Euler . . . . . . . . . . . . . . . . 41
3.4. Ecuaciones Dinámicas de Enlace . . . . . . . . . . . . . . . . . . 42
3.4.1. Caracterización de enlaces parciales . . . . . . . . . . . . 43
3.4.2. Fuerza generalizada asociada a las acciones de enlace . . . 45
3.5. Formulación Clásica de las Ecuaciones de Lagrange . . . . . . . . 46
3.5.1. Fuerza Generalizada de las Fuerzas de Inercia . . . . . . . 47
3.5.2. Expresión de las Ecuaciones de Lagrange . . . . . . . . . 49
3.5.3. Ecuaciones de Lagrange con Multiplicadores . . . . . . . 50
3.6. Expresión Matricial de las Ecuaciones de la Dinámica . . . . . . . 51
3.6.1. Ecuaciones de Lagrange . . . . . . . . . . . . . . . . . . 51
Expresión para la fuerza generalizada de inercia . . . . . . 52
Expresión para la fuerza generalizada de enlace . . . . . . 52
Expresión para las ecuaciones dinámicas . . . . . . . . . 53
Consideraciones finales . . . . . . . . . . . . . . . . . . . 53
3.6.2. Ecuaciones de Newton-Euler . . . . . . . . . . . . . . . . 54
Expresión para el torsor de inercia . . . . . . . . . . . . . 54
Expresión para el conjunto de acciones de enlace . . . . . 55
Expresión para el conjunto de acciones de no-enlace . . . 55
Expresión para las ecuaciones dinámicas . . . . . . . . . 55
Consideraciones finales . . . . . . . . . . . . . . . . . . . 57
3.6.3. Expresión matricial de las ecuaciones dinámicas de enlace 57
3.6.4. Relaciones entre los formalismos dinámicos . . . . . . . . 58
3.7. Expresión Matricial General de las Ecuaciones de la Dinámica . . 59
3.8. Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
3.8.1. Cinemática . . . . . . . . . . . . . . . . . . . . . . . . . 64
ÍNDICE GENERAL III

Acotación . . . . . . . . . . . . . . . . . . . . . . . . . . 64
Ecuaciones de posición ó geométricas . . . . . . . . . . . 65
Ecuaciones en velocidades . . . . . . . . . . . . . . . . . 67
Ecuaciones en aceleraciones . . . . . . . . . . . . . . . . 67
3.8.2. Dinámica . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Acciones sobre los diferentes sólidos . . . . . . . . . . . 68
Ecuaciones dinámicas . . . . . . . . . . . . . . . . . . . 75
Planteamiento dinámico basado en la Energía Cinética . . 90

4. Implementación 93
4.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
4.1.1. Organización del contenido del capítulo . . . . . . . . . . 94
4.2. El sistema simbólico mínimo . . . . . . . . . . . . . . . . . . . . 95
4.3. Cinemática . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
4.3.1. Cinemática Analítica . . . . . . . . . . . . . . . . . . . . 96
La variable tiempo . . . . . . . . . . . . . . . . . . . . . 96
Parámetros . . . . . . . . . . . . . . . . . . . . . . . . . 96
Coordenadas, velocidades y aceleraciones . . . . . . . . . 98
Funciones del tiempo, en general . . . . . . . . . . . . . . 102
El operador derivada total . . . . . . . . . . . . . . . . . 105
4.3.2. Ecuaciones Cinemáticas . . . . . . . . . . . . . . . . . . 106
Ecuaciones Geométricas . . . . . . . . . . . . . . . . . . 106
Ecuaciones Iniciales de Posición . . . . . . . . . . . . . . 108
Ecuaciones No Holónomas . . . . . . . . . . . . . . . . . 109
Ecuaciones Iniciales para Velocidades . . . . . . . . . . . 110
Ecuaciones para Aceleraciones . . . . . . . . . . . . . . . 110
4.3.3. Interfaz Cinemático Cartesiano . . . . . . . . . . . . . . . 111
Punto . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
Vector Cartesiano . . . . . . . . . . . . . . . . . . . . . . 112
IV ÍNDICE GENERAL

Base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
Referencia Cartesiana . . . . . . . . . . . . . . . . . . . 115
4.3.4. Operadores sobre los elementos del Interfaz . . . . . . . . 116
Operador de Cambio de Base . . . . . . . . . . . . . . . 117
Operador Vector de Posición . . . . . . . . . . . . . . . . 118
Operadores de Velocidad . . . . . . . . . . . . . . . . . . 119
Operadores de Aceleración . . . . . . . . . . . . . . . . . 123
4.3.5. Problemas Cinemáticos . . . . . . . . . . . . . . . . . . . 126
El Problema de Posición . . . . . . . . . . . . . . . . . . 126
El Problema de Posición Inicial . . . . . . . . . . . . . . 129
El problema de velocidad . . . . . . . . . . . . . . . . . . 132
El problema de Velocidad Inicial . . . . . . . . . . . . . . 137
El problema de aceleración . . . . . . . . . . . . . . . . . 140
La Simulación Cinemática . . . . . . . . . . . . . . . . . 146
4.4. Dinámica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
4.4.1. Dinámica Analítica . . . . . . . . . . . . . . . . . . . . . 147
Parámetros . . . . . . . . . . . . . . . . . . . . . . . . . 147
Incógnitas de Enlace . . . . . . . . . . . . . . . . . . . . 148
Multiplicadores de Lagrange . . . . . . . . . . . . . . . . 149
Funciones de Excitación . . . . . . . . . . . . . . . . . . 151
4.4.2. Ecuaciones Dinámicas . . . . . . . . . . . . . . . . . . . 153
Redundancias en las Condiciones de Enlace . . . . . . . . 154
4.4.3. Interfaz Dinámico Cartesiano . . . . . . . . . . . . . . . 156
Tensores de Inercia . . . . . . . . . . . . . . . . . . . . . 156
Sólidos . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
Torsores . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
Torsores de inercia . . . . . . . . . . . . . . . . . . . . . 160
Torsores de enlace . . . . . . . . . . . . . . . . . . . . . 161
Torsores constitutivos . . . . . . . . . . . . . . . . . . . . 162
ÍNDICE GENERAL V

Pares Cinemáticos . . . . . . . . . . . . . . . . . . . . . 164


4.4.4. Problemas dinámicos . . . . . . . . . . . . . . . . . . . . 166
El Problema Dinámico General . . . . . . . . . . . . . . 166
El problema dinámico según Newton-Euler . . . . . . . . 168
Ecuaciones Dinámicas de Enlace . . . . . . . . . . . . . . 176
El problema dinámico según Lagrange . . . . . . . . . . . 187
El problema de equilibrio estático . . . . . . . . . . . . . 193
El problema modal . . . . . . . . . . . . . . . . . . . . . 198
4.5. Funciones de Alto Nivel . . . . . . . . . . . . . . . . . . . . . . 206
4.5.1. Representación de la orientación de un sólido . . . . . . . 206
Parámetros de Euler . . . . . . . . . . . . . . . . . . . . 206
Ángulos de Euler . . . . . . . . . . . . . . . . . . . . . . 208
Pequeñas rotaciones . . . . . . . . . . . . . . . . . . . . 210
4.5.2. Pares Cinemáticos Elementales . . . . . . . . . . . . . . 213
Par Esférico . . . . . . . . . . . . . . . . . . . . . . . . . 214
Elemento de tipo barra . . . . . . . . . . . . . . . . . . . 216
Par Cilíndrico . . . . . . . . . . . . . . . . . . . . . . . . 218
Par Prismático . . . . . . . . . . . . . . . . . . . . . . . 221
Par de Revolución . . . . . . . . . . . . . . . . . . . . . 222
Par analítico o genérico . . . . . . . . . . . . . . . . . . . 223
4.5.3. Planteamiento de Torsores Constitutivos . . . . . . . . . . 225
Fuerza gravitatoria . . . . . . . . . . . . . . . . . . . . . 226
Elemento muelle-amortiguador . . . . . . . . . . . . . . 226
Elemento muelle-amortiguador, fijo en una base . . . . . . 228
Elemento muelle-amortiguador, fijo en dos bases . . . . . 230
Elemento viga de Bernouilli . . . . . . . . . . . . . . . . 233
Elemento viga generalizado . . . . . . . . . . . . . . . . 235
VI ÍNDICE GENERAL

5. Ejemplos 239
5.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
5.2. Funcionamiento de 3D_M EC _M AT L AB . . . . . . . . . . . . . 240
5.3. Ejemplo 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
Inicialización de la librería . . . . . . . . . . . . . . . . . 244
5.3.1. Listado de definición del mecanismo . . . . . . . . . . . . 245
Problema cinemático . . . . . . . . . . . . . . . . . . . . 245
Problema dinámico . . . . . . . . . . . . . . . . . . . . . 246
Exportación . . . . . . . . . . . . . . . . . . . . . . . . . 254
5.3.2. Resultados de la simulación . . . . . . . . . . . . . . . . 255
5.4. Ejemplo 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
5.4.1. Listado de definición del mecanismo . . . . . . . . . . . . 257
Problema cinemático . . . . . . . . . . . . . . . . . . . . 257
Problema dinámico . . . . . . . . . . . . . . . . . . . . . 257
Exportación . . . . . . . . . . . . . . . . . . . . . . . . . 261
5.4.2. Resultados de la simulación . . . . . . . . . . . . . . . . 262
5.5. Ejemplo 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
5.5.1. Listado de definición del mecanismo . . . . . . . . . . . . 264
Problema cinemático . . . . . . . . . . . . . . . . . . . . 264
Problema dinámico . . . . . . . . . . . . . . . . . . . . . 266
Exportación . . . . . . . . . . . . . . . . . . . . . . . . . 270
5.5.2. Resultados de la simulación . . . . . . . . . . . . . . . . 270
5.6. Ejemplo 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
5.6.1. Listado de definición del mecanismo . . . . . . . . . . . . 275
Problema cinemático . . . . . . . . . . . . . . . . . . . . 275
Problema dinámico . . . . . . . . . . . . . . . . . . . . . 277
Exportación . . . . . . . . . . . . . . . . . . . . . . . . . 288
5.6.2. Resultados de la simulación . . . . . . . . . . . . . . . . 289
Problema modal . . . . . . . . . . . . . . . . . . . . . . 289
ÍNDICE GENERAL VII

Problema Dinámico . . . . . . . . . . . . . . . . . . . . 290


5.7. Ejemplo 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292
5.7.1. Listado de definición del mecanismo . . . . . . . . . . . . 293
Problema dinámico . . . . . . . . . . . . . . . . . . . . . 293
Problema cinemático y Problema dinámico . . . . . . . . 294
Problema de control . . . . . . . . . . . . . . . . . . . . 294
Exportación . . . . . . . . . . . . . . . . . . . . . . . . . 295
5.7.2. Resultados de la simulación . . . . . . . . . . . . . . . . 297

6. Conclusiones y Trabajo Futuro 299


6.1. Conclusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
6.2. Trabajo Futuro . . . . . . . . . . . . . . . . . . . . . . . . . . . 303

Anexo A 307
A.1. Inicialización de la librería 3D_M EC _M AT L AB . . . . . . . . . 307
A.2. Plantillas numéricas para la simulación Dinámica . . . . . . . . . 314
A.3. Plantilla numérica para el Problema de Equilibrio . . . . . . . . . 317
A.4. Plantilla numérica para el Problema Modal . . . . . . . . . . . . . 321
A.5. Wrapper general para la Ode Suite de M AT L AB . . . . . . . . . . 324
A.6. Wrapper general para la para S IMU L INK . . . . . . . . . . . . . 329
A.7. Plantillas numéricas para resolver el ejemplo 4 . . . . . . . . . . 339

Anexo B 347
B.1. Parámetros: Ejemplos 1 y 2 . . . . . . . . . . . . . . . . . . . . . 347
B.2. Parámetros: Ejemplo 3 . . . . . . . . . . . . . . . . . . . . . . . 348
B.3. Parámetros: Ejemplo 4 . . . . . . . . . . . . . . . . . . . . . . . 349
B.4. Parámetros: Ejemplo 5 . . . . . . . . . . . . . . . . . . . . . . . 355

Anexo C 357
C.1. Posible Tratamiento Numérico de las Variables Auxiliares . . . . 357
VIII ÍNDICE GENERAL

Anexo D 361
D.1. Notación Cinemática Analítica . . . . . . . . . . . . . . . . . . . 361
D.2. Notación Dinámica Analítica . . . . . . . . . . . . . . . . . . . . 361
D.3. Notación Cinemática Cartesiana . . . . . . . . . . . . . . . . . . 363
D.4. Notación Dinámica Cartesiana . . . . . . . . . . . . . . . . . . . 363
Índice de figuras

2.1. Mecanismo pistón-biela-manivela . . . . . . . . . . . . . . . . . 19


2.2. Acotación del mecanismo utilizando coordenadas relativas . . . . 20
2.3. Acotación del mecanismo utilizando coordenadas cartesianas . . . 23
2.4. Acotación del mecanismo utilizando coordenadas naturales . . . . 25

3.1. Esquema de un enlace genérico entre los sólidos Solj y Solk . . . 43


3.2. Descripción gráfica del mecanismo . . . . . . . . . . . . . . . . . 64
3.3. Acotación propuesta para el mecanismo . . . . . . . . . . . . . . 65
3.4. Parámetros del problema geométrico . . . . . . . . . . . . . . . . 66
3.5. Parámetros dinámicos para el mecanismo Pistón-biela-manivela . 68
3.6. Diagrama de equilibrio para el eslabón Man . . . . . . . . . . . 77
3.7. Diagrama de equilibrio para el eslabón Bie . . . . . . . . . . . . 79
3.8. Diagrama de equilibrio para el eslabón Blo . . . . . . . . . . . . 81

4.1. La matriz de cambio de base y el diagrama de orientaciones . . . . 117


4.2. Algoritmo empleado para calcular la matriz de cambio de base . . 118
4.3. El vector de posición y el diagrama de posiciones . . . . . . . . . 119
4.4. Algoritmo empleado para calcular el vector de posición . . . . . . 120
4.5. Composición de movimientos en referencias distintas . . . . . . . 121
4.6. Interpretación geométrica del método de Newton-Raphson . . . . 127
4.7. Descomposición QR para una matriz de dimensión (c, p). . . . . 132
4.8. Elementos que componen la definición del sólido Solk . . . . . . . 158
4.9. Simulación dinámica directa . . . . . . . . . . . . . . . . . . . . 167
4.10. Simulación dinámica inversa . . . . . . . . . . . . . . . . . . . . 168
4.11. Rotación finita alrededor de un eje arbitrario v. . . . . . . . . . . 206
X ÍNDICE DE FIGURAS

4.12. Familia [α, β, γ] de ángulos de Euler 123 . . . . . . . . . . . 209


4.13. pequeñas perturbaciones alrededor de la orientación de partida. . 210
4.14. Par esférico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
4.15. Elemento de tipo barra . . . . . . . . . . . . . . . . . . . . . . . 216
4.16. Par cilíndrico entre los sólidos Sol1 y Sol2 . . . . . . . . . . . . . 218
4.17. Representación de un par analítico entre dos sólidos . . . . . . . . 223
4.18. Elemento muelle-amortiguador direccional . . . . . . . . . . . . 227
4.19. Elemento muelle-amortiguador . . . . . . . . . . . . . . . . . . . 229
4.20. Elemento muelle-amortiguador con rigidez en rotaciones . . . . . 231
4.21. Elemento viga de Bernouilli entre los sólidos Sol1 y Sol2 . . . . . 233
4.22. Elemento viga generalizada . . . . . . . . . . . . . . . . . . . . . 236

5.1. Flujo del programa . . . . . . . . . . . . . . . . . . . . . . . . . 240


5.2. Ficheros generados de forma automática . . . . . . . . . . . . . . 241
5.3. Plantillas que forman la librería de simulación numérica . . . . . 242
5.4. Acotación y parámetros cinemáticos del problema . . . . . . . . . 244
5.5. Parámetros dinámicos del problema . . . . . . . . . . . . . . . . 246
5.6. Funciones obtenidas como resultado del proceso de exportación . 255
5.7. Resultados de la simulación dinámica . . . . . . . . . . . . . . . 256
5.8. Resultados de la simulación dinámica . . . . . . . . . . . . . . . 262
5.9. Acotación y parámetros cinemáticos del problema . . . . . . . . . 263
5.10. Parámetros dinámicos del problema . . . . . . . . . . . . . . . . 266
5.11. Resultados de la simulación dinámica . . . . . . . . . . . . . . . 271
5.12. Funcionamiento de la máquina transportadora . . . . . . . . . . . 272
5.13. Acotación del problema . . . . . . . . . . . . . . . . . . . . . . . 273
5.14. Simplificación adoptada para la curva de par . . . . . . . . . . . . 274
5.15. Dirección preferencial de excitación en el estacionario . . . . . . 275
5.16. Definición de puntos característicos en el sólido bastidor . . . . . 276
5.17. Elementos dinámicos presentes en el problema . . . . . . . . . . 278
ÍNDICE DE FIGURAS XI

5.18. Modos de vibración en la posición de equilibrio . . . . . . . . . . 289


5.19. Resultados de la simulación dinámica . . . . . . . . . . . . . . . 290
5.20. Modelo dinámico en el entorno S IMU L INK . . . . . . . . . . . . 292
5.21. Parámetros del problema . . . . . . . . . . . . . . . . . . . . . . 294
5.22. Control implementado mediante primitivas de S IMU L INK . . . . 296
5.23. Resultados de la simulación dinámica . . . . . . . . . . . . . . . 297
Agradecimientos

Quisiera expresar aquí mi agradecimiento a todas aquellas personas que de un


modo u otro han contribuido a la realización de este modesto trabajo.
En primer lugar al Dr. Javier Ros Ganuza, por saber transmitir su entusiasmo
por la Mecánica, por aceptar la dirección de esta Tesis Doctoral y confiar en mi
trabajo incluso más que yo mismo, por sus valiosas sugerencias y por un largo
etcétera de pequeños detalles que han hecho posible que este trabajo vea la luz.
A los compañeros del Grupo de Investigación IMAC 1 , por acogerme como a
uno más y por su atención y su ayuda desinteresada tanto en lo profesional como
en lo personal.
A W. Schiehlen y H. Claus, por aceptarme como invitado en el Institüt B für
Mechanik de Stuttgart durante el invierno de 2001 y permitir que ese sueño se
hiciese realidad.
A toda la Comunidad del Software Libre, por su contribución al desarrollo de
herramientas como las que hacen de esta Tesis un documento presentable.
A mis familiares y amigos, por echar una mano en todo momento, compartir
conmigo esta especie de odisea y entender mi peculiar sentido del humor.
Por último y de manera especial a Raquel, por ofrecerme su confianza y
dedicarme esa sonrisa cuando más la necesitaba.

1
Ingeniería Mecánica Aplicada y Computacional
1. Introducción

1.1. Introducción
Esta tesis trata sobre el planteamiento automatizado de las ecuaciones dinámi-
cas de Sistemas Multi-Cuerpo complejos basándose en la utilización de un sistema
de álgebra simbólica accesible desde un lenguaje de programación convencional.
Las técnicas de Dinámica de Sistemas Multi-Cuerpo (DSM) permiten la simu-
lación de cualquier sistema o subsistema mecánico, y con ello su análisis, diseño
y mejora. Resulta claro por tanto el interés industrial, económico y científico de la
DSM . Prueba de ello es el gran número de Universidades e Instituciones Cientí-
ficas que investigan directamente en DSM o bien utilizan las técnicas que provee
dicha teoría en sus investigaciones.
La DSM es una herramienta de utilidad en numerosas disciplinas:

• Encuentra una de sus aplicaciones más clásicas en la Teoría de Máquinas


y Mecanismos, convirtiéndose en una herramienta idónea para el análisis y
diseño de éstos.

• Incluso la Robótica, desde una perspectiva mecanicista, puede considerarse


una de las disciplinas que forman parte de la Teoría de Máquinas.

• La Teoría de Control, en el contexto de las máquinas, encuentra como com-


pañera ideal la DSM ayudándole a sintetizar los modelos del sistema o sub-
sistemas mecánicos.

• Los denominados sistemas de Realidad Virtual se sirven de la DSM para


poder interactuar con los elementos del mundo virtual de forma realista.

• La Bio-Mecánica y un largo etcétera de aplicaciones,...

Si se considera que los sólidos constituyentes del sistema mecánico son flexi-
bles, la teoría de la DSM comienza a confundirse con la teoría de la Elasticidad,
siendo difícil aclarar donde termina una y donde comienza la otra.
4 Introducción

Incluso a la inversa, por ejemplo utilizando el método de las coordenadas na-


turales, [GdJB94], un código de elementos finitos para elasticidad clásico puede
utilizarse para la resolución de problemas de DSM para sólidos rígidos 1 .
En opinión del autor de esta Tesis Doctoral, la diferencia que existe en la
actualidad entre las técnicas DSM y la teoría de la Elasticidad es más debida a
una evolución histórica que a una causa justificada, ya que desde el punto de vista
de la Mecánica Clásica, las ecuaciones (y por tanto los métodos) coinciden. Así,
en el futuro, es previsible la convergencia de ambas disciplinas.
T IPOS DE C OORDENADAS
Quizá, todavía a día de hoy, una de las características que identifican la
DSM es la gran variedad de tipo de coordenadas -absolutas, relativas, naturales-
utilizadas en el planteamiento de las ecuaciones dinámicas. De hecho, al entrar
en este mundo, las primeras cuestiones que se plantean son:
¿Por que tantos tipos de coordenadas? y ¿Cuáles son las mejores?,
cuestiones que, lejos de tener una respuesta sencilla, siguen suscitando hoy en
día algunas controversias en la comunidad científica.
Una forma sencilla de evitar conflictos es reconocer que, en gran medida, dicha
variedad atiende a una cuestión de gustos, aunque evidentemente pueden encon-
trarse otras justificaciones:
• La forma de razonar de los humanos está más próxima a un tipo de coor-
denadas que a otros. Por ejemplo, para el que escribe es difícil visualizar
la orientación de un cuerpo cuando se observan las posiciones de varios de
sus puntos, mientras que resulta más sencillo si se utiliza un ángulo para
caracterizar dicha orientación.
• La inconveniencia numérica (o limitación real como en el caso de los án-
gulos de Euler) que presentan algunas coordenadas frente a las ventajas de
otras ...
En última instancia, para un determinado problema, una vez fijado el méto-
do de integración y el formalismo empleado para plantear el problema dinámico,
siempre existe un conjunto de coordenadas que permiten una solución más rápida
del problema. Incluso métodos, como por ejemplo los recursivos 2 , que basados en
dichas coordenadas, sean computacionalmente óptimos para plantear las ecuacio-
nes que resuelven el problema de simulación dinámica.

1
Por ejemplo, simplificando el sistema mediante una reducción de Guyan, [Guy65, CB68].

2
Referencias [Jea95, Rea04] y [Cea97].
1.1 Introducción 5

P LANTEAMIENTO DE LAS E CUACIONES D INÁMICAS


Las ecuaciones dinámicas pueden plantearse apelando a diferentes formalis-
mos dinámicos. Los más comunes se resumen en:

• Formalismo de Newton-Euler [Eul76] o formalismo Vectorial, según el cual


se plantean dos grupos de ecuaciones cartesianas: conservación de Momento
Lineal y de Momento Angular para cada uno de los sólidos del sistema
mecánico.

• Formalismo de las Potencias Virtuales (equivalente al de los trabajos virtua-


les), según el cual se plantean ecuaciones para un numero de movimientos
virtuales suficientes y arbitrariamente escogidos para el sistema.

• Formalismo de Lagrange [Lag88], que a partir de la energía cinética y/o


potencial del sistema determina las ecuaciones dinámicas para un conjunto
de movimientos virtuales coincidentes con las coordenadas del sistema.

De todos ellos, el más general es el Principio de las Potencias Virtuales, ya que


tanto las ecuaciones de Newton-Euler como las ecuaciones de Lagrange pueden
obtenerse a partir de dicho principio, sin más que elegir adecuadamente el grupo
de movimientos virtuales para plantear las ecuaciones.
Desde un punto de vista ingenieril, una ventaja que presentan los métodos
vectoriales frente a los analíticos es la posibilidad que ofrecen para calcular las
fuerzas y momentos originados en los enlaces que existen entre los sólidos del
sistema.
Desde el punto de vista de la simulación dinámica, los formalismos de tipo
lagrangiano presentan ciertas ventajas por derivar en sistemas de ecuaciones más
compactos, lo cual resulta atractivo en el contexto de la simulación en tiempo real.
Por último, mientras que los métodos vectoriales se aplican en exclusiva a
sistemas de sólidos rígidos, los analíticos pueden aplicarse a cualquier tipo de
sistemas, ya sean éstos de sólidos rígidos, flexibles, ...

1.1.1. Clasificación de los Códigos DSM


Desde el punto de vista de la implementación computacional, los códigos
DSM existentes podrían clasificarse en:
6 Introducción

NO SIMBÓLICOS

Se propone como definición de código no simbólico, aquel que genera las


diferentes matrices o funciones necesitadas por el integrador o solver del sistema
dinámico en forma numérica, directamente a partir de las estructuras de datos
internamente utilizadas para representar el Sistema Mecánico. En este contexto,
resulta difícil separar las propias ecuaciones dinámicas de la estructura de datos
que representa el sistema mecánico, o bien la solución del problema del código
utilizado para plantearlo.
S EMI - SIMBÓLICOS
Se propone como definición de código semi-simbólico, aquél que genera las
diferentes matrices o funciones necesitadas por el integrador o solver del sistema
en forma simbólica, normalmente como un conjunto de funciones en un determi-
nado lenguaje de programación3 . En este caso, las funciones anteriores se evalúan
mediante un interfaz numérico independiente del programa que las generó y de
sus estructuras de datos.
El programa o preprocesador anterior será semi-simbólico en la medida en
que las estructuras de datos empleadas no sean simbólicas y/o en la medida en
que dicho procesador no tenga capacidad para realizar operaciones de álgebra
simbólica en el planteamiento del problema.
La definición anterior no es estricta, ya que el interfaz de un preprocesador
semi-simbólico puede proporcionar una capacidad simbólica concreta 4 , aunque
habitualmente esto se hace de forma diferente a la filosofía de trabajo del prepro-
cesador.
S IMBÓLICOS
Se pretende introducir una nueva definición de preprocesador para el cual se
propone la denominación de preprocesador simbólico.
Para entender lo que se desea significar se hace referencia a Sistemas de Ál-
gebra Simbólica que se plasman en aplicaciones conocidas como M ATHEMATI -
CA [Mth04], M AXIMA [Max04], M APLE [Map04], R EDUCE [Red04] o M AT-
L AB [Mat04] con su modulo de álgebra simbólica.
En general, los programas anteriores proporcionan al usuario un lenguaje de
programación interpretado que incluye:
• tipos de datos simbólicos,
• operadores y/o funciones que operan sobre los tipos de datos anteriores,
3
C , F ORTRAN , ...
4
por ejemplo, la definición de funciones de usuario.
1.1 Introducción 7

• estructuras de control de flujo del programa,


que permiten trabajar con estos tipos de datos con la misma naturalidad con la
que, por ejemplo, C trabaja con el tipo de dato real.
Un lenguaje (interfaz) dotado de la funcionalidad anterior, permitiría la defi-
nición de tipos de datos simbólicos derivados (estructuras) que podrían emplear-
se para representar los diferentes elementos en los que se apoya la teoría de la
DSM para la definición del sistema Multi-Cuerpo, es decir:
Puntos, Bases, Referencias, Torsores, Enlaces, Sólidos,...
Además, el interfaz anterior podría completarse con una serie de operadores
y/o funciones del tipo:
Suma, Producto Escalar, Producto Vectorial, Derivada Parcial y Total,
Velocidad y Velocidad Angular, Aceleración y Aceleración Angular, ...
que, actuando sobre elementos anteriores, permitirían plantear de forma sim-
bólica las diferentes matrices o funciones necesarias para la simulación del siste-
ma dinámico. Es decir: se podría definir un nuevo Sistema de Álgebra Simbólica
específico para el planteamiento de problemas de DSM .
A continuación se ponen de manifiesto algunas de las ventajas que presentan
los sistemas DSM totalmente simbólicos:
• La implementación de algoritmos de exportación de las funciones y/o ma-
trices que intervienen en la solución del problema dinámico a un lenguaje
de programación concreto como M AT L AB o C , se convierte en algo trivial.
• Las limitaciones pueden ser mínimas si las estructuras de datos y operado-
res específicos son diseñadas con suficiente generalidad para representar el
álgebra de la Mecánica Clásica.
• La incorporación de nueva funcionalidad al código no necesita de extraños
artificios, sino que se convierte en algo consustancial al lenguaje definido.
• La independencia del tipo de coordenadas empleado para representar el sis-
tema, o del formalismo para la implementación de las ecuaciones dinámi-
cas, es una consecuencia natural del concepto que se propone.
• La adecuación de algoritmos recursivos, o para la dinámica de sólidos fle-
xibles, o la implementación de traductores para lenguajes de definición de
mecanismos5 , se convierten en algo trivial cuando el lenguaje empleado es
afín al de la Dinámica Clásica.
5
ya sean éstos de propósito general como M ECH ML [Mec04], o asociados a un código
DSM existente como A DAMS , [Ada04].
8 Introducción

1.2. Estado de la cuestión


En la actualidad existen multitud de códigos computacionales para la DSM ,
ya sean éstos de carácter comercial, docente o investigador. A modo ilustrativo se
citarán algunos de éstos sin pretender hacer una lista exhaustiva.
En disciplinas como la Automoción, tradicionalmente se emplean códigos nu-
méricos (con capacidad simbólica limitada o nula) que se caracterizan por emplear
coordenadas diferentes para cada uno de los sólidos del sistema, lo cual deriva en
conjuntos de ecuaciones de gran tamaño, pero bien estructurados. Como ejemplos
de códigos del tipo anterior destacan A DAMS [Ada04], DADS [Dad04] y S IM -
PACK [Sim04].
Como códigos semi-simbólicos diseñados para el tratamiento de problemas
de la Dinámica Vehicular podrían citarse N EWEUL [New04, PS93], basado en el
formalismo de Newton-Euler, y C ARSIM [Car04, Say90]. Ambos códigos permi-
ten tratar de forma eficiente las restricciones de tipo no holónomo, linearizar las
ecuaciones de movimiento, e incluso optimizar parámetros dinámicos. Sin embar-
go, el sistema de álgebra simbólica en el que se basan tiene ciertas limitaciones y
la posibilidad de manipular expresiones simbólicas en línea de comandos es es-
casa o nula. En el caso particular de N EWEUL , la limitación anterior se resuelve
exportando código legible por M APLE .
En disciplinas como la Robótica o la Mecatrónica, el planteamiento del proble-
ma tradicionalmente se realiza en coordenadas relativas. Por otra parte, la simula-
ción en tiempo real o la incorporación del modelo obtenido como subsistema en
un modelo de tamaño superior, exige cierta flexibilidad a la hora de presentar las
ecuaciones que definen la dinámica del sistema. Los códigos semi-simbólicos em-
pleados, entre los cuales destacan A LASKA [Ala04], ROBOTRAN [Rob04, SF03],
disponen normalmente de un sistema de álgebra simbólica capaz de plantear el
problema dinámico de forma eficiente empleando diferentes formalismos.
Otro tipo de códigos semi-simbólicos para la DSM son aquellos que se presen-
tan a modo de librerías especializadas para sistemas de álgebra simbólica conven-
cional. Como ejemplo de los anteriores podría nombrarse a DYNAFLEX [Dyn04],
cuyo sistema simbólico se basa en M APLE y cuyo interface se apoya en la teoría
lineal de grafos.
En el apartado de códigos totalmente simbólicos, destacan las siguientes refe-
rencias:

• AUTOLEV [Aut04] posee un sistema simbólico propio e implementa va-


rios formalismos dinámicos entre los que destaca el Principio de las Poten-
cias Virtuales, [KC69, KD85].
1.2 Estado de la cuestión 9

• El recientemente publicado M BSYMBA [Mbs03, LDL04], implementa un


sistema simbólico para la DSM basado en M APLE que incluye tipos de dato
simbólicos para entidades como Fuerzas y Momentos. El código anterior
permite plantear las ecuaciones dinámicas empleando los formalismos de
Lagrange y Newton-Euler además de realizar simulaciones numéricas con
las herramientas propias de M APLE .

• Por último, y como precedente del código presentado en esta tesis doctoral,
debe citarse a 3D_M EC . El código anterior, desarrollado en el grupo de
investigación al que pertenece el autor, implementa su propio lenguaje de
programación y dispone de un kernel simbólico de bajo nivel que permite
realizar operaciones con expresiones simbólicas. Aunque conceptualmente
su funcionalidad para el desarrollo de las ecuaciones de la DSM es comple-
ta, presenta diferentes limitaciones:
• El lenguaje de programación que implementa, carece de estructuras de
control, aunque éstas no sean estrictamente necesarias para los propó-
sitos de un preprocesador.
• El Kernel de bajo nivel tiene ciertas limitaciones sobre el tamaño
máximo de las expresiones simbólicas que es necesario manejar así
como su simplificación, lo cual supone una limitación para trabajar
con sistemas complejos.
• El nivel de abstracción es muy bajo. Se definen tipos y estructuras de
Coordenadas y Parámetros así como Vectores y Tensores cartesianos,
Puntos, Bases y Referencias, además de operadores Cartesianos como
Vector de posición, o de Velocidad Angular sobre los tipos de datos
mencionados. En definitiva se define un Álgebra Mínima para poder
escribir las ecuaciones cinemáticas y dinámicas de los sistemas Multi-
Cuerpo de forma ágil.
• El interfaz a la dinámica de Sistemas Multi-Cuerpo que presenta al
usuario es completamente cartesiano, lo cual resulta conveniente des-
de el punto de vista del entendimiento humano. No obstante, la no
presentación al usuario de Vectores o Matrices de dimensión superior
a los Cartesianos, la no disponibilidad de tipos de datos avanzados
como Torsor o Sólido, o la no asociación de un tipo específico a las
ecuaciones que las clasifique en diferentes categorías como Cinemá-
ticas o Dinámicas, dificulta la implementación de algoritmos de al-
to nivel que, de una forma automatizada, planteen las ecuaciones del
problema dinámico.
10 Introducción

1.3. Objeto de la Tesis Doctoral


Teniendo en cuenta las limitaciones y virtudes del Sistema de Álgebra Sim-
bólica para la DSM desarrollado en el grupo de investigación al que pertenece el
autor, se tomó la decisión de desarrollar un nuevo Sistema de Álgebra Computa-
cional para la DSM , que basada en la experiencia adquirida, permita superar las
limitaciones expuestas en el apartado anterior.
En principio el objetivo de la tesis es el desarrollo abstracto del sistema simbó-
lico para DSM mencionado, es decir, su definición conceptual. No obstante, todo
trabajo científico debe permitir la validación de sus reivindicaciones.
En ese sentido pretende implementar computacionalmente una prueba de con-
cepto. Y para hacerlo, decide centrarse exclusivamente en la definición de los as-
pectos asociados al Álgebra propia de Mecánica, decidiendo implementar el Sis-
tema Simbólico sobre una herramienta computacional existente en el mercado y
de probada fiabilidad.
De las opciones disponibles, se decide utilizar el lenguaje de programación
M AT L AB junto con su módulo de Álgebra Simbólica basado en M APLE , dispo-
nible en el momento de inicio de esta Tesis Doctoral (M AT L AB 6,5).
Por todo lo anterior, se decide denominar 3D_M EC _M AT L AB a la implemen-
tación del sistema propuesto.
Por otra parte, la prueba de concepto decide limitarse al planteamiento de las
ecuaciones asociadas a Sistemas Multi-Cuerpo Rígidos. No obstante, la flexibi-
lidad del sistema M AT L AB –M APLE utilizado en la implementación y la genera-
lidad de las ideas propuestas, permitirán, en un futuro próximo, la extensión al
contexto de cuerpos Flexibles.

1.4. Organización del contenido de la Tesis Doctoral


En la primera parte de la tesis, y tratando de hacer que el material presentado
sea en cierta medida autocontenido, se presenta la teoría de la DSM , desde el
punto de vista de la Mecánica Clásica. Así, en el Capítulo 2 se tratan los aspectos
relativos a la Cinemática de Sistemas Multi-Cuerpo, para tratar los aspectos rela-
tivos a la Dinámica en el Capítulo 3. En la sección 3.8, y con el objeto de hacer
más accesibles las diferentes ideas introducidas, se presenta un ejemplo clásico:
el mecanismo pistón-biela-manivela.
Otro de los propósitos de esta primera parte es el de servir como referencia a
las discusiones que se presentarán en el resto de la tesis. Por otra parte, es la propia
estructura de la teoría de la Dinámica de Sistemas Multi-Cuerpo la que da lugar a
1.4 Organización del contenido de la Tesis Doctoral 11

la reflexión sobre cuales deben ser los diferentes tipos de datos y estructuras que
permitan la implementación más general posible de un Sistema Simbólico para la
DSM .
El Capítulo 4 se dedica a la descripción de la implementación del Sistema
Simbólico para la DSM , 3D_M EC _M AT L AB , desarrollado. Se definen las dife-
rentes estructuras de datos y las funciones y operadores más importantes, así como
los algoritmos que actúan sobre ellos, incluida la exportación. La primera parte el
Capítulo sigue una estructura más o menos lineal: en primer lugar se describen
los aspectos cinemáticos del problema para después tratar los dinámicos. En este
contexto, en primer lugar se presentarán los elementos que conforman el Sistema
Simbólico de Bajo Nivel para la DSM : un conjunto básico de funciones que per-
miten trabajar con las diferentes estructuras de datos incluidas en el programa. En
segundo lugar se describen las diferentes funciones de alto nivel que, implemen-
tadas sobre el Sistema Simbólico de Bajo Nivel, permiten al usuario definir los
Sistemas Multi-Cuerpo empleando un mayor nivel de abstracción.
En el Capítulo 5 se introducen varios ejemplos que ponen de manifiesto la
validez de la Tesis presentada en Capítulos anteriores. Se comienza con un pro-
blema sencillo que se resuelve de dos formas distintas. En la primera de ellas se
utiliza un nivel de abstracción bajo, que utiliza únicamente el Sistema Simbóli-
co de Bajo Nivel. En la segunda en cambio, se utiliza el Sistema Simbólico de
Alto Nivel, mostrándose cómo el problema también puede plantearse emplean-
do la funcionalidad habitual de la mayoría de códigos existentes. Posteriormente
se presenta la solución de un problema que incorpora una complejidad difícil de
tratar en los códigos para la DSM más comunes. Se trata de ilustrar, que el plan-
teamiento de problemas complejos se resuelve sin más que emplear un nivel más
bajo de abstracción en las partes no estándar 6 del problema. Por último, se plantea
un problema de tamaño importante, correspondiente a un trabajo de investigación
realizado para una empresa del entorno, tratando de demostrar que el tamaño del
problema no limita la validez de la tesis propuesta.
Por último, el Capítulo 6 se dedica a describir los diferentes aspectos e ideas
más reseñables en esta Tesis Doctoral así como a comentar algunas de las ideas
para el trabajo futuro dentro de la linea del trabajo realizado.

6
o no contempladas en el interfaz simbólico de alto nivel
2. Cinemática

2.1. Introducción
En este capítulo y en el que sigue, se va a introducir la teoría básica de la
Dinámica de Sistemas Multi-Cuerpo relevante para la implementación del pre-
procesador para la DSM que persigue esta Tesis Doctoral.
En particular, la parte Cinemática de dicha teoría será tratada en este capítulo,
mientras que el tratamiento de los aspectos dinámicos se pospone al capítulo si-
guiente. En ambos capítulos se introducirán varios ejemplos que tratarán de hacer
más claras las ideas teóricas introducidas.
En la lectura este capítulo, el lector observará cómo las ecuaciones de la Ci-
nemática1 , se plantean a partir de relaciones que entre magnitudes vectoriales de
naturaleza cartesiana. Una vez desarrolladas, las ecuaciones anteriores se expre-
sarán de forma analítica o matricial.
Esta separación de los mundos cartesiano y analítico, es también la que dife-
rencia la etapa de planteamiento del problema de la etapa de solución. Se concluye
que el interfaz que el preprocesador DSM ofrezca al usuario debe ser de natura-
leza cartesiana, y por lo tanto, debe fomentar al máximo la simplificación del
planteamiento de expresiones que involucren magnitudes de dicha naturaleza.
Esa preferencia por lo cartesiano en el planteamiento de las ecuaciones de la
mecánica2 , no es un hecho casual. En opinión del autor, se debe a la forma natural
de razonar de los humanos. Está claro que comprendemos mejor el significado de
las ecuaciones cuando éstas expresan relaciones de tipo cartesiano.
Durante la lectura de este capítulo de teoría, complementada por los ejem-
plos que le acompañan, el lector encontrará los diferentes elementos de naturaleza
cartesiana. Al nivel más básico, aparecen los elementos: Punto, Base y Referen-
cia. Estos elementos, se relacionan en las expresiones cinemáticas mediante los
operadores: Vector de posición, Velocidad, Velocidad Angular, etc...
1
ecuaciones de enlace de diferentes tipos
2
no solo presente en la cinemática, sino también en la dinámica
14 Cinemática

Se concluye que el preprocesador simbólico debe implementar los diferentes


elementos del interfaz cartesiano como tipos o estructuras de datos, mientras que
los operadores, deben implementarse como funciones de dicho tipo de datos.
Por último, se presentará la expresión matricial que adoptan los diferentes ti-
pos de ecuaciones cinemáticas. Las matrices obtenidas, pondrán de manifiesto
cuáles deben ser las estructuras de datos que darán soporte al planteamiento ma-
tricial de las ecuaciones.
La parte del preprocesador simbólico que da soporte los diferentes elemen-
tos, operadores, matrices, etc... citados, constituyen lo que a lo largo de esta tesis
doctoral se referencia como Sistema Simbólico de Bajo Nivel.
Como se verá en el capítulo de implementación, también se implementa un
Sistema Simbólico de alto nivel que, basado en el sistema de Bajo Nivel, dota al
preprocesador de un mayor grado de simplicidad y abstracción.

2.2. Ecuaciones cinemáticas


Habitualmente, el planteamiento de las ecuaciones de un sistema mecánico
conlleva la introducción de un conjunto de p coordenadas generalizadas q j ,
j = 1 . . . p , en general dependientes3
 
q1
 
q =  ...  , (2.1)
qp

cuyo objeto es describir, en cada instante de tiempo, la posición del sistema


mecánico.
Las coordenadas generalizadas, q, se relacionan mediante un conjunto de g
ecuaciones geométricas o ecuaciones para las coordenadas generalizadas (proble-
ma de posición). Dichas relaciones, en general no lineales, quedan recogidas en el
vector φ de tal forma que
   
φ1 (q, t) 0
 ..   ..  .
φ (q, t) =  . = .  (2.2)
φg (q, t) 0

3
Existen dependencias ó relaciones cinemáticas entre ellas.
2.2 Ecuaciones cinemáticas 15

Las velocidades generalizadas, q̇, estarán relacionadas por las derivadas de


las ecuaciones anteriores y por un conjunto de r relaciones no holónomas

A (q, t) q̇ + b (q, t) = 0, (2.3)

que dan lugar al sistema de c = g + r ecuaciones para las velocidades


generalizadas (problema de velocidad)

φv (q, t) q̇ + bv (q, t) = 0 (2.4)

donde
" #  
φv =
φq y bv =
φt
A b

con

φq es el jacobiano del problema de posición que se obtiene al derivar la


expresión 2.2 respecto al tiempo
∂φ ∂φ
φ̇ = q̇ +
∂q ∂t
= φq (q, t) q̇ + φt (q, t)
φv representa el jacobiano del problema de velocidad.

bv es el término independiente del problema de velocidad.

Las aceleraciones generalizadas, q̈, están relacionadas por las ecuaciones para
las aceleraciones generalizadas, derivadas éstas de las ecuaciones para velocida-
des, según
φv (q, t) q̈ + φ˙ (q, q̇, t) q̇ + ḃv (q, q̇, t) = 0
v
(2.5)

donde

φ˙ v es la derivada del jacobiano del problema de velocidad respecto al


tiempo
p
X ∂ ∂
˙ φv φv
φv =
∂ qj
q̇j +
∂t
j=1
16 Cinemática

ḃv representa la derivada del término independiente del problema de


velocidad, que formalmente se define
 
∂ φt ∂ φt
q̇ + ∂ t
 ∂q 
ḃv =   

∂b ∂b
∂q
q̇ + ∂ t

2.2.1. Planteamiento de ecuaciones geométricas


Formalmente, las ecuaciones geométricas no son más que relaciones arbitra-
rias entre las coordenadas q , la variable tiempo, t (si es que son de tipo rheó-
nomo), y un conjunto de parámetros relacionados con la geometría del sistema
mecánico o con el carácter rheónomo del enlace.
Desde un punto de vista operativo, las ecuaciones geométricas se plantean
como condiciones que deben cumplir los vectores de posición de puntos y vectores
unitarios de las bases introducidas para posicionar los elementos del sistema.
Por ejemplo:

Proyección del vector de posición P j P i en la dirección definida por un


vector unitario, u , igual a f (q, t).

P i P j · u − f (q, t) = 0 (2.6)

En particular, si f (q, t) = 0 , la ecuación anterior expresa perpendiculari-


dad entre el vector y la dirección.

Ángulo entre dos vectores unitarios, v y w , en la dirección mutuamente


perpendicular, u , igual a f (q, t).

cos (f (q, t)) v · w − sin (f (q, t)) v · w = 0 (2.7)

Puntos P j y P i coincidentes:

Pj Pi = 0 (2.8)

Vector de posición P j P i y vector unitario, u , paralelos.

Pj Pi ∧ u = 0 (2.9)
2.2 Ecuaciones cinemáticas 17

Ángulo entre dos vectores unitarios α ≤ π/2.

u · v − cos (α) = 0 (2.10)

Distancia entre dos puntos, ρ > 0.

P j P i · P j P i − ρ2 = 0 (2.11)

Tal como puede apreciarse, las ecuaciones geométricas anteriores incluyen


algunos de los elementos (puntos y, aunque no de forma explícita, bases de pro-
yección) y operadores (vector de posición) del denominado interfaz cinemático
cartesiano, descrito en la sección 4.3.3 del Capítulo de implementación.

2.2.2. Planteamiento de ecuaciones no holónomas


Formalmente las relaciones de tipo no holónomo no son sino ecuaciones li-
neales en las velocidades generalizadas, en las que pueden aparecer expresiones
arbitrarias que involucran a las coordenadas generalizadas y al tiempo.
Desde un punto de vista operativo estas ecuaciones se calculan como relacio-
nes que deben cumplir los vectores velocidad de algunos puntos y velocidades
angulares de algunas bases empleadas en la definición del sistema mecánico.
Por ejemplo:

La velocidad4 de un punto P i en una dirección u especificado como función


del tiempo, t
VR (P i ) · u + f (t) = 0 (2.12)

No deslizamiento entre Sol y Sol’ en el punto5 P i , en la dirección u


 
VR (P i ∈ Sol) − VR (P i ∈ Sol’) · u = 0. (2.13)

Al igual que en el caso de las ecuaciones geométricas, las ecuaciones no holó-


nomas también incluyen algunos elementos y operadores (velocidad de un punto
en una referencia) del citado interfaz cartesiano.
5
centro instantáneo rotación de Sol respecto a Sol’.
5
en la ecuación 2.12, el subíndice R de la expresión VR (Pi ) representa la Referencia en la
que se sitúa el observador.
18 Cinemática

2.2.3. Elección del tipo de coordenadas


Como ya se comentó en la introducción de la tesis doctoral, la elección de las
coordenadas es una delicada tarea que no tiene una respuesta única. El tipo de
coordenadas, junto con el formalismo empleado, determinarán la estructura final
de las ecuaciones.

a) Coordenadas Relativas
El movimiento de un determinado sólido es relativo al del sólido anterior
en la cadena cinemática. Dicho movimiento, se expresa en base a un número
de coordenadas igual al número de grados de libertad del enlace presente entre
ambos sólidos. Así, el número y tipo de coordenadas debe elegirse de forma
apropiada para cada problema en concreto.
El número de incógnitas de movimiento empleado en esta formulación es
reducido, incluso mínimo si la topología del mecanismo no presenta lazos
cerrados.
Detalles de esta formulación pueden encontrarse en cualquier libro de me-
cánica clásica, [Cra86, Agu96].

b) Coordenadas Cartesianas
El movimiento de cada sólido se expresa de forma independiente respecto
al resto de los que integran el sistema. Las coordenadas son elegidas de forma
sistemática6 , lo cual deriva en sistemas de ecuaciones diagonales por bloques,
poco compactos y con alta dispersión (esparseidad).
Normalmente, el número de incógnitas de movimiento que resuelven el pro-
blema es elevado si éste se compara con el empleado en otras formulaciones.
Además, en este caso, la definición del problema exige introducir gran núme-
ro de restricciones geométricas independientemente de la existencia de lazos
cerrados.
Ejemplos de formulaciones basadas en este tipo de coordenadas pueden
encontrarse en las referencias [Nik88] y [Sha98].

c) Coordenadas Naturales
El movimiento se caracteriza en base a los desplazamientos cartesianos de
diferentes puntos de control del mecanismo.
Dada la homogeneidad en el tipo de coordenadas, las ecuaciones de movi-
miento correspondientes son fácilmente estructurables y presentan un gran nú-
mero de invariantes. Como contrapartida, el número de incógnitas y de ecua-
6
por ejemplo, desplazamientos y giros eulerianos de dichos sólidos.
2.3 Ejemplo 19

ciones de enlace en situaciones generales puede ser mayor todavía al del tipo
anterior.
Por otra parte, hay situaciones en que las restricciones cinemáticas 7 no pue-
den introducirse de forma directa, lo que obliga a introducir coordenadas en
exceso o auxiliares.
En la referencia [GdJB94] se trata en detalle la utilización de las menciona-
das coordenadas naturales.

2.3. Ejemplo
En las siguientes subsecciones, con varios ejemplos desarrollados sobre el me-
canismo representado en la figura 2.1, se ilustrarán las ideas expuestas en este
capítulo utilizando los diferentes tipos de coordenadas definidas en la sección an-
terior.
B

l2
lg2
l1 E
D

lg1 e
A C

Figura 2.1: Mecanismo pistón-biela-manivela

2.3.1. Coordenadas Relativas


 T
El vector de coordenadas q = θ1 θ2 describe la posición del mecanis-
mo sin ligaduras (véase figura 2.2).
Las coordenadas anteriores son dependientes, puesto que si toman valores ar-
bitrarios, el punto C no estaría obligado a mantenerse paralelo al eje x de la base
x yz . Por tanto, existe una relación geométrica que puede plantearse

AC · ey − e = 0 (2.14)

donde ey hace referencia al vector unitario en la dirección y de la base xyz .


7
por ejemplo, fijar la velocidad de giro de un determinado sólido.
20 Cinemática

20
Bie
B 10 Blo
C
D E
y θ2

n
Ma
2 Abs
θ1 e
A x
Blo

Abs Man Bie


θ1 , +z θ2 , +z

Figura 2.2: Acotación del mecanismo utilizando coordenadas relativas

Haciendo uso del diagrama de orientaciones que aparece en la figura 2.2, po-
demos expresar la ecuación 2.14 en forma matricial:

 
 h i1 0 2 0 3 0  h i1 2 3  T 0
   
I AB 1 02 03 0
+ I BC 123
 1  − e = 0 (2.15)
x yz x yz
0 x yz

donde

las matrices de cambio de base quedan definidas como


 
h cos(θ1 ) − sin(θ1 ) 0
i1 0 2 0 3 0
I =  sin(θ1 ) cos(θ1 ) 0  (2.16)
x yz
0 0 1
h i1 2 3 h i1 0 2 0 3 0 h i1 2 3
I = I I 0 0 0 (2.17)
x yz x yz 1 2 3
2.3 Ejemplo 21

con
 
h i1 2 3 cos(θ2 ) − sin(θ2 ) 0
I =  sin(θ2 ) cos(θ2 ) 0  (2.18)
1 02 03 0
0 0 1

los vectores de posición se definen como


   
l1 l2
       
AB 1 02 03 0
= 0 , BC 1 2 3 =  0 
0 1 02 03 0 0 123

donde l1 y l2 son parámetros geométricos del problema.

Combinando las expresiones anteriores, la ecuación 2.14 puede reescribirse

   
φ= l1 sin(θ1 ) + l2 sin(θ1 + θ2 ) − e = 0 . (2.19)

Como es obvio, el mecanismo de la figura posee una coordenada independien-


te, lo que se traduce en que basta fijar una de las incógnitas de movimiento para
determinar completamente el movimiento del mecanismo.
Así, siendo

g = 1 , el número de restricciones geométricas,

r = 0 , el número de restricciones no holónomas,

c = g + r = 1 , el número de restricciones cinemáticas y

p = 2 , el número de coordenadas de partida,

el número de grados de libertad del sistema, n , es8 n = p − c = 1.


Derivando respecto al tiempo la ecuación 2.19, se obtiene la relación para
velocidades

θ̇1 l1 cos(θ1 ) + (θ̇1 + θ̇2 ) l2 cos(θ1 + θ2 ) = 0 (2.20)

8
Dado que r = 0 , el número de coordenadas independientes, m , coincide con el de grados
de libertad m = p − g = n.
22 Cinemática

que de forma matricial se expresa

φ̇ = φq q̇ =

   
= l1 cos(θ1 ) + l2 cos(θ1 + θ2 ) l2 cos(θ1 + θ2 ) q̇ = 0
(2.21)

donde la parcial φt no aparece por no existir dependencias explícitas en la


variable tiempo, t. Es decir, la ecuación es esclerónoma.
Por último, derivando respecto al tiempo la ecuación , se obtiene la relación
para aceleraciones generalizadas

φ̈ = φq q̈ + φ˙ q q̇ =

 
= l1 cos(θ1 ) + l2 cos(θ1 + θ2 ) l2 cos(θ1 + θ2 ) q̈
 
T −l1 sin(θ1 ) − l2 sin(θ1 + θ2 ) −l2 sin(θ1 + θ2 )
+ q̇ q̇ = 0
−l2 sin(θ1 + θ2 ) −l2 sin(θ1 + θ2 )
(2.22)

2.3.2. Coordenadas Cartesianas


La acotación en coordenadas cartesianas responde a la necesidad de generar
las ecuaciones de movimiento de forma sistemática. En este caso, cada uno de los
sólidos del sistema se acota de forma independiente.
En el plano, la posición de un sólido queda convenientemente representado de
forma cartesiana mediante tres coordenadas independientes. Tal como se aprecia
en la figura 2.3, en este caso las coordenadas elegidas son los desplazamientos
absolutos de los puntos C1 , D2 y E3 y las rotaciones absolutas9 de los tres esla-
bones:
 T
q = xD y D θ 1 xE y E θ 2 xC y C θ 3 .
Así, el número de coordenadas de partida, p = 9 , es superior al presentado en
la sección anterior.

9
magnitudes siempre relativas a una Referencia Absoluta, Abs . Así, la coordenada θ 2 , que en
el apartado anterior denotaba el giro relativo entre las referencias Bie y Man , ahora representa
el giro absoluto de la referencia Man .
2.3 Ejemplo 23

B2 20
Bie
E2
B1 (xE , yE ) θ2
1 0
200
n

2 1
Ma

θ1 Blo 100
D1 C2 θ3
(xD , yD )
Bie (xC , yC ) C3
A1
θ2 , +z
y
Abs Man Abs Blo
θ1 , +z θ3 , +z e

Figura 2.3: Acotación del mecanismo utilizando coordenadas cartesianas

Teniendo en cuenta la acotación elegida, se hace necesario imponer las si-


guientes restricciones:
B1 y B2 coinciden (par de revolución),
C2 y C3 también coinciden,
A1 coincide con el origen de Abs , O,
Blo puede desplazarse exclusivamente en dirección horizontal y no tiene
permitido el giro
Matemáticamente, las restricciones anteriores se traducen en:

OB1 = OB2
OC2 = OC3
OA1 = 0
OC · ey = e
e100 · ex = 1 (2.23)

donde ey es el vector unitario sobre el eje y de la base x yz , e100 es el vector


unitario en la dirección 100 de la base 1 00 2 00 3 00 y ex es el vector unitario sobre el
eje x de la base x yz .
24 Cinemática

Proyectando en la base global10

  h i b1     h i b2  
OD1 x yz
+ I D1 B1 b1
= OE2 x yz
+ I E2 B2 b2
x yz x yz
  h i b2     h i b3  
OE2 x yz
+ I E2 C2 b2
= OC3 x yz
+ I C3 C3 b3
x yz x yz
  h i b1    
OD1 x yz
+ I D1 A1 b1
= 0 x yz
x yz
yc = e
θ3 = 0 (2.24)

donde la posición de un punto genérico P i , solidario a cualquier referencia


R i , con origen en el punto Oi y base de proyección bi se expresa como

OP i = OOi + Oi P i
    h i bi  
OP i x yz = OOi x yz + I Oi P i b (2.25)
i x yz

h i bi
y donde I siempre es de la forma
x yz
 
h i bi cos θi − sin θi 0
I =  sin θi cos θi 0  (2.26)
x yz
0 0 1

Operando11 , el sistema de ecuaciones 2.23, presentado en la forma habitual se


escribe
    
xD + 21 l1 cos θ1 − xE − 21 l2 cos θ2 0
 yD + 21 l1 sin θ1 − yE − 21 l2 sin θ2   0 
   
 xE + 21 l2 cos θ2 − xC   0 
   
 yE + 12 l2 sin θ2 − yC   0 
φ=

=
 

 (2.27)
 xD − 21 l1 cos θ1   0 
 yD − 21 l1 sin θ1   0 
   
 yC − e   0 
θ3 0
y dado que g = 8 y r = 0 , también se cumple que n = p − c = 1.
10
nótese que, en este caso, la cinemática de cualquier punto viene expresada en función de un
grupo homogéneo de coordenadas.
11
buscando mayor brevedad en las expresiones, los puntos D y E se sitúan en el punto medio
de cada una de las barras.
2.3 Ejemplo 25

Derivando respecto al tiempo la ecuación 2.27, se obtiene la relación para


velocidades, que en forma matricial se escribe

   
1 0 − 21 l1 sin θ1 −1 0 − 21 l2 sin θ2 0 0 0 0
 0 1 21 l1 cos θ1 0 1 21 l2 cos θ2 0 0 0   0 
   
 0 0 0 1 0 − 12 l2 sin θ2 1 0 0   0 
   
 0 0 0 0 1 21 l2 cos θ2 0 1 0   
φ̇ = φq q̇ =   q̇ =  0 
 1 0 12 l1 sin θ1 0 0 0 0 0 0   0 
   
 0 1
1 − 2 l1 cos θ1 0 0 0 0 0 0   0 
   
 0 0 0 0 0 0 0 1 0   0 
0 0 0 0 0 0 0 0 1 0
(2.28)
Las relaciones para aceleraciones generalizadas se obtienen de forma análoga
a la presentada en el apartado anterior, pero se omiten por brevedad en la exposi-
ción.

2.3.3. Coordenadas Naturales


El planteamiento del problema en términos puramente geométricos deriva en
la elección de las denominadas Coordenadas Naturales.

(xB , yB )

l2
(xC , yC )
l1
y
x e

(0, 0)

Figura 2.4: Acotación del mecanismo utilizando coordenadas naturales

Tal como se aprecia en la figura 2.4, bastan cuatro coordenadas absolutas (pun-
tos B y C) para determinar el movimiento del mecanismo,
 T
q = xB y B xC y C
26 Cinemática

En este caso, las restricciones que definen el problema geométrico pueden


expresarse

OB · OB − l12 = 0
BC · BC − l22 = 0
OC · ey = e

o bien,
   
(xB )2 + (yB )2 − l12 0
 2 2 2 
φ = (xC − xB ) + (yC − yB ) − l2 = 0 
 (2.29)
yC − e 0

y dado que g = 3 y r = 0 , en este caso también se cumple que n = p−c = 1.


Derivando respecto al tiempo la ecuación 2.27, se obtiene la relación para
velocidades, que en forma matricial se escribe

φ̇ = φq q̇ =
   
2 xB 2 yB 0 0 0
=  
−2 (xC − xB ) −2 (yC − yB ) 2 (xC − xB ) 2 (yC − yB ) q̇ = 0 

0 0 0 1 0
(2.30)

Por último, las relaciones para aceleraciones generalizadas se obtienen de for-


ma análoga a la presentada en el primer apartado, esto es

φ̈ = φq q̈ + φ˙ q q̇ =
 
2 xB 2 yB 0 0
=  −2 (xC − xB ) −2 (yC − yB ) 2 (xC − xB ) 2 (yC − yB )  q̈
0 0 0 1
   
2 ẋB 2 ẏB 0 0 0
+  −2 (ẋC − ẋB ) −2 (ẏC − ẏB ) 2 (ẋC − ẋB ) 2 (ẏC − ẏB )  q̇ =  0 
0 0 0 0 0
(2.31)
3. Dinámica

3.1. Introducción
Como se comentó en la introducción del capítulo anterior, en este capítulo se
desarrollan los aspectos de la Teoría de la Dinámica relevantes para el desarrollo
del preprocesador simbólico para la DSM .
Como ya se comentó, la separación entre el planteamiento basado en expre-
siones vectoriales y las ecuaciones matriciales o analíticas que se obtienen, está
también presente en el contexto dinámico.
A través de la lectura de este capítulo y de los ejemplos que al final le acompa-
ñan, se irán presentando los diferentes tipos de elementos de naturaleza cartesiana
y los algoritmos que, a partir de dichos elementos, permiten plantear las Ecuacio-
nes Dinámicas en su forma matricial o analítica.
Dejando a un lado los elementos encontrados en el capítulo anterior, uno de
los elementos fundamentales que aparece en las formulaciones dinámicas es el
torsor en sus diferentes variantes: Torsor de Inercia de DÁlambert, Torsores de
Enlace y Torsores asociados a otras acciones.
Los otros elementos cartesianos necesarios para el planteamiento de las ecua-
ciones son el elemento sólido y sus propiedades inerciales, y el enlace parcial 1
entre dos sólidos.
Como se puede observar de las diferentes expresiones matriciales presentadas,
los términos inerciales pueden obtenerse sin utilizar los Torsores de Inercia, hecho
que es tenido en cuenta en los diferentes algoritmos descritos en el Capítulo 4.
Así, este análisis de las ecuaciones dinámicas, sugierirá los tipos de datos y
estructuras que deben implementarse en el preprocesador. Por otra parte las defi-
niciones de las diferentes matrices que aparecen en las versiones matriciales de las
ecuaciones dinámicas definirán los algoritmos a emplear para su planteamiento.
1
abstracto, sin especificación de tipología
28 Dinámica

3.1.1. Tipos de acciones


De forma clásica, el planteamiento de las ecuaciones dinámicas de cualquier
sistema2 , requiere la caracterización de las acciones que recaen sobre los diferen-
tes elementos del mismo.
Con el objeto de introducir la notación utilizada en las diferentes secciones del
capítulo, se propone la siguiente clasificación:

• Acciones de inercia : son aquellas acciones derivadas de las fuerzas y mo-


mentos de inercia de D’ Alembert .

• Acciones de enlace : son aquellas acciones encargadas de mantener las li-


gaduras cinemáticas entre los diferentes elementos del sistema. Se denotan:

Aj (Elemento) ,
y su efecto queda reflejado en las ecuaciones dinámicas a través de las de-
nominadas incógnitas de enlace, .
En el caso particular de sistemas de sólidos, éstas se subdividen en
◦ Acciones correspondientes a enlaces compatibles con la acotación de
partida.
◦ Acciones correspondientes a enlaces no respetados por la acotación
de partida.
Esta clasificación tiene su importancia cuando se implementan formulacio-
nes de tipo lagrangiano, ya que en estos casos, la contribución de las prime-
ras se anula en virtud de la tercera ley de Newton.

• Acciones constitutivas : son aquellas acciones que vienen caracterizadas


por una ley constitutiva3 y se denotan:

Ane
j (Elemento)

• Otras acciones : son aquellas que no pueden englobarse en ninguno de los


apartados anteriores4 y se denotan de la misma forma que las constitutivas
con el objeto de diferenciarlas de las de enlace.
2
ya sea de partículas ó de sólidos
3
por ejemplo, la gravedad ó un muelle.
4
por ejemplo, la fuerza a aplicar en un actuador para fijar el desplazamiento de una coordenada.
3.2 Principio de las Potencias Virtuales para un sistema de partículas 29

3.2. Principio de las Potencias Virtuales para un sistema de


partículas
Sea un conjunto de N partículas P i , i = 1 . . . N , acotado mediante un
conjunto de coordenadas generalizadas, qi , i = 1 . . . p.
La segunda ley de Newton, aplicada a dicho sistema de partículas, resulta en
un conjunto de 3N ecuaciones escalares de la forma

F (P i ) + F (P i ) = 0 i = 1 . . . N (3.1)
donde

d D (P i )
F (P i ) = −
dt RI
Li
X
F (P i ) = F Aj (P i ) i = 1 . . . N,
j=1

representan5 respectivamente la fuerza de inercia y la resultante de todas las


acciones Aj , j = 1 . . . Li sobre la partícula P i .
Las ecuaciones anteriores forman un conjunto suficiente y completo para des-
cribir la dinámica de cualquier sistema mecánico.
El principio de D’ Alembert para una partícula P i , se puede expresar mediante
la ecuación escalar

F (P i ) · Vżv (P i ) + F (P i ) · Vżv (P i ) = 0 (3.2)


v
donde Vż (P i ) es un vector arbitrario cualquiera al que suele atribuirse el sig-
nificado físico de velocidad, por lo que se denomina velocidad virtual de la partí-
cula P i .


d
5
D (Pi ) = m (Pi )· VRI (Pi ) es el momento lineal de la partícula Pi , mientras que d t RI
representa el operador derivada total respecto al tiempo, relativo a la Referencia Inercial, RI .
30 Dinámica

v
Normalmente, Vż (P i ) se expresa en términos del grupo de pseudo-
velocidades virtuales ż v , con lo que adopta una forma general del tipo

nz
X
v
V ż (P i ) = dij (q, t) żjv = Di (q, t) ż v
j=1
Xnz
4 ∂ VRI (P i ) v
= żj (3.3)
∂ żj
j=1

donde

• dij (q, t) representa un vector columna (3, 1) que en general depende de


las coordenadas de partida6 , q, y del tiempo, t.
• Di es una matriz (3, nz ) con elementos de la forma dij (q, t).

∂ Vż (P i )
Di =
∂ ż

Denotando los sumandos que aparecen en la ecuación 3.2 como potencia vir-
tual, v Ẇz (P i ), de las fuerzas de inercia sobre P i y potencia virtual, v Ẇż (P i ), de
las acciones sobre P i respectivamente, ésta ecuación se expresa

v
Ẇż (P i ) + v Ẇż (P i ) = 0 (3.4)

donde el subíndice ż hace referencia a un grupo arbitrario de pseudo-


velocidades.
La ecuación 3.4, extendida al sistema completo, deriva en el Principio de
D’ Alembert ó Principio de las Potencias Virtuales para un sistema de partículas,

v
Ẇż (Sist) + v Ẇż (Sist) = 0, (3.5)

donde

X
N
v
Ẇż (Sist) = F (P i ) · Vżv (P i )
i=1

6
En principio, la única condición exigida para el grupo de coordenadas q, es que éstas sean
capaces de representar suficientemente el movimiento del mecanismo.
3.2 Principio de las Potencias Virtuales para un sistema de partículas 31

y donde

N
X
v
Ẇż (Sist) = F (P i ) · Vżv (P i )
i=1

Si el conjunto de pseudo-velocidades virtuales es suficiente para representar la


cinemática del sistema en cierto instante de tiempo, del principio anterior puede
obtenerse un conjunto completo de ecuaciones dinámicas que permiten describir
el movimiento del sistema.
En particular, las ecuaciones 3.1 pueden obtenerse a partir de la ecuación 3.5
utilizando un conjunto de velocidades virtuales apropiadas.

3.2.1. Principio de las Potencias Virtuales Sistematizado para un sistema de


partículas
Partiendo de la ecuación 3.3, en la que la velocidad virtual de una partícula se
expresa en función de un grupo arbitrario de pseudo-velocidades, puede definirse
la Velocidad Virtual Parcial de una partícula P i respecto a la j-ésima pseudo-
velocidad, żj , como

∂ VRI (P i ) v
Vżvj (P i ) = żj = dij (z, t) żjv (3.6)
∂ żj

Análogamente, y teniendo en cuenta la definición de potencia virtual presen-


tada en el apartado anterior, se define la Potencia Virtual Parcial de la fuerza
F (P i ), actuante sobre la partícula P i respecto a la j-ésima pseudo-velocidad,
żj , como

v
Ẇżj (P i ) = F (P i ) · dij (z, t) żjv (3.7)

y de forma idéntica, la Potencia Virtual Parcial de inercia actuante sobre la


partícula P i respecto a la pseudo-velocidad j-ésima, żj , se define entonces como

v
Ẇżj (P i ) = F (P i ) · dij (q, t) żjv (3.8)
32 Dinámica

Atendiendo a las definiciones presentadas en las ecuaciones 3.7 y 3.8, la ecua-


ción 3.5 se traduce en

N X
X nz N X
X nz
v v
Ẇżj (P i ) + Ẇżj (P i ) = 0
i=1 j=1 i=1 j=1
N X
X nz N X
X nz
F (P i ) · dij żjv + F (P i ) · dij żjv = 0 (3.9)
i=1 j=1 i=1 j=1

donde 3.9 representa una ecuación escalar que matricialmente adopta la forma

X
N N
X 
 T  T  T
ż v
Di F (P i ) + Di F (P i ) = 0
i=1 i=1
 T
 T  T ∂ Vż (P i )
Di = Di (q, t) =
∂ ż
(3.10)

Llegados a este punto, resulta evidente que si las pseudo-velocidades ż v son


independientes, la ecuación escalar anterior se traduce en el sistema

N 
X T N 
X T
∂ Vż (P i ) ∂ Vż (P i )
F (P i ) + F (P i ) = 0 (3.11)
∂ ż ∂ ż
i=1 i=1

Introduciendo el concepto de fuerza generalizada en términos de las pseudo-


velocidades ż, la ecuación anterior se escribe

N
X N
X
F
Fż (P i ) + F
Fż (P i ) = 0,
i=1 i=1

o en forma compacta

FżSist + F
F FżSist = 0, (3.12)
3.2 Principio de las Potencias Virtuales para un sistema de partículas 33

E CUACIONES DE L AGRANGE PARA UN SISTEMA DE PARTÍCULAS

Si la cinemática virtual en términos de las pseudo-velocidades ż se sus-


tituye por una cinemática virtual basada en las velocidades generalizadas de
partida, q̇j , j = 1 . . . p, se obtienen las Ecuaciones de Lagrange para el sistema
de partículas.
La velocidad real, VRI (P i ), de una partícula P i puede expresarse como

p
X ∂ ORI P i ∂ ORI P i
VRI (P i ) = q̇j + (3.13)
∂ qj ∂t
j=1 RI RI

donde RI representa la referencia inercial y ORI su origen.


v
Considerando el sistema virtualmente detenido7 , la velocidad virtual Vq̇ (P i )
de una partícula P i , teniendo en cuenta las dependencias anteriores se expresa:

p
X
∂ ORI P i
V v q̇jv .
q̇ (P i ) = (3.14)
∂ qj RI
j=1

Alternativamente, si se deriva la expresión 3.13 respecto a las velocidades


generalizadas se obtiene

p
v
X ∂ VRI (P i ) v
V q̇ (P i ) = q̇j (3.15)
∂ q̇j
j=1

Así, se define la velocidad virtual parcial de la partícula P i con respecto a la


velocidad generalizada q̇j como
∂ VRI (P i ) v
Vq̇vj (P i ) = q̇j
∂ q̇j

Haciendo uso de las expresiones anteriores, puede ahora definirse el concepto


de potencia virtual parcial de las fuerzas exteriores, v Ẇq̇j (Sist), respecto a la
velocidad generalizada q̇j como

N
X
v ∂ VRI (P i ) v
Ẇq̇j (Sist) = F (P i ) q̇j
∂ q̇j
i=1

Fq̇jSist q̇jv
= F (3.16)
7
tiempo, t = Cte.
34 Dinámica

donde F Fq̇jSist es un escalar que físicamente representa la fuerza generalizada


parcial sobre el sistema de partículas Sist en la dirección de la velocidad genera-
lizada q̇j .
Por su parte, la potencia virtual parcial de las fuerzas de inercia, v Ẇq̇j (Sist),
respecto a la velocidad generalizada q̇j se define de forma análoga según

N
X
v ∂ VRI (P i ) v
Ẇq̇j (Sist) = F (P i ) q̇j
∂ q̇j
i=1

Fq̇jSist q̇jv
= F (3.17)

donde FFq̇jSist representa la fuerza generalizada de inercia sobre el sistema de


partículas Sist en la dirección de la velocidad generalizada q̇j .
Atendiendo a las definiciones anteriores, la ecuación 3.5 puede ahora expre-
sarse

N  T  T !
 T X ∂ VRI (P i ) ∂ VRI (P i )
q̇ v F (P i ) + F (P i ) = 0
∂ q̇ ∂ q̇
i=1
(3.18)
donde resulta evidente que, si las velocidades virtuales, q̇ v , son independien-
tes, esta ecuación escalar se traduce en el sistema8

N 
X T  T
∂ VRI (P i ) ∂ VRI (P i )
F (P i ) + F (P i ) = 0 (3.19)
∂ q̇ ∂ q̇
i=1

Recuperando la definición de fuerza generalizada presentada en las ecuaciones


3.16 y 3.17, el sistema de ecuaciones anterior puede volverse a escribir en la forma

Fq̇ Sist + F
F Fq̇ Sist = 0 (3.20)

Nótese que, aunque el conjunto de velocidades virtuales, q̇ v , sea dependiente, dichas ve-
8

locidades pueden considerarse como independientes siempre que la contribución de las acciones
de enlace que aseguran dichas dependencias aparezca en la ecuación. El conjunto de ecuaciones
resultante suele denominarse Ecuaciones de Lagrange sin multiplicadores.
3.3 Pcpo. de las Potencias Virtuales para sistemas de sólidos rígidos 35

E CUACIONES DE N EWTON PARA UN SISTEMA DE PARTÍCULAS

Si como pseudo-velocidades ż se eligen las velocidades cartesianas de cada


una de las partículas en una determinada base de proyección 9 ,
 
ẋj
ẋj =  ẏj  j = 1 . . . N, (3.21)
żj

se obtienen las ecuaciones de Newton para un sistema de partículas,


    
F (P 1 ) F (P 1 ) 0
 ..   ..   .. 
 .   .   . 
  
 F (P i) + F (P i )   
 =  0 , (3.22)
 .   ..   
 ..   .   ... 
F (P N ) F (P N ) 0

donde cabe notar que

∂ VRI (P i )
∂ ẋj
= I3 j = 1...N (3.23)

3.3. Principio de las Potencias Virtuales para un sistema de só-


lidos rígidos
Desde el punto de vista de la Cinemática Analítica, un sólido rígido puede
entenderse como un conjunto de partículas o puntos materiales que sostienen una
serie de restricciones geométricas.
En este contexto, si las velocidades virtuales de los diferentes puntos de un
sólido se eligen de tal forma que se mantiene la condición de sólido rígido, la
v
velocidad virtual Vż (P i ) de un punto P i , perteneciente al sólido Solk se expresa
según

Vżv (P i ) = Vżv (Bk ) + Ωżv (Solk ) ∧ Bk P i (3.24)


v v
donde Ωż (Solk ) se define de forma análoga a la presentada en 3.3 para Vż (P i ).
9
Nótese que, estas pseudo-velocidades son diferentes de las derivadas de las coordenadas ge-
neralizadas, q̇ , empleadas para posicionar el sistema de partículas en el contexto cinemático.
36 Dinámica

Así pues, dado un sistema constituido por M sólidos rígidos Solk , k = 1 . . . M


sobre los que respectivamente actúan las acciones Aj (Solk ), j = 1 . . . Lk , la po-
tencia virtual asociada a una determinada acción puede escribirse 10

Aj (Solk ) Aj (Solk ) Aj (Solk ) v


v v
Ẇż =F · Vż (Bk ) + M k
· Ωż (Solk ) . (3.25)

Como se aprecia en las ecuaciones, la potencia virtual de una determinada ac-


ción Aj sobre el sólido Solk queda definida en términos de la fuerza y el momen-
to de dicha acción respecto a un punto del sólido Bk . Esta combinación fuerza-
momento, denominada Torsor, será representada mediante la expresion

h iT
Aj (Solk ) Aj (Solk )
F k
, M k

Análogamente, la potencia virtual de las fuerzas de inercia actuantes sobre el


sólido Solk se puede expresar

v
Ẇż (Solk ) = F (Solk ) · Vżv (Bk ) + M k (Solk ) · Ωżv (Solk ) (3.26)

Por su parte, el torsor de inercia,

h iT
F (Solk ), M k (Solk )

se expresa en función de las derivadas del momento lineal, D , y el momento


cinético, HBk , de la siguiente forma


d D (Solk )
F (Solk ) = −
dt RI

d H k (Solk ) d D (Solk )

M k (Solk ) = − − Bk Gk ∧ (3.27)


dt dt
RI RI

10
haciendo la suma de potencias virtuales para todas las partículas del sólido rígido y empleando
la ecuación 3.24
3.3 Pcpo. de las Potencias Virtuales para sistemas de sólidos rígidos 37

donde

• D (Solk ) es el momento lineal del sólido Solk


Z
D (Solk ) = VRI (P k ) dm = mSolk VRI (Gk ) (3.28)
Solk

• H k (Solk ) es el momento cinético del sólido Solk definido en su centro de




gravedad, Gk

Z
H k (Solk ) =
 Gk P k ∧ VRtGk (P k ) dm
Solk
Z
= −Gk P k ∧ Gk P k ∧ ΩRI (Solk ) dm
Solk
= II 

k
(Solk ) ΩRI (Solk ) (3.29)

• mSolk es la masa total del sólido Solk .

• P k es un punto perteneciente cinemáticamente al sólido Solk .

• RtGk es una referencia translacional con el punto Gk .

• II 

k
(Solk ) es el tensor de inercia del sólido Solk respecto al punto Gk .

Teniendo en cuenta las premisas anteriores, el principio de las potencias vir-


tuales para el sistema completo de sólidos se expresa

v
Ẇż (Sist) + v Ẇż (Sist) = 0 (3.30)
donde
M
X
v
Ẇż (Sist) = F (Solk ) · Vżv (Bk ) + M k (Solk ) · Ωżv (Solk )
k=1
Lk
M X
X
v
Ẇż (Sist) = F Aj (Solk ) · Vżv (Bk ) + M Akj (Solk ) · Ωżv (Solk )
k=1 j=1
(3.31)
38 Dinámica

3.3.1. Principio de las Potencias Virtuales sistematizado para un Sistema de


Sólidos Rígidos
Si la cinemática del sistema se expresa en función de un determinado conjunto
de nz pseudo-velocidades żj , j = 1 . . . nz , aplicando lo desarrollado en la
sección anterior y teniendo en cuenta el concepto de torsor, la ecuación 3.30 se
expresa:

XM   T  
 v
T ∂ VRI (Bk ) F (Solk )
ż +
k=1
∂ ż ΩRI (Solk ) M k
(Solk )
XM X Lk   T " #!
∂ VRI (Bk ) F Aj (Solk )
+ Aj (Solk ) =0 (3.32)
k=1 j=1
∂ ż Ω RI (Solk ) M k

donde resulta evidente que, si las pseudo-velocidades son independientes, esta


ecuación escalar se traduce en el sistema

XM   T  
∂ VRI (Bk ) F (Solk )
+
k=1
∂ ż ΩRI (Solk ) M k (Solk )
Lk 
M X
X  T " #
∂ VRI (Bk ) F Aj (Solk )
+ =0 , (3.33)
k=1 j=1
∂ ż ΩRI (Solk ) M Aj (Solk ) k

que de forma compacta se escribe

M
X Lk
M X
X
Solk Aj (Solk )
F
Fż + F
Fż =0 .
k=1 k=1 j=1
3.3 Pcpo. de las Potencias Virtuales para sistemas de sólidos rígidos 39

E CUACIONES DE L AGRANGE PARA UN S ISTEMA DE S ÓLIDOS R ÍGIDOS


Si el movimiento virtual de los sólidos del sistema se expresa en función de
las coordenadas generalizadas qj , j = 1 . . . p y sus correspondientes derivadas
q̇j , j = 1 . . . p, la ecuación 3.32 adopta la forma

XM   T  
 v
T ∂ VRI (Bk ) F (Solk )
q̇ +
k=1
∂ q̇ ΩRI (Solk ) M k (Solk )
XM X Lk   T " #!
∂ VRI (Bk ) F Aj (Solk )
+ Aj (Solk ) =0 (3.34)
k=1 j=1
∂ q̇ Ω RI (Solk ) M k

Si las velocidades generalizadas son independientes, la ecuación escalar ante-


rior se traduce en el sistema11

XM   T  
∂ VRI (Bk ) F (Solk )
k=1
∂ q̇ ΩRI (Solk ) M k (Solk ) +
M X
X Lk   T " #
∂ VRI (Bk ) F Aj (Solk )
+ =0 (3.35)
j=1
k=1
∂ q̇ ΩRI (Solk ) M Akj (Solk )

que en forma abreviada se escribe:

M
X M
X A(Solk )
Fq̇ Solk +
F F
Fq̇ =0 (3.36)
k=1 k=1

Si las acciones sobre los sólidos se clasifican atendiendo a lo presentado en la


sección 3.1.1, la ecuación 3.36 puede volverse a escribir como

Fq̇ ne + F
Fq̇ Sist + F
F Fq̇  = 0 (3.37)

11
Al igual que ocurría en el caso de sistemas de partículas, si el conjunto de velocidades virtua-
les, q̇ v , es dependiente, dichas velocidades pueden considerarse como independientes siempre
que la contribución de las acciones de enlace que aseguran dichas dependencias aparezca en la
ecuación.
40 Dinámica

donde ahora

M
X
Fq̇ Sist =
F Fq̇ Solk
F
k=1

Lk ne Lk 
M X
X M X
X
Ane
j (Solk ) Aj (Solk )
Fq̇ ne =
F F
Fq̇ , F
Fq̇ = 
F
Fq̇
k=1 j=1 k=1 j=1

Al considerar todas las velocidades generalizadas como independientes, puede


que algunos de los enlaces sean violados. En ese caso, la contribución correspon-
diente a las acciones de enlace, A (Solk ) , aparece en las ecuaciones asegurando
dinámicamente el cumplimiento de dichos enlaces.
Como consecuencia de la aplicación del principio de acción y reacción al con-
junto de las acciones de enlace, las únicas aportaciones no nulas al vector de fuer-
za generalizada son aquellas correspondientes a los enlaces no respetados por la
acotación de partida, es decir:

nr
M L
X X k
Ajnr (Solk ) nr
Fq̇  =
F F
Fq̇ = F
Fq̇ .
k=1 j=1

Así, la ecuación 3.36 representa un sistema en el que, como incógnitas dinámi-


cas, aparecen las aceleraciones generalizadas, q̈ , y aquellas incógnitas de enlace,
 , que sirvieron para caracterizar los enlaces no respetados por la acotación de
partida.
La forma en que en este apartado se presentan las ecuaciones de Lagrange es
conocida como Ecuaciones de Lagrange sin Multiplicadores. En la formulación
clásica12 , la fuerza generalizada asociada a los torsores de enlace de tipo nr
(no respetados) se sustituye por la asociada a los denominados Multiplicadores de
Lagrange, λ , según

Fq̇ nr + φq λ = 0
T
F (3.38)

Si los torsores de los cuales deriva el primer sumando se caracterizan en ba-


se a un número mínimo de incógnitas de enlace, la ecuación 3.38 establece una
relación biunívoca13 entre dicho grupo de incógnitas,   , y los multiplicadores
de Lagrange, λ .
12
descrita en la sección 3.5.
13
a no ser que existan redundancias en las condiciones de enlace involucradas.
3.3 Pcpo. de las Potencias Virtuales para sistemas de sólidos rígidos 41

E CUACIONES DE N EWTON -E ULER PARA UN SISTEMA DE SÓLIDOS RÍGIDOS

En este caso, para cada uno de los sólidos del sistema, Solk , k = 1 . . . M , se
elige un grupo de pseudo-velocidades

 T
ż k = vxk vyk vzk ωxk ωyk ωzk
 T
de tal forma que VRI (Bk ) = vxk vyk vzk es la velocidad del punto
Bk , cinemáticamente perteneciente al sólido Solk y expresado en una determi-
 T
nada base de proyección, mientras que ΩRI (Solk ) = ωxk ωyk ωzk es la
velocidad angular del sólido Solk .
De esta forma, a partir de la ecuación 3.32, se obtienen14 las ecuaciones de
Newton-Euler para los sólidos Solk , k = 1 . . . M

  " 
# " ne
#  
F (Solk ) F A (Solk ) F A (Solk ) 0
M k (Solk ) + 
M Ak (Solk )
+ ne
M Ak (Solk )
=
0
(3.40)

donde

• El torsor de inercia del sólido Solk ya fué definido en la ecuación 3.27.

• Las acciones de enlace sobre el sólido Solk se caracterizan en términos de


los diferentes torsores de enlace según
" 
# Lk  "  #
F A (Solk ) X F Aj (Solk )
 = A (Sol ) (3.41)
M Ak (Solk ) j =1 M kj k
14
Frecuentemente, los torsores asociados a una determinada acción A j (Solk ) se conocen en un
punto inapropiado para el planteamiento de las ecuaciones. Así, suponiendo que la acción anterior
estuviese definida en un punto Bk y se necesitase caracterizar el efecto resultante sobre B 0k , es
claro que las expresiones

Aj (Solk ) Aj (Solk ) Aj (Solk )


F k
= F 0
k
=F
A (Sol k) Aj (Solk ) Aj (Solk )
M k
j
= Bk B 0k ∧ F +M 0
k
(3.39)

resultan equivalentes, lo cual resuelve de forma sencilla el problema de translación de torsores.


42 Dinámica

• Las acciones constitutivas y de otros tipos sobre el sólido Solk se caracteri-


zan en términos de los diferentes torsores de no-enlace según
" ne
# Lkne " ne
#
F A (Solk ) X F Ajne (Solk )
ne = Ane (Sol ) (3.42)
M Ak (Solk ) jne =1 M kjne k

En este caso, al estudiar el equilibrio correspondiente al sólido Solk , los torso-


res de las acciones de enlace, Aj (Solk ), se expresan en términos de las denomi-
nadas incógnitas de enlace,  , mientras que el resto de acciones, A ne jne (Solk ) ,
pueden caracterizarse en función del estado15 del sistema en cada instante de tiem-
po.
Evidentemente, si el movimiento de los sólidos del sistema se expresa en
función de un determinado conjunto, p , de coordenadas generalizadas, q j ,
j = 1 . . . p , y sus correspondientes derivadas q̇j , j = 1 . . . p , la ecuación
3.40 constituye un sistema,

      ne   
F (Sol1 ) F A (Sol1 ) F A (Sol1 ) 0
 M (Sol1 )   A (Sol )   Ane (Sol1 )   
   M 1 1   M 1   0 

1
     

..
+
.. + .. = .. 
 .   .   .   .  (3.43)
 F (SolM ) 
  F A (SolM )   ne   
  0 
A (SolM )
  F
M M (SolM ) 
M AM(SolM )
ne
M AM (SolM ) 0

de 6M ecuaciones con p + n incógnitas dinámicas, donde n es la dimen-


sión de .
Nótese que, en el sistema anterior, algunas de las incógnitas pueden quedar
indeterminadas cuando existen dependencias entre las componentes del vector 
o existen redundancias en las condiciones de enlace.

3.4. Ecuaciones Dinámicas de Enlace


En el planteamiento de las ecuaciones dinámicas por el formalismo de New-
ton-Euler aparecen las denominadas fuerzas y momentos de enlace. Su función
es la de garantizar, desde el punto de vista de la dinámica, el cumplimiento de las
restricciones cinemáticas a las que el sistema mecánico se encuentra sujeto.
 T
15
en este contexto, se entiende por estado al vector x = qT q̇ T .
3.4 Ecuaciones Dinámicas de Enlace 43

Los torsores de enlace (conjuntos de fuerzas y momentos de enlace) se ca-


racterizan haciendo uso de un conjunto de incógnitas denominadas Incógnitas de
Enlace.
Desde un punto de vista más general, la forma que toman los torsores de enlace
en términos de las incógnitas de enlace puede abordarse mediante lo que en esta
Tesis Doctoral se denominan Ecuaciones Dinámicas de Enlace.

3.4.1. Caracterización de enlaces parciales

Enlace Solk
Bk
Bk ∈ Solk
Bj
Solj

Bj ∈ Solj

Figura 3.1: Esquema de un enlace genérico entre los sólidos Solj y Solk

El principio de acción y reacción, aplicado directamente sobre las fuerzas y


momentos asociados a un enlace genérico (figura 3.1) entre los sólidos Solj y Solk
presenta la forma

 
F Aj (k) = −F Ak (j)
A (k) A (j)
M kj = −M kk (3.44)

donde Aj (k) denota la acción de enlace de Solj sobre Solk (acción) y Ak (j)
denota la acción de enlace de Solk sobre Solj (reacción).
Por otra parte, la potencia virtual asociada dicho enlace se expresa

  
v
Ẇjk = v Ẇj (k) + v Ẇk (j) (3.45)
44 Dinámica

donde

• v Ẇj (k) representa la potencia virtual asociada a la acción de Solj sobre
Solk .Para un observador situado en la referencia R , la potencia virtual an-
terior se expresa:
  Aj (k)
v
Ẇj (k) = F Aj (k) · VvR (Bk ) + M k
v
· ΩR (Solk ) (3.46)

siendo Bk un punto considerado cinemáticamente perteneciente al sólido


Solk .

• v Ẇk (j) es la potencia virtual asociada a la acción de Solk sobre Solj y para
un observador situado en la referencia R se define como
  
v
Ẇk (j) = F Ak (j) · VvR (Bj ) + M Ajk (j) · ΩvR (Solj ) (3.47)

siendo Bj un punto considerado cinemáticamente perteneciente al sólido


Solj .

Sustituyendo las definiciones anteriores en la ecuación 3.45 se obtiene


la expresión

  A (k)
v
Ẇjk = F Aj (k) · VvR (Bk ) + M kj · ΩvR (Solk )
A (j) v A (j) v
+ F k · V R (Bj ) + M jk · ΩR (Solj ) (3.48)

Alternativamente16, la potencia virtual asociada al enlace puede expresarse en


términos del movimiento virtual relativo entre los sólidos Solj y Solk según

  Aj (k)
v
Ẇjk = F Aj (k) · VvSolj (Bk ) + M k
v
· ΩSolj (Solk ) (3.49)

La tercera ley de Newton, expresada de forma analítica17 , garantiza que las


v
expresiones anteriores se anulan cuando las velocidades, V R (Bj,k ) , y velocida-
v
des angulares virtuales, ΩR (Solj,k ) , son compatibles con dicho enlace. Es decir,
cuando las velocidades y velocidades angulares virtuales se eligen de tal forma
que el movimiento virtual relativo entre los sólidos Solj y Solk no viola ninguna
de las restricciones impuestas por el enlace, la potencia virtual asociada a dicho
enlace es nula.
16
Basta combinar la definición 3.45 con la ecuación 3.44 y operar de forma conveniente.
17
Referencias [Agu96, Ros00].
3.4 Ecuaciones Dinámicas de Enlace 45

Así pues, la ecuación

 A (k)
F Aj (k) · VvR (Bk ) + M kj · ΩvR (Solk ) +
 
F Ak (j) · VvR (Bj ) + M Ajk (j) · ΩvR (Solj ) = 0 , (3.50)

y la ecuación

 Aj (k)
F Aj (k) · V vSolj (Bk ) + M k
v
· ΩSolj (Solk ) = 0 , (3.51)

pueden emplearse indistintamente para caracterizar la j-ésima acción de en-


lace entre los sólidos Solj y Solk .

3.4.2. Fuerza generalizada asociada a las acciones de enlace


La ecuación 3.50 se extiende al conjunto de acciones de enlace sobre el sistema
según

Lk 
M X
X  Aj (Solk )
F Aj (Solk ) · Vv (Bk ) + M k
v
· Ω (Solk ) = 0 (3.52)
k=1 j=1

v
donde se exige que las velocidades, V (Bk ) , k = 1 . . . M , y velocidades
v
angulares virtuales, Ω (Solk ) , k = 1 . . . M , sean compatibles con los enlaces.

Por otra parte, si la cinemática del sistema se expresa en función de un con-


junto de nz pseudo-velocidades żj , j = 1 . . . nz , la ecuación 3.52 se escribe

Lk   T "  #!


 T XM X
∂ VRI (Bk ) F Aj (Solk )
ż Aj (Solk ) =0 (3.53)
k=1 j=1
∂ ż Ω RI (Solk ) M k

Si las pseudo-velocidades son independientes18 , la ecuación escalar anterior


se traduce en el sistema

XM X Lk   T " Aj (Solk )


#
∂ VRI (Bk ) F
Fż =
F Ω Aj (Solk ) =0 (3.54)
∂ ż RI (Solk ) M
k=1 j=1 k

18
y por tanto compatibles con todos los enlaces
46 Dinámica


donde FFż representa la fuerza generalizada en el grupo de pseudo-
coordenadas ż asociada a las acciones de enlace.
Si, como es habitual, las pseudo-velocidades son elegidas de tal forma que
se violan algunos de los enlaces, la ecuación 3.53 debe ser resuelta junto con un
conjunto de relaciones cinemáticas que aseguran dichos enlaces,

φz ż = 0. (3.55)

Haciendo uso de un conjunto de multiplicadores19 , λi , i = 1 . . . c , las ecua-


ciones 3.54 y 3.55 pueden combinarse para obtener la expresión

XM X Lk   T " Aj (Solk )


#
∂ VRI (Bk ) F T
∂ ż Ω RI (Solk ) M
Aj (Solk ) + φz λ = 0,
k=1 j=1 k

que en forma abreviada se escribe

Fż + φTz λ = 0.
F (3.56)

La bibliografía está llena de referencias en las que se proponen métodos que


permiten determinar las acciones de enlace, o mejor dicho, las incógnitas que se
utilizan para definirlas, , a partir de los multiplicadores de Lagrange, λ. Pero di-
chos métodos presuponen una normalización en la definición de las ecuaciones de
enlace y en la acotación del sistema. En general, si se modifica la forma de acotar
el sistema, o tan sólo la forma de definir las ecuaciones de enlace, el significado
de los multiplicadores cambia.
La ecuación 3.56 permite caracterizar correctamente cualquier acción de en-
lace sin especificar la tipología específica de la misma (rotula, universal,...). Es
decir, en una situación en la que los enlaces se definen a partir de restricciones
cinemáticas, la ecuación 3.56 permite caracterizar los torsores asociados a dichos
enlaces, aún cuando las incógnitas de enlace sean asignadas de forma arbitraria.

3.5. Formulación Clásica de las Ecuaciones de Lagrange para


un sistema de sólidos rígidos
En esta sección, los diferentes términos que aparecen en las ecuaciones diná-
micas de Lagrange se deducirán de forma clásica.
19
penalizadores asociados al error cometido en el cumplimiento de las relaciones cinemáticas.
3.5 Formulación Clásica de las Ecuaciones de Lagrange 47

La fuerza generalizada de inercia se definirá a partir de la Energía Cinética del


sistema, la asociada a las acciones de enlace en términos de los multiplicadores
de Lagrange, y el resto de fuerzas como en las ecuaciones 3.37.

3.5.1. Fuerza Generalizada de las Fuerzas de Inercia en términos de la


Energía Cinética del Sistema
De forma clásica, la fuerza generalizada de inercia se define a partir de la
Energía Cinética del sistema, T (Sist).
La Energía Cinética de un sistema de M sólidos Solk , k = 1 . . . M se obtiene
sumando las contribuciones de cada uno de los sólidos,

1
T (Solk ) = VRI (Gk )T D (Solk ) +
2
1
+ ΩRI (Solk )T H k (Solk ) , (3.57)
2


y en forma matricial se expresa20

 T  
1 VRI (Gk ) D(Solk )
T (Solk ) = .
2 ΩRI (Solk ) H k (Solk )


20
Desarrollando los términos que componen la definición de energía cinética, ésta adopta la
forma general:
 T  
1 VRI (Gk ) VRI (Gk )
T (Solk ) = A (3.58)
2 ΩRI (Solk ) ΩRI (Solk )
donde A es una matriz simétrica de dimensión (6, 6),
 
m I3 0
A = , (3.59)
0 II k
(Solk )
constante cuando la velocidad angular del sólido, ΩRI (Solk ) , se proyecta en la base
solidaria al sólido Solk .
Así, la parcial de T (Solk ) respecto a cualquier velocidad generalizada, q̇j , se expresa como

  T  
∂ T (Solk ) 1 ∂ VRI (Gk )   VRI (Gk )
= A
∂ q̇j 2 ∂ q̇j ΩRI (Solk ) ΩRI (Solk )
 T  
1 VRI (Gk )   ∂ VRI (Gk )
+ A
2 ΩRI (Solk ) ∂ q̇j ΩRI (Solk )
  T  
∂ VRI (Gk )   VRI (Gk )
= A
∂ q̇j ΩRI (Solk ) ΩRI (Solk )

donde se ha tenido en cuenta que la matriz A es simétrica.


48 Dinámica

La parcial de la expresión anterior respecto a las velocidades generalizadas, q̇,


se escribe:

 T   T  
∂ T (Solk ) ∂ VRI (Gk ) D (Solk )
= . (3.60)
∂ q̇ ∂ q̇ ΩRI (Solk ) H k (Solk )


Si se calcula la derivada total respecto al tiempo,

 T   T  
d ∂ T (Solk ) d ∂ VRI (Gk ) D(Solk )
=
dt ∂ q̇ dt ∂ q̇ ΩRI (Solk ) H k (Solk ) + 

  T  
∂ VRI (Gk ) d D(Solk )
+ ,
∂ q̇ ΩRI (Solk ) d t H k (Solk ) 

(3.61)

y se tiene en cuenta que VRI (Gk ) y ΩRI (Solk ) son formas lineales21 en las
velocidades generalizadas,

  T   T
d ∂ VRI (Gk ) ∂ VRI (Gk )
= , (3.62)
dt ∂ q̇ ΩRI (Solk ) ∂q ΩRI (Solk )
21
Teniendo en cuenta que cualquier velocidad es una expresión lineal en las velocidades gene-
ralizadas,

   
VRI (Gk ) B V (q)
= q̇,
ΩRI (Solk ) B Ω (q)
la parcial de dicha expresión respecto a q̇ se escribe

   
∂ VRI (Gk ) B V (q)
= ,
∂ q̇ ΩRI (Solk ) B Ω (q)

de lo cual se deduce que

    
d ∂ VRI (Gk ) ∂ B V (q)
=
dt ∂ q̇ ΩRI (Solk ) ∂q B Ω (q) q̇
 
∂ VRI (Gk )
=
∂ q ΩRI (Solk )
3.5 Formulación Clásica de las Ecuaciones de Lagrange 49

entonces la ecuación 3.61 se convierte en

 T  T   T  
d ∂ T (Solk ) ∂ T (Solk ) ∂ VRI (Gk ) F (Solk )
= −
dt ∂ q̇ ∂q ∂ q̇ ΩRI (Solk ) M k (Solk )
(3.63)

donde, si se tiene en cuenta la definición de fuerza generalizada de inercia


presentada en la sección 3.3.1, resulta obvio que

 T  T !
d ∂ T (Solk ) ∂ T (Solk )
F
Fq̇ (Solk ) = − − (3.64)
dt ∂ q̇ ∂q

3.5.2. Expresión de las Ecuaciones de Lagrange en términos de la Energía


Cinética del Sistema
Haciendo uso de la ecuación 3.64, el principio de las potencias virtuales para
el sólido Solk puede escribirse en términos de la energía cinética como

"  T  T X Lk
#
 T d ∂ T (Solk ) ∂ T (Solk ) Aj (Solk )
q̇ v − + + F
Fq̇ = 0 (3.65)
dt ∂ q̇ ∂q j=1

donde el superíndice Aj (Solk ) hace referencia a cualquier acción sobre el


sólido Solk .
La ecuación 3.65, extendida al sistema completo de sólidos, Solk ,
k = 1 . . . M , se escribe

"  T  T #
 T d ∂ T (Sist) ∂ T (Sist) A(Sist)
q̇ v − + +F
Fq̇ =0 (3.66)
dt ∂ q̇ ∂q

Si las velocidades generalizadas virtuales se consideran independientes, la


ecuación 3.66 se convierte en el sistema

 T  T !
d ∂ T (Sist) ∂ T (Sist) A(Sist)
− − +F
Fq̇ =0 (3.67)
dt ∂ q̇ ∂q
50 Dinámica

donde

• T (Sist) representa la Energía Cinética del Sistema

X
M
T (Sist) = T (Solk ) (3.68)
k=1

A(Sist)
• F
Fq̇ es la fuerza generalizada asociada al conjunto de todas las accio-
nes sobre el sistema

Lk
M X
X
A(Sist) Aj (Solk )
F
Fq̇ = F
Fq̇ (3.69)
k=1 j=1

Si las acciones sobre los sólidos se clasifican atendiendo a lo presentado en


la sección 3.1.1, el término anterior puede escribirse como

A(Sist) ne nr
F
Fq̇ =F
Fq̇ +F
Fq̇ (3.70)

donde las fuerzas generalizadas correspondientes a enlaces respetados por


la acotación de partida anulan sus contribuciones en virtud del principio de
acción y reacción.

Como ya se dijo, si al considerar independientes todas las velocidades vir-


tuales se viola alguno de los enlaces, el cumplimiento de dichos enlaces a nivel
dinámico queda garantizado por el término F Fq̇ nr , que a su vez se expresa en
función del subgrupo de incógnitas   .

3.5.3. Ecuaciones de Lagrange con Multiplicadores


Como se ha visto en el apartado anterior, la existencia de relaciones entre las
coordenadas de partida, q , obliga a caracterizar las acciones de enlace vinculadas
a dichas relaciones. Sin embargo, caracterizar los torsores correspondientes a uno
de estos enlaces representa un trabajo extra que, en ocasiones, no aporta nada.
Haciendo uso de la ecuación 3.38, las fuerza generalizada asociada a las ac-
ciones de enlace no respetadas por la acotación de partida, puede expresarse 22 en
términos de los multiplicadores de Lagrange.
3.6 Expresión Matricial de las Ecuaciones de la Dinámica 51

Así, la ecuación 3.67 puede volverse a escribir como

 T  T
d ∂ T (Sist) ∂ T (Sist) T ne
− + − φv λ+F
Fq̇ = 0, (3.71)
dt ∂ q̇ ∂q
T
donde φv λ representa la fuerza generalizada asociada a las acciones de
enlace no respetadas por la acotación de partida.

3.6. Expresión Matricial de las Ecuaciones de la Dinámica


La implementación computacional de las ecuaciones sugiere la expresión de
las mismas en forma matricial.

3.6.1. Expresión Matricial de las Ecuaciones de Lagrange


La mayoría de los autores expresan la ecuación 3.67 en términos de la matriz
de masa, Mqq , del sistema, definida ésta de forma que

1 T
T (Sist) =
2
q̇ Mqq q̇ (3.72)

Teniendo en cuenta lo visto al inicio de la sección 3.5, resulta evidente que

  T    
Solk ∂ VRI (Gk ) m I3 0 ∂ VRI (Gk )
M qq
=
∂ q̇ ΩRI (Solk ) 0 II k (Solk )


∂ q̇ ΩRI (Solk )
(3.73)
donde se aplica que tanto VRI (Gk ) como ΩRI (Solk ) son lineales en q̇.
La matriz de masa global, Mqq , queda definida en términos de las matrices
de masa correspondientes a cada uno de los sólidos del sistema según

M
X Solk
Mqq = Mqq (3.74)
k=1

donde conviene apreciar que la matriz anterior es cuadrada de dimensión p,


simétrica, puesto que todas las submatrices que aparecen en la ecuación 3.74 lo
son, y semidefinida23 positiva, puesto que la energía cinética es siempre ≥ 0.
22
La demostración puede encontrarse en la referencia [Sha98]
23
podrían aparecer términos nulos en la diagonal principal.
52 Dinámica

E XPRESIÓN PARA LA FUERZA GENERALIZADA DE INERCIA EN TÉRMINOS DE


LA MATRIZ DE MASA

Teniendo en cuenta la ecuación 3.64, e introduciendo en ésta la definición de


matriz de masa, la fuerza generalizada de inercia se escribe

   
˙ 1 ∂
F
Fq̇ = − Mqq q̈ + M qq q̇ − q̇ T
2 ∂q
Mqq q̇ (3.75)

donde se aplica que

 T
d ∂ T (Sist) ˙
dt ∂ q̇
= Mqq q̈ + M qq q̇
p
" #
X ∂
= Mqq q̈ +
∂ qi
Mqq q̇i q̇
i=1

y que la parcial de T (Sist) respecto a q puede calcularse coordenada a coor-


denada empleando la equivalencia
 
∂ T (Sist) 1 ∂
∂ qi
= q̇ T
2 ∂ qi
Mqq q̇. (3.76)

E XPRESIÓN PARA LA FUERZA GENERALIZADA DE ENLACE

En este caso, la contribución al vector de fuerza generalizada de los torsores


asociados a enlaces no compatibles con la acotación de partida se expresa hacien-
do uso de la ecuación 3.38 según

T nr
φq λ = −F
Fq̇
donde el vector de multiplicadores de Lagrange, λ, sustituye al subgrupo de
incógnitas de enlace  .
3.6 Expresión Matricial de las Ecuaciones de la Dinámica 53

E XPRESIÓN PARA LAS ECUACIONES DINÁMICAS EN TÉRMINOS DE LA MATRIZ


DE MASA

Empleando la definición de fuerza generalizada de inercia propuesta en este


mismo apartado, la ecuación de Lagrange se escribe en términos de la matriz de
masa del sistema como

h i  q̈ 
Mqq T
φv λ
=F Fq̇ q̇
Fq̇ ne + F (3.77)
| {z }
Qq

donde

• F
Fq̇ representa la contribución de las fuerzas Centrífugas y de Coriolis
   
q̇ ˙ 1 ∂
F
Fq̇ = − Mqq q̇ − q̇ T
2 ∂q
Mqq q̇ (3.78)

Fq̇ ne hace referencia a cualquier fuerza generalizada que no sea de enlace.


• F

Lk
M X
X
ne Ane
j (Solk )
F
Fq̇ = F
Fq̇ (3.79)
k=1 j=1

C ONSIDERACIONES FINALES

El sistema de ecuaciones 3.77 debe completarse con las ecuaciones de enlace


para aceleraciones, de tal forma que el bloque de ecuaciones
" T
#  " #
Mqq φv q̈
=
Qq
(3.80)
˙
− φ q̇ − ḃv
φv 0 λ
v

representa un sistema de dimensión (p + c, p + c) donde la matriz que aparece


acompañando a las p + c incógnitas dinámicas es simétrica , puesto que Mqq
lo es y regular, siempre que la matriz φv sea de rango máximo24 .
24
en el caso de introducir ecuaciones redundantes, la matriz φv no tiene rango máximo.
Esto no supone un problema de naturaleza física, pero desde un punto de vista numérico, deberá
utilizarse un solver capaz de resolver sistemas de ecuaciones indeterminados. La indeterminación
afectará exclusivamente al subconjunto de multiplicadores de Lagrange asociados a las ecuaciones
redundantes.
54 Dinámica

3.6.2. Expresión Matricial de las Ecuaciones de Newton-Euler


Como ya se ha dicho en apartados anteriores, el formalismo de Newton-Euler
resulta en un sistema de 6M ecuaciones con q̈ y  como incógnitas dinámicas.
En este caso, el equilibrio dinámico se estudia para cada sólido, lo cual exige
caracterizar todos los términos de la ecuación 3.40 en función de las incógnitas
dinámicas.

E XPRESIÓN PARA EL TORSOR DE INERCIA DEL SÓLIDO Solk


Teniendo en cuenta que tanto la velocidad, VRI (Gk ), como la velocidad angu-
lar, ΩRI (Solk ) son expresiones lineales en las velocidades generalizadas, el torsor
de inercia del sólido Solk se expresa

    
F (Solk ) d m I3 0 VRI (Gk )
= −
M k (Solk )


dt 0 II k (Solk )

ΩRI (Solk )
    
d m I3 0 ∂ VRI (Gk )
= − q̇
dt 0 II k (Solk ) ∂ q̇ ΩRI (Solk )


(3.81)

y si los términos del segundo miembro se agrupan de forma conveniente, la


ecuación anterior puede volverse a escribir como
   
F (Solk ) Solk ˙ Solk
M k (Solk )

=− M zq
q̈ + Mzq q̇ (3.82)

donde
Solk
• Mzq es una matriz de dimensión (6, p) que representa la matriz de
masa del sólido Solk
   
Solk m I3 0 ∂ VRI (Gk )
M zq
=
0 II k (Solk )


∂ q̇ ΩRI (Solk )
(3.83)

• el segundo sumando de la ecuación 3.82 representa la fuerza de Centrífuga


y de Coriolis sobre Solk ,

q̇ ˙ Solk q̇,
F
Fż,Solk
=− M
zq
(3.84)
3.6 Expresión Matricial de las Ecuaciones de la Dinámica 55

y donde

p
Solk X ∂
˙ = Mzq
Solk
q̇i .
Mzq ∂ qi
(3.85)
i=1

E XPRESIÓN QUE CARACTERIZA EL CONJUNTO DE ACCIONES DE ENLACE SO -


BRE Solk

Teniendo en cuenta que cualquier acción de enlace es lineal en las incógnitas


Fż , sobre Solk se
de enlace, el torsor asociado a todas las acciones de enlace, F
expresa según

Lk  "  #

X F Aj (Solk ) Solk
F
Fż,Sol = A (Sol ) =− Vzq  (3.86)
k
j=1 M kj k


E XPRESIÓN QUE CARACTERIZA EL CONJUNTO DE ACCIONES DE NO - ENLACE


SOBRE Solk
ne
El torsor asociado a todas las acciones de no-enlace25 , F
Fż , sobre el sólido
Solk se calcula en función del estado del sistema como

" # ne
Lk " Ane
#
Ane (Solk ) X j (Solk )
ne F F
F
Fż,Sol = ne = Ane (Sol ) (3.87)
k
M Ak (Solk )


j=1 M kj k


E XPRESIÓN PARA LAS ECUACIONES DINÁMICAS

Una vez desarrolladas las expresiones para los torsores de inercia y de enlace,
la ecuación 3.40 puede reescribirse como

h i 
Solk Solk q̈ ne ˙ Solk
M V =F
Fż,Solk − M q̇ (3.88)
zq zq  zq

Extendiendo esta idea al sistema de M sólidos se obtiene un sistema de


dimensión (6M, p + n )

h i 
q̈ ne ˙
Mzq Vzq 
=F
Fż − M zq q̇ (3.89)
| {z }
Qz
25
constitutivas y de otros tipos
56 Dinámica

donde

• Mzq es la matriz de masa del sistema,


 Sol1


Mzq 
 .. 
 . 
 Solk 
Mzq =
 Mzq 

(3.90)
 .. 
 . 
SolM
Mzq
Fż es la fuerza generalizada de enlace, cuya expresión en términos de
• F Vzq
y  resulta

   Sol1


F
Fz,Sol1 
Vzq 
 ..   .. 
 .   . 
 
Fż = − Vzq
F 
= F

Fz,Solk  = −

Solk
Vzq 
 (3.91)
  
 ..   .. 
 .   . 

F
Fz,SolM Vzq
SolM

Fżne es la fuerza generalizada asociada a otras acciones,


• F
 ne 
F
Fż,Sol1
 .. 
 . 
ne  ne 
Fż = 
F  F
Fż,Solk 
 (3.92)
 .. 
 . 
ne
F
Fż,SolM


• FFż es la fuerza generalizada asociada a las fuerzas Centrífugas y de Co-
riolis, cuya expresión en términos de M˙
zq y q̇ resulta

   Sol1 
q̇ ˙
F
Fz,Sol1 
M zq 
 ..   .. 
 .   . 
   
 
Fżq̇ = − M
˙ q̇ Solk
F q̇ =  F
F  = − ˙  q̇
zq  z,SolK  

M zq 

(3.93)
 ..   .. 
 .   . 
q̇ ˙ SolM
F
Fz,SolM M zq
3.6 Expresión Matricial de las Ecuaciones de la Dinámica 57

C ONSIDERACIONES FINALES

El sistema 3.89 se completa con las derivadas de las ecuaciones de restricción


de tal forma que el conjunto de ecuaciones
" #  " #
Mzq Vzq q̈
=
Qz
(3.94)
˙
φv 0  − φ q̇ − ḃv
v

representa un sistema de dimensión (6M + c, p + n ).

La compatibilidad del sistema anterior puede explicarse teniendo en cuenta


que, cada incógnita de enlace puede asociarse a la eliminación de un grado de
libertad del sistema de sólidos sin enlaces, de forma que n = 6M − n = 6M −
(p − c).
Así, en una situación en la que todos los enlaces son caracterizados en base
a un número mínimo de incógnitas, las 6M + c ecuaciones que componen el
sistema 3.94 resolverán las p + n = 6M + c incógnitas del problema dinámico.
Si existen redundancias en las condiciones de enlace, el número de incógnitas
de enlace será, en general, mayor que 6M − n. El sistema 3.94 es indetermi-
nado, pero la indeterminación sólo afecta a las incógnitas de enlace que impiden
movimientos de forma redundante.
Si se desea, para eliminar las posibles redundancias asociadas a los enlaces,
pueden introducirse ecuaciones adicionales de la forma
 
r1 ()
 .. 
R= . = R  = 0, (3.95)
rn −(6M −n) ()

donde n − (6M − n) representa el número de incógnitas de enlace en exceso.

3.6.3. Expresión matricial de las ecuaciones dinámicas de enlace


Teniendo en cuenta que la fuerza generalizada asociada a las acciones de en-
Fż , es lineal en , siempre puede encontrarse una matriz
lace, F


Vzq  = −F
Fż , (3.96)
58 Dinámica

cuya definición se corresponde con la derivada parcial:

M Lk 
  T " 
#
∂ XX ∂ VRI (Bk ) F Aj (Solk )
Vzq =−
∂  k=1 j=1 ∂ ż ΩRI (Solk ) A (Sol ) . (3.97)
M j k 

Así, la ecuación 3.56 se expresa en forma matricial como

h i  
T
Vzq − φz λ
=0 (3.98)

Un algoritmo específico para plantear estas ecuaciones con z = q será des-


crito en el capítulo 4 (implementación).

3.6.4. Relación entre los formalismos de Lagrange y Newton-Euler


Si se compara la matriz de masa de un determinado sólido Solk definida en
la ecuación 3.83 con su equivalente en el formalismo de Lagrange, 3.73, se hace
patente la siguiente relación

Solk Sol
Mqq = T RSol
zq Mzq k k
(3.99)

donde

  T
Solk ∂ VRI (Gk )
TR zq
=
∂ q̇ ΩRI (Solk )
. (3.100)

Extendiendo este razonamiento al sistema de M sólidos, es claro que

M
X Sol
Mqq = T RSol
zq Mzq k k

k=1

= T Rzq Mzq ,

donde T Rzq es la matriz de dimensión (p, 6M ) :

h i
Sol1 Solk SolM
T Rzq = TR zq
... TR zq
... TR zq
, (3.101)
3.7 Expresión Matricial General de las Ecuaciones de la Dinámica 59

Operando de forma análoga con el torsor asociado a las acciones de enlace, se


obtiene la fuerza generalizada asociada a las acciones de enlace,

M
X
 
F
Fq̇ = T RSol
zq
F
Fż,Sol
k
k
Fż
= T Rzq F
k=1

= − T Rzq Vzq . (3.102)

Comparando este término con su equivalente en la formulación clásica de La-


grange se obtiene la relación entre las incógnitas asociadas a los enlaces no respe-
tados por la acotación de partida y los multiplicadores Lagrange,

T
Vqz − φv λ=0 , (3.103)

donde Vqz es la matriz de dimensión (p, n ) , en general no cuadrada y no


inversible:

Vqz = T Rzq Vzq (3.104)

Por último, la fuerza generalizada asociada a las fuerzas Centrífugas y de Co-


riolis se escribe

M
X
Fq̇ q̇ =
F T RSol
zq
F q̇
Fż,Sol
k
k
Fżq̇
= T Rzq F
k=1

= − ˙
T Rzq M q̇ (3.105)
zq

3.7. Expresión Matricial General de las Ecuaciones de la Diná-


mica en términos de los Torsores
En el apartado 3.6 se ha descrito de forma detallada la forma matricial que
adoptan las ecuaciones dinámicas. Para ello se ha utilizado definición de matriz de
masa en los contextos de Lagrange y de Newton-Euler. Además se ha establecido
la relación matemática existente entre dichos formalismos.
Análogamente se ha explicado la forma matricial general que pueden adoptar
las ecuaciones dinámicas de enlace, de utilidad para la caracterización automática
de los torsores de enlace.
60 Dinámica

En este aparatado se presenta una expresión matricial de las ecuaciones di-


námicas que incluye todos los formalismos planteables desde el principio de las
potencias virtuales. Se ha tratado de dar la máxima generalidad a la expresión,
introduciendo todos los elementos que pueden aparecer:
• Ecuaciones dinámicas.
• Ecuaciones cinemáticas para aceleraciones.
• Ecuaciones dinámicas de enlace
• Ecuaciones para la eliminación de redundancias.
En este caso, las contribuciones inerciales a las ecuaciones dinámicas se des-
criben en términos de los torsores de inercia26 , a diferencia del tratamiento pre-
sentado en la sección 3.5.
Esta descripción de las ecuaciones dinámicas se empleará, en el contexto de
la dinámica, como punto de partida para definir las estructuras de datos y los
algoritmos en los que debe basarse el sistema simbólico para la DSM presentado
en esta tesis doctoral.
E CUACIONES M ATRICIALES

La expresión que se introduce a continuación es completamente general, para


un problema resuelto según el principio de las potencias virtuales con velocidades
virtuales arbitrarias ż , y acotado en términos de un conjunto de coordenadas
generalizadas q.

   
Mzq Vzq 0   Fżq̇
F
  q̈
 φv 0 0   
 = 0 +
   0 
T
 0 Vzq − φz 
λ
0 R 0 0
   
Fżne
F 0
 −  φq
 0   q̇ + φ̇t 
+ 


0   0 
0 0
(3.106)
26
No obstante, se implementarán dos algoritmos diferentes para su definición:
• En términos de los torsores de inercia, empleando las ecuaciones que aquí se plantean.
• En términos de las matrices de masa, empleando las ecuaciones presentadas en el
apartado 3.5.
3.7 Expresión Matricial General de las Ecuaciones de la Dinámica 61

Las expresiones anteriores pueden particularizarse para diferentes formalis-


mos eligiendo diferentes grupos de velocidades virtuales:
• Si ż se sustituye por el conjunto de coordenadas generalizas, q̇ , se obtie-
nen las Ecuaciones de Lagrange sin multiplicadores.
Tomando como referencia las ecuaciones anteriores, y sustituyendo la de-
finición de la fuerza generalizada de enlace por su equivalente en términos
de λ, se obtienen las Ecuaciones de Lagrange con multiplicadores .
• Si ż se sustituye por un conjunto apropiado de desplazamientos y giros
cartesianos, se obtienen las Ecuaciones de Newton-Euler.
Pese a que las ecuaciones planteadas son completamente generales en térmi-
nos de velocidades virtuales arbitrarias ż , su implementación se limitará a los
formalismos de Lagrange y Newton-Euler.

a) Expresión para Mzq


Tomando como referencia el Principio de las Potencias Virtuales y la Ter-
cera ley de Newton para las acciones de enlace27 , puede afirmarse

XM   T  
q̇ ∂ V (BSolk ) F (Solk )
Fz − Mzq
F q̈ =
M k (Solk ) (3.107)
k=1
∂ ż Ω(Solk )

donde

M   T  
∂ X ∂ V (BSolk ) F (Solk )
Mzq =−
∂ q̈ k=1 ∂ ż Ω(Solk ) M k (Solk ) (3.108)


b) Expresión para F
Fż
Teniendo en cuenta la definición propuesta en 3.107, la contribución de las

Fuerzas Centrífugas y de Coriolis, F
Fż , puede escribirse como

XM   T  
q̇ ∂ V (BSolk ) F (Solk )
F
Fż =
∂ ż Ω(Solk ) M (Solk )
+ Mzq q̈ (3.109)
k
k=1

27
La potencia virtual producida por las fuerzas de enlace de un sistema, para movimientos
virtuales compatibles con los enlaces, es nulo
62 Dinámica

o bien,

XM   T  !
q̇ ∂ ∂ V (BSolk ) F (Solk )
F
Fż = Ω(Solk ) M (Solk )
q̇ . (3.110)
∂ q̇ k=1
∂ ż k

c) Expresión para Vqz y φz



La expresión para la fuerza generalizada de enlace, F
Fż , ya se definió en
el apartado correspondiente a las ecuaciones dinámicas de enlace y es la que
aparece en la ecuación 3.96.

Tal como se explica en la sección 3.6.3, la fuerza generalizada F
Fż se
expresa en forma matricial según

Fż = − Vzq 
F
donde la expresión para Vzq ,

M Lk 
  T " 
#
∂ XX ∂ VRI (Bk ) F Aj (Solk )
Vzq =−
∂  k=1 j=1 ∂ ż ΩRI (Solk ) A (Sol ) ,
M j k 

ya fué presentada en la ecuación 3.97.

Por otra parte, la matriz φz se corresponde con la derivada parcial

∂φ
φz =
∂z
.

Debido a la dificultad en el plantenamiento de φz , la implementación


presentada en el capítulo 4, se limitará al caso en que las derivadas parciales
se toman respecto a ż = q̇ .
En tal caso, La ecuación 3.98, presentada en la sección 3.6.3, se sustituye
por la correspondiente en términos de q̇ ,

h i  
T
Vqz − φv λ
=0 (3.111)
3.7 Expresión Matricial General de las Ecuaciones de la Dinámica 63

donde
• Vzq se sustituye por Vqz ,

M Lk 
  T " 
#
∂ XX ∂ VRI (Bk ) F Aj (Solk )
Vqz =−
∂  k=1 j=1 ∂ q̇ ΩRI (Solk ) A (Sol )
M j k 

(3.112)
• φz se sustituye por φv , ya definida en la ecuación 2.4.

La obtención de la máxima información posible para la caracterización de


las acciones de enlace en el caso ż = q̇ , conduce a la aplicación de la
ecuación 3.111 para todos y cada uno de los enlaces del sistema 28 .

d) Expresión para R
Si se caracteriza con torsores globales, la matriz R  , definida por la ecua-
ción 3.95, es idénticamente nula29 , mientras que si se hace con enlaces parcia-
les, ésta adopta la forma

 T "  #!
∂ v (q) F Aj (Solk )
R =
∂ ω (q) A (Sol ) , (3.113)
M kj k
donde v y ω, son vectores en las direcciones de los cuales se anula la fuer-
za y el momento del enlace parcial, es decir, en general, indican direcciones
de translaciones o rotaciones permitidas por el enlace. Se debe introducir una
ecuación de este tipo por cada redundancia matemática que sea necesario eli-
minar.

Fzne
e) Expresión para F
La fuerza generalizada en ż asociada a otras acciones se expresa como

XM   T " Ane (Solk )


#
∂ V (BSolk ) F
Fzne =
F Ane (Solk ) (3.114)
∂ ż Ω(Solk ) M
k=1 k

h iT
Ane (Solk ) Ane (Solk )
donde F k
, M k representa el torsor asociado a otras ac-
ciones sobre Solk , definido por la ecuación 3.42.
28
en vez de para todo el sistema como sugiere dicha ecuación.
29
No existen enlaces redundantes
64 Dinámica

3.8. Ejemplo
En esta sección, se desarrollan las ecuaciones cinemáticas y dinámicas co-
rrespondientes al mecanismo pistón-biela-manivela que aparece en la figura 3.2
con la intención de presentar al lector los conceptos teóricos que aparecen en éste
capítulo así como en el anterior de una forma sencilla e intuitiva.

E
D

A e
C

Figura 3.2: Descripción gráfica del mecanismo

En cuanto al formalismo a emplear en el planteamiento de las ecuaciones di-


námicas, en este caso se proponen dos: Lagrange y Newton-Euler. Ambos forma-
lismos se incluyen en este texto con la intención de presentar la topología de los
sistemas de ecuaciones obtenidos en cada caso.

3.8.1. Cinemática
Tal como puso de manifiesto en el capítulo 2, proporcionar una descripción
cinemática del mecanismo implica:
• Elegir una serie de parámetros cinemáticos.
• Elegir un conjunto de coordenadas generalizadas para representar el movi-
miento del mecanismo.
• Plantear las ecuaciones de restricción, ya sean éstas geométricas o de tipo
no holónomo.

ACOTACIÓN
La figura 3.3 presenta la acotación mixta30 propuesta para el sistema mecánico.
En este caso, el movimiento del mecanismo queda caracterizado mediante los
ángulos absolutos θ1 y θ2 .
30
no coincide con ninguna de las presentadas en la sección 2.3.
3.8 Ejemplo 65

20
Bie
B
10
E y
D θ2 Blo
x
y
n

Abs θ1 C
Ma

2
x e

Figura 3.3: Acotación propuesta para el mecanismo

Así pues, el vector de coordenadas generalizadas, q, contiene dos variables


( p = 2 ) y se escribe

q = [θ1 θ2 ]T (3.115)

Los vectores de velocidades y aceleraciones generalizadas se definen en tér-


minos de las anteriores según q̇ = [θ̇1 θ̇2 ]T y q̈ = [θ̈1 θ̈2 ]T respectivamente.

E CUACIONES DE POSICIÓN Ó GEOMÉTRICAS

Como ya se dijo en la primera sección, plantear las ecuaciones de restricción


requiere de una descripción cinemática en términos de las coordenadas de partida.
Teniendo en cuenta el grupo de coordenadas elegidas, q, la única condición
que debe imponerse para que el mecanismo funcione correctamente es que la cota
vertical del punto C sea igual al parámetro geométrico e (ver figura 3.4).
Esta condición se expresa mediante la ecuación:

AC · ey − e = 0 (3.116)

donde ey hace referencia al vector unitario en la dirección y de la base xyz .


66 Dinámica

l2
B

E C
lg2
l1
D

lg1 e
A

Figura 3.4: Parámetros del problema geométrico

Haciendo uso de las matrices de cambio de base, podemos expresar la ecua-


ción 3.116 en forma matricial:

 
 h i1 0 2 0 3 0  h i1 2 3  T 0
   
I AB 1 02 03 0
+ I BC 123
 1  − e = 0 (3.117)
x yz x yz
0 x yz

donde

   
h i1 0 2 0 3 0 cos θ1 − sin θ1 0 h i1 2 3 cos θ2 − sin θ2 0
I =  sin θ1 cos θ1 0  , I =  sin θ2 cos θ2 0 
x yz x yz
0 0 1 0 0 1

   
l1 l2
       
AB 1 02 03 0
= 0 , BC 1 2 3 =  0 
0 1 02 03 0 0 123

Operando, la ecuación 3.117 se escribe ahora

l1 sin θ1 + l2 sin θ2 − e = 0. (3.118)


3.8 Ejemplo 67

Así, el vector de restricciones, φ , únicamente contiene la ecuación 3.118, de


tal forma que

φ = [l1 sin θ1 + l2 sin θ2 − e] = 0 (3.119)

E CUACIONES EN VELOCIDADES

Al no existir ninguna relación de tipo no holónomo ( r = 0 ), la derivada total


del vector de restricciones geométricas determina las relaciones entre velocidades
generalizadas

φ̇ = φq
q̇ + φt =
 
θ̇1
= [l1 cos θ1 l2 cos θ2 ] =0 (3.120)
θ̇2

donde φt = 0 ya que el vector φ no presenta dependencias explícitas en la


variable tiempo, t.
Así, en este caso, el número de ecuaciones en velocidad, c = g + r = 1,
coincide con el de ecuaciones geométricas y el número de grados de libertad del
mecanismo, n = p − c = 1, coincide con el de coordenadas independientes,
m = p − g = 1.

E CUACIONES EN ACELERACIONES

Las ecuaciones en aceleraciones se obtienen calculando la derivada total del


vector φ̇ .

φ̈ = φq q̈ + φ˙ q q̇ + φ̇t =

 
θ̈1
= [l1 cos θ1 l2 cos θ2 ] −
θ̈2
h i  θ̇ 
1
− l1 θ̇1 sin θ1 l2 θ̇2 sin θ2 =0 (3.121)
θ̇2

donde φ̇t = 0 por la misma razón que en el apartado anterior.


68 Dinámica

3.8.2. Dinámica
Plantear las ecuaciones dinámicas implica:
• Elegir una serie de parámetros dinámicos.
• Caracterizar todas las acciones que recaen sobre el sistema mecánico.
• Elegir un formalismo apropiado.

m , II
m , II
 

c2 E C
D k3

c1 m , II
 

c3

Figura 3.5: Parámetros dinámicos para el mecanismo Pistón-biela-manivela

Los parámetros dinámicos aparecen al caracterizar las acciones sobre los di-
ferentes eslabones del mecanismo. En el caso del ejemplo desarrollado, podrían
citarse los siguientes:
• Las masas, posiciones de los centros de gravedad y tensores de inercia de
los sólidos Man , Bie y Blo .
• Los coeficientes de rigidez y amortiguamiento de todos los conjuntos
muelle-amortiguador presentes en el sistema.

ACCIONES SOBRE LOS DIFERENTES SÓLIDOS

Tal como se dijo en la introducción teórica, la contribución de cualquier acción


al conjunto de ecuaciones dinámicas se hace a través de su correspondiente torsor.
Así pues, empleando el mismo criterio que sirvió para clasificar las acciones,
los torsores actuantes sobre los diferentes sólidos que componen el sistema mecá-
nico se presentarán en cuatro apartados:
• Torsores de inercia.
• Torsores de enlace.
• Torsores constitutivos.
• Torsores asociados a otras acciones.
3.8 Ejemplo 69

T ORSORES DE INERCIA

Tal como se explica en la sección 3.3.1, el torsor de inercia se expresa en


términos de las derivadas del momento lineal, D (Solk ) , y el momento cinético,
H k (Solk ), según



d D (Solk )
F (Solk ) = −
dt RI

d H k (Solk )
M k (Solk ) = −


dt
RI

donde Gk representa el centro de gravedad de cada uno de los sólidos.

Torsor de inercia de D’ Alembert sobre Man

En el caso de la referencia Man , el torsor de inercia se calcula en el punto


D ≡ GMan (centro de gravedad).

La componente de fuerza del tensor se calcula a partir de la derivada del mo-


mento lineal,

   
F (Man ) x yz
= −m1 A Abs (D) x yz ,

donde la aceleración absoluta del punto D, A Abs (D) , queda definida por

 
−lg1 θ̈1 sin θ1 − lg1 θ̇12 cos θ1
   
A Abs (D) x yz
=  lg1 θ̈1 cos θ1 − lg1 θ̇12 sin θ1  =
0 x yz
   
−lg1 sin θ1 0 −lg1 θ̇1 cos θ1 0
=  lg1 cos θ1 0  q̈ +  lg1 θ̇1 sin θ1 0  q̇
0 0 0 0
(3.122)
70 Dinámica

La componente de momento del tensor se calcula a partir de la derivada del


momento cinético,

 
0
   
M (Man ) x yz
= − 0 
II Man
zz θ̈1 x yz

Los cálculos se omiten por abreviar la exposición.

Torsor de inercia de D’ Alembert sobre Bie

En el caso de la referencia Bie , el torsor de inercia se calcula en el punto


E ≡ GBie (centro de gravedad).

La componente de fuerza del tensor se calcula a partir de la derivada del mo-


mento lineal,

   
F (Bie ) x yz
= −m2 A Abs (E) x yz ,

donde la aceleración absoluta del punto E, A Abs (E) , queda definida por

 
−lg2 θ̈2 sin θ2 − lg2 θ̇22 cos θ2
     
A Abs (E) x yz
= AAbs (B) x yz
+  lg2 θ̈2 cos θ2 − lg2 θ̇22 sin θ2 
0 x yz

(3.123)

La componente de momento del tensor se calcula a partir de la derivada del


momento cinético,

 
0
   
M (Bie )


x yz
= − 0 
II Bie
zz θ̈2 x yz
3.8 Ejemplo 71

Torsor de inercia de D’ Alembert sobre Blo

En el caso de la referencia Blo , el torsor de inercia se calcula en el punto


C ≡ GBlo (centro de gravedad).

La componente de fuerza del tensor se calcula a partir de la derivada del mo-


mento lineal,

   
F (Blo ) x yz
= −m3 A Abs (C) x yz ,

donde la aceleración absoluta del punto C, A Abs (C) , queda definida por

 
−l2 θ̈2 sin θ2 − l2 θ̇22 cos θ2
     
A Abs (C) x yz
= A Abs (B) x yz
+  l2 θ̈2 cos θ2 − l2 θ̇22 sin θ2 
0 x yz

(3.124)

La parte de momento del torsor de inercia no se calcula debido a que el sólido


Blo no gira.

T ORSORES DE ENLACE

Con el fín de evitar redundancias en las incógnitas de enlace, los pares cinemá-
ticos presentes en los puntos A , B y C presentarán características diferentes.

Torsores de enlace sobre Man

Acción de enlace con Abs en el punto A (par de revolución).

   
h i F x, h i M 1,
   AAbs (Man )  
F AAbs (Man ) x yz
=  F y,  , M
123
=  M 2, 
F z, x yz 0 123

(3.125)
72 Dinámica

Acción de enlace con Bie en el punto B (par esférico con restricción de giro
en el eje del eslabón Bie ).

   
h i F x, h i M 1,
   ABie (Man )  
F ABie (Man ) x yz
=  F y,  , M
123
= 0 
F z, x yz 0 123

(3.126)

Torsores de enlace sobre Bie

Acción de enlace con Man en el punto B (se aplica el principio de acción y


reacción para definir el mínimo número de incógnitas de enlace).

   
h i F x, h i M 1,
   AMan (Bie )  
F AMan (Bie ) x yz
= − F y,  , M
123
= − 0 
F z, x yz 0 123

(3.127)

Acción de enlace con Blo en el punto C (par esférico).

   
h i F x, h i 0
   ABlo (Bie )  
F ABlo (Bie ) x yz
=  F y,  , M
x yz
= 0 (3.128)
F z, x yz 0 x yz

Torsores de enlace sobre Blo

Acción de enlace con Bie en el punto C (se aplica el principio de acción y


reacción para definir el mínimo número de incógnitas de enlace).

   
h i F x, h i 0
   ABie (Blo )  
F ABie (Blo ) x yz
= − F y,  , M
x yz
= 0 (3.129)
F z, x yz 0 x yz
3.8 Ejemplo 73

Acción de enlace con Abs en el punto C (par prismático que sólo permite
desplazamiento en la dirección x de la base x yz ).

   
h i 0 h i M x,
     
F AAbs (Blo ) x yz
=  F y,  , M AAbs (Blo ) x yz
=  M y,  (3.130)
F z, x yz
M z, x yz

T ORSORES CONSTITUTIVOS

Torsores constitutivos sobre Man

Acción de gravedad, en D ≡ GMan

   
h i 0 h i 0
ne   Ane (Man )  
F Agr (Man ) x yz
=  −m1 g  , M gr
x yz
= 0 (3.131)
0 x yz
0 x yz

Acción del amortiguador de constante c1 sobre Man en el punto A

   
h i 0 h i 0
ne (Man )   ne  
F Ac =  0  , M Ac (Man ) = 0  (3.132)
x yz x yz
0 x yz −c1 θ̇1 x yz

Acción del amortiguador de constante c2 sobre Man en el punto B

   
0 0
h i h i  
ne (Man )   ne
0
F Ac =  0  , M Ac (Man ) =
 


x yz x yz
0 x yz c2 θ̇2 − θ̇1
x yz

(3.133)
74 Dinámica

Torsores constitutivos sobre Bie

Acción de la gravedad, en E ≡ GBie

   
h i 0 h i 0
ne   Ane (Bie )  
F Agr (Bie ) x yz
=  −m2 g  , M gr 

x yz
= 0 (3.134)
0 x yz
0 x yz

Acción del amortiguador de constante c2 sobre Bie en B

   
0 0
h i h i  
Ane   ne
0
F c (Bie )
=  0  , M Ac (Bie ) = −
  


x yz x yz
0 x yz c2 θ̇2 − θ̇1
x yz
(3.135)
Torsores constitutivos sobre Blo

Acción del conjunto muelle-amortiguador (k3 , c3 ) en el punto C

   
h i −k3 (xC − xo3 ) − c3 ẋC h i 0
ne   Ane (Blo )  
F Akc (Blo ) x yz
= 0  , M kc
x yz
= 0
0 x yz
0 x yz

(3.136)

donde xC = l1 cos θ1 + l2 cos θ2 representa el desplazamiento de Blo en la


dirección del eje x y xo3 es la longitud natural del muelle cuya constante de
rigidez es k3 .

ACCIONES ASOCIADAS A OTROS ELEMENTOS

En el caso resuelto, no existe ninguna acción asociada a motores ó actuadores.


Sin embargo, en el caso más general pueden aparecer acciones que no encajan en
la definición de ninguna de las anteriores.
A modo de ejemplo, si se hubiese decidido forzar el movimiento de la coorde-
nada θ1 mediante una ecuación del tipo θ1 − f (t) = 0 , el par motor que produce
dicho movimiento habría aparecido como incógnita del problema dinámico.
3.8 Ejemplo 75

E CUACIONES DINÁMICAS

Atendiendo a lo expuesto en la sección anterior, el problema presenta 19


incógnitas dinámicas, de las cuales 17 son incógnitas de enlace,  , y 2 se
corresponden con las aceleraciones generalizadas, q̈ . Sin embargo, dependiendo
del formalismo elegido para plantear las ecuaciones dinámicas, algunas de las
incógnitas anteriores quedan indeterminadas al no aparecer en dichas ecuaciones.
La solución del problema se llevará a cabo empleando dos formalismos:

• Formalismo de Newton-Euler.

• Formalismo de Lagrange.

Si se toma como referencia la ecuación general de la dinámica presentada en


la introducción teórica, 3.106, la única diferencia entre los dos formalismos es el
grupo de pseudo-coordenadas, z , elegido al plantear las ecuaciones y consecuen-
temente, el tratamiento de las acciones de enlace.
Así, en el formalismo de Newton-Euler, el grupo de pseudo-coordenadas, z ,
está compuesto por desplazamientos y rotaciones cartesianas. Consecuentemente,
las incógnitas de enlace aparecen como restricciones al movimiento cartesiano de
los sólidos, es decir, las incógnitas de enlace coinciden con las que aparecen en
los torsores.
A diferencia de lo anterior, en el formalismo de Lagrange, el grupo de pseudo-
coordenadas coincide con el grupo de coordenadas de partida, q . Además, en
este contexto, las únicas incógnitas de enlace que aparecen están asociadas a en-
laces no respetados por la acotación de partida y su interpretación física no es, en
general, inmediata.

F ORMALISMO DE N EWTON -E ULER


En este caso, el formalismo permite plantear 6 ecuaciones31 por sólido, lo
cual representa un sistema de 18 ecuaciones. El problema dinámico se completa
con la derivada segunda de la restricción geométrica planteada en el punto C.
Dado que el grupo de pseudo-coordenadas, z , representa un espacio de mo-
vimiento independiente para cada uno de los sólidos, el formalismo de Newton-
Euler se plantea sólido a sólido teniendo en cuenta todos los torsores definidos en
secciones anteriores.
76 Dinámica

Así pues, la aplicación del formalismo descrito en esta sección, deriva en un


sistema de 19 ecuaciones en las siguientes incógnitas:

 T
q̈ = θ̈1 θ̈2


 = F x, F y, F z, M 1, M 2, F x, F y, F z,

M 10 , F x, F y, F z, F y, F z, M x, M y, T
(3.137)

Por simplicidad en el desarrollo, el grupo de pseudo-coordenadas para las que


se plantea el formalismo de Newton-Euler será el correspondiente al movimiento 32
plano:

 T
z= xD y D θ 1 xE y E θ 2 xC y C (3.138)

donde se omite la coordenada correspondiente a la rotación del sólido Blo por


no aparecer en la acotación de partida.
También por brevedad, dado que algunas de las incógnitas de enlace resultan
idénticamente nulas33 , el vector  se reduce a

 T
= F x, F y, F x, F y, F x, F y, F y, (3.139)

donde se omiten F z, , M 1, , M 2, , F z, , M 10 , , F z, , M x, y
M y, .
Ecuaciones de Newton-Euler para el sólido Man

La figura 3.6 presenta el equilibrio dinámico del sólido Man para el caso de
movimiento plano. El punto elegido para plantear las ecuaciones es el centro de
gravedad de Man , D ≡ GMan .
32
desplazamientos xGk , yGk de los centros de gravedad y giros, θk , en el eje perpendicular
al plano de movimiento.
33
no existen fuerzas en el eje z , perpendicular al plano de movimiento, ni momentos en los
ejes x e y , paralelos a éste mismo plano.
3.8 Ejemplo 77

F y, 

F (Man ), M (Man ) F x, 

F y, 

F gr,

F x, 

Figura 3.6: Diagrama de equilibrio para el eslabón Man

a) Equilibrio de Fuerzas

AAbs (Man ) ABie (Man )


−F (Man ) − F −F =
Ane
gr (Man ) Ane
c (Man ) Ane
c (Man )
= F +F +F (3.140)

  
−m1 lg1 sin θ1 0 −1 0 −1 0 q̈
=
m1 lg1 cos θ1 0 0 −1 0 −1 Man
   
0 −lg1 θ̇1 cos θ1 0
= − m1 q̇ (3.141)
−m1 g lg1 θ̇1 sin θ1 0

b) Equilibrio de momentos en el punto D

AAbs (Man ) ABie (Man )


−M (Man ) − M −M =
Ane
gr (Man ) Ane
c (Man ) Ane
c (Man )
= M +M +M
(3.142)

 
  q̈
II Man
zz 0 lg1 sin θ1 −lg1 cos θ1 −lg1 sin θ1 +lg1 cos θ1 =
Man
 
= −c1 θ̇1 − c2 θ̇1 − θ̇2

(3.143)
78 Dinámica

donde
 T
Man = F x, F y, F x, F y,

es el subgrupo de incógnitas de enlace que afectan al sólido Man .

El conjunto de ecuaciones anteriores puede ahora presentarse en forma matri-


cial como

h i  LX
Man
Ane
Man Man q̈ j (Man )
M V = F
Fz (3.144)
zq zq Man
j=1

donde:
Man
Mzq representa la matriz de masa
 
−m1 lg1 sin θ1 0
Man
Mzq =  m1 lgMan 1 cos θ1 0  (3.145)
II zz 0
Man
Vzq es la matriz asociada a todas las acciones de enlace sobre Man

 
−1 0 −1 0
Man
Vzq = 0 −1 0 −1  (3.146)
lg1 sin θ1 −lg1 cos θ1 −lg1 sin θ1 lg1 cos θ1

Ane
j (Man )
F
Fz hace referencia a cualquier acción sobre Man que no sea de
enlace, esto es
 2

LX
m
 1 lg 1 θ̇ 1 cos θ 1 
Man
Ane
j (Man )
 
F
Fz 
= −m 1 g + lg θ̇
1 1 2 θ̇ sin θ 1  (3.147)
  
j=1
−c1 θ̇1 − c2 θ̇1 − θ̇2

Ecuaciones de Newton-Euler para el sólido Bie

La figura 3.7 muestra el diagrama de equilibrio para el eslabón Bie para el


caso de movimiento plano. El punto elegido para plantear las ecuaciones es el
centro de gravedad de Bie , E ≡ GBie .
3.8 Ejemplo 79

−F y, 

−F x, 

F (Bie ), M (Bie )
F y,
F gr, 

F x, 

Figura 3.7: Diagrama de equilibrio para el eslabón Bie

a) Equilibrio de Fuerzas

AMan (Bie ) ABlo (Bie )


−F (Bie ) − F − F =
Ane
gr (Bie ) Ane
c (Bie )
= F +F (3.148)

  
−m2 l1 sin θ1 −m2 lg2 sin θ2 1 0 −1 0 q̈
=
m2 l1 cos θ1 m2 lg2 cos θ2 0 1 0 −1 Bie
   
0 −l1 θ̇1 cos θ1 −lg2 θ̇2 cos θ2
= − m2 q̇ (3.149)
−m2 g −l1 θ̇1 sin θ1 −lg2 θ̇2 sin θ2

b) Equilibrio de momentos en el punto E

AMan (Bie ) ABlo (Bie )


−M (Bie ) − M



− M =
Ane
gr (Bie ) Ane
c (Bie )
= M 
+M
(3.150)

 
  q̈
0 II Bie
zz −lg2 sin θ2 lg2 cos θ2 −lg2 sin θ2 lg2 cos θ2 =
Bie
 
= −c2 θ̇2 − θ̇1

(3.151)
80 Dinámica

donde

 T
Bie = F x, F y, F x, F y,

es el subgrupo de incógnitas de enlace que afectan al sólido Bie .

El conjunto de ecuaciones anteriores puede ahora presentarse en forma matri-


cial como

h i  L
X Bie
Ane
Bie Bie q̈ j (Bie )
M zq V
zq Bie
= F
Fz (3.152)
j=1

donde
Bie
Mzq representa la matriz de masa
 
−m2 l1 sin θ1 −m2 lg2 sin θ2
Bie
Mzq =  m2 l1 cos θ1 m2 lg2 cos θ2  (3.153)
0 II Bie
zz

Bie
Vzq es la matriz asociada a todas las acciones de enlace sobre Bie
 
1 0 −1 0
Bie
Vzq = 0 1 0 −1  (3.154)
−lg2 sin θ2 lg2 cos θ2 −lg2 sin θ2 lg2 cos θ2

Ane
j (Bie )
F
Fz hace referencia a cualquier acción sobre Man que no sea de
enlace, y no se desarrolla por por claridad en la exposición.

Ecuaciones de Newton-Euler para el sólido Blo

La figura 3.8 muestra el diagrama de equilibrio del eslabón Blo para el caso
de movimiento plano. El punto elegido para plantear las ecuaciones es el centro
de gravedad de Blo , C ≡ GBlo .
3.8 Ejemplo 81

−F y,
F (Blo ), M (Blo )
 

F y, 

−F x,
F gr,

Figura 3.8: Diagrama de equilibrio para el eslabón Blo

a) Equilibrio de Fuerzas

ABie (Blo ) AAbs (Blo )


−F (Blo ) − F − F =
Ane
gr (Blo ) Ane
kc (Blo )
= F +F (3.155)

  
−l1 sin θ1 −l2 sin θ2 1 0 0 q̈
m3 =
l1 cos θ1 l2 cos θ2 0 1 −1 Bie
   
0 −k3 (xC − xo3 ) − c3 ẋC
= + −
−m3 g 0
 
−l1 θ̇1 cos θ1 −l2 θ̇2 cos θ2
− m3 q̇ , (3.156)
−l1 θ̇1 sin θ1 −l2 θ̇2 sin θ2

donde

 T
Blo = F y, F x, F y,

es el subgrupo de incógnitas de enlace que afectan al sólido Blo .

El conjunto de ecuaciones anteriores puede ahora presentarse en forma matri-


cial como

h i  L
X Blo
Ane
Blo Blo q̈ j (Blo )
M zq V
zq Blo
= F
Fz (3.157)
j=1
82 Dinámica

donde
Blo
Mzq representa la matriz de masa
 
Blo −m2 l1 sin θ1 −m2 l2 sin θ2
M zq
=
m2 l1 cos θ1 m2 l2 cos θ2
(3.158)

Blo
Vzq es la matriz asociada a todas las acciones de enlace sobre Blo
 
Blo 1 0 0
V zq
=
0 1 −1
(3.159)

Ane
j (Blo )
F
Fz hace referencia a cualquier acción sobre Blo que no sea de
enlace, y no se desarrolla por la misma razón que en el apartado anterior.

Montaje de las ecuaciones de Newton-Euler

Combinando los resultados anteriores se obtiene

h i 
q̈ ne
Mzq Vzq 
=F
Fz (3.160)

donde

Mzq representa la matriz de masa del sistema, que en este caso tiene
dimensión (8, 2).
 Man


M zq 
Bie
Mzq =
 M zq

 (3.161)
Blo
M zq

Vzq es la matriz asociada a todas las acciones de enlace sobre el sistema,


que en este caso tiene dimensión (8, 7).
 Man0


V zq

Bie0
Vzq =
 V zq

 (3.162)
Blo0
V zq
3.8 Ejemplo 83

donde

   
0 0 0 0 0 0
Man0 Man Bie0 Bie
Vzq = Vzq 0 0 0  , Vzq =  0 0 Vzq 0 
0 0 0 0 0 0
 
Blo0 0 0 0 0 Blo
V zq
=
0 0 0 0 V zq
(3.163)

Fzne es el vector de fuerzas generalizadas sobre el sistema, y que en este


F
caso tiene dimensión (8, 1).
 
PLMan Ane
j (Man )
 j=1 F Fz 
ne  PLBie Ane
j (Bie ) 
F
Fz = F
F z  (3.164)
 j=1 
PLBlo Ane
j (Blo )
j=1 F
Fz

F ORMALISMO DE L AGRANGE
En este caso, tomando como pseudo-coordenadas z = q , se plantean 2
ecuaciones para el mecanismo.
La aplicación del formalismo de Lagrange deriva en un sistema de 3 ecua-
ciones en las siguientes incógnitas:
 
θ̈1
q̈ = , λ=λ (3.165)
θ̈2

donde λ representa el multiplicador de Lagrange asociado a la restricción


geométrica en el punto C.
La obtención de las ecuaciones de Lagrange puede sistematizarse de dos for-
mas diferentes:

a) A partir de la definición de Energía cinética del sistema.

b) Aplicando una transformación de coordenadas apropiada a los torsores de-


finidos en secciones anteriores.
84 Dinámica

En el primer caso, la matriz de masa del sistema y las fuerzas Centrífugas y de


Coriolis se calculan a partir de la Energía Cinética del sistema.
En el segundo caso, los términos anteriores se deducen a partir de los torsores
de inercia de D’ Alembert .
En cualquiera de los casos, deberá encontrarse una expresión apropiada para
las fuerza generalizada, definida ésta en términos de las coordenadas generaliza-
das, asociada a los torsores constitutivos y de otros tipos.
Fuerza generalizada asociada al torsor de inercia de Man

 T
∂    
F
Fq̇ (Man ) = VRI (D) x yz F (Man ) x yz
+
∂ q̇

 T
∂    
+ ΩRI (Man ) x yz M(Man ) x yz
∂ q̇
 
m1 lg12 + II Man 0 Man
= − zz
q̈ = − Mqq q̈
0 0

Man
donde Mqq hace referencia a la matriz de masa del sólido Man .

Fuerzas generalizadas asociadas a los torsores constitutivos sobre Man

Acción de gravedad, en D ≡ GMan


 
 T 0
Ane
gr (Man ) ∂    
F
Fq̇ = VRI (D) x yz  −m1 g  +
∂ q̇
0 x yz

 
 T 0
∂    
+ ΩRI (Man ) x yz 0
∂ q̇
0 x yz
 
  0
−lg1 sin θ1 lg1 cos θ1 0  
=  −m1 g 
0 0 0
0
 
−m1 g lg1 cos θ1
=
0
3.8 Ejemplo 85

Acción del amortiguador de constante c1 sobre Man en el punto A

 
 T 0
Ane
c (Man ) ∂    
F
Fq̇ = ΩRI (Man ) x yz  0 
∂ q̇
−c1 θ̇1 x yz
 
  0  
0 0 1   −c1 θ̇1
=  0 =
0 0 0 0
−c1 θ̇1

Acción del amortiguador de constante c2 sobre Man en el punto B

 
 T 0
Ane
c (Man ) ∂    
F
Fq̇ = ΩRI (Man ) x yz  0 
∂ q̇   
−c2 θ̇1 − θ̇2
x yz
 
  0 "   #
0 0 1   −c θ̇ − θ̇
=  0  2 1 2
0 0 0    =
0
−c2 θ̇1 − θ̇2

Fuerza generalizada asociada al torsor de inercia de Bie

 T
∂    
F
Fq̇ (Bie ) = VRI (E) x yz F (Bie ) x yz
∂ q̇
 T
∂    
+ ΩRI (Bie ) x yz M (Bie ) x yz
∂ q̇
 
m2 l12 m2 l1 lg2 cos (θ2 − θ1 )
= −  q̈
Bie
sym m2 lg22 + II zz
 2 
θ̇2
− m2 l1 lg2 sin (θ2 − θ1 )
−θ̇12
Bie q̇
= − Mqq q̈ + F
Fq̇ (Bie )
86 Dinámica

donde
Bie
Mqq hace referencia a la matriz de masa del sólido Bie .

Fq̇ q̇ (Bie ) representa la contribución de las fuerzas centrífugas y de


F
Coriolis al vector de fuerzas generalizadas.

Fuerza generalizada asociada los torsores constitutivos sobre Bie

Acción de gravedad, en E ≡ GBie


 
 T 0
Ane
gr (Bie ) ∂    
F
Fq̇ = VRI (E) x yz  −m2 g 
∂ q̇
0 x yz

 
  0
−l1 sin θ1 l1 cos θ1 0  
=  −m2 g 
−lg2 sin θ2 lg2 cos θ2 0
0
 
−m2 g l1 cos θ1
=
−m2 g lg2 cos θ2

Acción del amortiguador de constante c2 sobre Bie en B

 
 T 0
Ane
c (Bie ) ∂    
F
Fq̇ = ΩRI (Bie ) x yz  0 
∂ q̇   
−c2 θ̇2 − θ̇1
x yz
 
  0 " #
0 0 0    0 
=  0 
0 0 1     = −c2 θ̇2 − θ̇1
−c2 θ̇2 − θ̇1
3.8 Ejemplo 87

Fuerza generalizada asociada al torsor de inercia de Blo

 T
∂    
F
Fq̇ (Blo ) = VRI (C) x yz F (Blo ) x yz
∂ q̇
 
m3 l12 m2 l1 l2 cos (θ2 − θ1 )
= −  q̈
2
sym m 3 l2
 
θ̇22
− m3 l1 l2 sin (θ2 − θ1 )
−θ̇12
Blo q̇
= − Mqq q̈ + F
Fq̇ (Blo )
donde
Blo
Mqq hace referencia a la matriz de masa del sólido Blo .

Fq̇ q̇ (Blo ) representa la contribución de las fuerzas centrífugas y de


F
Coriolis al vector de fuerzas generalizadas.

Fuerza generalizada asociada a los torsores constitutivos sobre Blo

Acción de gravedad, en C ≡ GBlo

 
 T 0
Ane
gr (Blo ) ∂    
F
Fq̇ = VRI (C) x yz  −m3 g 
∂ q̇
0 x yz
 
  0
−l1 sin θ1 l1 cos θ1 0  
=  −m3 g 
−l2 sin θ2 l2 cos θ2 0
0
 
−m3 g l1 cos θ1
=
−m3 g l2 cos θ2
88 Dinámica

Acción del conjunto muelle-amortiguador (k3 , c3 ) en el punto C.

 
 −k3 (xC − xo3 ) − c3 ẋC
T
Ane (Blo ) ∂  
F
Fq̇ kc = VRI (C) x yz   0


∂ q̇
0 x yz
 
  −k3 (xC − xo3 ) − c3 ẋC
−l1 sin θ1 l1 cos θ1 0  
=  0 
−l2 sin θ2 l2 cos θ2 0
0
 
l cos θ1
= − [ k3 (xC − xo3 ) + c3 ẋC ] 1
l2 cos θ2

Fuerza generalizada asociada a los torsores de enlace no respetados por


la acotación de partida
En la formulación lagrangiana, la forma de representar la contribución de este
T
tipo de enlaces es a través del término34 φq λ , que en este caso resulta

 
T l1 cos θ1
φq λ=
l2 cos θ2
λ

donde λ es el multiplicador de Lagrange asociado a la restricción geométrica


planteada en el punto C.
Otra forma de representar dicha contribución es emplear la información que
proporciona el torsor de enlace asociado a dicha restricción, es decir

 
 T 0
AAbs (Blo ) ∂    
F
Fq̇ = VRI (C) x yz  F y, 
∂ q̇
0 x yz
 
  0
−l1 sin θ1 l1 cos θ1 0  
=  F y, 
−l2 sin θ2 l2 cos θ2 0
0

34
es decir, si se quiere emplear el formalismo de Lagrange con multiplicadores, basta sustituir
la fuerza generalizada asociada al conjunto de las acciones de enlace, Vqq  , por el término
φTq λ.
3.8 Ejemplo 89

 
AAbs (Blo ) l1 cos θ1
F
Fq̇ =
l2 cos θ2
F y,

De lo anterior se deduce que λ = F y, . En general, siempre existe una


relación entre el vector de multiplicadores, λ , y el subgrupo de incógnitas de
enlace,  , asociado a enlaces no respetados por la acotación de partida, aunque
en algunas ocasiones, ésta puede presentar indeterminaciones.
Montaje de las ecuaciones de Lagrange

Combinando los resultados anteriores, las ecuaciones de Lagrange pueden


volver a escribirse como

h i 
 

Mqq φq
T
= Fq̇ ne
F (3.166)
λ

donde

Mqq representa la matriz de masa del sistema, cuadrada y simétrica que


en este caso tiene dimensión (2, 2).

3
X Solk
Mqq = Mqq (3.167)
k=1

Fq̇ ne es el vector de fuerzas generalizadas sobre el sistema, y que en este


F
caso tiene dimensión (2, 1).

Lk
3 X
X
ne Ane
j (Solk )
F
Fq̇ = F
Fq̇ (3.168)
k=1 j=1

Haciendo uso de lo presentado en el apartado anterior, el sistema anterior al-


ternativamente puede escribirse en la forma

h i 
 

Mqq Vqq = Fq̇ ne
F (3.169)



donde FFq̇ nr = Vqq  representa la contribución de las fuerzas generaliza-
das asociadas a los enlaces no respetados por la acotación de partida.
90 Dinámica

P LANTEAMIENTO DINÁMICO BASADO EN LA E NERGÍA C INÉTICA


En este apartado, a diferencia del anterior, se hace uso de la definición de
Energía Cinética para obtener la contribución del torsor de inercia al vector de
fuerzas generalizadas.
La Energía Cinética del sistema se calcula en este caso sumando las contribu-
ciones de los diferentes sólidos incluidos en el mismo, esto es,

3
1X
T (Sist) = VRI (Gk )T D(Solk ) +
2 k=1
3
1X
+ ΩRI (Solk )T H k (Solk ) (3.170)
2 k=1


Proyectando todas las expresiones anteriores en la base x yz y expresando el


resultado de forma matricial se obtiene

1 T
T (Sist) =
2
q̇ Mqq q̇

" 3  #
1 T X h iT h i
Solk T Solk
= q̇ mSolk B V k BV k
+ B II Solkk B q̇
 

2 Ω 


k=1

BV k
BSol k


donde las matrices y Ω


representan las parciales

∂   ∂  
BV k
= VRI (Gk ) x yz BΩSol k
= ΩRI (Solk ) x yz


(3.171)
∂ q̇ ∂ q̇

BV k
, particularizadas para los puntos C, D y E son


Las matrices
 
−l1 sin θ1 −l2 sin θ2
BV =  l1 cos θ1 l2 cos θ2 
0 0

   
−lg1 sin θ1 0 −l1 sin θ1 −lg2 sin θ2
BV =  lg1 cos θ1 0  y BV =  l1 cos θ1 lg2 cos θ2  .


0 0 0 0
3.8 Ejemplo 91

Las matrices BSol



k
en este caso adoptan la sencilla expresión
   
0 0 0 0
BMan

= 0 0  BBie

= 0 0 
1 0 0 1

La expresión35 para Mqq presentada en 3.171 es la que acompaña al vector


q̈ en la formulación dinámica.
Una vez obtenida la expresión de la Energía Cinética, los términos Centrífugos
y de Coriolis de la ecuación dinámica pueden calcularse a partir de la expresión

 T  T
q̇ d ∂ T (Sist) ∂ T (Sist)
Mqq q̈ − F
Fq̇ (Sist) =
dt ∂ q̇

∂q
(3.172)


donde el vector, F
Fq̇ se puede calcular a partir de la matriz de masa como
 T !
∂ T (Sist)
Fq̇ q̇ (Sist) = − M
F ˙
qq q̇ − (3.173)
∂q

donde

la derivada total de la matriz de masa se calcula como

3 
X h iT h i 
˙ Solk T
˙ k
BV ˙ Solk
B Solk


Mqq =2 mSolk BV k
+ BΩ II


k Ω
k=1
(3.174)

B˙ V
k


las matrices , particularizadas para los puntos C, D y E son


 
−l1 θ̇1 cos θ1 −l2 θ̇2 cos θ2
B˙ V =  −l1 θ̇1 sin θ1 −l2 θ̇2 sin θ2 
0 0

   
−lg1 θ̇1 cos θ1 0 −l1 θ̇1 cos θ1 −lg2 θ̇2 cos θ2
B˙ V =  lg1 θ̇1 sin θ1 0  y B˙ V =  −l1 θ̇1 sin θ1 −lg2 θ̇2 sin θ2  .


0 0 0 0
35
obviamente, ésta coincide con la que aparece en 3.167.
92 Dinámica

las matrices B ˙ Solk , particularizadas para los sólidos Man , Bie , Blo

son nulas en este caso.

la parcial de la Energía Cinética del sistema respecto a una de las coordena-


das se calcula como

3
∂ T (Sist) X ∂ T (Solk )
= (3.175)
∂ qj k=1
∂ qj

donde la parcial de la energía cinética del sólido Solk respecto a la coorde-


Sol
nada qj se expresa en términos de B V k y B Ω k según


 T  T !
∂ ∂
q̇ T mk BV k
BV k
+ BSol k
II Solkk BSol k

 

∂ qj ∂ qj Ω 


4. Implementación

4.1. Introducción
En este capítulo se describirá la implementación de un preprocesador para
la DSM basado en el sistema de Álgebra Simbólica provisto por el entorno de
programación M AT L AB –M APLE .
La librería desarrollada se implementa a dos niveles que se plasman en dos
interfaces completamente independientes:

• Interfaz Simbólico: formado por una serie estructuras y funciones que ope-
ran con tipos de dato simbólicos y que permiten al usuario definir la to-
pología del sistema mecánico y plantear las ecuaciones más típicas de la
DSM .

• Interfaz Numérico: formado por una serie de funciones y plantillas 1 que


operan con tipos de dato numéricos y que permiten al usuario resolver los
problemas DSM planteados.

Como es lógico, el interfaz numérico requiere una serie de funciones, a ex-


portar desde el interfaz simbólico, que servirán como argumento de entrada a las
plantillas numéricas mencionadas en el punto anterior.
Además, la mayoría de los elementos que soportan la definición de problemas
DSM tienen una representación dual en el interfaz simbólico y en el numérico,
por lo que ambos interfaces se documentarán de forma conjunta en los diferentes
apartados del presente Capítulo.
1

Se entiende como plantilla numérica al listado de instrucciones que se ejecutan de forma siste-
mática para dar solución a los diferentes problemas de la mecánica.
En principio, las plantillas anteriores tienen la propiedad de ser independientes del sistema me-
cánico, por lo que no necesitan ser exportados cada vez que el usuario plantea un nuevo mecanis-
mo. Lo anterior contribuye a la encapsulación del código generado, concepto al que se también se
hace referencia en otras partes de este texto.
94 Implementación

Por coherencia con la filosofía de trabajo de la librería desarrollada, explicada


ésta con ayuda de una serie de ejemplos en el Capítulo 5, las secciones dedicadas
a documentar los diferentes elementos del interfaz se dividen en los siguientes
apartados:

• Estructuras de datos: Descripción de los campos incluidos en las diferentes


estructuras empleadas como soporte en la definición del problema DSM .

• Funciones de interfaz de usuario: Descripción de las funciones que permiten


al usuario interactuar con las estructuras anteriores.

• Exportación: Funciones y/o algoritmos que permiten exportar al plano nu-


mérico las diferentes funciones y matrices generadas desde el interfaz sim-
bólico.

• Plantilla de solución: Plantillas numéricas que permiten resolver problemas


concretos de la DSM .

4.1.1. Organización del contenido del capítulo


En la seccón 4.2, se presentará el conjunto mínimo de tipos de datos y ope-
radores provistos por el sistema M AT L AB –M APLE sobre los que se sustenta el
sistema simbólico de bajo nivel para la DSM .
En las secciones 4.3 y 4.4, manteniendo la separación conceptual entre cine-
mática y dinámica, se describirá el Sistema Simbólico de Bajo Nivel para la DSM .
El sistema simbólico anterior está constituido por dos interfaces que presentan di-
ferente nivel de abstracción:
• Interfaz Analítico, que proporciona las estructuras y/o tipos de dato impres-
cindibles para el planteamiento matricial de la mecánica.
• Interfaz Cartesiano, que proporciona al usuario la funcionalidad necesaria
para plantear los problemas en el lenguaje de la mecánica vectorial, mucho
más adecuado para la descripción del sistema.
En la sección 4.5, se describirán las funciones que configuran el Sistema Sim-
bólico de Alto Nivel. El subsistema anterior proporciona al usuario un conjunto
adicional de funciones específicas para la definición de enlaces y fuerzas consti-
tutivas a partir de las primitivas del Sistema Simbólico de Bajo Nivel.
En cuanto a los problemas característicos de la DSM , éstos se clasificarán en
cinemáticos y dinámicos y se presentarán como apartados de las secciones 4.3 y
4.4 respectivamente.
4.2 El sistema simbólico mínimo 95

4.2. El sistema simbólico mínimo


Si bien la mayoría de los sistemas simbólicos tienen una gran funcionalidad, el
sistema DSM se sustenta en un reducido conjunto de operaciones que se detallan
a continuación:

• La definición de expresiones simbólicas escalares en términos de variables


simbólicas, números enteros y racionales, y funciones escalares de dichas
variables (sin , cos ,...). Los operadores permitidos son: el operador unario
signo "+" y "-", y los operadores binarios suma "+", diferencia "-", pro-
ducto "*" y cociente "/", junto con el operador potenciación racional "^".
Todos ellos con las reglas de precedencia y asociatividad típicas, que pueden
ser modificadas mediante el uso de paréntesis.

• La definición de matrices cuyos elementos son expresiones simbólicas es-


calares.

• La definición de expresiones de matrices de expresiones simbólicas. Los


operadores permitidos son: el operador unario signo "+", "-" o transpuesta
"T" y derivada parcial con respecto a un vector "Jacobian" y los operado-
res binarios suma "+", diferencia "-", producto "*".

4.3. Cinemática
En este apartado, y a modo de subsecciones, se presentarán los diferentes ni-
veles de abstracción involucrados en el planteamiento simbólico de la cinemática
de cualquier sistema mecánico.
Las secciones 4.3.1 y 4.3.2 se centran en la descripción de los tipos de dato,
estructuras y operadores básicos que aparecen en la Cinemática Analítica y que
sirven de base al planteamiento del problema cinemático, es decir:
• Variable tiempo, t, junto con el operador Derivada Total.
• Parámetros.
• Coordenadas, velocidades y aceleraciones generalizadas.
• Funciones del tiempo, en general.
• Ecuaciones geométricas, no holónomas e iniciales de posición y velocidad.
Las secciones 4.3.3 y 4.3.4 describen las estructuras y operadores básicos que
constituyen el Interfaz Cinemático Cartesiano, y permiten plantear el problema
cinemático en el lenguaje de la mecánica vectorial, es decir:
• Vectores Cartesianos.
• Puntos, junto con el operador Vector de Posición.
96 Implementación

• Bases u Orientaciones, junto con el operador Cambio de Base.


• Referencias.
• Operadores Velocidad y Velocidad Angular.
• Operadores Aceleración y Aceleración Angular.
El interfaz cinemático cartesiano, junto con los tipos de dato y operadores de la
cinemática analítica, constituyen el denominado Sistema Simbólico de Bajo Nivel
para el planteamiento simbólico de la cinemática.
Las funciones que constituyen el Sistema Simbólico de Alto Nivel, general-
mente afectan de forma conjunta a la definiciones cinemática y dinámica, por lo
que serán tratadas en una sección independiente.
Por último, la sección 4.3.5 se dedicará a la descripción de los diferentes pro-
blemas que aparecen en el planteamiento cinemático, desde el problema de posi-
ción hasta el de simulación cinemática.

4.3.1. Cinemática Analítica


En esta sección se describirán los tipos de dato y operadores básicos que sirven
de soporte al planteamiento de la cinemática analítica.

LA VARIABLE TIEMPO

Habitualmente, los motores simbólicos no soportan el concepto de derivada


respecto al tiempo.
La implementación de este operador requiere de la definición de una variable
con significado especial en el interfaz simbólico: la variable tiempo.
En el caso de la implementación propuesta, existe una variable reservada a tal
efecto que se designa por t.

PARÁMETROS
Se definen como parámetros todas aquellas variables, pj , cuya derivada total
respecto al tiempo es nula, es decir:

d
p = 0 , j = 1 . . . np (4.1)
dt j

Como ya se vio en anteriores apartados de este texto, los parámetros pueden


clasificarse en geométricos y dinámicos atendiendo a la naturaleza de los mismos,
pero en el caso del interfaz simbólico propuesto, todos ellos se almacenan en la
estructura params , cuyo elemento i-ésimo contiene los campos:
4.3 Cinemática 97

integer params(i).id → identificador de la estructura params.


string params(i).name → identificador del parámetro.
sym params(i).var → parámetro simbólico.
real params(i).value → valor numérico del parámetro.

La variable global auto_params se reserva como contador de la estructura


params.

Funciones de interfaz de usuario


La instrucción de definición de un parámetro se escribe:
[sym prm_i]=new_param(string name, real value)

Argumentos de entrada
name → identificador2 del parámetro simbólico.
value → valor numérico propuesto para dicho parámetro.

Argumentos de salida
prm_i → variable simbólica.

El campo name permite al usuario obtener la posición del parámetro en el


array params haciendo uso de la instrucción:
[i]=select_by_name(struct params, string name)

Así, i puede emplearse para acceder directamente a la estructura params.


El argumento de salida, prm_i , permite al usuario emplear la variable sim-
bólica generada en cualquier expresión simbólica introducida con posterioridad.
Exportación
En el plano numérico, el vector de parámetros se inicializa haciendo uso de la
función exportada a tal efecto:
[real *prm]=prm_init()

En principio, la variable de salida puede tener cualquier nombre, aunque por


legibilidad del código se recomienda emplear prm.
2
El interfaz simbólico está dispuesto de tal forma que el usuario no puede introducir dos iden-
tificadores iguales haciendo uso de la misma instrucción, ya que esto supondría la presencia de
dos elementos iguales en la misma estructura. Este chequeo de unicidad se implementa de forma
análoga para el resto de instrucciones del tipo new.
98 Implementación

La función anterior, en la sintaxis propia de M AT L AB adopta la forma:


function [prm]=prm_init()

prm1_name=params(1).value;

..........................

prmi_name=params(i).value;

..........................

prmp_name=params(np).value;

prm(1)=prm1_name;

.................

prm(i)=prmi_name;

.................

prm(n)=prmp_name;

En el plano simbólico, el vector de reales anterior tiene su equivalencia en


el array de variables simbólicas prmv , que será recorrido en el algoritmo de
exportación.
El vector prmv se obtiene a partir de la estructura params como
prmv = [ params(1).var; ...
params(i).var; ...
params(n).var ]

Con el objeto de generar un código más eficiente, en el resto de funciones


exportadas, cualquier referencia a la variable simbólica prmv(i) se escribe
prm(i).

C OORDENADAS , VELOCIDADES Y ACELERACIONES

Coordenadas de partida y coordenadas auxiliares


Tal como describe en el capítulo teórico, las Coordenadas de Partida son aque-
llas en términos de las cuales se define la posición u orientación de los sólidos
presentes en el sistema.
Las Coordenadas Auxiliares son aquellas que se introducen en la formulación
con el objeto de simplificar el planteamiento de ciertas ecuaciones 3 . La diferencia
4.3 Cinemática 99

con las coordenadas de partida radica en que una coordenada auxiliar siempre
puede definirse en términos de las de partida.
Desde el punto de vista operativo, una coordenada auxiliar no presenta dife-
rencias respecto a una coordenada de partida, por lo que ambas serán almacenadas
en la misma estructura.
Estructuras de datos
Las coordenadas generalizadas se recogen en la estructura qs , cuyo elemen-
to i-ésimo contiene los campos:
integer qs(i).id → identificador numérico de la estructura qs.
string qs(i).name → identificador de la variable.
sym qs(i).var → coordenada generalizada simbólica.
real qs(i).value → valor inicial de la coordenada.
boolean qs(i).isaux → 1 si la coordenada es auxiliar, 0 para el resto.

Las velocidades generalizadas se recogen en la estructura dqs , cuyo ele-


mento i-ésimo contiene los campos:
integer dqs(i).id → identificador numérico de la estructura dqs.
string dqs(i).name → identificador de la variable .
sym dqs(i).var → velocidad generalizada simbólica.
real dqs(i).value → valor inicial de la velocidad.
boolean dqs(i).isaux → 1 si la velocidad es auxiliar, 0 para el resto.

Las aceleraciones generalizadas se recogen en la estructura ddqs , cuyo ele-


mento i-ésimo contiene los campos:
integer ddqs(i).id → identificador de la estructura ddqs.
string ddqs(i).name → identificador de la variable .
sym ddqs(i).var → aceleración generalizada simbólica.
real ddqs(i).value → valor inicial de la aceleración4 .
boolean ddqs(i).isaux → 1 si la aceleración es auxiliar, 0 para el resto.
La variable global auto_qs se reserva como contador de las tres estructuras
anteriores.
Funciones de interfaz de usuario
En el caso de la implementación propuesta, una coordenada se introduce en la
3
ya sean éstas cinemáticas ó dinámicas
4
Este campo no es estrictamente necesario.
100 Implementación

estructura qs mediante la instrucción:


[sym q_i, dq_i, ddq_i]=new_q(string name, ...

[real valuep, ...

[real valuev]])

Argumentos de entrada
name → identificador de la variable simbólica.
valuep → valor inicial de la coordenada generalizada.
valuev → valor inicial de la velocidad generalizada.

Argumentos de salida
q_i → coordenada simbólica.
dq_i → velocidad simbólica correspondiente5 .
ddq_i → aceleración simbólica correspondiente5 .

Por su parte, una coordenada auxiliar se introduce en la estructura qs me-


diante la instrucción:
[sym q_i, dq_i, ddq_i]=new_aux_q(string name, ...

[real valuep, ...

[real valuev]] )

Los argumentos de salida q_i, dq_i y ddq_i permiten al usuario em-


plear las variables generadas en cualquier expresión simbólica que aparezca en el
fichero de definición del mecanismo.
Exportación
En el plano numérico, el vector q se inicializa mediante la función
[real *q]=q_init().

El argumento de salida, que en principio puede tomar cualquier nombre, re-


presenta el valor inicial del vector de coordenadas generalizadas.
5
Las velocidades y aceleraciones se generan de forma automática anteponiendo al nombre de la
coordenada los prefijos d y dd respectivamente. Una vez generadas, las variables anteriores se
introducen en las estructuras dqs y ddqs con el mismo índice con el que aparece la coordenada
en la estructura qs .
4.3 Cinemática 101

La función anterior, en la sintaxis propia de M AT L AB , adopta la forma:


function [q]=q_init()

q1_name=q(1).value;

...................

qi_name=q(i).value;

...................

qp_name=q(p).value;

q(1)=q1_name;

.............

q(i)=qi_name;

.............

q(p)=qp_name;

De forma análoga, los vectores q̇ y q̈ se inicializan empleando las funciones


[real *dq]=dq_init() y [real *ddq]=ddq_init() .
En el seno de cualquier plantilla numérica, el valor instantáneo de la i-ésima
coordenada, velocidad o aceleración generalizada se corresponde con el elemento
i-ésimo de los vectores q, dq y ddq respectivamente.
En el plano simbólico, los vectores anteriores tienen su equivalencia en los
arrays de variables simbólicas qv, dqv y ddqv , que serán recorridos en el
algoritmo de exportación.
El vector de coordenadas simbólicas, qv , se obtiene a partir de la estructura
dqs según

qv = [ qs(1).var; ...
qs(i).var; ...
qs(p).var ]

Los vectores dqv y ddqv se obtienen de forma análoga recorriendo las


estructuras dqs y ddqs respectivamente.
En el proceso de exportación, el campo booleano isaux de la estructura
qs se emplea para reordenar los vectores simbólicos anteriores de tal forma que
102 Implementación

las variables auxiliares aparecen después de las de partida. El proceso de reor-


denamiento anterior puede dar lugar a sistemas de ecuaciones más estructurados
tanto en cinemática como en dinámica.
En el anexo C.1 se describirá un posible tratamiento numérico para coorde-
nadas, velocidades y aceleraciones que, basado en el ordenamiento propuesto,
permitirá agilizar el proceso de integración.

F UNCIONES DEL TIEMPO , EN GENERAL

Para las relaciones rehónomas se propone una forma general

φ (q, z, t) = 0 (4.2)

donde

 T
z= z1 ( t ) . . . zi ( t ) . . . znz ( t ) (4.3)

es un vector de funciones dependientes del tiempo.


Tal como se desprende de las ecuaciones 4.2 y 4.3, los elementos de los vec-
tores z , ż y z̈ forman parte de las diferentes ecuaciones rehónomas planteadas
por el usuario en el interfaz simbólico.
En el plano numérico, los vectores anteriores aparecen como simples
variables, cuyos valores son asignados mediante llamadas a las funciones
z=zetas(prm, t), dz=dzetas(prm, t) y ddz=ddzetas(prm, t) , expor-
tadas desde el interfaz simbólico a tal efecto.
De esta forma se consigue encapsular y hacer más general el código exportado.
Una simple modificación de las funciones zetas(prm, t), dzetas(prm, t) y
ddzetas(prm, t) permite realizar nuevas simulaciones del mecanismo sin te-
ner que modificar el resto de ficheros exportados desde el interfaz simbólico.
La citada encapsulación permite asimismo la integración del código generado
en programas de simulación de propósito general como por ejemplo S IMU L INK .
Por otra parte, las velocidades y aceleraciones de partida están relacionadas
por las derivadas de la ecuación 4.2 de forma que

φq q̇ = −φt − φz ż
φq q̈ = − φ̇q q̇ − φ̇t − φ̇z ż − φz z̈ (4.4)

donde ż y z̈ se calculan de forma sencilla a partir de la definición 4.3.


4.3 Cinemática 103

Estructuras de datos
Las funciones del tiempo se recogen en la estructura zs , cuyo elemento
i-ésimo contiene los campos:
integer zs(i).id → identificador de la estructura zs.
string zs(i).name → identificador de la variable .
sym zs(i).expr → expresión simbólica.

Las derivadas de las anteriores se recogen en la estructura dzs , cuyo ele-


mento i-ésimo contiene los campos:
integer dzs(i).id → identificador de la estructura dzs.
string dzs(i).name → identificador de la variable .
sym dzs(i).expr → primera derivada total6 de la expresión expr.

Las derivadas de las anteriores se recogen en la estructura ddzs , cuyo ele-


mento i-ésimo contiene los campos:
integer ddzs(i).id → identificador de la estructura ddzs.
string ddzs(i).name → identificador de la variable .
sym ddzs(i).expr → segunda derivada total de la expresión expr.

La variable global auto_zs se reserva como contador de las tres estructuras


anteriores.
Funciones de interfaz de usuario
En el caso de la implementación propuesta, una función del tiempo se intro-
duce en la estructura zs mediante la instrucción:
[sym z_i, dz_i, ddz_i]=new_z(string name, sym exp)

Argumentos de entrada
name → identificador de la variable simbólica.
exp → expresión simbólica.

Argumentos de salida
z_i → sustitución para la expresión simbólica exp.
dz_i → sustitución para la primera derivada total de exp.
ddz_i → sustitución para la segunda derivada total de exp.

Los argumentos de salida z_i, dz_i y ddz_i permiten al usuario em-


plear las variables generadas en cualquier expresión simbólica que aparezca en el
fichero de definición del mecanismo.
6
obtenida de forma automática.
104 Implementación

Exportación
En el plano numérico, el vector de funciones del tiempo, z (t) , se evalúa en
cada instante de tiempo, haciendo uso de la función exportada a tal efecto
[real *z]=zetas(prm, t) ,
El argumento de salida, que en principio puede tomar cualquier nombre, re-
presenta el valor del vector de funciones del tiempo en el instante de tiempo, t.
La función anterior, en la sintaxis propia de M AT L AB adopta la forma:
function [z]=zetas(prm, t)

z=zeros(nz,1);

z(1)=z1;

.......

z(i)=zi;

.......

z(n)=zn;

function z1=z1_fun(prm, t)

..........................

function zi=zi_fun(prm, t)

..........................

function zn=zn_fun(prm, t)

..........................

De forma análoga, los vectores ż (t) y z̈ (t) se evalúan respectivamente em-


pleando las funciones
[real *dz]=dzetas(prm, t) y [real *ddz]=ddzetas(prm, t).

En el seno de cualquier plantilla numérica, el valor instantáneo de la i-ésima


función del tiempo o cualquiera de sus derivadas se corresponde con el elemento
i-ésimo de los vectores z, dz y ddz.
4.3 Cinemática 105

En el plano simbólico, los vectores anteriores tiene su equivalencia en los


arrays de variables simbólicas zv, dzv y ddzv , que serán recorridos en el
algoritmo de exportación.
El vector zv se obtiene recorriendo la estructura zs como:
zv = [ zs(1).expr; ...
zs(i).expr; ...
zs(n).expr ]

Los vectores dzv y ddzv se obtienen de forma análoga recorriendo las


estructuras dzs y ddzs respectivamente.

EL OPERADOR DERIVADA TOTAL

La derivada de cualquier expresión simbólica, f , se calcula como

df ∂f ∂f ∂f
= v̇1 + . . . + v̇n + (4.5)
dt ∂ v1 ∂ vn ∂t

donde vj , j = 1 . . . n , representa el grupo de variables simbólicas depen-


dientes del tiempo que aparecen en f . Si, como es habitual, dichas variables se
organizan en vectores, la derivada total se escribe

df ∂f
dt
= Fw 1
ẇ1 + . . . + Fw m
ẇm +
∂t
(4.6)

donde

w k , k = 1 . . . m es el grupo de vectores dependientes del tiempo presentes


en f .

Fw k
, k = 1 . . . m es el jacobiano de f respecto al vector w k .

En el caso de la implementación propuesta, el concepto de derivada total se


entiende como

df ∂f
dt
= Fq q̇ + Fz ż + Fq̇ q̈ + Fż z̈ + ∂t
(4.7)
106 Implementación

Dicha operación, en la sintaxis propia de M AT L AB se expresa:


df = jacobian(f, qv’)*dqv + jacobian(f, zv’)*dzv + ...

jacobian(f, dqv’)*ddqv + jacobian(f, dzv’)*ddzv + ...

diff(f, t);

La función total_derivative(sym f) , accesible desde el interfaz simbó-


lico, implementa el operador presentado en esta sección.

4.3.2. Ecuaciones Cinemáticas


E CUACIONES G EOMÉTRICAS
Tal como se vio en el apartado teórico, la definición del sistema mecánico
conlleva, en el caso más general, el planteamiento de relaciones geométricas no
lineales entre las coordenadas de partida (ecuación 2.2).
En el contexto del interfaz simbólico presentado existe la posibilidad de intro-
ducir coordenadas auxiliares, lo cual implica la presencia de relaciones geométri-
cas entre las anteriores y las coordenadas de partida.
Desde el punto de vista programático, la solución adoptada para identificar
este tipo de ecuaciones es similar a la presentada en la sección 4.3.1 para distinguir
las coordenadas de partida de las auxiliares, es decir: un campo booleano.
Estructuras de datos
Las ecuaciones geométricas se almacenan en la estructura Cp , cuyo elemen-
to i-ésimo contiene los campos:
integer Cp(i).id → identificador de la estructura Cp.
string Cp(i).name → identificador de la ecuación.
sym expr. Cp(i).eq → ecuación de restricción.
boolean Cp(i).isaux → 1 si la ecuación es de definición de una coorde-
nada auxiliar y 0 para el resto.
La variable global auto_Cp se reserva como contador de la estructura Cp.
Funciones de interfaz de usuario
En el caso de la implementación propuesta, una ecuación de restricción 7 se
introduce en la estructura Cp haciendo uso de la instrucción
new_Cp(string name, sym expr. eq, [bool isaux])
7
Las ecuaciones de restricción siempre se escriben en la forma normalizada eq=0.
4.3 Cinemática 107

Argumentos de entrada
name → identificador de la nueva ecuación.
eq → ecuación de restricción geométrica.
isaux → 1 si la ecuación es de definición de una coordenada auxiliar,
0 para el resto.

Argumentos de salida
Ninguno.

Exportación
Con el fin de evaluar el error de posición en el instante de tiempo t , se
exporta la función:
[real *Cp]=Cp(prm, q, z, t).

Dicha función se escribe:


function [Cp]=Cp(prm, q, z, t)

Cp=zeros(g,1);

Cp(1)= ...;
.......
Cp(i)= ...;
.......
Cp(g)= ...;

En el plano simbólico, el vector φ tiene su equivalente en el vector de expre-


siones simbólicas Cpv , que es recorrido en el algoritmo de exportación.
El vector Cpv se obtiene a partir de la estructura Cp según:
Cpv = [ Cp(1).eq ; ...
Cp(i).eq ; ...
Cp(g).eq ].

Durante el proceso de exportación, el campo booleano isaux de la estruc-


tura Cp se emplea para reordenar el vector simbólico Cpv de tal forma que las
ecuaciones en las que se definen las variables auxiliares aparecen después de las
que no lo son.
Tal como se explica en el anexo C.1, el proceso de reordenamiento de ecuacio-
nes, junto con el de reordenamiento de coordenadas, permite estructurar de forma
eficiente las ecuaciones de movimiento del sistema mecánico.
108 Implementación

E CUACIONES I NICIALES DE P OSICIÓN


Las ecuaciones geométricas, en el caso más general, no son suficientes para
determinar de forma unívoca la posición del mecanismo. Sin embargo, el usua-
rio puede estar interesado en plantear restricciones adicionales para poder fijar
completamente la posición del sistema en el instante inicial de la simulación.
Así pues, las ecuaciones iniciales de posición son aquellas que se introducen
con el objetivo de resolver la posición de montaje inicial del sistema mecánico.
Nótese que, en este caso, aplicar una restricción de montaje sobre una coorde-
nada auxiliar puede resultar particularmente cómodo.
Estructuras de datos
Las ecuaciones iniciales de posición se almacenan en la estructura Cpini ,
cuyo elemento i-ésimo contiene los campos:
integer Cpini(i).id → identificador de la estructura de datos.
string Cpini(i).name → identificador de la ecuación .
sym expr. Cpini(i).eq → ecuación.

La variable global auto_Cpini se reserva como contador de la estructura


Cpini.

Funciones de interfaz de usuario


En el caso de la implementación propuesta, una ecuación geométrica inicial
se introduce en la estructura Cpini haciendo uso de la instrucción
new_Cpini(string name, sym expr. eq)

Argumentos de entrada y salida


los argumentos de entrada y salida de las instrucciones new_Cpini son
análogos a los de new_Cp .

Exportación
En el plano numérico, el vector de ecuaciones geométricas iniciales se evalúa
haciendo uso de la función exportada a tal efecto
[real *Cp_t0]=Cp_t0(prm, q, z, t),

que se implementa de forma análoga a la presentada en la sección anterior para


las ecuaciones geométricas.
En el plano simbólico, el vector de ecuaciones geométricas iniciales, φ i , se
corresponde con el vector de expresiones simbólicas Cp_t0v , recorrido en el
algoritmo de exportación.
4.3 Cinemática 109

El vector Cp_t0v se obtiene a partir de la estructura Cpini según:


Cp_t0v = [ Cpini(1).eq ; ...
Cpini(i).eq ; ...
Cpini(g).eq ]

El resto de funciones exportadas que derivan de la estructura Cpini , se tra-


tarán en la sección 4.3.5.

E CUACIONES N O H OLÓNOMAS
Como ya se introdujo en el apartado teórico, las velocidades generalizadas
estarán relacionadas por las derivadas de las ecuaciones geométricas y por un
conjunto, r, de relaciones no holónomas (ecuación 2.3).
Estructuras de datos
Las ecuaciones no holónomas se almacenan en la estructura Cv , cuyo ele-
mento i-ésimo contiene los campos:
integer Cv(i).id → identificador de la estructura de datos.
string Cv(i).name → identificador de la ecuación .
sym expr. Cv(i).eq → ecuación.

La variable global auto_Cv se reserva como contador de la estructura Cv.


Funciones de interfaz de usuario
En el caso de la implementación propuesta, una ecuación de restricción no
holónoma se introduce en la estructura Cv haciendo uso de la instrucción
new_Cv(string name, sym expr. eq)

Argumentos de entrada
name → identificador de la nueva ecuación.
eq → ecuación de restricción no holónoma, (eq=0).

Argumentos de salida
Ninguno.

Exportación
Las funciones exportadas que derivan de la estructura Cv , se documentan en
el apartado 4.3.5 junto con el problema de velocidad.
110 Implementación

E CUACIONES I NICIALES PARA V ELOCIDADES


Las ecuaciones iniciales para velocidades son aquellas restricciones adicio-
nales introducidas con el objetivo de especificar completamente la velocidad del
sistema en el instante inicial de la simulación.
Estructuras de datos
Las ecuaciones iniciales para velocidades se almacenan en la estructura
Cvini , cuyo elemento i-ésimo contiene los campos:

integer Cvini(i).id → identificador de la estructura de datos.


string Cvini(i).name → identificador de la ecuación .
sym expr. Cvini(i).eq → ecuación.

La variable global auto_Cvini se reserva como contador de la estructura


Cvini.

Funciones de interfaz de usuario


Una ecuación inicial para velocidades se introduce en la estructura Cvini ha-
ciendo uso de la instrucción:
new_Cvini(string name, sym expr. eq)

Argumentos de entrada y salida


los argumentos de entrada y salida de la instrucción new_Cvini son
análogos a los de new_Cv .

Exportación
Las funciones exportadas que derivan de la estructura Cvini , se documentan
en el apartado 4.3.5 junto con el problema de velocidad inicial.

E CUACIONES PARA ACELERACIONES


Tal como se explica en el apartado teórico, las aceleraciones generalizadas
están relacionadas por las derivadas de las ecuaciones para velocidades (ecuación
2.5).
En este caso, no se requieren estructuras adicionales puesto que todos los tér-
minos que componen la ecuación 2.5 pueden obtenerse por derivación de expre-
siones ya definidas.
4.3 Cinemática 111

4.3.3. Interfaz Cinemático Cartesiano


Las secciones anteriores de este texto describen las estructuras básicas que
dan soporte al planteamiento de la cinemática desde el punto de vista analítico
(vectores de coordenadas, ecuaciones, etc ...).
El interfaz analítico que presentan las estructuras anteriores, en ocasiones po-
co adecuado, necesita de un interfaz complementario que sea compatible con la
forma de razonar que caracteriza a los humanos.
En este contexto, el interfaz cartesiano permite la interacción del usuario con
el Sistema Simbólico de Bajo Nivel en el lenguaje de la mecánica vectorial, mucho
más adecuado para la descripción de los diferentes aspectos involucrados en la
definición del problema mecánico.
Las siguientes secciones se dedicarán a presentar los elementos básicos del
interfaz cinemático cartesiano, es decir: puntos, vectores cartesianos, matrices de
cambio de base (bases) y referencias.

P UNTO
En lo sucesivo, un punto se entenderá como la representación matemática de
la entidad geométrica correspondiente. Así, un punto, P j , queda definido por el
vector de posición cuyo origen es un punto arbitrario de referencia, O , y cuyo
extremo está situado en P j .
Es decir, por lo que respecta a su representación interna, un punto siempre se
define respecto a otro especificando su vector de posición relativo, lo cual simpli-
fica la definición geométrica del sistema.
Estructuras de datos
Los puntos se recogen en la estructura pts , cuyo elemento i-ésimo contiene
los campos:
integer pts(i).id → identificador numérico de la estructura pts .
string pts(i).name → identificador del punto.
pt pointer pts(i).pt_ptr → puntero a punto origen del vector de po-
sición.
sym 3-tuple pts(i).lcoords → coordenadas de la 3-tupla de posición.
or pointer pts(i).or_ptr → puntero a base en la que se expresa la 3-
tupla anterior.
La variable global auto_pts se reserva como contador de la estructura
pts.
112 Implementación

La estructura de puntos se inicializa introduciendo como primer elemento el


origen de la referencia absoluta, OAbs , denominado org0 en el interfaz simbó-
lico. En este caso, el vector de posición correspondiente al punto anterior queda
definido por una 3-tupla nula en la base de proyección fija a la referencia Abs .
Funciones de interfaz de usuario
Un punto se introduce en la estructura pts mediante la instrucción:
new_pt(string name, string org_pt_name, ...
sym 3-tuple lcoords, string or_name)

Argumentos de entrada
name → identificador del punto a introducir en la estructura de puntos.
org_pt_name → punto origen del vector de posición cuyo extremo es
name .
lcoords → 3-tupla de posición con origen en name y cuyo extremo
es org_pt_name .
or_name → base de proyección en la cual se introduce lcoords .

Argumentos de salida
Ninguno.

V ECTOR C ARTESIANO
Se define como vector cartesiano al conjunto formado por una 3-tupla y la
base del espacio tridimensional euclídeo en la que dicha 3-tupla se proyecta.
Dado que los vectores cartesianos son generalmente empleados como herra-
mienta en el planteamiento de ecuaciones geométricas y/o cinemáticas, no es ne-
cesaria la existencia de una estructura que almacene elementos de este tipo.
Desde el punto de vista operativo, los vectores cartesianos pueden represen-
tarse mediante 3-tuplas siempre que el usuario sea consciente de la base de pro-
yección asociada a cada una de ellas cuando realiza operaciones vectoriales.
Obviamente, lo correcto hubiera sido implementar el tipo de dato vector 8 , jun-
to con los operadores básicos del álgebra vectorial, pero lamentablemente el len-
guaje de programación de M AT L AB no es suficientemente flexible en cuanto a
definición de tipos y sobrecarga de operadores.
8
incluyendo los campos:
sym 3-tuple vector.coords → coordenadas de la 3-tupla.
or pointer vector.or_ptr → puntero a base de proyección.
4.3 Cinemática 113

BASE
En el espacio vectorial euclídeo9 , puede establecerse una base de 3 vectores
linealmente independientes e1 , e2 y e3 , que permita expresar un vector cual-
quiera, v , como combinación lineal,

3
X
v= v i ei
i=1

de tal forma que los coeficientes vi son las coordenadas del vector v en la
base formada por los vectores ei , i = 1 . . . 3 .
En lo sucesivo, salvo indicación expresa de lo contrario, las bases se supondrán
ortonormales, es decir, formadas por vectores unitarios y mutuamente perpendi-
culares, verificándose

ei · ej = δij (4.8)

donde δij = 1 cuando i = j y δij = 0 en cualquier otro caso.


Por otra parte, una base ortonormal de vectores ei , i = 1 . . . 3 se denomina
triedro directo si se satisfacen las relaciones

e1 ∧ e 2 = e 3 , e2 ∧ e 3 = e 1 , e3 ∧ e 1 = e 2 (4.9)

Por convenio, en mecánica, todas las bases empleadas cumplen las relaciones
anteriores, por lo que en este texto se entenderá que todas las bases ortonormales
son triedros directos.
La matriz de cambio de base
Dadas dos bases cualesquiera, bi y bj , las componentes de un vector u en las
bases bi y bj se relacionan según:

  h i bj  
u bi
= I u bj
(4.10)
bi

h i bj
donde I es la matriz de cambio de base que transforma componentes en
bi
bj a componentes en bi .
9
con métrica euclídea.
114 Implementación

La matriz anterior se expresa en términos de los versores10 de la base bj ,


b
ekj , k = 1 . . . 3 , proyectados en la base bi según:

h i bj h i
b b b
I = e1j e2j e3j
bi bi

Por lo que respecta a su representación interna, una nueva base se define a


partir de la matriz de cambio de base que transforma componentes en dicha base
a componentes en otra base ya definida. En este contexto, la ecuación 4.10 puede
volverse a escribir como

  h i b1 h i b2 h i bk h i bj  
u bi
= I I ... I ... I u bj
(4.11)
bi b1 bk −1 bj −1

donde ahora

h i bj h i b1 h i b2 h i bk h i bj
I = I I ... I ... I (4.12)
bi bi b1 bk −1 bj −1

siendo bk , k = 1 . . . j − 1 las orientaciones intermedias entre bi y bj .


Tal como se describe en la sección 4.5, la ecuación 4.12 es el principio sobre
el que se fundamenta la implementación del operador cambio de base.
Estructuras de datos
Las bases se recogen en la estructura ors , cuyo elemento i-ésimo contiene
los campos:
integer ors(i).id → identificador numérico para la estructura ors .
string ors(i).name → identificador de la base.
or pointer ors(i).or_ptr → base origen de la base generada
3x3 sym matrix ors(i).matrix → matriz de cambio de base. La base
propuesta debe ser un triedro directo ortonormal.
La variable global auto_ors se reserva como contador de la estructura
ors .

La estructura de bases se inicializa introduciendo como primer elemento la


base del sistema de referencia cartesiano, bAbs ≡ x yz , denominada or0 en
el interfaz simbólico. En este caso, la matriz de cambio de base asociada a la
orientación or0 es la identidad.
10
vectores que cumplen las relaciones 4.8 y 4.9.
4.3 Cinemática 115

En el contexto de la dinámica, la base anterior se considerará de orientación


fija respecto a la referencia inercial.
Funciones de interfaz de usuario
Una base se introduce en la estructura ors haciendo uso de la instrucción:
new_orientation(string name, string base_name, ...

3x3 sym matrix base_matrix)

Argumentos de entrada
name → identificador de la base a introducir en la estructura ors .
base_name → base origen, a partir de la cual se define la base name .
base_matrix → matriz de cambio de base que expresa los vectores
de la base name en la base base_name .

Argumentos de salida
Ninguno.

Tal como se describe en la siguiente sección, existen funciones de más alto


nivel que permiten definir bases en términos de argumentos más intuitivos: giros
elementales, parámetros de Euler , etc ...

R EFERENCIA C ARTESIANA
El concepto de referencia11 representa conceptualmente al de observador, el
cual se caracteriza por su posición y orientación en el espacio. Matemáticamen-
te, una referencia queda definida mediante un punto (posición) y una matriz de
cambio de base (orientación).
Así, un sistema de referencia cartesiano o referencia cartesiana, Ref i , se
define en términos del conjunto {Oi , b i } donde
• Oi es un punto que representa el origen del sistema de referencia.
• b i es una base de proyección ortonormal.

11
En la literatura frecuentemente se emplea la denominación marker, pero el autor prefiere la
de referencia ya que se corresponde con un concepto físico bien definido, anterior a la era del
computador, que posee sus mismas características.
116 Implementación

Estructuras de datos
Las referencias se recogen en la estructura refs , cuyo elemento i-ésimo
contiene los campos:
integer refs(i).id → identificador numérico para la estructura refs .
string refs(i).name → identificador de la referencia.
pt pointer refs(i).pt_ptr → puntero al punto origen de la referencia.
or pointer refs(i).or_ptr → puntero a la base de la referencia.

La variable global auto_refs se reserva como contador de la estructura


refs .

La estructura de referencias se inicializa introduciendo como primer elemento


el sistema de referencia cartesiano, Abs ≡ {OAbs , x yz } . La referencia anterior,
definida por el conjunto {org0, or0} , recibe el nombre de ref0 en el interfaz
simbólico.
Funciones de interfaz de usuario
Una referencia se introduce en la estructura refs haciendo uso de la ins-
trucción:
new_ref(string name, string pt_name, string or_name)

Argumentos de entrada
name → identificador de la referencia a introducir en la estructura
refs .
pt_name → identificador del punto origen de la referencia.
or_name → identificador de la base de proyección de la referencia.

Argumentos de salida
Ninguno.

4.3.4. Operadores sobre los elementos del Interfaz


La utilidad de las estructuras del interfaz cartesiano definidas en el apartado
anterior se pone de manifiesto cuando sobre éstas se definen los operadores:
• Cambio de base.
• Vector de posición.
• Velocidad y velocidad angular.
• Aceleración y aceleración angular.
Estos operadores permiten al usuario redactar expresiones simbólicas en un
lenguaje mucho más ágil, es decir, más comprensible para los humanos.
4.3 Cinemática 117

En las siguientes secciones se presentan, junto con una breve descripción teó-
rica, las funciones que implementan los operadores anteriores.

O PERADOR DE C AMBIO DE BASE


Con el propósito de simplificar la escritura de ecuaciones, se define el operador
de cambio de base (ecuación 4.12) sustentado en la estructura de orientaciones.

bk
b1

bd

bo

h i bo h ibd −1 h ibk −1 h i bo
I = I ... I ... I
bd bd bk b1

Figura 4.1: La matriz de cambio de base y el diagrama de orientaciones

Así, el operador (matriz) de cambio de base entre dos orientaciones cuales-


quiera se obtiene como argumento de salida de la función:
[3x3 sym matrix Ado]=or_matrix(string base_o, base_d)

Argumentos de entrada
base_o → base origen.
base_d → base destino.

Argumentos de salida
h i bo
Ado → matriz de cambio de base I , de origen a destino.
bd
118 Implementación

Así, si u_o y u_d son las componentes del mismo vector expresadas en
las bases base_o y base_d respectivamente, ambas 3-tuplas se relacionan
según:
u_d = Ado*u_o

or_matrix(b_o, b_d)

bo bd

Diagrama Orientaciones bo → xyz Diagrama Orientaciones bd → xyz

Si No No Si
¿ bd ? ¿ bo ?

h i bo h i bd
I I
xyz xyz

h i bo h i bo h i bd  T
I
bd
I = I
bd bo

h i bo h i bo h i bd T
I = I I
bd xyz xyz

Ado Ado

Ado

Figura 4.2: Algoritmo empleado para calcular la matriz de cambio de base

O PERADOR V ECTOR DE P OSICIÓN


Se define como vector de posición, P o P f , al vector cartesiano cuyo origen es
el punto P o y cuyo extremo es el punto P f .
4.3 Cinemática 119

Pk

 
P k P f −1 bf −1
P f −1
 
P1Pk bk

P1
 
P f −1 P f bf
 
PoP1 b1

Po Pf
       
PoPf bj
= P o P 1 b + . . . P k−1 P k b . . . + P f −1 P f b
j j j

Figura 4.3: El vector de posición y el diagrama de posiciones

El operador vector de posición se implementa a través de la siguiente función:


[sym 3-tuple Pofv]=position_vector(string P_o, ...

string P_f, string b_j)

Argumentos de entrada
P_o → punto origen del vector de posición.
P_f → punto extremo del vector de posición.
b_j → identificador de la base en la que se proyecta el vector anterior.

Argumentos de salida
pvect → vector de posición, expresado en la base base .

O PERADORES DE V ELOCIDAD
En un contexto general, pueden aparecer diferentes referencias (observadores)
con movimiento relativo entre sí.
120 Implementación

position_vector(P_o, P_f, b_j)

Po Pf

Diagrama Posiciones P o → OAbs Diagrama Posiciones P d → OAbs

Si No No Si
¿ Pf ? ¿ Po ?

   
P o OAbs bj
P f OAbs bj

     
PoPf bj
PoPf bj
= − P f P o bj

     
PoPf bj
= P o OAbs bj − P f OAbs bj

Pofv Pofv

Pofv

Figura 4.4: Algoritmo empleado para calcular el vector de posición

Evidentemente, los vectores velocidad y aceleración de un punto son diferen-


tes según la referencia desde la que se observa el movimiento.
Así, en esta sección, se presentan las expresiones que permiten relacionar la
velocidad de un punto para observadores situados en referencias distintas.
Vector velocidad de un punto
La velocidad de un punto P , para un observador situado en la referencia R ,
se define como la derivada temporal

d OR P
VR (P ) = d t (4.13)
R

donde OR es un punto fijo en la referencia R .


4.3 Cinemática 121

R1

R2
OR1

P
OR2

Figura 4.5: Composición de movimientos en referencias distintas

La regla de composición de velocidades permite relacionar la velocidad de un


punto para observadores situados en referencias distintas, de tal forma que

 
VR2 (P ) = VR2 (OR1 ) + ΩR2 (R1 ) ∧ OR1 P + VR1 (P ) (4.14)

donde

• ΩR2 (R1 ) representa la velocidad angular de la referencia R1 para un


observador situado en la referencia R2 .

• El término que aparece entre corchetes,

VR2 (OR1 ) + ΩR2 (R1 ) ∧ OR1 P ,


representa la velocidad de un punto, que perteneciendo cinemáticamente a
la referencia R1 , estuviese situado en la misma posición que P y recibe
el nombre de velocidad de arrastre.

• VR1 (P ) representa la velocidad del punto P para un observador situado


en la referencia R1 y recibe el nombre de velocidad relativa.
122 Implementación

Operador Velocidad
El operador velocidad de un punto, para un observador situado en una refe-
rencia se implementa por medio de la siguiente función:
[sym 3-tuple vvect]=velocity_vector(string punto, ...

string ref_obs, string proy_or_name)

Argumentos de entrada
punto → punto del cual quiere calcularse la velocidad.
ref_obs → referencia donde se sitúa el observador.
proy_or_name → identificador de la base en la que se proyecta el
vector velocidad.

Argumentos de salida
vvect → vector velocidad, expresado en la base proy_or_name .

Operador Velocidad de Arrastre


El operador velocidad de arrastre de un punto en una referencia, para un obser-
vador situado en otra referencia, se implementa por medio de la siguiente función:
[sym 3-tuple vvect]=ref_velocity_vector(string punto, ...

string ref, string ref_obs, string proy_or_name)

Argumentos de entrada
punto → punto del cual se quiere calcular la velocidad de arrastre.
ref → referencia que indica la pertenencia cinemática de punto .
ref_obs → referencia donde se sitúa el observador.
proy_or_name → identificador de la base en la que se proyecta el
vector velocidad12 .

Argumentos de salida
Ninguno.

12
La instrucción anterior podría entenderse como: calcular la velocidad de punto, como cinemá-
ticamente perteneciente a la referencia ref, para un observador situado en la referencia ref_obs,
expresando el resultado en la base proy_or_name. Resulta particularmente útil para introducir
condiciones de rodadura sin deslizamiento.
4.3 Cinemática 123

Operador Velocidad Angular


El operador velocidad angular de una orientación respecto a otra se imple-
menta por medio de la función:
[sym 3-tuple omvect]=omega_vector(string or_name_1, ...

string or_name_2, string proy_or_name)

Argumentos de entrada
or_name_1 → orientación de la cual se calcula la velocidad angular.
or_name_2 → orientación en la que se sitúa el observador.
proy_or_name → identificador de la base en la que se proyecta el
vector velocidad angular13 .

Argumentos de salida
omvect → vector velocidad angular

O PERADORES DE ACELERACIÓN
La aceleración de un punto P , para un observador situado en la referencia R ,
se expresa como

d VR (P )
AR (P ) = . (4.15)
dt R

Derivando en el tiempo y respecto a la referencia R2 la ecuación 4.14 se


obtiene


d ΩR2 (R1 )
AR2 (P ) = AR2 (OR1 ) + ∧ OR1 P
dt R2

d OR1 P d VR1 (P )

+ ΩR2 (R1 ) ∧ + , (4.16)
dt R2
dt R2

13
La instrucción anterior podría entenderse como: calcular la velocidad angular de la orien-
tación or_name, respecto a la orientación org_or_name, expresando el resultado en la base
proy_or_name.
124 Implementación

y teniendo en cuenta las relaciones


d VR1 (P )
= A R1 (P ) + ΩR2 (R1 ) ∧ VR1 (P ) (4.17)
dt
R2
d OR1 P
= VR1 (P ) + ΩR2 (R1 ) ∧ OR1 P , (4.18)
dt R2

la ecuación 4.16 puede volverse a escribir como



A R2 (P ) = A R2 (OR1 ) + ΩR2 (R1 ) ∧ ΩR2 (R1 ) ∧ OR1 P +

+ αR2 (R1 ) ∧ OR1 P + A R1 (P ) + 2 ΩR2 (R1 ) ∧ VR1 (P )
(4.19)

donde

• αR2 (R1 ) representa la aceleración angular de la referencia R1 para un


observador situado en la referencia R2 .

• el término que aparece entre corchetes representa la aceleración de un punto


que, perteneciendo cinemáticamente a la referencia R1 , estuviese situado
en la misma posición que P y recibe el nombre de aceleración de arrastre.

• A R1 (P ) representa la aceleración del punto P para un observador situado


en la referencia R1 y recibe el nombre de aceleración relativa.

• 2 ΩR2 (R1 ) ∧ VR1 (P ) representa la aceleración de Coriolis.

Operador Aceleración
El operador aceleración de un punto, para un observador situado en una refe-
rencia se implementa por medio de la función:
[sym 3-tuple acvect]=acceleration_vector(string punto, ...

string ref_obs, string proy_or_name)


4.3 Cinemática 125

Argumentos de entrada
punto → punto del cual quiere calcularse la aceleración.
ref_obs → referencia donde se sitúa el observador.
proy_or_name → identificador de la base en la que se proyecta el
vector aceleración.

Argumentos de salida
acvect → vector de aceleración, proyectado en la base proy_or_name.

Operador Aceleración de Arrastre


El operador aceleración de arrastre de un punto en una referencia, para un
observador situado en otra referencia, se implementa por medio de la función:
[sym 3-tuple acvect]=ref_acceleration_vector(string punto, ...

string ref, string ref_obs, string proy_or_name)

Argumentos de entrada
punto → punto del cual quiere calcularse la aceleración.
ref → referencia que indica la pertenencia cinemática de punto .
ref_obs → referencia donde se sitúa el observador.
proy_or_name → identificador de la base en la que se proyecta el
vector aceleración.

Argumentos de salida
ref_acvect → vector aceleración de arrastre, proyectado en la base
proy_or_name .

Operador Aceleración Angular


El operador aceleración angular de una orientación respecto a otra se imple-
menta por medio de la función:
[sym 3-tuple dom_vect]=alpha_vector(string or_name, ...

string org_or_name, string proy_or_name)

Argumentos de entrada
or_name → orientación de la cual quiere calcularse la aceleración an-
gular.
org_or_name → orientación respecto de la cual se calcula dicha ace-
leración angular.
126 Implementación

proy_or_name → base en la que se proyecta el vector aceleración


angular proy_or_name .
Argumentos de salida
dom_vect → vector aceleración angular, proyectado en la base

4.3.5. Problemas Cinemáticos


En esta sección se describirán todos los problemas que el interfaz numérico
propuesto es capaz de resolver, es decir:
• Problema de posición.
• Problema de posición inicial.
• Problema de velocidad.
• Problema de velocidad inicial.
• Problema de aceleración.
• Simulación cinemática.
Tal como se explica en la introducción del capítulo, cada uno de los proble-
mas anteriores se resuelve numéricamente empleando una función de alto nivel,
independiente de la topología del sistema mecánico, denominada plantilla.

E L P ROBLEMA DE P OSICIÓN
El sistema no lineal de ecuaciones φ (q, t) = 0 debe verificarse en todo
instante de tiempo, t.
El método iterativo de Newton-Raphson resuelve el sistema anterior para cual-
quier instante de tiempo, t, mediante el algoritmo

φq (qi, t) δq = −φ (q i , t)
q i+1 = q i + µ δq (4.20)

donde µ representa el coeficiente de relajación del método, 0 < µ ≤ 1.


Si las relaciones entre coordenadas están impuestas de forma redundante, el
algoritmo anterior puede sustituirse por el presentado en la referencia [GdJB94],

h iT h iT
φq (qi, t) φq (qi , t) δq = − φq (qi, t) φ (q i , t)
q i+1 = q i + µ δq, (4.21)

para así evitar los problemas asociados a la singularidad de la matriz φq .


4.3 Cinemática 127

φ (q i , t)


φ q i+1 , t

q i+2 q i+1 qi q

Figura 4.6: Interpretación geométrica del método de Newton-Raphson

El criterio de parada de cualquiera de los algoritmos anteriores puede estable-


cerse:

• De forma global,
 T 
φ q i+1 , t φ q i+1 , t < tol,

donde tol representa una tolerancia global.

• Ecuación a ecuación,

φ q i+1 , t < tol,

donde el error de la ecuación φj , j = 1 . . . c se chequea con la tolerancia


tolj , j = 1 . . . c.

En el caso de la implementación propuesta, el problema de posición se re-


suelve mediante un algoritmo que detecta de forma automática la presencia de
ecuaciones redundantes. El chequeo anterior se realiza calculando el rango 14 del
128 Implementación

jacobiano de posición: si éste es igual al número de ecuaciones, se emplea el al-


goritmo descrito en 4.23, mientras que si es menor, se emplea 4.21. El criterio de
parada se establece de forma global en cualquiera de los dos casos.
Plantilla de solución para el problema de posición
En el caso de la implementación propuesta, el problema de posición se resuel-
ve haciendo uso de la instrucción
[real *new_q]=solve_position(real *prm, real *q, real t, ...

real relax, int nmax, real tol)

Argumentos de entrada
prm → vector de parámetros.
q → vector de coordenadas de partida.
t → variable tiempo.
relax → relajación del método.
nmax → numero máximo de iteraciones del método.
tol → tolerancia global, tol, con la que se resuelve el problema de
posición.

Argumentos de salida
new_q → vector de coordenadas que verifica el sistema φ = 0 con
tolerancia tol.

Internamente, la función solve_position evalúa Cp(prm, q, z, t) y


Jp(prm, q, z, t), cuyo proceso de exportación se detalla en las secciones si-
guientes.
Exportación de Jp

En el plano numérico, el jacobiano de posición, φq , se evalúa en cada ins-


tante de tiempo haciendo uso de la función exportada a tal efecto:
[real **Jp]=Jp(real *prm, *q, *z, t).
14
La tolerancia con la que se calcula el rango es un delicado parámetro que debería ajustarse
para cada problema. Con el fin de evitar el ajuste anterior, además de calcular el rango de φp con
una tolerancia estándar, se hace un chequeo de su condicionamiento numérico: si éste es superior
a 2000 , se emplea el algoritmo 4.21.
4.3 Cinemática 129

En el caso de la implementación propuesta, dicha matriz adopta la forma:


function [Jp]=Jp(prm, q, z, t)

Jp=zeros(g,p);

Jp(1,1)= ...;
..............
Jp(i,j)= ...;
..............
Jp(g,p)= ...;

donde sólo aparecen aquellos elementos, Jp(i,j) , distintos de cero.

En el plano simbólico, el jacobiano de posición, φq , se corresponde con


la matriz de expresiones simbólicas Jpm , que será recorrida en el algoritmo de
exportación.
La matriz anterior se obtiene a partir del vector de expresiones simbólicas
Cpv según:

Jpm = jacobian(Cpv, qv’);

E L P ROBLEMA DE P OSICIÓN I NICIAL


El problema de posición inicial consiste en la resolución conjunta de las ecua-
ciones geométricas y las ecuaciones geométricas iniciales:

φ = 0
φ0 = 0 (4.22)

El método iterativo de Newton-Raphson resuelve el sistema anterior emplean-


do el algoritmo15 :

i
φq (qi, t) δq = −φi (q i , t)
q i+1 = q i + µ δq (4.23)
130 Implementación

donde ahora:

• El error de posición inicial se define como


 
φ
φi = ,
φ0
• El jacobiano de posición inicial se define como
 
φq ∂

φ

i  
φq =
o
=
∂q φ0
φq
i ∂ φi
o bien φq =
∂q
• El escalar µ es el coeficiente de relajación del método.

Plantilla de solución para el problema de posición inicial


En el caso de la implementación propuesta, el problema de posición inicial se
resuelve haciendo uso de la instrucción
[real *new_q]=solve_initial_position(real *prm, real *q, ...

real t, real relax, ...

int nmax,real tol)

Argumentos de entrada
Todos los argumentos de entrada tienen la misma lectura que la ins-
trucción solve_position , presentada la sección anterior.

Argumentos de salida
new_q → vector de coordenadas que verifica el sistema φi = 0 con
tolerancia tol.

Internamente, la función solve_initial_position evalúa las funciones


Cpini(prm, q, z, t) y Jpini(prm, q, z, t), cuyo proceso de exporta-
ción se detalla en las secciones siguientes.
15
Nótese que el algoritmo propuesto sigue arrojando soluciones válidas aún cuando el sistema
4.29 sea compatible indeterminado.
4.3 Cinemática 131

Exportación de Cpini
En el plano numérico, el vector de restricciones de posición inicial, φ i , se
evalúa en cada instante de tiempo empleando la función exportada a tal efecto:
[real *Cpini]=Cpini(real *prm, *q, *z, t).

En el caso más general, dicha función adopta la forma:


function [Cpini]=Cpini(prm, q, z, t)

Cpini=zeros(g+npi,1);

Cp=Cp(prm, q, z, t);
Cp_t0=Cp_t0(prm, q, z, t);
Cpini=[Cp;Cp_t0];

donde todos los elementos ya fueron definidos en apartados anteriores.


Exportación de Jpini
i
En el plano numérico, el jacobiano de posición inicial, φq , se evalúa en
cada instante de tiempo haciendo uso de la función exportada a tal efecto:
[real **Jpini]=Jpini(real *prm, *q, *z, t).

En el caso más general, la función anterior adopta la forma:


function [Jpini]=Jpini(prm, q, z, t)

Jpini=zeros(g+npi, p);

Jp=Jp(prm, q, z, t);
Jp_t0=Jp_t0(prm, q, z, t);
Jpini=[Jp;Jp_t0];

En el plano simbólico, el jacobiano de las ecuaciones geométricas iniciales,


o
φq , se corresponde con la matriz de expresiones simbólicas Jp_t0m , recorrida
en el algoritmo de exportación.
La matriz anterior se obtiene a partir del vector de expresiones simbólicas
Cp_t0v según
132 Implementación

Jp_t0m = jacobian(Cp_t0v, qv’);

EL PROBLEMA DE VELOCIDAD

El problema de velocidad se traduce en resolver el sistema lineal de ecuaciones

φv (q, t) q̇ = −bv (q, t) (4.24)

donde, como ya se dijo, las ecuaciones no holónomas deben ser expresiones


lineales en las velocidades generalizadas.
El sistema anterior puede resolverse de forma numérica empleando una des-
composición QR de la matriz φv de tal forma que

φv (q0, t) = Q R (4.25)

donde, si φv tiene dimensión (c, p) ,

• q 0 es un reordenamiento del vector q de tal forma que el valor absoluto


de los elementos diagonales de R es decreciente.

• Q es ortogonal de dimensión c .

• R es triangular superior de dimensión (c, p) con elementos diagonales


de valor absoluto decreciente.


 
 
 
 
 
 
 
 
 
     c   

           

        

c   


 

 

 

 

 

 

 

 

                   d



 
 
 
 
 
 
 
 
  →
                


 
 
 
 
 

       
 
 
 
  c−d
p d p−d

Figura 4.7: Descomposición QR para una matriz de dimensión (c, p).

En este caso, el rango, d , de la matriz φv es el número de elementos de la


diagonal de la matriz R que verifican:


R (i, i) ≥ tol
4.3 Cinemática 133

donde tol representa la tolerancia con la que se calcula el rango de φv .


Las incógnitas dependientes, q̇ d , e independientes, q̇ i , del problema de
velocidad se obtienen a partir del reordenamiento propuesto y de d según

q̇ d = q̇ 0 (1 : d) y q̇ i = q̇ 0 (d + 1 : p).

de tal forma que


 
q̇ d
φv (q , t) 0
q̇ i
= −bv . (4.26)

Además, teniendo en cuenta que Q es una matriz ortogonal, el sistema 4.24


puede volverse a escribir como

" #   
Rd,d Rd,i q̇ d  T b ,d
=− Q bv = − .


(4.27)
0 c−d,d 0 c−d,i q̇ i b ,c−d


El sistema anterior se resuelve para las velocidades dependientes, q̇ d , en


términos de las independientes, q̇ i , según

 −1  
q̇ d = − Rd,d b 

,d
+ Rd,i q̇ i , (4.28)

a no ser que b 

,c−d
6= 0c−d , en cuyo caso el sistema es incompatible.
Para concluir, nótese que el algoritmo presentado en esta sección sigue siendo
válido cuando existan relaciones redundantes entre velocidades.
Plantilla de solución para el problema de velocidad
El problema de velocidad se resuelve en la implementación propuesta hacien-
do uso de la instrucción
[real *new_dq]=solve_velocity(real *prm, *q, *dq, t, tol)

Argumentos de entrada
prm → vector de parámetros.
q → vector de coordenadas generalizadas.
dq → vector de velocidades generalizadas.
t → variable tiempo.
tol → tolerancia con la que se calcula el rango, d , de la matriz R .
134 Implementación

Argumentos de salida
new_dq → vector de velocidades que verifica el sistema anterior con
tolerancia de rango tol. Las velocidades independientes, si existen,
se extraen del vector original dq.

Internamente, la función solve_velocity evalúa las funciones:


Jv(prm, q, z, t) y bv(prm, q, z, dz, t),
cuyo proceso de exportación se detalla en las secciones siguientes.
Exportación de Jv
En el plano numérico, el jacobiano de velocidad, φv , se evalúa en cada
instante de tiempo haciendo uso de la función exportada a tal efecto:
[real **Jv]=Jv(real *prm, *q, *z, t).

Dicha función, en el caso más general adopta la forma:


function [Jv]=Jv(prm, q, z, t)

Jv=zeros(g+r,p);

Jp=Jp(prm, q, z, t);
ACv=ACv(prm, q, z, t);

Jv=[Jp;ACv];

donde:

Jp ya se definió en el apartado anterior.

ACv se evalúa en cada instante de tiempo haciendo uso de la función ex-


portada a tal efecto:

[real **ACv]=Acv(real *prm, *q, *z, t).


4.3 Cinemática 135

Dicha función adopta la forma:

function [ACv]=ACv(prm, q, z, t)

ACv=zeros(r,p);

ACv(1,1)= ...;
..............
ACv(i,j)= ...;
..............
ACv(r,p)= ...;

En el plano simbólico, la matriz de restricciones no holónomas, A , se


corresponde con la matriz de expresiones simbólicas ACvm , recorrida en
el algoritmo de exportación.
La matriz anterior se obtiene a partir del vector cvv

Cvv = [ Cv(1).eq; ...


Cv(i).eq; ...
Cv(r).eq ]

según

ACvm = jacobian(cvv, dqv’);

Exportación de bv
En el plano numérico, el término independiente de velocidad, b v , se evalúa
en cada instante de tiempo haciendo uso de la función exportada a tal efecto:
[real *bv]=bv(real *prm, *q, *z, *dz, t).

Dicha función, en el caso más general adopta la forma:


function [bv]=bv(prm, q, z, dz, t)

bv=zeros(g+r,1);

bCp=bCp(prm, q, z, dz, t);


bCv=bCv(prm, q, z, dz, t);

bv=[bCp;bCv];
136 Implementación

donde

bCp , correspondiente con el vector φt , representa la contribución de las


ecuaciones geométricas al término independiente de velocidad y se evalúa
en cada instante de tiempo haciendo uso de la función exportada a tal efecto:

[real *bCp]=bCp(real *prm, *q, *z, *dz, t).

Dicha función adopta la forma:

function [bCp]=bCp(prm, q, z, dz, t)

bCp=zeros(g,1);

bCp(1)= ...;
.............
bCp(i)= ...;
.............
bCp(g)= ...;

donde sólo aparecen aquellos elementos, bCp(i) , distintos de cero.

En el plano simbólico, el vector bCp se corresponde con el array de ex-


presiones simbólicas bCpv , recorrido en el algoritmo de exportación.
El vector anterior se calcula en términos de Cpv según:

bCpv = jacobian(Cpv, zv’)*dzv + diff(Cpv, t);

bCv , correspondiente con el vector b (q, t) , es la contribución de las


ecuaciones no holónomas al término independiente de velocidad y se evalúa
en cada instante de tiempo haciendo uso de la función exportada a tal efecto:

[real *bCv]=bCv(real *prm, *q, *z, *dz, t).


4.3 Cinemática 137

Dicha función adopta la forma:

function [bCv]=bCv(prm, q, z, dz, t)

bCv=zeros(r,1);

bCv(1)= ...;
..............
bCv(i)= ...;
..............
bCv(r)= ...;

donde sólo aparecen aquellos elementos, bCv(i) , distintos de cero.

En el plano simbólico, el vector bCv se corresponde con el array de ex-


presiones simbólicas bCvv , recorrido en el algoritmo de exportación.
El vector anterior se calcula en términos de Cvv y ACvm según:

bCvv = Cvv - ACvm*dqv;

EL PROBLEMA DE V ELOCIDAD I NICIAL


El problema de velocidad inicial consiste en la resolución conjunta de las ecua-
ciones para velocidades y las ecuaciones iniciales para velocidades 16 :

φv q̇ = bv
o
φv q̇ = bv,o (4.29)

donde, al igual que ocurría con las ecuaciones no holónomas, las ecuaciones
iniciales para velocidades deben ser expresiones lineales en las velocidades gene-
ralizadas.
En el caso de la implementación propuesta, las derivadas de las ecuaciones in-
troducidas por medio de la instrucción new_Cpini no aparecen entre las ecua-
ciones que componen el problema de velocidad inicial17 , por lo que los problemas
de posición y velocidad inicial pueden abordarse de forma independiente.
16
El algoritmo propuesto, basado en la descomposición QR , sigue arrojando soluciones válidas
aún cuando el sistema 4.29 sea compatible indeterminado.
17
Las ecuaciones geométricas iniciales son válidas en un sólo instante de tiempo, por lo que sus
derivadas no están definidas.
138 Implementación

Así, la ecuación 4.29, que en forma abreviada se escribe

i
φv q̇ = biv , (4.30)

se empleará, junto con 4.22, para fijar el estado del sistema mecánico al inicio
de la simulación.
Plantilla de solución para el problema de velocidad inicial
El problema de velocidad inicial se resuelve en la implementación propuesta
haciendo uso de la instrucción
[real *new_dq]=solve_initial_velocity(real *prm, *q, ...

real *dq, t, tol)

Argumentos de entrada y salida


todos los argumentos de entrada y salida tienen la misma lectura que
la instrucción solve_velocity de la sección anterior.

Internamente, la plantilla solve_initial_velocity hace uso de las fun-


ciones Jvini y bvini , cuya exportación se detalla en las siguientes seccio-
nes.
Exportación de Jvini
i
En el plano numérico, el jacobiano de velocidad inicial, φv , se evalúa en
cada instante de tiempo haciendo uso de la función exportada a tal efecto:
[real **Jvini]=Jvini(real *prm, *q, *z, t).

Dicha función, en el caso más general adopta la forma:


function [Jvini]=Jvini(prm, q, z, t)

Jv=zeros(g+r+nvi,p);

Jv=Jv(prm, q, z, t);
Jv_t0=Jv_t0(prm, q, z, t);

Jvini=[Jv;Jv_t0];
4.3 Cinemática 139

donde

Jv ya se definió en la sección anterior.

Jv_t0 se exporta en forma de función como

[real **Jv_t0]=Jv_t0(real *prm, *q, *z, t).

En el plano simbólico, la matriz de restricciones iniciales se corresponde


con la matriz de expresiones simbólicas Jv_t0m , recorrida en el algoritmo
de exportación.
La matriz anterior se obtiene a partir del vector cviniv ,

Cviniv = [ Cvini(1).eq; ...


Cvini(i).eq; ...
Cvini(nvi).eq ] ,

según

Jv_t0m = jacobian(cviniv, dqv’);

Exportación de bvini
En el plano numérico, el término independiente de velocidad, b iv , se evalúa
en cada instante de tiempo haciendo uso de la función exportada a tal efecto:
bvini=bvini(real *prm, *q, *z, *dz, t).

Dicha función, en el caso más general adopta la forma:


function [bvini]=bvini(prm, q, z, dz, t)

bvini=zeros(g+r+nvi,1);

bv=bv(prm, q, z, dz, t);


bv_t0=bv_t0(prm, q, z, dz, t);

bvini=[bv;bv_t0];
140 Implementación

donde

bv ya se definió en el apartado anterior.

bv_t0 es la contribución de las ecuaciones de velocidad inicial al término


independiente de velocidad inicial y se evalúa en cada instante de tiempo
haciendo uso de la función exportada a tal efecto:

[real *bv_t0]=bv_t0(real *prm, *q, *z, *dz, t).

Dicha función tiene un aspecto muy similar al presentado en la sección


anterior para bCv .
En el plano simbólico, el vector bv_t0 se corresponde con el vector de
expresiones simbólicas bv_t0v , recorrido en el algoritmo de exportación.
El vector anterior se calcula en términos de Cviniv y Jv_t0m según:

bv_t0v = Cviniv - Jv_t0m*dqv

EL PROBLEMA DE ACELERACIÓN

El problema de aceleración se traduce en la resolución del sistema lineal de


ecuaciones

φv (q, t) q̈ = −ba (q, q̇, t) (4.31)

donde:

La matriz φv es la misma que aparece en el problema de velocidad.

ba se define en términos de bap y bav según:


 
bap
ba = ,
bav

de tal forma que18

 
∂ φt ˙ ∂ φt ∂ φt ∂ φt
bap = − φq q̇ + ż + z̈ +
∂q ∂z ∂ ż ∂t
 
∂b ˙ ∂b ∂b ∂b
bav = − A q̇ + ż + z̈ + (4.32)
∂q ∂z ∂ ż ∂t
4.3 Cinemática 141

Haciendo un desarrollo análogo al presentado en la sección dedicada al pro-


blema de velocidad, la ecuación 4.33 puede volverse a escribir como

" #   
Rd,d Rd,i q̈ d  T  ˙
 b ,d
0 c−d,d 0 c−d,i q̈ i
=− Q φv q̇ + ḃv = −
b ,c−d
.

(4.33)
donde q̈ 0 ,
 
0 q̈ d
q̈ = , q̈ d = q̈ 0 (1 : d) , q̈ i = q̈ 0 (d + 1 : p) ,
q̈ i

denota un reordenamiento de q̈ realizado con el mismo criterio que se aplica


en la sección dedicada al problema de velocidad.
El sistema 4.33 se resuelve para las aceleraciones dependientes, q̈ d , en tér-
minos de las independientes, q̈ i , según

 −1  
q̈ d = − Rd,d b ,d
+ Rd,i q̈ i , (4.34)

a no ser que b ,c−d


6= 0c−d , en cuyo caso el sistema es incompatible.
Plantilla de solución para el problema de aceleración
El problema de aceleración se resuelve en la implementación propuesta ha-
ciendo uso de la instrucción
[real *new_ddq]=solve_acceleration(real *prm, *q, *dq, ...

real *ddq, t, tol)

Argumentos de entrada
prm → vector de parámetros.
q → vector de coordenadas de partida.
dq → vector de velocidades de partida.
dqq → vector de aceleraciones de partida.
t → variable tiempo.
tol → tolerancia con la que se calcula el rango, d , de la matriz R .
18
Si bien los términos anteriores podrían gestionarse de forma conjunta, el tamaño de las expre-
siones simbólicas de los términos bap y bav puede dificultar el proceso de exportación.
142 Implementación

Argumentos de salida
new_ddq → vector de aceleraciones que verifica el sistema anterior
con tolerancia tol. Las aceleraciones independientes, si existen, se
extraen del vector original ddq.

Internamente, la función solve_acceleration evalúa las funciones


Jv(prm, q, z, dz, t) y ba(prm, q, z, dz, t), cuyo proceso de exporta-
ción se detalla en las siguientes secciones.
Exportación de ba
En el plano numérico, el término independiente de aceleración, en teoría b ,
se evalúa en cada instante de tiempo haciendo uso de la función exportada a tal
efecto:
[real *ba]=ba(real *prm, *q, *dq, *z, *dz, *ddz, t) .
Dicha función, en el caso más general adopta la forma:
function [ba]=ba(prm, q, dq, z, dz, ddz, t)

ba=zeros(g+r,1);

baCp=baCp(prm, q, dq, z, dz, ddz, t);


baCv=baCv(prm, q, dq, z, dz, ddz, t);

ba=[baCp;baCv];

Los términos baCp y baCv , correspondientes con los vectores bap y bav ,
se evalúan en cada instante de tiempo haciendo uso de las funciones exportadas a
tal efecto:
[real *baCp]=baCp(real *prm, *q, *dq, *z, *dz, t) y
[real *baCv]=baCv(real *prm, *q, *dq, *z, *dz, t)
4.3 Cinemática 143

Así, la primera de las funciones anteriores adopta la forma:


function [baCp]=baCp(prm, q, dq, z, dz, ddz, t)

baCp=zeros(g,1);

JbCpq=JbCpq(prm, q, dq, z, dz, t);


dJp=dJp(prm, q, dq, z, dz, t);
JbCpz=JbCpz(prm, q, dq, z, dz, t);
JbCpdz=JbCpdz(prm, q, dq, z, dz, t);
JbCpt=JbCpt(prm, q, dq, z, dz, t);

baCp = (JbCpq - dJp)*dq + JbCpz*dz + JbCpdz*ddz + JbCpt;

y la segunda:
function [baCp]=baCp(prm, q, dq, z, dz, ddz, t)

baCp=zeros(g,1);

JbCvq=JbCvq(prm, q, dq, z, dz, t);


dAcv=dAcv(prm, q, dq, z, dz, t);
JbCvz=JbCvz(prm, q, dq, z, dz, t);
JbCvdz=JbCvdz(prm, q, dq, z, dz, t);
JbCvt=JbCvt(prm, q, dq, z, dz, t);

baCv = (JbCvq - dAcv)*dq + JbCvz*dz + JbCvdz*ddz + JbCvt;

donde:

∂ φt ∂b
JbCpq y JbCvq , correspondientes con las matrices ∂q
y ∂q
, se
evalúan en cada instante de tiempo haciendo uso de las funciones exportadas
a tal efecto:

[real **JbCpq]=JbCpq(real *prm, *q, *dq, *z, *dz, t) y


[real **JbCvq]=JbCvq(real *prm, *q, *dq, *z, *dz, t)

En el plano simbólico, las matrices JbCpq y JbCvq se corresponden con


las matrices de expresiones simbólicas JbCpqm y JbCvqm , recorridas en
el algoritmo de exportación.
144 Implementación

Las matrices anteriores se construyen a partir de los vectores de expresiones


simbólicas bCpv y bCvv según:

JbCpqm = jacobian(bCpv, qv’); y


JbCvqm = jacobian(bCvv, qv’);

dJp y dAcv , correspondientes con las matrices φ˙ q y A˙ , se eva-


lúan en cada instante de tiempo haciendo uso de las funciones exportadas a
tal efecto:

[real **dJp]=dJp(real *prm, *q, *dq, *z, *dz, t) y


[real **dAcv]=dAcv(real *prm, *q, *dq, *z, *dz, t)

En el plano simbólico, dJp y dAcv se corresponden con las matrices


de expresiones simbólicas dJpm y dAcvm , recorridas en el algoritmo de
exportación.
Las matrices anteriores se construyen a partir de las matrices de expresiones
simbólicas Jpm y Acvm según:

dJpm = matrix_total_derivative(Jpm); y
dAcvm = matrix_total_derivative(ACvm);

donde la instrucción matrix_total_derivative se implementa como:

for i=1:1:p,
dJpm(:,i)=total_derivative(Jpm(:,i));
end

∂ φt ∂b
JbCpz y JbCvz , correspondientes con las matrices ∂z
y ∂z
, se
evalúan en cada instante de tiempo haciendo uso de las funciones exportadas
a tal efecto:

[real **JbCpz]=JbCpz(real *prm, *q, *dq, *z, *dz, t) y


[real **JbCvz]=JbCvz(real *prm, *q, *dq, *z, *dz, t)

En el plano simbólico, las matrices JbCpz y JbCvz se corresponden


con las matrices de expresiones simbólicas JbCpzm y JbCvzm , que se
recorren en el algoritmo de exportación.
4.3 Cinemática 145

Las matrices anteriores se construyen a partir de los vectores de expresiones


simbólicas bCpv y bCvv según:

JbCpzm = jacobian(bCpv, zv’); y


JbCvzm = jacobian(bCvv, zv’);

∂ φt ∂b
JbCpdz y JbCvdz , correspondientes con las matrices y , se
∂ ż ∂ ż
evalúan en cada instante de tiempo haciendo uso de las funciones exportadas
a tal efecto:

[real **JbCpdz]=JbCpdz(real *prm, *q, *dq, *z, *dz, t) y


[real **JbCvdz]=JbCvdz(real *prm, *q, *dq, *z, *dz, t)

En el plano simbólico, las matrices anteriores se corresponden con las ma-


trices de expresiones simbólicas JbCpdzm y JbCvdzm , recorridas en el
algoritmo de exportación.
Las matrices anteriores se construyen a partir de los vectores de expresiones
simbólicas bCpv y bCvv según:

JbCpdzm = jacobian(bCpv, dzv’); y


JbCvdzm = jacobian(bCvv, dzv’);

∂ φt ∂b
JbCpt y JbCvt , correspondientes con los vectores ∂t
y ∂t
, se
evalúan en cada instante de tiempo haciendo uso de las funciones exportadas
a tal efecto:

[real *JbCpt]=JbCpt(prm, q, dq, z, dz, t) y


[real *JbCvt]=JbCvt(prm, q, dq, z, dz, t)

En el plano simbólico, los vectores anteriores se corresponden con los vec-


tores de expresiones simbólicas JbCptv y JbCvtv , recorridos en el al-
goritmo de exportación.
Los vectores anteriores se construyen a partir de los vectores de expresiones
simbólicas bCpv y bCvv según:

JbCptv = diff(bCpv, t); y JbCvtv = diff(bCv, t);


146 Implementación

L A S IMULACIÓN C INEMÁTICA
Como se ha visto, el problema cinemático queda representado por las ecua-
ciones:

φ (q i , ti ) = 0
φv (qi, ti) q̇i = b (qi, ti) 

φv (qi, ti) q̈i = b (q i , q̇ i , ti ) (4.35)

Ecuaciones que pueden no ser suficientes para determinar los valores de q, q̇


y q̈ de forma unívoca.
Para llevar a cabo la simulación cinemática es necesario que el sistema sea
determinado para las incógnitas de movimiento.
La forma más natural de abordar el problema anterior es proponer funciones
del tiempo para aquellas coordenadas que el usuario considere independientes

qik − zk ( t ) = 0 , k = 1 . . . n (4.36)

donde n representa el número de velocidades independientes o grados de li-


bertad del sistema.
En el caso de que el número de coordenadas independientes, p − g , sea
superior al de grados de libertad del sistema, n , para progresar en el tiempo, la
simulación deberá apoyarse en la solución propuesta por un integrador del tipo:

q i+1 = f (q̈ i , q̇ i , q i , δt)

Plantilla de simulación cinemática


La plantilla de segundo nivel kinematic_simulation_num resuelve la si-
mulación cinemática empleando como integrador un Runge Kutta explícito de
cuatro pasos. Si el juego de ecuaciones propuesto no es suficiente para determinar
todas las velocidades, la simulación cinemática respetará los valores iniciales de
las velocidades y aceleraciones que el algoritmo QR establezca como indepen-
dientes19 .
19
en este caso, la simulación será estable mientras el algoritmo QR no modifique el grupo
inicial de velocidades independientes.
4.4 Dinámica 147

4.4. Dinámica
En este apartado, y a modo de subsecciones, se presentarán los diferentes ni-
veles de abstracción involucrados en el planteamiento simbólico de la dinámica
de cualquier sistema mecánico.
Las secciones 4.4.1 y 4.4.2 se centran en la descripción de los tipos de dato,
estructuras y operadores básicos que aparecen en la Dinámica Analítica, es decir:
• Incógnitas de Enlace.
• Multiplicadores de Lagrange.
• Funciones de excitación.
• Ecuaciones para Redundancias en las Condiciones de Enlace.
La sección 4.4.3 describe las estructuras y operadores básicos que constituyen
el Interfaz Dinámico Cartesiano y que permiten plantear el problema dinámico en
el lenguaje de la mecánica vectorial, es decir:
• Tensores de Inercia.
• Sólidos.
• Torsores de Inercia, de Enlace y asociados a otras acciones.
• Operador Traslación de un Torsor.
• Pares Cinemáticos.
El interfaz dinámico cartesiano, junto con los tipos de dato y operadores de la
dinámica analítica, constituyen el denominado Sistema Simbólico de Bajo Nivel
para el planteamiento simbólico de la dinámica.
En este caso, las ecuaciones dinámicas se obtienen como resultado de la apli-
cación de un determinado formalismo20 y se exportan como un conjunto de fun-
ciones que serán evaluadas numéricamente al llevar a cabo la simulación dinámi-
ca.
Los algoritmos de exportación de los diferentes formalismos dinámicos así
como la descripción de los diferentes problemas dinámicos de la DSM serán tra-
tados en la sección 4.4.4.

4.4.1. Dinámica Analítica


PARÁMETROS
El planteamiento del problema dinámico requiere definir una serie de paráme-
tros además de los que ya aparecieron al discutir el problema cinemático. Podrían
diferenciarse conceptualmente, pero matemáticamente juegan el mismo papel, por
20
Lagrange, Newton-Euler, ...
148 Implementación

lo que los parámetros dinámicos se almacenan junto con los geométricos en la es-
tructura params , definida en la sección 4.3.1.

I NCÓGNITAS DE E NLACE
Las incógnitas de enlace (sección 3.3.1) son aquellas incógnitas dinámicas
involucradas en la definición de torsores de enlace.
Estructuras de datos
Las incógnitas de enlace, , serán almacenados en la estructura trscs , cuyo
elemento i-ésimo contiene los campos:
integer trscs(i).id → identificador numérico de la estructura trscs.
string trscs(i).name → identificador de la variable .
sym trscs(i).var → incógnita de enlace simbólica.

La variable global auto_trsc se reserva como contador de la estructura


trscs.

Funciones de interfaz de usuario


Una incógnita de enlace se introduce en la estructura trscs haciendo uso
de la instrucción:
[sym trsc_i]=new_trsc(string name),

Argumentos de entrada
name → identificador de la variable.

Argumentos de salida
trsc_i → variable simbólica.

Exportación
En el plano numérico, el vector de incógnitas de enlace,  , se inicializa ha-
ciendo uso de la función exportada a tal efecto:
[real *epsln]=epsln_init()

El argumento de salida, que en principio puede tomar cualquier nombre, repre-


senta el valor inicial del vector de incógnitas de enlace en el problema dinámico
de Newton-Euler.
4.4 Dinámica 149

La función epsln_init() , en la sintaxis propia de M AT L AB adopta la


forma:
function [epsln]=epsln_init()

epsln=zeros(n,1);

epsln(1)=0;
...........
epsln(i)=0;
...........
epsln(n)=0;

En el plano simbólico, el vector  se corresponde con el array de variables


simbólicas epslnv , que será recorrido en el algoritmo de exportación.
El vector anterior se obtiene a partir de la estructura trscs según:
epslnv = [ trscs(1).var; ...
trscs(i).var; ...
trscs(n).var ]

En el resto de funciones exportadas, cualquier referencia a la variable simbó-


lica epslnv(i) se escribe textualmente epsln(i).

M ULTIPLICADORES DE L AGRANGE
Fq̇  ,
Tal como se explica en la sección 3.4.2, la fuerza generalizada de enlace, F
se puede expresar en términos de las restricciones cinemáticas y los multiplicado-
res de Lagrange según

Fq̇  = φTv λ
F
donde λj , j = 1 . . . c es la incógnita del problema dinámico de Lagran-
ge que representa la fuerza generalizada en la dirección del enlace impuesto por
la ecuación φj , j = 1 . . . c.
De la misma forma que se disponen las dos estructuras de datos Cps y
Cvs , el vector anterior puede dividirse conceptualmente según
 
λp
λ=
λv
150 Implementación

donde λp es el conjunto de multiplicadores asociado a las ecuaciones geo-


métricas mientras que λv es el asociado a las ecuaciones no holónomas.
Estructuras de datos
Los multiplicadores de Lagrange λp y λv se almacenan en las estructuras
lmbps y lmbvs . Dado que ambas estructuras poseen los mismos campos,
únicamente se presenta la estructura lmbps , cuyo elemento i-ésimo contiene
los campos:
integer lmbps(i).id → identificador numérico de la estructura lmbps.
string lmbps(i).name → identificador de la variable .
sym lmbps(i).var → multiplicador de Lagrange simbólico.

Las variables globales auto_lmbps y auto_lmbvs se reservan como con-


tadores de la estructuras lmbps y lmbvs respectivamente.
Funciones de interfaz de usuario
Las estructuras lmbps y lmbvs se actualizan de forma automática al in-
troducir ecuaciones geométricas y no holónomas respectivamente.
El nombre del multiplicador se genera posponiendo la etiqueta _lmb al nom-
bre subministrado por el usuario para la ecuación, ya sea ésta geométrica o no
holónoma.
Exportación
En el plano numérico, los vectores de multiplicadores λp y λ se inicializan
haciendo uso de las funciones exportadas a tal efecto:
[real *lmbp]=lmbp_init() → equilibrio estático (sección 4.4.4).
[real *lmbd]=lmb_init() → problema dinámico de Lagrange.

Los argumentos de salida, que en principio pueden tomar cualquier nombre,


representan los valores iniciales de los multiplicadores de Lagrange asociados a
las ecuaciones geométricas y cinemáticas respectivamente.
Las funciones anteriores adoptan una forma muy similar a la presentada en la
sección anterior para la función epsln_init() .
En el plano simbólico, los vectores λp y λ se corresponden con los arrays
de variables simbólicas lmbpv y lmbdv , los cuales se recorren en el proceso
de exportación.
4.4 Dinámica 151

Los vectores anteriores se obtienen a partir de las estructuras lmbps y


lmbvs según:
lmbpv = [ lmbps(1).var; lmbvv = [ lmbvs(1).var;
lmbps(i).var; lmbvs(i).var;
lmbps(np).var ] lmbvs(nv).var ]

lmbdv = [ lmbpv;
lmbvv ]

F UNCIONES DE E XCITACIÓN
En ocasiones, el planteamiento del problema dinámico requiere caracterizar:
• Acciones exteriores dependientes del tiempo.
• Leyes constitutivas dependientes del estado.
• Esfuerzos realizados por determinados actuadores.
Con el objeto de facilitar al usuario la definición de acciones del tipo anterior,
el interfaz simbólico se completa con la estructura de funciones de excitación.
Las funciones de excitación se expresan, en el caso más general, como

u (q, q̇, t) (4.37)

donde

 T
u= u1 (q, q̇, t) . . . ui (q, q̇, t) . . . unu (q, q̇, t) (4.38)

es un vector compuesto por funciones dependientes de las coordenadas gene-


ralizadas, de las velocidades generalizadas y del tiempo.
El vector u aparece en el plano numérico como un simple array cuyo valor es
asignado haciendo uso de la función u=ues(prm, q, dq, t) , exportada desde
el interfaz simbólico a tal efecto.
Al igual que ocurría en cinemática con las funciones z(t) y sus derivadas, la
encapsulación de las funciones anteriores permite plantear diferentes simulacio-
nes dinámicas modificando el contenido del fichero ues.m .
El tratamiento independiente de las funciones de excitación permite asimismo
la integración del código exportado en otros entornos de simulación orientados al
control de sistemas dinámicos como S IMU L INK .
152 Implementación

Estructuras de datos
Las funciones del tiempo se recogen en la estructura us , cuyo elemento
i-ésimo contiene los campos:
integer us(i).id → identificador de la estructura us.
string us(i).name → identificador de la variable .
sym us(i).expr → expresión simbólica.

La variable global auto_us se reserva como contador de la estructura us .


Funciones de interfaz de usuario
Una función de excitación se introduce en la estructura ues mediante la
instrucción:
[sym u_i]=new_u(string name, sym exp)

Argumentos de entrada
name → identificador de la variable simbólica en el listado principal
del programa.
exp → expresión simbólica.

Argumentos de salida
u_i → sustitución para la expresión simbólica exp.

El argumento de salida u_i permite al usuario emplear la variable genera-


da en cualquier expresión simbólica que aparezca en el fichero de definición del
mecanismo.
Exportación
En el plano numérico, el vector de funciones del tiempo u (t) se evalúa en
cada instante de tiempo haciendo uso de la función exportada a tal efecto:
[real *u]=ues(real *prm, real *q, real *dq, real t) ,
El argumento de salida, que en principio puede tomar cualquier nombre, re-
presenta el valor instantáneo del vector de funciones de excitación dependientes
del tiempo.
4.4 Dinámica 153

La función ues(prm, q, dq, t) presenta la forma:


function [u]=ues(prm, q, dq, t)

u=zeros(nu,1);

u(1)=u1;
.......
u(i)=ui;
.......
u(n)=un;

function u1=u1_fun(prm, q, dq, t)


.................................
function ui=ui_fun(prm, q, dq, t)
.................................
function un=un_fun(prm, q, dq, t)
.................................

En el plano simbólico, el vector u (q, q̇, t) se corresponde con el array de


variables simbólicas uv , el cual se recorre en el proceso de exportación.
El vector uv se obtiene a partir de la estructura us según:
uv = [ us(1).expr; ...
us(i).expr; ...
us(nu).expr ]

4.4.2. Ecuaciones Dinámicas


En el caso de la implementación propuesta, las ecuaciones dinámicas siempre
se obtienen como resultado de aplicar un determinado formalismo a la informa-
ción contenida en los torsores de inercia, de enlace y de otras acciones.
Consecuentemente, el usuario dispone de funciones de interfaz para rellenar
las diferentes estructuras de torsores, pero no para introducir ecuaciones dinámi-
cas, ya que el planteamiento de las mismas se supone competencia del preproce-
sador simbólico.
Si existen redundancias en las condiciones de enlace, el sistema de ecuaciones
planteado por el preprocesador simbólico resulta insuficiente para determinar de
forma precisa el valor de las incógnitas dinámicas. En este caso, el usuario necesita
una herramienta para completar el sistema de ecuaciones de forma manual, lo cual
154 Implementación

justifica la presencia de la estructura de ecuaciones dinámicas presentada en la


siguiente sección.

E CUACIONES PARA R EDUNDANCIAS EN LAS C ONDICIONES DE E NLACE


Tal como se describe en la sección 3.3.1, las incógnitas de enlace aparecen
como incógnitas del problema dinámico. Si existen redundancias en las condicio-
nes de enlace, el sistema de ecuaciones dinámicas presenta indeterminaciones en
aquellas incógnitas de enlace que impiden movimientos de forma redundante.
Si las redundancias son de origen matemático, es decir, asociadas a la carac-
terización genérica de torsores de enlace, la indeterminación en las incógnitas de
enlace puede se resuelve con ayuda de la información almacenada en la estructura
joints .

Por otra parte, si las redundancias son de origen físico, la única forma de re-
solver la indeterminación asociada a dichas redundancias es introducir ecuaciones
dinámicas adicionales del tipo:

ri (q, , u, t) = 0 , i = 1 . . . nr

donde la dependencia de u (q, q̇, t) permite mayor flexibilidad a la hora de


plantear ecuaciones del tipo anterior.
Las ecuaciones dinámicas para la eliminación de redundancias de origen físico
se integran en el conjunto de ecuaciones matriciales de Newton-Euler como

R  = br

donde

• R representa la matriz de redundancias, obtenida a partir del vector de


ecuaciones r como
∂r
R = R (q) = ∂ 
• br representa el término independiente, obtenido a partir del vector de ecua-
ciones r como

br = br (q, u, t) = −r (q,  = 0, u, t) .
4.4 Dinámica 155

Estructuras de datos
Las ecuaciones para la eliminación de redundancias de origen físico se alma-
cenan en la estructura DynEqs , cuyo elemento i-ésimo contiene los campos:
integer DynEqs(i).id → identificador de la estructura DynEqs .
string DynEqs(i).name → identificador de la ecuación.
sym expr. DynEqs(i).eq → expresión simbólica lineal en las incógnitas
de enlace.
La variable global auto_DynEq se reserva como contador de la estructura
DynEqs .

Funciones de Interfaz de usuario


Una ecuación para la eliminación de redundancias se introduce en la estructura
DynEqs haciendo uso de la instrucción:

new_dynamic_equation(string name, sym expr. sym_eq)

Argumentos de entrada
name → identificador de la ecuación.
sym_eq → ecuación dinámica.

Argumentos de salida
Ninguno.

Exportación de Re
En el plano numérico, la matriz de redundancias de origen físico se evalúa
haciendo uso de la función exportada a tal efecto:
[real **Re]=Re(real *prm, *q)

En el plano simbólico, la matriz de redundancias, R , se corresponde con la


matriz de expresiones simbólicas Re , recorrida en el algoritmo de exportación.
La matriz anterior se obtiene a partir del vector rv ,
rv = [ DynEqs(1).eq; ...
DynEqs(i).eq; ...
DynEqs(n).eq] ,

según
Re = jacobian(rv, epslnv’)
156 Implementación

Exportación de bRe
En el plano numérico, el término independiente correspondiente a las ecuacio-
nes de eliminación de redundancias se evalúa haciendo uso de la función exporta-
da a tal efecto:
[real *bRe]=bRe(real *prm, *q, *u, t)

En el plano simbólico, el término independiente br se corresponde con el array


de expresiones simbólicas bRe , el cual se recorre en el algoritmo de exportación.
El vector anterior se obtiene a partir del vector rv según
bRe = subs(rv, epslnv, zeros)

4.4.3. Interfaz Dinámico Cartesiano


En los siguientes apartados, se presentarán las estructuras de Tensores, Sólidos
y Torsores. Dichas estructuras, junto con la de Pares Cinemáticos, son las que
constituyen el denominado interfaz dinámico cartesiano.

T ENSORES DE I NERCIA

El tensor de inercia del sólido Solk en el centro de gravedad, Bk , se expresa


Z h i h i
 
II 

k
(Solk ) bi
= − Gk P k Gk P k dm (4.39)
Solk bi bi

donde el operador b denota la aplicación lineal asociada al producto vectorial,

       
b
v bi
ω bi
= v bi ∧ ω bi .

Si el punto de definición del tensor, Bk , no coincide con el punto del sólido


donde habitualmente se plantean las ecuaciones dinámicas, Gk , el tensor puede
trasladarse haciendo uso del teorema de Steiner:

    h i h i
II k
(Solk ) bi
= II 

k
(Solk ) bi
− mSolk Gk Bk Gk Bk . (4.40)
bi bi

Al igual que ocurría en cinemática con los vectores cartesianos, el usuario del
interfaz simbólico debe ser consciente de la base de proyección asociada al tensor
cuando éste realiza operaciones vectoriales. Además, las componentes del tensor
4.4 Dinámica 157

 
de inercia II 

k
(Solk ) bi
, pueden expresarse en otra base bj según:

h i bi T 
   h i bi
II 

k
(Solk ) bj
= I II 

k
(Solk ) bi I (4.41)
bj bj

Estructuras de datos
Los tensores de inercia, II k (Solk ) , se almacenan en la estructura
tensors , cuyo elemento i-ésimo contiene los campos:
integer tensors(i).id → identificador de la estructura tensors.
string tensors(i).name → identificador del tensor.
pt pointer tensors(i).pt_ptr → punto de definición del tensor.
or pointer tensors(i).or_ptr → base en la que éste se proyecta.
sym 3x3 matrix tensors(i).coef_matrix → tensor en sí mismo.

La variable entera auto_tensors se reserva como contador de la estructura


tensors .

Funciones de Interfaz de usuario


Un tensor de inercia se introduce en la estructura tensors haciendo uso de
la instrucción:
new_tensor(string name, string punto,...
string base, 3x3 sym matrix tensor)

Argumentos de entrada
name → identificador del tensor.
punto → punto de definición del tensor.
base → base en la que se expresan las componentes de dicho tensor.
tensor → matriz simbólica de dimensión (3, 3) .

Argumentos de salida
Ninguno.

S ÓLIDOS
Teniendo en cuenta el papel que juega el concepto de sólido rígido en el plan-
teamiento de las ecuaciones dinámicas, un sólido como el mostrado en la figura
4.8 queda definido en términos de:
• Una referencia cartesiana, R ≡ {Ok , bk } , solidaria al sólido.
• El centro de gravedad, Gk , como punto cinemáticamente perteneciente21
a la referencia R .
158 Implementación

• La masa del sólido, mSolk .


• El tensor de inercia, II k (Solk ) , definido en cualquier punto, Bk , cinemá-
ticamente perteneciente a la referencia R .

Gk
R

Bk
Ok
Abs
mSolk , II k
(Solk )

Solk
OAbs

Figura 4.8: Elementos que componen la definición del sólido Solk .

Estructuras de datos
Los sólidos, Solk , se almacenan en la estructura bodies , cuyo elemento
i-ésimo contiene los campos:
integer bodies(i).id → identificador de la estructura bodies.
string bodies(i).name → identificador del sólido.
ref pointer bodies(i).ref_ptr → puntero a referencia.
pt pointer bodies(i).gc_ptr → centro de gravedad del sólido.
sym bodies(i).mass_svar → masa del sólido.
tnsr pointer bodies(i).tensor_ptr → tensor de inercia.

Funciones de Interfaz de usuario


En el caso de la implementación propuesta, un sólido se introduce en la es-
tructura bodies haciendo uso de la instrucción
new_body(string name, string ref_name,...
[string Gk, sym mass, [string tensor]])

21
El punto Bk recibe dicha denominación cuando la velocidad relativa de dicho punto en la
referencia R es nula.
4.4 Dinámica 159

Argumentos de entrada
name → identificador del sólido .
ref_name → referencia, R , adscrita al sólido.
Gk → centro de gravedad del sólido.
mass → masa del sólido, como parámetro simbólico.
tensor → tensor de inercia del sólido.

Argumentos de salida
Ninguno.

Tal como se aprecia en la definición de la función, las propiedades inerciales


del sólido son opcionales. Si el usuario las introduce, el procesador simbólico
calculará de forma automática el torsor de inercia asociado al nuevo sólido durante
el proceso de exportación. En caso contrario, el usuario deberá introducir el torsor
correspondiente haciendo uso de la instrucción new_itrss.
Evidentemente, si no existen propiedades inerciales ni torsores de inercia aso-
ciados a un sólido, dicho sólido representa lo que algunos autores denominan
sólido auxiliar de enlace. En tal caso, el punto elegido por defecto para plantear
las ecuaciones dinámicas del sólido es el origen de la referencia ref_name.

TORSORES
Tal como se explica en la sección 3.30, el efecto de cualquier acción sobre
cualquier sólido queda reflejado en las ecuaciones dinámicas a través del corres-
pondiente torsor.
La información requerida en la definición de un torsor puede expresarse de
forma genérica como:
bd pointer torsor.bd_ptr → sólido sobre el que actúa.
pt pointer torsor.pt_ptr → punto en el cual está definido.
sym 3-tuple torsor.fvect → fuerza en el punto de definición.
or pointer torsor.f_or_ptr → base de proyección, 3-tupla anterior.
sym 3-tuple torsor.fvect → momento en el punto de definición.
or pointer torsor.f_or_ptr → base de proyección, 3-tupla anterior.

Sin embargo, por coherencia con lo presentado en el apartado teórico, existen


tres estructuras de datos que se emplearán para almacenar los torsores de inercia,
de enlace y asociados a otras acciones respectivamente.
Las estructuras anteriores serán recorridas en el proceso de exportación con
el fín de calcular las matrices simbólicas que conforman el problema dinámico
160 Implementación

aplicando los algoritmos simbólicos de las ecuaciones 3.108, 3.91, 3.114, 3.110 y
3.113 respectivamente.
Las estructuras de torsores que se presentan a continuación, junto con la de
pares cinemáticos y la de ecuaciones dinámicas de enlace, dan soporte al plantea-
miento de las ecuaciones dinámicas de Lagrange y Newton-Euler.

TORSORES DE INERCIA

El torsor de inercia de D’ Alembert sobre el sólido Solk ,


h iT
F (Solk ), M k (Solk ) ,
determina la contribución de dicha acción de inercia a las ecuaciones dinámicas.
Estructuras de datos
Los torsores de inercia se almacenan en la estructura itrss , cuyo elemento
i-ésimo contiene los campos:
integer itrss(i).id → identificador de la estructura itrss.
string itrss(i).name → identificador del torsor de inercia.
bd pointer itrss(i).bd_ptr → sólido sobre el que recae el torsor.
pt pointer itrss(i).pt_ptr → punto de definición.
sym 3-tuple itrss(i).fvect → fuerza en el punto de definición.
or pointer itrss(i).f_or_ptr → base de proyección, 3-tupla anterior.
sym 3-tuple itrss(i).hvect → momento en el punto de definición.
or pointer itrss(i).h_or_ptr → base de proyección, 3-tupla anterior.

La variable entera auto_itrss se reserva como contador de la estructura


itrss .

Funciones de Interfaz de usuario


Un torsor de inercia se introduce en la estructura itrss haciendo uso de la
instrucción:
new_itrs(string name, string body_name, string pt_name, ...

sym 3-tuple fvect, string fvect_base, ...

sym 3-tuple hvect, string hvect_base)

Argumentos de entrada
name → identificador del torsor de inercia .
body_name → sólido sobre el que recae el torsor de inercia.
pt_name → punto de definición del torsor de inercia.
4.4 Dinámica 161

fvect → fuerza de inercia.


fvect_base → base en la que se expresa la 3-tupla anterior.
hvect → momento de inercia respecto al punto pt_name.
hvect_base → base en la que se expresa la 3-tupla anterior.

Argumentos de salida
Ninguno.

Exportación
El algoritmo de exportación divide el contenido del torsor de inercia en dos
partes diferentes:
• Una parte lineal en las aceleraciones generalizadas, que se exportará como
matriz de masa.
• Una parte cuadrática en las velocidades generalizadas, que se exportará co-
mo vector de cargas.
La forma que adoptan las contribuciones anteriores depende del formalismo
empleado en el planteamiento de las ecuaciones dinámicas y se presentará en la
sección dedicada a los diferentes problemas dinámicos, 4.4.4.

TORSORES DE ENLACE

El torsor asociado a la j-ésima acción de enlace sobre el sólido Solk ,


h iT
Aj (Solk ) Aj (Solk )
Fk , M k ,
determina la contribución de dicha acción de enlace a las ecuaciones dinámicas.
Estructuras de datos
Un torsor de enlace se almacenan en la estructura etrss , cuyo elemento
i-ésimo contiene los campos:
integer etrss(i).id → identificador de la estructura etrss.
string etrss(i).name → identificador del torsor de enlace.
bd pointer etrss(i).bd_ptr → sólido sobre el que recae el torsor.
pt pointer etrss(i).pt_ptr → punto de definición.
sym 3-tuple etrss(i).fvect → fuerza en el punto de definición.
or pointer etrss(i).f_or_ptr → base de proyección, 3-tupla anterior.
sym 3-tuple etrss(i).hvect → momento en el punto de definición.
or pointer etrss(i).h_or_ptr → base de proyección, 3-tupla anterior.

La variable entera auto_etrss se reserva como contador de la estructura


etrss .
162 Implementación

Funciones de Interfaz de usuario


Un torsor de enlace se introduce en la estructura etrss haciendo uso de la
instrucción:
new_etrs(string name, string body_name, string pt_name, ...

sym 3-tuple fvect, string fvect_base, ...

sym 3-tuple hvect, string hvect_base)

Argumentos de entrada
name → identificador del torsor de enlace .
body_name → sólido sobre el que recae la acción de enlace.
pt_name → punto del sólido body_name sobre el que recae la acción
de enlace.
fvect → fuerza de enlace.
fvect_base → base en la que se expresa el vector anterior.
hvect → momento de la acción de enlace respecto al punto pt_name.
hvect_base → base en la que se expresa el vector anterior.

Argumentos de salida
Ninguno.

Exportación
El algoritmo de exportación recorre la estructura de torsores de enlace en el
caso de que las ecuaciones dinámicas sean planteadas empleando el formalismo
de Newton-Euler.
Tal como se describe en la sección 3.6.2, la contribución a las ecuaciones
dinámicas de los torsores de enlace es una expresión lineal en las incógnitas de
enlace cuyo proceso de exportación se detalla en la sección dedicada al problema
de Newton-Euler, 4.4.4.

TORSORES CONSTITUTIVOS

El torsor asociado a la j-ésima acción constitutiva sobre el sólido Sol k ,


h iT
Ane
j (Solk ) Ane
j (Solk )
Fk , M k ,
determina la contribución a las ecuaciones dinámicas de dicha acción constitutiva.
4.4 Dinámica 163

Estructuras de datos
Los torsores constitutivos y de otros tipos se almacenan en la estructura
ctrss , cuyo elemento i-ésimo contiene los campos:
integer ctrss(i).id → identificador de la estructura ctrss.
string ctrss(i).name → identificador del torsor de inercia.
bd pointer ctrss(i).bd_ptr → sólido sobre el que recae el torsor.
pt pointer ctrss(i).pt_ptr → punto de definición.
sym 3-tuple ctrss(i).fvect → fuerza en el punto de definición.
or pointer ctrss(i).f_or_ptr → base de proyección, 3-tupla anterior.
sym 3-tuple ctrss(i).hvect → momento en el punto de definición.
or pointer ctrss(i).h_or_ptr → base de proyección, 3-tupla anterior.

La variable entera auto_ctrss , se reserva como contador de la estructura


ctrss .
Funciones de Interfaz de usuario
Un torsor constitutivo o de otro tipo se introduce en la estructura ctrss ha-
ciendo uso de la instrucción:
new_ctrs(string name, string body_name, string pt_name, ...

sym 3-tuple fvect, string fvect_basename, ...

sym 3-tuple hvect, string hvect_base)

Argumentos de entrada
name → identificador del torsor constitutivo .
body_name → sólido sobre el que recae la acción constitutiva.
pt_name → punto del sólido body_name sobre el que recae la acción
constitutiva.
fvect → fuerza constitutiva.
fvect_base → base en la que se expresa el vector anterior.
hvect → momento de la acción constitutiva respecto al punto
pt_name.
hvect_base → base en la que se expresa el vector anterior.

Argumentos de salida
Ninguno.
164 Implementación

Exportación
El algoritmo de exportación recorre la estructura de torsores constitutivos en
cualquiera de las formulaciones empleadas en el planteamiento de las ecuaciones
dinámicas.
Al igual que ocurría en el caso de los torsores de inercia, la forma que adopta
la contribución de los torsores constitutivos al conjunto de ecuaciones dinámicas
depende del formalismo empleado y y se presentará en la sección dedicada a los
diferentes problemas dinámicos, 4.4.4.

PARES C INEMÁTICOS
La existencia de un par cinemático entre cualquier par de sólidos del sistema
implica, en el caso más general, la existencia de:

• Relaciones entre coordenadas y/o velocidades generalizadas. Como es ob-


vio, las relaciones anteriores no aparecen para casos en los que el enlace es
respetado por la acotación de partida.

• Torsores de acción y reacción actuantes sobre los sólidos a los que afecta el
citado par cinemático.

Existen dos formas de caracterizar un torsor de enlace:

• En base a un mínimo número de incógnitas de enlace, introduciendo tantas


incógnitas de enlace como grados de libertad queden anulados por el par
cinemático en cuestión.

• De forma genérica, introduciendo 6 incógnitas de enlace por cada par cine-


mático.

En el primer caso, la solución para las incógnitas de enlace se obtiene junto


con el resto de incógnitas dinámicas al aplicar el formalismo de Newton-Euler.
En el segundo caso, la indeterminación en las incógnitas de enlace se resuelve
introduciendo las ecuaciones dinámicas de enlace. El planteamiento automático
de dichas ecuaciones requiere información acerca de la conectividad entre sólidos,
lo cual justifica la presencia de la estructura joints.
Estructuras de datos
La estructura que recoge las características de un enlace entre dos sólidos cua-
lesquiera se denomina joints .
4.4 Dinámica 165

El elemento i-ésimo de la estructura anterior contiene los campos:


integer joints(i).id → identificador de la estructura de datos joints.
string joints(i).name → identificador del enlace .
cp pointer array joints(i).p_ptr → ecuaciones geométricas asocia-
das al enlace.
cv pointer array joints(i).v_ptr → ecuaciones no holólomas aso-
ciadas al enlace.
etrs pointer joints(i).tr_prt_1 → torsor 1 de la acción del enlace.
etrs pointer joints(i).tr_prt_2 → torsor 2 de la acción del enlace.
bool joints(i).ismin → 1 si el torsor de enlace se caracteriza en base a
un mínimo número de incógnitas de enlace.
La variable global auto_joints se reserva como contador de la estructura
joints .

Funciones de Interfaz de usuario


Un par cinemático entre cualquier par de sólidos del sistema se introduce en
la estructura joints haciendo uso de la instrucción:
new_joint(string name, string tr_name_1, string tr_name_2, ...

cp pointer array p_pointer, ...

cv pointer array v_pointer, [bool ismin])

Argumentos de entrada
name → identificador del par cinemático en el listado principal del
programa.
tr_name_1 → torsor de acción.
tr_name_2 → torsor de reacción.
p_pointer → lista22 de ecuaciones geométricas asociadas al enlace.
v_pointer → lista de ecuaciones no holónomas asociadas al enlace.
ismin → 1 si el torsor de enlace se caracteriza en base a un mínimo
número de incógnitas de enlace.

22
subministrada en cualquiera de las formas:
• p_pointer = [ n_1; ... n_i; ... n_n ], donde n_i representa la posición de la i-
ésima ecuación en la estructura de ecuaciones geométricas.
• p_pointer = { label_1;...label_i;...label_n }, donde label_i representa el
nombre que el usuario empleó para definir i-ésima ecuación geométrica.
Si el enlace no tiene asociada ninguna ecuación, p_pointer=0 .
166 Implementación

Exportación
La estructura de pares cinemáticos entre sólidos se recorre en el caso de que el
usuario decida caracterizar de forma genérica alguno de los enlaces presentes en
el sistema. En tal caso, la estructura joints contiene la información necesaria
para plantear las ecuaciones que resuelven la indeterminación en las incógnitas de
enlace introducidas.

4.4.4. Problemas dinámicos


E L P ROBLEMA D INÁMICO G ENERAL
Atendiendo a la naturaleza de las incógnitas dinámicas, los problemas diná-
micos pueden clasificarse en: Directos, Inversos y Combinación de Ambos (como
caso más general).
El problema dinámico directo
El problema dinámico directo consiste en determinar la evolución de un siste-
ma mecánico, una vez caracterizadas las acciones actuantes sobre dicho sistema.
Las ecuaciones de movimiento correspondientes a un problema dinámico di-
recto presentan las siguientes características:

• Las ecuaciones cinemáticas son de la forma


h i
φ (q) = 0 , φv (q) q̇ = 0
h i h i (4.42)
φv ˙
(q) q̈ = − φ (q, q̇) q̇
v

y determinan un número ni = p − c > 0 de velocidades independientes.


• Los esfuerzos de los actuadores son conocidos en todo instante de tiempo.

En el caso del problema dinámico directo, el algoritmo de simulación, cuyo


esquema se representa en la figura 4.9, resuelve:
• Las aceleraciones generalizadas, q̈.
• Las incógnitas de enlace, .
 T
• El estado del sistema, x = q, q̇ , en el siguiente instante de tiempo.
Nótese que, el cálculo de las incógnitas de movimiento en el siguiente instante
de tiempo requiere hacer uso de un integrador del tipo:

q i+1 = f (q̈ i , q̇ i , q i , δt)


4.4 Dinámica 167

t = t0

Solver de posición q 0 , q̇ 0
y velocidad iniciales
Ecuaciones φ, φv Ecuaciones M, V
q , q̇ Cinemáticas Dinámicas R , Q
bv , ba

 , q̈
Integrador Postproceso

t = t + δt

Figura 4.9: Simulación dinámica directa

El problema dinámico inverso


El problema dinámico inverso consiste en determinar el esfuerzo necesario
sobre los actuadores de un sistema mecánico para que dicho sistema realice un
movimiento deseado.
Las ecuaciones de movimiento correspondientes a un problema dinámico in-
verso presentan las siguientes características:

• Las ecuaciones cinemáticas son de la forma


h i
φ (q, z, t) = 0 , φv (q, z, t) q̇ = bv (q, z, ż, t)
h i (4.43)
φv (q, z, t) q̈ = ba (q, q̇, z, ż, z̈, t)

y resuelven el problema de simulación presentado en la sección 4.3.5.

• Los esfuerzos de los actuadores son incógnitas del problema dinámico.

En el caso del problema dinámico inverso, el algoritmo de simulación, cuyo


esquema se representa en la figura 4.10, resuelve:
• Los valores de q , q̇ y q̈ que verifican 4.43.
• El vector de incógnitas de enlace, .
• Los esfuerzos de los actuadores23 , como un subgrupo, u , del vector de
incógnitas de enlace, .

23
Desde el punto de vista dinámico, cualquier movimiento impuesto lleva asociado un torsor de
168 Implementación

t = t + δt

Solver φ, φv
Cinemático bv , ba

q , q̇ , q̈
t = t0

Solver de posición q 0 , q̇ 0 Ecuaciones M, V  , u


y velocidad iniciales Dinámicas Postproceso
R , Q

Figura 4.10: Simulación dinámica inversa

El Problema Dinámico General


En el caso más general, las ecuaciones de movimiento del sistema no tienen
por qué encajar en ninguno de los esquemas anteriores, es decir, se plantean ecua-
ciones de tipo rehónomo, pero sin ser suficientes para llevar a cabo una simulación
cinemática.
Dado que las ecuaciones de movimiento correspondientes a un problema gene-
ral presentan características compatibles con las del problema dinámico directo, el
esquema de integración presentado en la figura 4.9 puede emplearse para resolver
problemas dinámicos generales (incluidos los dinámicos inversos).

EL PROBLEMA DINÁMICO SEGÚN N EWTON -E ULER


Tal como se describe en la sección 3.6.2, el formalismo de Newton-Euler re-
sulta en un sistema de 6M ecuaciones que en forma matricial se escribe

h i 

Mzq Vzq 
= Qz

El preprocesador simbólico, empleando los algoritmos que se exponen a con-


tinuación, desarrolla expresiones simbólicas para los siguientes términos:

• La matriz de masa de cada uno de los sólidos Solk , k = 1 . . . M .

enlace que representa el esfuerzo realizado por el actuador encargado de forzar dicho movimien-
to.Desde el punto de vista operativo, ya que los torsores anteriores se plantean en términos de un
subgrupo de incógnitas de enlace, u , dichos torsores serán clasificados como torsores de enlace.
4.4 Dinámica 169

La matriz de masa del sólido Solk se calcula a partir del torsor de inercia de
dicho sólido según

XLik  
Solk ∂ F (Solk )
M zq
=
∂ q̈ M k (Solk ) xyz 

i=0

donde Lik representa el número de torsores de inercia asignados de forma


manual al sólido Solk .
Si no, dado que simbólicamente resulta más eficiente, se calcula a partir de
las propiedades inerciales24 introducidas en la definición del sólido según
 
m VRI (Gk )
Solk ∂  
Mzq =
∂ q̇
H k (Solk )


xyz

donde debe imponerse que, entre las variables que definen la acotación del
sólido no aparezca ninguna de las componentes del vector z (t) y tampoco
la variable tiempo, t.

• La matriz Vzq de cada uno de los sólidos Solk , j = 1 . . . M .


En el caso del sólido Solk , la matriz anterior se expresa como

Lk  " Aj
#
∂ 
X ∂ F
VSol
zq
k
=− F
∂
Fż,k = −
∂ Aj
k
Aj
j=1 M k
+ Gk Bk ∧ F k xyz

• El vector de carga de cada uno de los sólidos Qz,k , j = 1 . . . M .


En el caso del sólido Solk , el vector de carga se expresa como

ne q̇
Qz,k = F
Fż,k +F
Fż,k (4.44)

donde

Lk ne " Ane
#
ne
X F j

F
Fż,k = Ane
k
Ane
j=1 M j
k
+ Gk Bk ∧ F j
k xyz

24
masa, centro de gravedad y tensor de inercia.
170 Implementación


Los términos Centrífugos y de Coriolis, F Fż,k , correspondientes al sólido
Solk se calculan a partir del torsor de inercia de dicho sólido según

i
Lk " #
q̇ X F (Solk )
F
Fż,k =
M k (Solk )
i=0


q̈ =0 xyz

Si no, por la misma razón que en el punto anterior, la contribución del torsor
de inercia a los términos Centrífugos y de Coriolis se calcula a partir de la
definición de matriz de masa según

q̇ ˙ Solk q̇
F
Fż,k =− M
zq

Una vez calculados los términos anteriores, las diferentes matrices que com-
ponen las ecuaciones dinámicas del sistema se obtienen empleando el algoritmo
de montaje presentado en la sección 3.6.2.
El problema general de simulación dinámica
El problema de simulación dinámica consiste en resolver las ecuaciones di-
námicas25 presentadas en la sección anterior junto con el conjunto de ecuaciones
cinemáticas, es decir:
   
Mzq Vzq 

 Qz
 
  = 
T 
φv 0 ba

Exportación de la matriz Me

En el plano numérico, la matriz de masa MSol


zq
k
, correspondiente al sólido
Solk , se evalúa haciendo uso de la función exportada a tal efecto
[real **Me_k] = Me_sol_k(real *prm, *q)

donde sol_k representa el nombre propuesto por el usuario para el sólido


Solk .

25
si alguno de los enlaces se caracteriza de forma analítica, las ecuaciones dinámicas deben
completarse con las ecuaciones dinámicas de enlace, presentadas en la sección 4.4.4.
4.4 Dinámica 171

La función anterior adopta la forma:


function [Me_k] = Me_sol_k(prm, q)

Me_k=zeros(6,p);

Me_k(1,1)= ...;

..............

Me_k(i,j)= ...;

..............

Me_k(6,p)= ...;

donde p representa el número total de coordenadas introducidas, ya sean


éstas auxiliares o no.
Sol
En el plano simbólico, la matriz de masa M zq k , se corresponde con una ma-
triz de expresiones simbólicas que se recorre en el proceso de exportación dando
lugar a la función Me_sol_k .
La matriz anterior se calcula a partir de la información almacenada en las
estructuras de torsores de inercia, itrss , y sólidos, bodies , según lo descrito
en la introducción de la presente sección.
La matriz de masa del sistema Me , correspondiente con la matriz Mzq , se
evalúa en el plano numérico haciendo uso de la función exportada a tal efecto:
[real **Me] = Me(real *prm, *q)

La función anterior adopta la forma:


function [Me] = Me(prm, q)

Me=zeros(6*m,p);

Me= [ Me_sol_1(prm, q) ;

..................

Me_sol_k(prm, q) ;

..................

Me_sol_m(prm, q) ];
172 Implementación

donde m denota el número de sólidos introducidos y sol_k , k=1..m de-


nota el nombre que el usuario asigna a cada uno de los sólidos.
Exportación de la matriz Ve

En el plano numérico, la matriz VSol


zq
k
, correspondiente al sólido Solk , se
evalúa haciendo uso de la función exportada a tal efecto
[real **Ve_k] = Ve_sol_k(real *prm, *q)

donde sol_k es el nombre propuesto por el usuario para el sólido Sol k .


La función anterior adopta la forma:
function [Ve_k] = Me_sol_k(prm, q)

Ve_k=zeros(6,ne);

Ve_k(1,1)= ...;

..............

Ve_k(i,j)= ...;

..............

Ve_k(6,ne)= ...;

donde ne representa el número de incógnitas de enlace.

En el plano simbólico, la matriz VSol


zq
k
se corresponde con una matriz de
expresiones simbólicas que se recorre en el proceso de exportación dando lugar a
la función Ve_sol_k .

La matriz anterior se calcula a partir de la información almacenada en la es-


tructura de torsores de enlace, etrss , según lo descrito en la introducción de
esta sección.

La matriz del sistema Ve , correspondiente con la matriz Vzq , se evalúa


en cada instante de tiempo haciendo uso de la función exportada a tal efecto:
[real **Ve] = Ve(real *prm, *q)
4.4 Dinámica 173

La función anterior adopta la forma:


function [Ve] = Ve(prm, q)

Ve=zeros(6*m,ne);

Ve= [ Ve_sol_1(prm, q) ;

..................

Ve_sol_k(prm, q) ;

..................

Ve_sol_m(prm, q) ];

donde m denota el número de sólidos introducidos y sol_k , k=1..m de-


nota el nombre que el usuario asigna a cada uno de los sólidos.
Exportación del vector Qe
En el plano numérico, el vector de cargas Qz,k , correspondiente al sólido
Solk , se evalúa haciendo uso de la función exportada a tal efecto
[real **Qe_k] = Qe_sol_k(real *prm, *q, *dq, *u, t)

donde la etiqueta sol_k representa el nombre propuesto por el usuario para


el sólido Solk .

La función anterior adopta la forma:


function [Qe_k] = Qe_sol_k(prm, q, dq, u, t)

Qe_k=zeros(6,1);

Qe_k=Qec_sol_k(prm, q, dq, u, t) + ...

Qei_sol_k(prm, q, dq);

donde:

• Qec_sol_k(prm, q, dq, u, t) evalúa en el plano numérico la contri-


ne
bución al vector de cargas del término F
Fż,k .
174 Implementación

La función anterior se exporta desde el interfaz simbólico con la forma


function [Qec_k] = Qec_sol_k(prm, q, dq, u, t)

Qec_k=zeros(6,1);

Qec_k(1,1)= ...;
...............;
Qec_k(6,1)= ...;
ne
En el plano simbólico, el término FFż,k se corresponde con un vector de
expresiones simbólicas que se recorre en el proceso de exportación dando
lugar a la función Qec_sol_k .
El vector de expresiones simbólicas anterior se calcula a partir de la in-
formación almacenada en la estructura de torsores constitutivos y de otros
tipos, ctrss , según lo descrito en la introducción de esta sección.

• Qei_sol_k(prm, q, dq) evalúa en el plano numérico la contribución al



vector de cargas del término F
Fż,k .
La función anterior se exporta desde el interfaz simbólico con la forma
function [Qei_k] = Qei_sol_k(prm, q, dq)

Qei_k=zeros(6,1);

Qei_k(1,1)= ...;
...............;
Qei_k(6,1)= ...;

En el plano simbólico, el término F Fż,k se corresponde con un vector de
expresiones simbólicas que se recorre en el proceso de exportación.
Al igual que en el caso de la matriz de masa, el vector simbólico anterior se
calcula a partir de la información almacenada en las estructuras de torsores
de inercia, itrss y sólidos, bodies .
4.4 Dinámica 175

El vector de cargas del sistema Qe , correspondiente con el vector Q z , se


evalúa en cada instante de tiempo haciendo uso de la función exportada a tal efecto
[real *Qe] = Qe(real *prm, *q, *dq, *u, t)

La función anterior adopta la forma:


function [Qe] = Qe(prm, q, dq, u, t)

Qe=zeros(6*m,1);

Qe= [ Qe_sol_1(prm, q, dq, u, t) ;

............................

Qe_sol_k(prm, q, dq, u, t) ;

............................

Qe_sol_m(prm, q, dq, u, t) ];

donde m denota el número de sólidos introducidos y sol_k , k=1..m de-


nota el nombre que el usuario asigna a cada uno de los sólidos.
Plantilla de simulación dinámica
La plantilla euler_num.m resuelve el problema general de simulación diná-
mica empleando para ello un integrador explícito de cuatro pasos con corrección
de posición y velocidad.
Las de ecuaciones de movimiento representan un sistema de dimensión 6M +
nλ , lineal en las incógnitas q̈ y .
La matriz del sistema anterior se evalúa en el plano numérico haciendo uso de
la plantilla
[real **A_e]= A_e(real *prm, *q, *z, t)

Dicha función adopta la forma:


function [A_em]=A_e(prm, q, z, t)

A_em=[ Me(prm, q) , Ve(prm, q, z, t)’ ;

Jv(prm, q, z, t) , zeros(nlmb, nlmb)];

donde zeros(nlmb, nlmb) es una matriz de ceros de dimensión (nλ , nλ ).


176 Implementación

El término independiente del sistema lineal anterior se evalúa en el plano nu-


mérico haciendo uso de la plantilla
[real *b_e]= b_e(real *prm, *q, *dq, *u, *z, *dz, *ddz, t)

Dicha función adopta la forma:


function [b_ev]=b_e(prm, q, dq, u, z, dz, ddz, t)

b_ev=[ Qe(prm, q, dq, u, t) ;

ba(prm, q, dq, z, dz, ddz, t) ];

El problema dinámico puede también resolverse como una ODE haciendo uso
de uno de los integradores de la Ode-Suite de M AT L AB . En tal caso, la corrección
de posición se sustituye de forma efectiva por la estabilización de Baumgarte,
[Bau72].

E CUACIONES D INÁMICAS DE E NLACE


Tal como se explica en la sección 3.7, las ecuaciones dinámicas de enlace
adoptan la forma general dada por la ecuación 3.56. Si ż se sustituye por q̇
y se tiene en cuenta que la fuerza generalizada de enlace, F Fż , es lineal en las
incógnitas de enlace,  , dicha ecuación se puede volver a escribir en la forma:

T
Vqz − φv λ=0 (4.45)

La ecuación anterior se plantea para cada uno de los enlaces26 presentes en la


estructura de enlaces, joints , haciendo uso de los algoritmos que se describi-
rán en los siguientes apartados.
Pares cinemáticos en general
La contribución del i-ésimo enlace de la estructura joints al conjunto de
ecuaciones dinámicas de enlace se expresa

Fq̇ i + φv,i λi = 0


T
F (4.46)

26
Técnicamente podría plantearse una sola ecuación para todo el sistema. Sin embargo, en el
caso más general, dicha ecuación da lugar a un número inferior de ecuaciones independientes.
4.4 Dinámica 177


• F
Fq̇ i representa la fuerza generalizada asociada a los torsores de enlace co-
rrespondientes al i-ésimo par cinematico,

Fq̇ i = F
F Fq̇,ji + F i
Fq̇,k (4.47)

 
Los términos F Fq̇,ji y F
Fq̇,ki representan las fuerzas generalizadas asociadas
a los torsores de enlace correspondientes al i-ésimo par cinemático entre los
sólidos Solj y Solk respectivamente.

El vector de fuerza generalizada F
Fq̇,ji se expresa en términos del torsor de
enlace correspondiente según

  !T  
∂ VAbs (Bj ) F ij
Fq̇,ji
F =
ΩAbs (Solj ) M ij (4.48)
∂ q̇ xyz xyz

donde Bj representa el punto del sólido Solj donde se define el torsor aso-
ciado al i-ésimo par cinemático.
T
• φv, λi representa la fuerza generalizada asociada al conjunto de restric-
i
ciones cinemáticas involucradas en la definición del i-ésimo par cinemático.
• λj,i , j = 1 . . . ni es el multiplicador de Lagrange que representa la
magnitud de la fuerza generalizada en la dirección del enlace impuesto por
la ecuación de restricción cinemática φj,i , j = 1 . . . ni .

Teniendo en cuenta que F Fq̇ i es lineal en las incógnitas de enlace, la fuer-
za generalizada anterior se expresa en términos del subgrupo de incógnitas que
afectan a dicho enlace, i , según

Fq̇ i = Vqzi i ,

F (4.49)

por lo que la ecuación 4.46 puede volverse a escribir como


  
i T i
V qz φv, i λi
=0 (4.50)

Si el número de incógnitas de enlace empleadas para caracterizar los torsores

 T  T
F ij , M ij y F ik , M ik

es mínimo, el sistema de ecuaciones 4.50 no se incluye en el conjunto de


ecuaciones dinámicas de enlace del sistema.
178 Implementación

Pares cinemáticos no respetados por la acotación de partida


El conjunto de ecuaciones dinámicas de enlace asociadas a los N n enlaces no
respetados por la acotación de partida se escribe
  
nr T nr
V qz φv,,nr λ,nr
=0, (4.51)

donde

• nr es el subgrupo de incógnitas de enlace que afectan a los enlaces no


respetados por la acotación de partida, ordenados de tal forma que

 T
nr = T1,nr . . . Ti,nr . . . TN n,nr (4.52)

• λ,nr es un reordenamiento o un subgrupo ordenado de los multiplicadores


de Lagrange,
h iT
λ,nr = λT1,nr . . . λTi,nr . . . λTN n,nr (4.53)

• Vnr
qz representa la matriz27
 
Vqz 1,nr
... 0 ... 0
 .. .. .. .. .. 
 . . . . . 
 
Vnr
qz =
 0 ... Vqz i,nr
... 0 
 (4.54)
 .. .. .. .. .. 
 . . . . . 
0 ... 0 ... VqzN n,nr

• Vqzi,nr
representa la derivada parcial
 
i,nr ∂ i,nr
V qz =
∂ i,nr
F
Fq̇ (4.55)

27 nr
La topología presentada para la matriz V qz en la ecuación 4.54 se obtiene si el vector de
incógnitas correspondientes a enlaces no respetados por la acotación de partida se ordena según
4.52.
4.4 Dinámica 179

T
• φv,,nr representa la matriz28

 T


φv, 1,nr
... 0 ... 0 
 .. .. .. .. .. 
 . . . . . 
T  T 
φv,,nr =
 0 ... φv, ... 0 
 (4.56)
i,nr
 .. .. .. .. .. 
 . . . . . 
 T

0 ... 0 ... φv, N n,nr

Pares cinemáticos compatibles con la acotación de partida


Si en la definición del i-ésimo elemento de la estructura de pares no se inclu-
yen ecuaciones cinemáticas, es decir, si dicho enlace es compatible con la acota-
ción de partida, las ecuaciones dinámicas de enlace se expresan

i,r
F
Fq̇ =0 (4.57)

Dado que la fuerza generalizada anterior es lineal en las incógnitas de enlace,


la ecuación anterior puede expresarse en forma matricial como

Vqz
i,r
i,r = 0 (4.58)

donde la matriz Vqzi,r


se deduce de forma análoga a la presentada en la
sección anterior.
El conjunto de ecuaciones dinámicas de enlace asociadas a los N r enlaces
compatibles con la acotación de partida se escribe

Vrqz r = 0 (4.59)

28 T
La topología presentada para la matriz φv,,nr en la ecuación 4.56 se obtiene si el vector de
multiplicadores de Lagrange se ordena según 4.53.
El hecho anterior sugiere utilizar un reordenamiento de las ecuaciones de enlace a la hora de
plantear las ecuaciones de la dinámica, de tal forma que el vector λ quede ordenado de la misma
forma en ambos contextos. El citado orden podría obtenerse a partir de la información almacenada
en la estructura de uniones, joints.
180 Implementación

donde

• r es el vector de incógnitas que afectan a los enlaces respetados por la


acotación de partida,

 T
r = T1,r . . . Ti,r . . . TN r,r (4.60)

• Vrqz representa la matriz29


 
Vqz 1,r
... 0 ... 0
 .. .. .. .. .. 
 . . . . . 
 
Vrqz =
 0 ... Vqz i,r
... 0 
 (4.61)
 .. .. .. .. .. 
 . . . . . 
0 ... 0 ... VqzN r,r

• Vqzi,r
representa la derivada parcial
 
i,r ∂ i,r
V qz =
∂ i,r
F
Fq̇ (4.62)

Para este conjunto de enlaces, el número de incógnitas de enlace independien-


tes debe ser igual que el número de movimientos impedidos, lo cual se traduce en
que el número de ecuaciones dinámicas de enlace coincide con el número de coor-
denadas de partida, p . Así, el sistema de ecuaciones 4.59 proporciona la misma
información que el sistema

Nr
X i,r
F
Fq̇ =0 (4.63)
i=1

De esta forma, las ecuaciones dinámicas correspondientes a los pares cinemá-


ticos compatibles con la acotación de partida se expresan de forma más compacta
" Nr
!#
r ∂ X i,r
V qz r =
∂ r
F
Fq̇ r = 0 (4.64)
i=1

29 r
La topología presentada para la matriz V qz en la ecuación 4.61 se obtiene si el vector
de incógnitas correspondientes a enlaces compatibles con la acotación de partida se ordena según
4.60.
4.4 Dinámica 181

donde ahora Vrqz adopta la forma

r
h i
1,r i,r N r,r
V qz = V qz
... V qz
... V qz
(4.65)

Ecuaciones Dinámicas de Enlace del Sistema


El conjunto de ecuaciones dinámicas de enlace para el sistema se expresa fi-
nalmente en términos de las ecuaciones 4.64 y 4.51 según
  

Vnr
qz 0 φv,,nr
T


nr  
0
  r  = (4.66)
r 0
0 V 0 λ,nr
qz

donde, en el caso más general, algunas de las ecuaciones serán dependientes.


El sistema de pNn + p ecuaciones dependientes anterior, junto con el sistema
de ecuaciones de Newton-Euler presentado en la sección anterior, puede emplear-
se para resolver el conjunto de incógnitas de enlace cuando todos o alguno de los
torsores de enlace se caracterizan de forma genérica.
En el caso de la implementación propuesta, el ordenamiento del vector de
incógnitas de enlace no realiza. Así, las ecuaciones anteriores se expresarán en
términos del vector de incógnitas de enlace no ordenado,  , según
 

Vnr
qz φv,
T




 
0

  = (4.67)
r λ 0
V qz 0
i,nr i,r
Las submatrices del tipo Vqz y V qz (ecuaciones 4.55 y 4.62 respecti-
vamente) se calculan como derivadas parciales respecto al vector de incógnitas de
nr r
enlace30 ,  , por lo que, en una situación general, las matrices Vqz y V qz
no presentan la estructura mostrada en las ecuaciones 4.54 y 4.65.
Conjunto de ecuaciones dinámicas, incluyendo las de enlace
El problema de simulación dinámica consiste en resolver las ecuaciones de
movimiento presentadas en la sección anterior junto con el conjunto de ecuaciones
dinámicas de enlace del sistema.
30
en vez de calcularse como derivadas parciales respecto a los vectores  i,r y i,nr .
182 Implementación

Es decir:
 
Mzq Vzq 0  
  Qz
   
   


0 Vnr
qz φv,
T

  
 0 

  q̈  
   

 0 Vrqz 0    =  0 
   (4.68)
  λ  
   
   br 


0 R 0 

 
 
 
T
0 0 ba
φv
donde la matriz R  se ha introducido con el objeto de eliminar posibles
indeterminaciones en la caracterización de las incógnitas de enlace, .
Exportación del vector lmbe
En el plano numérico, el vector de multiplicadores λ se inicializa haciendo
uso de la función exportada a tal efecto:
[real *lmbev]=lmbe_init()

El argumento de salida, que en principio puede tomar cualquier nombre, re-


presenta el valor inicial de los multiplicadores asociados a las restricciones ci-
nemáticas involucradas en la definición de los pares cinemáticos presentes en la
estructura joints .
Tal como se describe en la introducción de la sección, si todos los enlaces del
sistema se incluyen en la estructura de pares cinemáticos, el vector anterior es un
reordenamiento del vector de multiplicadores de Lagrange.
En el plano simbólico, el vector λ se obtiene empleando el algoritmo
siguiente:

• Se recorre la estructura joints en busca de aquellos enlaces con ecua-


ciones cinemáticas asociadas y que no estén definidos en términos de un
número mínimo de incógnitas de enlace, es decir, aquellos cuyo campo
ismin sea nulo.

• Tomando los índices de las ecuaciones, se recorren las estructuras de mul-


tiplicadores de Lagrange lmbp y lmbv y se extraen los elementos co-
rrespondientes31 .
31
Nótese que, los elementos de las estructuras lmbp y lmbv están ordenados según el orden de
definición de ecuaciones geométricas y no holónomas respectivamente.
4.4 Dinámica 183

Exportación de las matrices Vqe y Jvet


En el plano numérico, la matriz Vqe , correspondiente con la matriz Vnr
qz ,
se evalúa haciendo uso de la función exportada a tal efecto
[real **Vqem] = Vqe(real *prm, *q)

La función anterior adopta la forma:


function [Vqem] = Vqe(prm, q)

Vqe=zeros(p*nr,ne);

Vqe = [ Vqe_joint_1(prm, q);

....................

Vqe_joint_i(prm, q);

....................

Vqe_joint_nr(prm, q) ];

donde:

• p es el número total de coordenadas introducidas, ya sean éstas auxiliares


o no.

• nr es el número, Nn , de pares cinemáticos con ecuaciones cinemáticas


asociadas para los cuales se plantean ecuaciones dinámicas de enlace.

• joint_i, i=1..nr representa el nombre asignado por el usuario a cada


uno de los pares cinemáticos anteriores.

• Vqe_joint_i(prm, q), i=1..nr , correspondientes con las matrices


Vqz
i
, i = 1 . . . Nn se evalúan en el plano numérico haciendo uso de
funciones del tipo:

[real **Vqe_i]=Vqe_joint_i(real *prm, *q), i=1..nr

cuyo contenido es de la forma:


function [Vqe_i] = Vqe_joint_i(prm, q)

Vqe_i=zeros(p,ne);
184 Implementación

Vqe_i(1,1) = ...
................
Vqe_i(i,j) = ...
................
Vqe_i(p,ne) = ...
i
En el plano simbólico, las matrices del tipo Vqz , i = 1 . . . Nn se corres-
ponden con matrices de expresiones simbólicas que se generan en el proceso
de exportación. Las matrices anteriores se obtienen a partir de la informa-
ción contenida en la estructura de torsores de enlace, etrss , siguiendo los
algoritmos presentados en la introducción de la presente sección.

T
En el plano numérico, la matriz Jvet , correspondiente con la matriz φv, i
,
se evalúa haciendo uso de la función exportada a tal efecto
[real **Jvetm] = Jvet(real *prm, *q, *z, t)

La función anterior adopta la forma:


function [Jvetm] = Jvet(prm, q, z, t)

Jvet=zeros(p*nr,nlmbde);

Jvet = [ Jvet_joint_1(prm, q, z, t);

.....................

Jvet_joint_i(prm, q, z, t);

....................

Jvet_joint_nr(prm, q, z, t) ];

donde:

• nlmbde representa la dimensión del vector λ .

• Jvet_joint_i(prm, q, z, t), i=1..nr , correspondientes con las ma-


T
trices φv, , i = 1 . . . Nn se evalúan en el plano numérico haciendo uso
i
de funciones del tipo:

[real **Jvet_i]=Jvet_joint_i(real *prm, *q, *z, t), i=1..nr


4.4 Dinámica 185

cuyo contenido es de la forma:


function [Jvet_i] = Jvet_joint_i(prm, q, z, t)

Jvet_i=zeros(p,nlmbde);

Jvet_i(1,1) = ...
.................
Jvet_i(i,j) = ...
.................
Jvet_i(p,ne) = ...

En el plano simbólico, los jacobianos del tipo φv,i , i = 1 . . . Nn se


corresponden con matrices de expresiones simbólicas que se generan en el
proceso de exportación. Las matrices anteriores se obtienen a partir de la in-
formación contenida en las estructuras Cp y Cv siguiendo un algoritmo
análogo al que se emplea para obtener la matriz φv (sección 4.3.5).

Exportación de la matriz Vqe_0


En el plano numérico, la matriz Vqe_0 , correspondiente con la matriz
Vrqz , se evalúa haciendo uso de la función exportada a tal efecto
[real **Vqe_0m] = Vqe_0(real *prm, *q)

La función anterior adopta la forma:


function [Vqe_0m] = Vqe_0(prm, q)

Vqe_0m=zeros(p,ne);

Vqe_0m(1,1) = ...

.................

Vqe_0m(i,j) = ...

.................

Vqe_0m(p,ne) = ...
186 Implementación

donde p es el número total de coordenadas introducidas y ne representa


el número de incógnitas de enlace presentes en la estructura epsln .
Plantilla de simulación dinámica incluyendo las ecuaciones dinámicas de
enlace
La plantilla numérica euler_din_num.m resuelve el problema general de
simulación dinámica empleando un algoritmo idéntico al presentado en la sección
anterior para el problema de Newton-Euler.
En este caso, las ecuaciones de movimiento representan un sistema de dimen-
sión 6M + pNn + p + nλ , lineal en las incógnitas q̈,  y λ .
La matriz del sistema lineal anterior se evalúa en el plano numérico haciendo
uso de la función exportada a tal efecto
[real **A_m]= A_ede(real *prm, *q, *z, t)

Dicha función, en el caso más general adopta la forma:


function [A_m]=A_ede(prm, q, z, t)

A_m=[Me(prm, q) , Ve(prm, q) , zeros(6*nsol, nlmbe);

zeros(p*nr, p) , Vqe(prm, q) , Jvet(prm, q, z, t);

zeros(p, p) , Vqe_0(prm, q) , zeros(p, nlmbe);

Jv(prm, q, z, t), zeros(nlmb, ne), zeros(nlmb, nlmbe)];

donde:

• zeros(i,j) representa una matriz de ceros de dimensión (i, j).

• p es el número total de coordenadas introducidas.

• nsol es el número total de sólidos introducidos.

• nlmb es la dimensión del vector λ.

• nlmbe es la dimensión del vector λ .

El término independiente del sistema lineal anterior se evalúa en el plano nu-


mérico haciendo uso de la función exportada a tal efecto
[real *b_edev]= b_ede(real *prm, *q, *dq, *u, *z, *dz, *ddz, t)
4.4 Dinámica 187

Dicha función, en el caso más general adopta la forma:


function [b_edev]=b_ede(prm, q, dq, u, z, dz, ddz, t)

b_edev=[ Qe(prm, q, dq, u, t) ;

zeros(p*nr, 1) ;

zeros(p, 1) ;

ba(prm, q, dq, z, dz, ddz, t) ];

EL PROBLEMA DINÁMICO SEGÚN L AGRANGE


Tal como se describe en la sección 3.6.1, el formalismo de Lagrange resulta
en un sistema de p ecuaciones que en forma matricial se expresa

h i 
T q̈
Mqq φv λ
= Qq

El preprocesador simbólico desarrolla en este caso expresiones simbólicas pa-


ra los siguientes términos:

• La matriz de masa de cada uno de los sólidos Solk , k = 1 . . . M .


La matriz de masa del sólido Solk se calcula a partir del torsor de inercia de
dicho sólido según

i
Lk   !T   !
Solk
X ∂ VAbs (Gk ) ∂ F (Solk )
M qq
=
∂ q̇ ΩAbs (Solk ) ∂ q̈ M k (Solk )
xyz xyz


i=0

donde Lik representa el número de torsores de inercia asociados de forma


manual al sólido Solk .
Si no, dado que simbólicamente resulta más eficiente, se calcula a partir de
las propiedades inerciales introducidas en la definición del sólido según

   
MSol
qq
k
= BTV,k mSolk I 3 BV,k + BTΩ,k II 

k
(Solk ) bk
BΩ,k
188 Implementación

donde

∂   ∂  
BV,k =
∂ q̇
VAbs (Gk ) xyz , BΩ,k =
∂ q̇
ΩAbs (Solk ) bk

La matriz de masa del sistema, Mqq , se obtiene en términos de las ante-


riores como

M
X
Mqq = MSol
q
k
(4.69)
k=1

• El vector de carga, Qq .
El vector de carga actuante sobre el sistema se expresa en términos del con-
junto de acciones sobre cada uno de los sólidos según

M
X M
X
ne q̇
Qq = F
Fq̇,k + F
Fq̇,k (4.70)
k=1 k=1

donde:
ne
• F
Fq̇,k representa la contribución al vector de carga de las acciones
constitutivas actuantes sobre el sólido Solk .
El vector de fuerza generalizada anterior puede expresarse en términos
de las contribuciones de las diferentes acciones según
Lk
X
ne A
F
Fq̇,k = Fq̇,kj
F
j=1

donde cada una de las cargas anteriores se calcula según la expresión

  !T " #
A ∂ VAbs (Gk ) F Akj
Fq̇,kj
F =
∂ q̇ ΩAbs (Solk ) xyz M Akj + Gk Bk ∧ F Akj xyz


• FFq̇,k representa la contribución al vector de carga de los términos Cen-
trífugos y de Coriolis correspondientes al sólido Solk .
4.4 Dinámica 189

La fuerza generalizada anterior se calcula a partir del torsor de inercia


del sólido Solk según

i
Lk   !T " #
q̇ X ∂ VAbs (Gk ) F (Solk )
F
Fq̇,k =
∂ q̇ ΩAbs (Solk ) M k (Solk )
i=0 xyz


q̈ =0 xyz

Si no, por la misma razón que en el punto anterior, la contribución del


torsor de inercia a los términos Centrífugos y de Coriolis se calcula
de forma equivalente a la anterior, pero sin necesidad de desarrollar la
expresión simbólica de dicho torsor.
Aj q̇
Los términos del tipo FFq̇,k y FFq̇,k se exportan de forma independiente.
La contribución al vector de fuerza generalizada de la fuerza y el momento
de inercia también se exportan de forma independiente para cada sólido, de
tal forma que cada sólido contribuye al vector de cargas, como máximo 32 ,
con dos términos.

Exportación de la matriz Ml
Sol
En el plano numérico, la matriz de masa M qq k , correspondiente al sólido
Solk , se evalúa haciendo uso de la función exportada a tal efecto
[real **Ml_k] = Ml_sol_k(real *prm, *q)

donde sol_k es el nombre propuesto por el usuario para el sólido Solk .


La función anterior adopta la forma:
function [Ml_k] = Ml_sol_k(prm, q)

Ml_k=zeros(p,p);

Ml_k(1,1)= ...;

..............

Ml_k(i,j)= ...;

..............

Ml_k(p,p)= ...;
32
previo a la exportación se realiza un chequeo para comprobar que los diferentes vectores de
fuerza generalizada no son nulos.
190 Implementación

donde p representa el número total de coordenadas introducidas, ya sean


éstas auxiliares o no.
Sol
En el plano simbólico, la matriz de masa M qq k se corresponde con una
matriz de expresiones simbólicas que se recorre durante el proceso de exportación.
La matriz anterior se calcula a partir de la información almacenada en las
estructuras de torsores de inercia, itrss y sólidos, bodies según lo descrito
en la introducción de la presente sección.
La matriz de masa del sistema Ml , correspondiente con la matriz Mqq ,
se evalúa en cada instante de tiempo haciendo uso de la función exportada a tal
efecto:
[real **Ml] = Ml(real *prm, *q)

La función anterior adopta la forma:


function [Ml] = Ml(prm, q)

Ml=zeros(p,p);

Ml= Ml_sol_1(prm, q) + ...

......................

Ml_sol_i(prm, q) + ...

......................

Ml_sol_m(prm, q) ;

donde m denota el número de sólidos introducidos y sol_k , k=1..m de-


nota el nombre que el usuario asigna a cada uno de los sólidos.
Exportación del vector Ql
En el plano numérico, la contribución al vector de carga de la fuerza y el
momento de inercia de D’ Alembert del sólido Solk se evalúan respectivamente
haciendo uso de las funciones exportadas a tal efecto
[real *Qli1_k] = Qli1_sol_k(real *prm, *q, *dq) y
[real *Qli2_k] = Qli2_sol_k(real *prm, *q, *dq)

donde sol_k representa el nombre propuesto por el usuario para el sólido


Solk .
4.4 Dinámica 191

En el plano simbólico, las expresiones simbólicas correspondientes a los


términos anteriores se calculan recorriendo las estructuras de torsores de
inercia, itrss , y sólidos, bodies .
La contribución al vector de carga de los diferentes torsores constitutivos se
evalúa en el plano numérico haciendo uso de funciones del tipo
[real *Qlc_t] = Qlc_trs_k(real *prm, *q, *dq, *u, t)

donde trs_k representa el nombre propuesto por el usuario para el torsor


constitutivo exportado.
La función anterior, así como el resto de funciones de tipo vector de carga
lagrangiano, adopta la forma
function [Qlc_t] = Qlc_trs_k(prm, q, dq, u, t)

Qlc_t=zeros(q,1);

Qlc_t(1,1)= ....

................

Qlc_t(i,1)= ....

................

Qlc_t(i,1)= ....

En el plano simbólico, las expresiones simbólicas correspondientes a los


términos anteriores se calculan recorriendo la estructura de torsores de enlace,
etrss .

El vector de carga del sistema Ql , correspondiente con el vector Q q , se


evalúa en el plano numérico haciendo uso de la función exportada a tal efecto
[real *Ql] = Ql(real *prm, *q, *dq, *u, t)

La función anterior, en el caso más general, adopta la forma:


function [Ql] = Ql(prm, q, dq, u, t)

Ql=zeros(q,1);

Ql= Qlc_trs_1(prm, q, dq, u, t) + ...


192 Implementación

.................................

Qlc_trs_i(prm, q, dq, u, t) + ...

.................................

Qlc_trs_n(prm, q, dq, u, t) + ...

Qli1_sol_1(prm, q, dq) + Qli2_sol_1(prm, q, dq) + ...

.....................................................

Qli1_sol_k(prm, q, dq) + Qli2_sol_k(prm, q, dq) + ...

.....................................................

Qli1_sol_m(prm, q, dq) + Qli2_sol_m(prm, q, dq);

donde trs_i, i=1..n denota el nombre de cada uno de los torsores presen-
tes en la estructura de torsores de enlace, etrss , y sol_k , k=1..m denota
el nombre que el usuario asigna a cada uno de los sólidos.
Plantilla de simulación dinámica
La plantilla numérica lagrange_num.m resuelve el problema general de si-
mulación dinámica empleando para ello un integrador de las mismas característi-
cas que los anteriores.
Las ecuaciones de movimiento representan un sistema de dimensión p + n λ ,
lineal en las incógnitas dinámicas q̈ y λ.
La matriz del sistema lineal anterior se evalúa en el plano numérico haciendo
uso de la plantilla
[real **A_l]= A_l(real *prm, *q, *z, t)

Dicha función adopta la forma:


function [A_lm]=A_l(prm, q, z, t)

A_edem=[ Ml(prm, q) , Jv(prm, q, z, t)’ ;

Jv(prm, q, z, t) , zeros(nlmb, nlmb)];

donde zeros(nlmb, nlmb) es una matriz de ceros de dimensión (nλ , nλ ).


El término independiente del sistema lineal anterior se evalúa en el plano nu-
mérico haciendo uso de la plantilla
[real *b_l]= b_l(real *prm, *q, *dq, *u, *z, *dz, *ddz, t)
4.4 Dinámica 193

Dicha función adopta la forma:


function [b_lv]=b_l(prm, q, dq, u, z, dz, ddz, t)

b_lv=[ Ql(prm, q, dq, u, t) ;

ba(prm, q, dq, z, dz, ddz, t) ];

EL PROBLEMA DE EQUILIBRIO ESTÁTICO

Si bien el problema de equilibrio puede plantearse empleando cualquier for-


mulación, en el presente desarrollo se toma como referencia el conjunto de ecua-
ciones dinámicas de Lagrange.
El cálculo de la posición de equilibrio se realiza bajo los siguientes supuestos:
• Las ecuaciones de tipo no holónomo, aunque existan, no se tendrán en
cuenta.
• Las funciones de excitación, u = u (q, q̇, t) , se suponen independientes
del estado, es decir, u = u (t) . De lo contrario, el procesador simbólico
debería ser capaz de calcular la parcial de u respecto a q y a q̇ , lo cual
no puede garantizarse en el caso de la implementación propuesta.
El problema de equilibrio estático consiste en encontrar una solución que sa-
tisfaga cualquier conjunto de ecuaciones dinámicas para el caso particular

q̇ = q̈ = 0 , t = t0 → z = z 0 , u = u0

La condición de equilibrio estático para el conjunto de ecuaciones dinámicas


de Lagrange se expresa

h iT
ne
φq (q, z 0 , t0 ) λ −F
Fq̇ (q, u0 , t0 ) = 0
φ (q, z 0 , t0 ) = 0 (4.71)

e
donde φq s el jacobiano de las ecuaciones geométricas y λ es el vector de
multiplicadores asociados a las mismas.
194 Implementación

El sistema no lineal anterior puede resolverse de forma iterativa para q y λ p


empleando el algoritmo de Newton-Rhapson según

   
∂ T ne T
 ∂q φq λp − F
Fq̇ φq (q i , z 0 , t0 )     
 q , λ  δq e
  =
  δλ e
φq (qi, z0 , t0 ) 0
     
q i+1 qi δq
= +µ (4.72)
λp,i+1 λp,i δλ

Las expresiones e  y e denotan los errores cometidos en las ecuaciones


dinámicas y geométricas respectivamente y se definen según

 h iT 

e
 F ne (q i , u0 , t0 ) − φq (q i , z 0 , t0 )
F
 q̇
λ

=  (4.73)
e
−φ (q i , z 0 , t0 )

La parcial del vector de fuerza generalizada respecto al vector de coordenadas


generalizadas se calcula a partir de los vectores de carga asociados a los diferentes
torsores constitutivos según

XX M L  
∂ k
∂ Ane
Fq̇ ne =
F Fq̇,kj
F
(4.74)
∂q j=1
∂q q̇ =0
k=1

 
La parcial ∂
T
∂q φq λ se calcula empleando el procedimiento habitual
T
una vez realizado el producto φq λ .
Plantilla de cálculo de posición de equilibrio
El problema de equilibrio estático se resuelve haciendo uso de la instrucción
[real *new_q]=solve_equilibrium_position(real *prm, *q, ...
real *lmbp, t, relax, int nmax, real tol)
4.4 Dinámica 195

Argumentos de entrada
prm → vector de parámetros.
q → vector de coordenadas de partida.
lmbp → vector de multiplicadores asociado a las ecuaciones geomé-
tricas.
t → variable tiempo.
relax → relajación del método.
nmax → numero máximo de iteraciones del método.
tol → tolerancia global, tol, con la que se resuelve el problema de
equilibrio.

Argumentos de salida
new_q → vector de coordenadas que verifica el sistema 4.71 con tole-
rancia tol.

Internamente, la función solve_equilibrium_position evalúa las funcio-


nes
JQl_eq(prm, q, u, t) y JJplmbq(prm, q, z, lmbp, t) ,
cuyo proceso de exportación se detalla en las secciones siguientes.
Exportación de la matriz JQl_eq
En el plano numérico, la parcial ∂ F
F ne se evalúa haciendo uso de la función
∂q q̇
exportada a tal efecto:
[real **JQl_eqm]=JQl_eq(real *prm, *q, *u, t)

La función anterior adopta la forma:


function [JQl_eqm]=JQl_eq(prm, q, u, t)

JQl_eqm = zeros(p,p);

JQl_eqm = JQl_eq_trs_1(prm, q, u, t) +

............................

JQl_eq_trs_i(prm, q, u, t) +

............................

JQl_eq_trs_n(prm, q, u, t) ;
196 Implementación

donde trs_k, i=1..n representa el nombre asignado por el usuario a cada


uno de los torsores constitutivos.
Las funciones del tipo JQl_eq_trs_i(prm, q, u, t), i=1..n , corres-
ne
Aj
pondientes con las matrices ∂ F
F donde j = 1 . . . Lk y k = 1 . . . M se
∂q q̇,k
evalúan en el plano numérico haciendo uso de funciones del tipo:
[real **JQl_i]=JQl_eq_trs_i(real *prm, *q, *u, t), i=1..n

cuyo contenido es de la forma:


function [JQl_i] = JQl_eq_trs_i(prm, q, u, t)

JQl_i=zeros(p,p);

JQl_i(1,1) = ...

.................

JQl_i(i,j) = ...

.................

JQl_i(p,p) = ...

donde p representa el número total de coordenadas introducidas, ya sean


estas o no auxiliares y el subíndice _i representa cualquier combinación j, k.
ne
∂ F Aj
En el plano simbólico, las matrices del tipo
∂q
F q̇,k se calculan a partir

de los arrays de expresiones simbólicas correspondientes a los vectores de fuerza


generalizada asociados a los diferentes torsores constitutivos según
JQl_eq_trs_i=jacobian(subs(Ql_eq_trs_i, dqv, zeros(p,1)), qv’)

donde Ql_eq_trs_i, i=1..n representa el array de expresiones simbóli-


Ane
j
cas correspondiente al vector de fuerza generalizada F
Fq̇,k donde j = 1 . . . Lk

y k = 1 . . . M.
4.4 Dinámica 197

Exportación de la matriz JJplmbq


 
En el plano numérico, la parcial ∂
T
∂q φq λ se evalúa haciendo uso de
la función exportada a tal efecto:
[real **JJplmbqm]= JJplmbq(real *prm, *q, *z, *lmbp, t)

La función anterior presenta la forma:


function [JJplmbqm]= JJplmbq(prm, q, z, lmbp, t)

JJplmbqm=zeros(p,p);

JJplmbqm(1,:)=JJplmbq_1(prm, q, z, lmbp, t);

.............................................

JJplmbqm(i,:)=JJplmbq_i(prm, q, z, lmbp, t);

.............................................

JJplmbqm(p,:)=JJplmbq_p(prm, q, z, lmbp, t);

Las funciones del tipo JJplmbq_i(prm, q, z, lmbp, t) evalúan en el


plano numérico parcial respecto al vector de coordenadas del elemento i-ésimo,
T
i = 1 . . . p , del vector de fuerza generalizada φq λp .
El contenido de las funciones anteriores es de la forma
function [JJplmbq_iv] = JJplmbq_i(prm, q, z, lmbp, t)

JJplmbq_iv=zeros(1,p);

JJplmbq_iv(1,1) = ...

.....................

JJplmbq_iv(i,j) = ...

.....................

JJplmbq_iv(1,p) = ...

En el plano simbólico, los jacobianos anteriores se obtienen desarrollando el


producto de expresiones simbólicas
Jqlmbpv=Jqm’*lmbpv
198 Implementación

para después calcular el jacobiano respecto al vector de coordenadas generali-


zadas de cada uno de sus elementos según
JJplmbq_iv=jacobian(Jqlmbpv(i), qv’);

donde cada uno de los términos anteriores se exporta de forma independiente.

EL PROBLEMA MODAL

Las ecuaciones de movimiento de determinados sistemas mecánicos, en prin-


cipio no lineales, pueden adaptarse al esquema lineal que aparece en los textos
clásicos de análisis modal, [Rao03, Inm00, Gin01].
En tal caso, la respuesta en frecuencia de dichos sistemas puede determinar-
se con ayuda de dos parámetros modales característicos: frecuencias naturales y
modos de vibración.
En este contexto, el problema modal consistirá en determinar los parámetros
modales de un determinado sistema mecánico.
La solución del problema modal no siempre proporciona información acerca
del comportamiento del sistema. Para que así sea, tanto el sistema mecánico como
la fuente de excitación deben reunir ciertas condiciones.
Así, en los diferentes apartados de esta sección se analizarán los supuestos de
partida de la teoría clásica del análisis modal, junto con una serie de aspectos que
afectan a la implementación descrita en el resto del capítulo.
Formulaciones dinámicas en coordenadas independientes
Tal como se describe en la sección 4.3.2, el algoritmo QR puede emplearse
para resolver las velocidades dependientes, q̇ d , en términos de las independientes,
q̇ i de tal forma que

q̇ d = q̇ (1 : d) y q̇ i = q̇ (d + 1 : p).

Las ecuaciones dinámicas de Lagrange se expresan en términos del reordena-


miento anterior según

h 0
iT
Mq 0 q̈ + φv λ = Qq 0 (4.75)

0
donde Mq 0 , φv y Qq0 representan reordenamientos de las matrices
Mq , φv y Qq respectivamente.
4.4 Dinámica 199

Por otra parte, haciendo uso de la ecuación 4.34, el vector q̈ puede sustituirse
por su equivalente

 −1
  

− R d,d Rd,i 
R−1
d,d
b ,d
q̈ =   q̈ i −  
I 0

= S q̈ i − T , (4.76)

y teniendo en cuenta que la matriz S es una de las bases del espacio nulo de
φv (q ) , la ecuación 4.75 puede volverse a escribir como

Mq ,i 0 q̈ i = Qq0 ,i (4.77)

donde

• Mq ,i
0 se define en términos de la matriz de masa según

Mq ,i 0 = S T Mq S 0 (4.78)

• Q0 ,i se define en términos de los vectores Qq y T según

Qq0 ,i = S T Qq 0 + S T Mq 0 T (4.79)

donde, si la evaluación numérica del vector T exige calcular todas las velo-
cidades generalizadas, puede hacerse uso de la ecuación 4.28.

Linearización de las ecuaciones dinámicas


Las ecuaciones de movimiento de los sistemas Multi-Cuerpo son, en gene-
ral, no lineales. Sin embargo, bajo ciertas condiciones, dichas ecuaciones pueden
considerarse lineales en las incógnitas dinámicas.
La linearización de las ecuaciones dinámicas se realiza teniendo en cuenta los
siguientes supuestos:

• Las ecuaciones rehónomas pueden expresarse en la forma

φ (q) − z = 0 (4.80)
200 Implementación

donde z = z (t) representa un vector de pequeñas perturbaciones respecto


de la posición nominal, z N = 0.

• La fuerza generalizada asociada a cualquier acción sobre el sistema puede


escribirse en la forma

Qq (q, q̇, u)

donde, al igual que ocurría en el problema de equilibrio estático, se su-


pondrá que el vector de funciones de excitación, u = u (q, q̇, t) , es
independiente del estado. En este caso, u = u (t) representa un vector
de pequeñas funciones de excitación respecto de la función de excitación
nominal, uN = 0.

• la solución para las incógnitas dinámicas puede escribirse en la forma

q = q N (t) + δq (t) , q̇ = q̇ N (t) + δ q̇ (t)


(4.81)
q̈ = q̈ N (t) + δ q̈ (t) , λ = λN (t) + δλ (t)

donde δq (t) , δ q̇ (t) , δ q̈ (t) y δλ (t) representan pequeñas desviaciones


alrededor de sus respectivos valores nominales, que verifican

h i h i
T
Mq (q N ) q̈ N + φv (q N ) λN = Qq (q N , q̇ N , uN )
(4.82)
φ (q N ) − z N = 0

El desarrollo en serie de Taylor de primer orden alrededor de dicha solución


nominal, aplicado a las funciones que aparecen en la ecuación anterior, resulta en

 T
  δq   
KN CN MN φq,N
  δ q̇  BN u 
   
 δ q̈  = (4.83)
φv,N 0 0 0 δλ
δz
4.4 Dinámica 201

donde

• KN es la rigidez del sistema33 ,

" 

KN =
∂q
Mq (q) q̈ N + (4.84)

    #
∂ T ∂
+
∂q
φq (q) λN − Q (q, q̇ N , uN )
∂q q
q =q N

• CN es el amortiguamiento del sistema34 ,

 

CN =− Q (q , q̇, uN )
∂ q̇ q N


(4.85)
q̇ =q̇ N

• MN es la matriz de masa, evaluada en la posición nominal, q = q N .

• φq,N es el jacobiano de las restricciones geométricas, evaluado en la po-

sición nominal, q = q N .
• BN es la matriz de control del sistema35 ,

 

BN =
∂u
Qq (q N , q̇ N , u)

(4.86)
u=uN
33
en el caso u = u (q, q̇, t) , el término K N debería completarse con
  
∂ ∂
− Q (q , q̇ , u) u (q, q̇ N , t)
∂u q N N ∂q
u=uN , q =q N
34 C N debería completarse con
en el caso u = u (q, q̇, t) , el término
  
∂ ∂
− Q (q , q̇ , u) u (q N , q̇, t)
∂u q N N ∂ q̇
u=uN , q̇ =q̇ N
35
En la teoría clásica de control, las señales de control siempre son la forma u = u (t) aunque
el lazo de control utiliza el estado del sistema para definirlas, por lo que la restricción impuesta a
la dependencia funcional de u no tiene consecuencias prácticas.
202 Implementación

Si, como es habitual, la linearización tiene lugar alrededor de la posición de


equilibrio estático, el requerimiento 4.82 se convierte en 4.71 para t = t 0 . En tal
caso, la matriz de rigidez anterior se expresa

"    #
∂ T ∂
KEq = φq (q, z 0 , t0 ) λEq − F ne (q, u0 , t0 )
F
∂q ∂ q q̇
q =q Eq

donde el subíndice Eq denota la posición de equilibrio estático.


Solución del problema modal
Tal como se describe en el anterior apartado, existen sistemas mecánicos cuyas
ecuaciones de movimiento pueden linearizarse. Así pues, en el desarrollo de esta
sección, se supondrá que el sistema admite una solución de pequeñas desviaciones
respecto a la posición de equilibrio estático, q Eq .
En ausencia de ecuaciones rehónomas, el sistema 4.83 puede reducirse a uno
en coordenadas independientes empleando las relaciones

δq = SEq δq i , δ q̇ = SEq δ q̇ i , δ q̈ = SEq δ q̈ i

donde:

• Los vectores δq , δ q̇ y δ q̈ se definen de tal forma que


     
δq d δ q̇ d δ q̈ d
δq = , δ q̇ = , δ q̈ =
δq i δ q̇ i δ q̈ i

• La transformación SEq se obtiene una vez resuelta la factorización QR


de la matriz φq,Eq según
 

− R−1
d,d R d,i

SEq = 
I Eq

El sistema de ecuaciones 4.83 se escribe en términos de las variables indepen-


dientes como

i
MEq δ q̈ i + CiEq δ q̇ i + KiEq δq i = BiEq u (4.87)
4.4 Dinámica 203

donde

STEq MEq SEq STEq KEq SEq


i
MEq = , KiEq =

y el resto de matrices se construyen de la misma forma en términos de SEq .


Frecuencias Naturales y Modos de Vibración
En este apartado, el sistema diferencial lineal 4.87 será analizado según la
teoría clásica de análisis modal, [Rao03, Inm00, Gin01].
La resolución del problema de vibraciones libres no amortiguadas permite la
determinación de los dos parámetros modales característicos: frecuencias natura-
les y modos de vibración.
Suponiendo que no existen acciones exteriores sobre el sistema, u = 0 , y
que los términos disipativos son nulos, el sistema 4.87 se reduce a

Eq
Mq,i δ q̈ i + KEq
q,i
δq i = 0. (4.88)

Suponiendo que el sistema anterior admite soluciones del tipo

 
δq i = ψ Re B exp (iωt) , B∈ , (4.89)

el sistema 4.88 puede volverse a escribir como

Eq
KEq
q,i
ψ − ω2 Mq,i ψ=0 (4.90)

Buscar una solución distinta de la idénticamente nula para ψ se traduce en


resolver el problema generalizado

Eq
KEq
q,i
ψ = ω2 Mq,i ψ (4.91)

donde ψ denota el vector propio de valor propio ω 2 .


Los modos de vibración y sus correspondientes frecuencias naturales se en-
cuentran al resolver el problema de vectores y valores propios

2
KEq
q,i Ψ
= Ω MEq
q,i
Ψ . (4.92)
204 Implementación

donde

• Ψ es la matriz de modos,

 
Ψ = ψ 1 . . . ψ j . . . ψ ni .
2
• Ω es una matriz diagonal cuyos elementos son de la forma

2
Ωjj = ωj2 ,

La j-ésima frecuencia natural, fj , asociada al j-ésimo modo de vibración,


ψ j , se expresa en términos de ωj según

fj = 2πωj

La solución general de la ecuación 4.90 se expresa en términos de los modos


de vibración y sus correspondientes frecuencias como

ni
X    
δq = ψ j Re Bj exp (iωj t) = ψ Re B exp (iωt) (4.93)
j=1

Así pues, matemáticamente hablando, el conjunto


ψ j , ωj , j = 1 . . . ni (4.94)

representa una base del espacio de soluciones de la ecuación 4.90.


Coordenadas Modales
Teniendo en cuenta que la matriz de modos es ortogonal a las matrices de masa
y rigidez, resulta obvio que el cambio de coordenadas

δq i = Ψ η , δ q̇ i = Ψ η̇ , δ q̈ i = Ψ η̈

permite transformar el sistema diferencial 4.91 en ni ecuaciones diferenciales


simples.
4.4 Dinámica 205

Si la escala de los modos de vibración se elige de tal forma que

Eq
ΨT Mq,i Ψ = I , (4.95)

las ecuaciones diferenciales mencionadas se reducen a

η̈j + ωj2 ηj = 0 , j = 1 . . . ni (4.96)

donde ηj es de la forma
 
ηj = Re Bj exp (iωj t) , Bj ∈ .

Plantilla de solución de frecuencias propias y modos de vibración


Las frecuencias propias y modos de vibración de un sistema mecánico se cal-
culan haciendo uso de la plantilla numérica natural_modes.m , cuya versión
genérica se presenta en el anexo A.4.
El algoritmo implementado en la plantilla anterior podría resumirse en los
pasos siguientes:

• Inicializar los valores de todas las incógnitas del problema: parámetros,


coordenadas, multiplicadores asociados a las restricciones geométricas, to-
lerancias, ...
• Resolver el problema de equilibrio estático haciendo uso de la función
solve_equilibrium_position , introducida en la sección 4.4.4.
i
• Construir las matrices KiEq y MEq en términos de la matriz de trans-
formación SEq .

• Resolver el problema de valores y vectores propios generalizado asociado


i i
a las matrices K Eq y MEq , para lo cual se hace uso de la función
eig de M AT L AB .
i i
Dado que K Eq es simétrica y MEq es simétrica y definida positiva, el
problema anterior puede resolverse aplicando la factorización de Choleski
de la matriz de masa.
• Expandir el resultado de los modos de vibración a todas las coordenadas
realizando el producto

Ψq 0 = SEq Ψq,i
206 Implementación

4.5. Funciones de Alto Nivel


En esta sección se describirán las funciones que constituyen el Sistema de Alto
Nivel del Interface Simbólico y que permiten al usuario definir cómodamente los
elementos típicos de la DSM .
El contenido de la sección se organiza en tres apartados que describen funcio-
nes de alto nivel para la definición de:
• La orientación de los diferentes sólidos.
• Pares cinemáticos elementales.
• Fuerzas y elementos constitutivos más comunes.

4.5.1. Representación de la orientación de un sólido


En esta sección se describirán las funciones que permiten definir las matrices
de cambio de base a partir de diferentes grupos de coordenadas generalizadas, ya
sean éstas parámetros de Euler, ángulos de Euler o ángulos diferenciales.

PARÁMETROS DE E ULER
Un cambio de orientación puede expresarse en términos geométricos, como
una rotación de valor finito θ alrededor de un eje de orientación arbitraria 36 , v.

z v
θ
3

y
x
1

Figura 4.11: Rotación finita alrededor de un eje arbitrario v.

La transformación anterior se relaciona con la matriz de cambio de base entre


la base global xyz y una base genérica 123 mediante la expresión

h i123         θ
I = I xyz
+ b
v xyz
sin θ + 2 v b xyz sin2
b xyz v (4.97)
xyz 2

36
resultado matemático conocido como Teorema de Euler.
4.5 Funciones de Alto Nivel 207

Los parámetros de Euler se definen en términos de v y θ como

θ θ
θ0 = cos, θ1 = v1 sin
2 2
θ θ
θ2 = v2 sin , θ3 = v3 sin (4.98)
2 2

donde resulta evidente que

3
X
T
θ θ= θi = 1 (4.99)
i=0

Teniendo en cuenta la definición 4.98, la ecuación 4.97 se expresa en términos


de los parámetros de Euler como

h i123   h i h i h i
I = I + 2 θ0 c
θ

c
+2 θ 
c
θ


(4.100)
xyz xyz xyz xyz xyz

donde

 T
θ = 

θ1 θ2 θ3

En formulaciones matriciales, la transformación anterior puede expresarse de


forma alternativa como

h i123  h iT
I =2 E E (4.101)
xyz

donde

   
  −θ1 θ0 −θ3 θ2 h i −θ1 θ0 θ3 −θ2
E =  −θ2 θ3 θ0 −θ1  , E =  −θ2 −θ3 θ0 θ1 
−θ3 −θ2 θ1 θ0 −θ3 θ2 −θ1 θ0

(4.102)
208 Implementación

Por su parte, el vector velocidad angular, Ωxyz (123), puede obtenerse de las
equivalencias cinemáticas:

h i    h i T
d h i123 123
Ωxyz (123) = I I
xyz dt xyz xyz
h i h i  T  h i123 
123 d
Ωxyz (123) = I , (4.103)
123 xyz d t I xyz

h i123 X3
∂ h i123
d
donde I = I θ̇i . (4.104)
dt xyz ∂ θi xyz
i=0

Si se emplea la formulación matricial alternativa presentada en 4.101, el vector


Ωxyz (123) adopta la forma
   
Ωxyz (123) xyz
=2 E θ̇ (4.105)

o bien

  h i
Ωxyz (123) 123
=2 E θ̇ (4.106)

Á NGULOS DE E ULER
La forma más intuitiva de acotar la orientación de un sólido de forma unívoca
en el espacio tridimensional es emplear tres ángulos de Euler independientes que
representan rotaciones alrededor de los ejes cartesianos.
Las familias de ángulos de Euler se denotan por la secuencia de rotaciones
empleada para llegar desde la configuración inicial a la final. Así, en el caso de
la figura 4.12, la configuración final puede obtenerse empleando las rotaciones
elementales siguientes
α 0 0 0
123 1 2 3 alrededor del eje 1.

β 00 00 00
10 20 30 1 2 3 alrededor del eje 20 .

γ 000 000 000
100 200 300 1 2 3 alrededor del eje 300 .

donde resulta evidente que la secuencia de rotaciones no es conmutativa.
4.5 Funciones de Alto Nivel 209

3
30

20
α
2
α̇ 10 ≡ 1
1

γ̇

300 β̇ 2000
3000 ≡ 300

200 ≡ 20

β 100 1000
γ

Figura 4.12: Familia [α, β, γ] de ángulos de Euler 123

La matriz de cambio de base se obtiene a partir de las matrices de cambio de


base elementales como

h i1000 2000 3000 h i1000 2000 3000 h i100 200 300 h i10 20 30
I = I I I (4.107)
123 100 200 300 10 20 30 123

El vector velocidad angular se expresa en términos de las derivadas de los


ángulos propuestos como
 
α̇
Ω123 (1000 2000 3000 ) = α̇ e1 + β̇ e20 + γ̇ e300 = G  β̇  (4.108)
γ̇

donde e1 , e20 y e300 representan vectores unitarios según las direcciones


1, 2 y 300 respectivamente.
0
210 Implementación

De la expresión anterior se deduce que los Ángulos de Euler presentan singu-


laridades para un conjunto finito de posiciones.

P EQUEÑAS ROTACIONES

Si las rotaciones son infinitesimales, las ecuaciones presentadas en las seccio-


nes anteriores pueden simplificarse haciendo uso de las aproximaciones siguientes

sin θi ≈ θi , cos θi ≈ 1 , θi θj ≈ 0 ∀ i, j. (4.109)

α
z
3 3

2
2

x y
x
1
α̇
γ̇
z
3

β̇ 2
γ
y

1
β 1

Figura 4.13: Los ángulos α , β y γ representan pequeñas perturbaciones alrede-


dor de la orientación de partida.

Así, la transformación presentada en 4.97 se escribe


h i123   h i
I = I xyz + θb (4.110)
xyz xyz
4.5 Funciones de Alto Nivel 211

El vector velocidad angular se expresa en términos de las derivadas de los


ángulos propuestos como
 
    α̇
Ωxyz (123) xyz
= Ωxyz (123) 123
=  β̇  . (4.111)
γ̇

El operador matriz de cambio de base entre dos bases de pequeñas rotaciones,


bi y bj , queda representado por

h i bj h ixyz h i bj h i bi  T h i bj
I = I I = I I =
bi bi xyz xyz xyz
  h i h i
= I xyz
+ θbj − θbi (4.112)
xyz xyz

donde ahora
 
    α̇j − α̇i
Ωbj (bi ) xyz
= Ωbj (bi ) 123 =  β̇j − β̇i  .
γ̇j − γ̇i

Si al plantear el problema mecánico el usuario emplea orientaciones de este


tipo, la posición de cualquier punto es una expresión lineal en las coordenadas de
partida, lo cual reduce sensiblemente la complejidad de las ecuaciones dinámicas.
Por otra parte, la matriz de cambio de base presentada en la ecuación 4.112
no reune las condiciones de ortonormalidad y ortogonalidad que se exigen a las
matrices de cambio de base habituales, por lo que el operador cambio de base deja
de ser consistente.
La simplificación de términos que con esta aproximación resultan desprecia-
bles se lleva a cabo con ayuda de la estructura auxiliar smalls , donde se alma-
cenan todos los giros diferenciales y sus correspondientes derivadas.
Funciones de interfaz de usuario
Las matrices de cambio de base correspondientes a cada una de las formula-
ciones anteriores se obtienen haciendo uso de las instrucciones:

• Parámetros de Euler
[sym 3x3 matrix A]=A_f_e_params(sym [theta_0; theta_1; ...
theta_2; theta_3])
212 Implementación

donde la ligadura entre los parámetros debe ser impuesta por el usuario en
la forma
new_Cp(string label, ...
theta_0^2 + theta_1^2 + theta_2^2 + theta_3^2 - 1)

• Ángulos de Euler
[sym 3x3 matrix A]=simple_3d_rotation(integer axis, sym alpha )
donde el entero axis = 1 ... 3 indica el eje alrededor del cual se rea-
liza la rotación.

• Pequeñas rotaciones
[sym 3x3 matrix A]=A_small_123_rotation(sym [alpha; ...
beta; gamma])

En cualquiera de los casos anteriores, para introducir la matriz de cambio de


base en la estructura ors , debe hacerse uso de la instrucción new_orientation
definida ésta en la sección 4.3.4.

Para casos en los que no se requieren manipulaciones algebraicas adicionales,


se dispone una instrucción de alto nivel,
new_or(string name, integer type, string org_or, ...
sym svars, [integer axis]) ,

que permite generar e introducir, de forma automática, matrices de cambio de


base de los tipos anteriores en la estructura ors .

Argumentos de entrada
name → identificador de la base a introducir en la estructura ors .
type → tipo de base:
1 → giro simple alrededor del eje axis de la base org_or .
2 → parámetros de Euler.
3 → pequeñas rotaciones.
4 → matriz general de dimensión (3, 3).
org_or → base origen, a partir de la cual se define la base name .
svars → variables simbólicas que sirven para definir la matriz de cam-
bio de base. Dependiendo del valor de type este argumento contiene
1 → 1 coordenada generalizada.
2 → 4 coordenadas generalizadas en el orden theta_i, i = 0..3 .
3 → 3 coordenadas generalizadas en el orden alpha, beta, gamma.
4.5 Funciones de Alto Nivel 213

4 → matriz simbólica de dimensión (3, 3).


axis → sólo se exige en el caso type=1 .

Argumentos de salida
Ninguno.

Si la definición del problema incluye giros diferenciales, las expresiones obte-


nidas con operadores vectoriales del tipo
omega, velocity_vector, alfa, acceleration_vector, ...

se simplifican haciendo uso de la función


[sym 3x1 l_vect] = vector_small_filter(sym 3x1 vect) ,

cuyo objetivo es linearizar la expresión simbólica del vector vect en el


conjunto de pequeñas variables almacenado en la estructura smalls.

4.5.2. Pares Cinemáticos Elementales


Como ya se dijo, la definición de un par cinemático entre dos sólidos implica,
en el caso más general, la introducción de información en las siguientes estructu-
ras de datos:

• Ecuaciones geométricas y/o no holónomas → Cp y/o Cv .

• Torsores de enlace → etrss .

• Pares cinemáticos → joints .

En el caso del interfaz simbólico propuesto, los pares cinemáticos elementales


se introducen por medio de funciones de alto nivel que, a través de la información
cartesiana subministrada por el usuario, plantean las ecuaciones cinemáticas y
torsores de enlace necesarios. Para ello, se utilizarán las funciones de bajo nivel
presentadas en apartados anteriores ( new_Cp, new_etrss, etc ...).

En todos los casos, tanto los torsores de enlace como las ecuaciones cine-
máticas se introducen en las correspondientes estructuras de forma automática.
Además, los torsores siempre se plantean en base a un mínimo número de incóg-
nitas de enlace, lo cual evita la necesidad de introducir ecuaciones dinámicas de
enlace al plantear el problema.
214 Implementación

Por coherencia con las estructuras de datos, y pese a no ser necesario, la estruc-
tura de pares cinemáticos se rellena en todos los casos a partir de la información
introducida para definir cada uno de los enlaces.
En ocasiones, la monitorización de los grados de libertad asociados a la defini-
ción del enlace (ángulo entre dos sólidos, distancia entre dos puntos, etc ...) puede
resultar útil e incluso necesario. En tal caso, el usuario puede definir coordenadas
auxiliares cuyas ecuaciones de definición se plantean de forma automática.
Evidentemente, si el enlace es compatible con la acotación de partida, los gra-
dos de libertad asociados a la definición de dicho enlace coincidirán con algunas
de las coordenadas de partida, por lo que la introducción de coordenadas auxilia-
res no se hace necesaria.

PAR E SFÉRICO
Las relaciones geométricas asociadas un par esférico (figura 4.14) entre el
punto B1 del sólido Sol1 y el punto B2 del sólido Sol2 se expresan

OAbs B1 = OAbs B2

donde OAbs hace referencia al origen de la referencia Abs .

Sol2

Sol1
B1 ≡ B2

OAbs

Figura 4.14: Par esférico


4.5 Funciones de Alto Nivel 215

El torsor de enlace, definido con signo positivo cuando actúa sobre Sol 2 , se
escribe
   
F 2 ,x 0
        
F 2 xyz =  F 2 ,y  , M 2 xyz
= 0 (4.113)
F 2 ,z xyz
0 xyz

Funciones de interfaz de usuario


Las ecuaciones geométricas, incógnitas de enlace y torsores de enlace asocia-
dos a un par esférico entre dos sólidos se introducen en las estructuras correspon-
dientes haciendo uso de la instrucción:
new_espheric_joint(string name, bd_name_1, pt_name_1, ...

string bd_name_2, pt_name_2)

Argumentos de entrada
name → identificador del enlace.
bd_name_1 → sólido sobre el que recae la reacción del enlace.
pt_name_1 → punto cinemáticamente perteneciente a bd_name_1 en
el que se define la acción de enlace.
bd_name_2 → sólido sobre el que recae la acción del enlace.
pt_name_2 → punto cinemáticamente perteneciente a bd_name_2 en
el que se define la acción de enlace.
En este caso37 , la pertenencia cinemática de los puntos se chequea compro-
bando que su vector de posición en la referencia de los respectivos sólidos
es constante.

Argumentos de salida
Ninguno.

Con el fin de evitar redundancias de tipo matemático, se omitirán las ecuacio-


nes del tipo 0 = 0.
Los nombres de las ecuaciones se generan posponiendo las etiquetas
_e1, _e2, y _e3 al nombre del par cinemático subministrado por el usuario.

Los nombres de las incógnitas de enlace se generan posponiendo las etiquetas


_f1, _f2, y _f3 al nombre del par cinemático subministrado por el usuario.
37
no así en el caso de la función de bajo nivel new_etrss.
216 Implementación

Los nombres de los torsores de enlace sobre los sólidos bd_name_1 y


bd_name_2 se generan respectivamente posponiendo las etiquetas _t1 y
_t2 al nombre del par cinemático subministrado por el usuario.
La información correspondiente al par esférico se introduce de forma automá-
tica en la estructura joints mediante una instrucción del tipo:
new_joint( name, name_t1, name_t2, ...
{name_e1, name_e2, name_e3}, 0, 1)

donde name es el nombre propuesto por el usuario para identificar el enlace.


Si el par esférico queda implícito en la acotación de partida, el usuario puede
automatizar la tarea de generación de torsores e incógnitas de enlace haciendo uso
de la instrucción:
imp_espheric_joint(string name, string b_name_1, ...
string b_name_2, string pt_name)

donde pt_name representa el nombre del punto de definición del par esféri-
co.

E LEMENTO DE TIPO BARRA

Un elemento de tipo barra sin masa38 , situado entre el punto B1 del sólido
Sol1 y el punto B2 del sólido Sol2 queda matemáticamente representado por una
sola ecuación:

 T  
B1 B2 xyz
B1 B2 xyz
= L2 .

Sol2

B2
Sol1
L

B1

Figura 4.15: Elemento de tipo barra


38
identificado también como massless link en la bibliografía
4.5 Funciones de Alto Nivel 217

Desde el punto de vista cinemático, la ecuación anterior supone la presencia


de un par esférico en cada uno de los sólidos. Sin embargo, el equilibrio dinámico
del elemento exige que la fuerza de enlace esté alineada con la barra, por lo que los
torsores de enlace se plantean en términos de una sola incógnita independiente, f t ,
que representa la fuerza de tracción-compresión sobre dicha barra.
Así pues, el torsor de enlace actuante sobre el sólido Sol2 , expresado en térmi-
nos de la incógnita de enlace ft , se escribe

 
      0
F 1 xyz
= − (ft /L) B1 B2 xyz
, M1 xyz
= 0 
0 xyz

donde, si la solución para ft es > 0 , la fuerza sobre la barra es de tracción.


Funciones de interfaz de usuario
La ecuación geométrica, incógnita de enlace y torsores de enlace asociados
a un elemento de tipo barra entre dos sólidos se introducen en las estructuras
correspondientes haciendo uso de la instrucción:
new_fixed_dist_joint(string name, b_name_1, pt_name_1, ...
string b_name_2, pt_name_2, sym dist)

donde
name → identificador del enlace.
bd_name_1 → sólido sobre el que recae la reacción del enlace.
pt_name_1 → punto cinemáticamente perteneciente a bd_name_1 en el
que se define la acción de enlace.
bd_name_2 → sólido sobre el que recae la acción del enlace.
pt_name_2 → punto cinemáticamente perteneciente a bd_name_2 en el
que se define la acción de enlace39 .
dist → parámetro simbólico que representa la distancia entre los dos pun-
tos.
El criterio con el que se elige el nombre de la ecuación y de los torso-
res de enlace es análogo al presentado en la sección anterior para la función
new_espheric_joint.

El nombre de las incógnita de enlace se generan posponiendo la etiqueta _f al


nombre subministrado por el usuario para el elemento barra.
39
la pertenencia cinemática de los puntos se chequea de forma análoga a la presentada para la
función new_espheric_joint .
218 Implementación

Por último, la información correspondiente al elemento barra se introduce en


la estructura joints haciendo uso de la instrucción:
new_joint(name, name_t1, name_t2, {name_e1}, 0, 1)

donde name es el nombre propuesto por el usuario para identificar el ele-


mento barra.

PAR C ILÍNDRICO
Las relaciones geométricas asociadas un par cilíndrico entre dos sólidos Sol 1 y
Sol2 se expresan
 
0
   
eb3 123
= 0
1 123
   
cos α12 0
       
eb1 123
=  sin α12  , B1 B2 123 =  0  (4.114)
0 123
S12 123

donde

• eb3 hace referencia al versor de la base 10 20 30 en la dirección del eje de


rotación (figura 4.16).

Sol2

joint axis 1 30 ≡ 3
B2
0
1

1 3
s12 20
B1

α12
2
Sol1

Figura 4.16: Par cilíndrico entre los sólidos Sol1 y Sol2


4.5 Funciones de Alto Nivel 219

• S12 y α12 son coordenadas auxiliares que representan los desplazamientos


generalizados permitidos por el par cinemático.

El torsor de enlace, definido con signo positivo cuando actúa sobre Sol 2 , se
escribe
   
F 2 ,1 M 2 ,1
         
F 2 123 =  F 2 ,2  , M 2 123 =  M 2 ,2 
0 123
0 123

Funciones de interfaz de usuario


Las ecuaciones geométricas, incógnitas de enlace y torsores de enlace asocia-
dos a un par cilíndrico se introducen en las estructuras correspondientes haciendo
uso de la instrucción:
new_cylindrical_joint(name, bd_name_1, pt_name_1, or_name_1, ...
bd_name_2, pt_name_2, or_name_2, ...
integer or_axis, [sym s12, sym alpha12])

Argumentos de entrada (tan sólo los que difieren de la instrucción anterior)


or_name_1 → orientación cinemáticamente perteneciente al sólido
bd_name_1.
or_name_2 → orientación cinemáticamente perteneciente al sólido
bd_name_2.
or_axis → eje de rotación, or_axis = 1 ... 3 , de definición del
par cilíndrico.
s12 → coordenada auxiliar que representa el desplazamiento relativo
entre los sólidos medido sobre el eje de rotación.
alpha12 → coordenada auxiliar que representa el giro relativo entre
los sólidos alrededor del eje de rotación.

Argumentos de salida
Ninguno.

Las bases or_name_1 y or_name_2 deben estar pre-orientadas, ya que de


lo contrario no se asegura la convergencia del problema de posición.
Los nombres de las ecuaciones de enlace se eligen de la forma
name_vrot_1, name_vrot_2 y name_b1b2_1, name_b1b2_2
para las condiciones exigidas a los vectores eb3 y B1 B2 respectivamente.
220 Implementación

Si el usuario introduce la coordenada auxiliar s12 , el nombre de su ecua-


ción de definición se elige de la forma name_asv1 donde name es el nombre
propuesto por el usuario como identificador del par cilíndrico.
Si el usuario introduce la coordenada auxiliar alpha12 , el nombre de sus
ecuaciones40 de definición se eligen de la forma name_asv2 y name_asv3 don-
de name tiene el mismo significado que en el caso anterior.
Caso de ser planteadas, las ecuaciones name_asv1, name_asv2 y
name_asv3 se marcan como ecuaciones de definición de coordenadas auxi-
liares.
Los nombres de las fuerzas y momentos de enlace se generan posponiendo las
etiquetas41 _f1, _f2 y _h1, _h2 al nombre subministrado por el usuario
para el par cinemático.
Los nombres de los torsores de enlace sobre los sólidos bd_name_1 y
bd_name_2 se generan de forma análoga a la presentada en secciones anteriores.

La información correspondiente al par cilíndrico se introduce en la estructura


joints haciendo uso de la instrucción:

new_joint(name, name_t1, name_t2, ...


{name_vrot_1, name_vrot_2, name_b1b2_1, name_b1b2_2}, 0, 1)

donde name es el nombre propuesto por el usuario para identificar el par


cilíndrico. Evidentemente, las ecuaciones name_asvi, i = 1...3 nunca apa-
recen en la definición del enlace.
Por otra parte, si el par cilíndrico queda implícito en la acotación de partida, los
torsores e incógnitas de enlace se introducen en las estructuras correspondientes
haciendo uso de la instrucción:
imp_cylindrical_joint(name, bd_name_1, pt_name_1, ...

bd_name_2, pt_name_2, or_name, or_axis)

donde or_name es la base en la que se definen las incógnitas de enlace.


40
La definición de la coordenada alpha12 exige plantear dos ecuaciones que, aunque redundan-
tes, serán necesarias para determinar dicha coordenada de forma unívoca.
41
Pueden variar en función del valor de or_axis. En el caso mostrado, or_axis = 3.
4.5 Funciones de Alto Nivel 221

PAR P RISMÁTICO
Desde el punto de vista cinemático, un par prismático puede entenderse como
un par cilíndrico en el que la coordenada α12 se sustituye por un parámetro
(ecuación 4.114).
El torsor de enlace, definido con signo positivo cuando actúa sobre Sol2 , se
escribe
   
F 2 ,1
M 2 ,1
         
F 2 123 =  F 2 ,2  , M 2 123 =  M 2 ,2 
0 123
M 2 ,3 123

Funciones de interfaz de usuario


Las ecuaciones geométricas, incógnitas de enlace y torsores de enlace asocia-
dos a un par prismático entre dos sólidos se introducen en las correspondientes
estructuras haciendo uso de la instrucción:
new_prismatic_joint(name, b_name_1, pt_name_1, or_name_1, ...

b_name_2, pt_name_2, or_name_2, ...

integer or_axis, [prm alpha12, [sym s12]])

Si no se introduce el parámetro simbólico alpha12 , se asume que el valor


de dicho parámetro es 0.
Si se introduce la coordenada auxiliar s12 , el nombre de su ecuación de
definición se elige de la misma forma que en el caso del par cilíndrico.
La información correspondiente al par prismático se introduce en la estructura
joints haciendo uso de la instrucción:

new_joint(name, name_t1, name_t2, {name_vrot_1, name_vrot_2, ...


name_b1b2_1, name_b1b2_2, name_an1, name_an2}, 0, 1)

donde name_an1 y name_an2 representan los nombres de las ecuaciones


de enlace, una de ellas redundante, añadidas respecto al caso anterior.
Por otra parte, si el par prismático queda implícito en la acotación de partida,
los torsores e incógnitas de enlace se generan haciendo uso de la instrucción:
imp_prismatic_joint(name, b_name_1, pt_name_1, b_name_2, ...

pt_name_2, or_name, or_axis)

donde or_name es la base en la que se definen las incógnitas de enlace.


222 Implementación

PAR DE R EVOLUCIÓN
Desde el punto de vista cinemático, un par de revolución puede entenderse
como un par cilíndrico en el que la coordenada S12 se sustituye por un parámetro
(ecuación 4.114).
El torsor de enlace, definido con signo positivo cuando actúa sobre Sol2 , se
escribe
   
F 2 ,1
M 2 ,1
         
F 2 123 =  F 2 ,2  , M 2 123 =  M 2 ,2 
F 2 ,3 123
0 123

Funciones de interfaz de usuario


Las ecuaciones geométricas, incógnitas de enlace y torsores de enlace asocia-
dos a un par de revolución entre dos sólidos se introducen en las correspondientes
estructuras haciendo uso de la instrucción:
new_revolute_joint(name, b_name_1, pt_name_1, or_name_1, ...

b_name_2, pt_name_2, or_name_2, ...

integer or_axis, [sym alpha12])

Si se introduce la coordenada auxiliar alpha12 , el nombre de sus ecuacio-


nes de definición se eligen de la forma name_asv1 y name_asv2 . El resto de
nombres se eligen de forma análoga a la presentada en apartados anteriores.
Los nombres de las fuerzas y momentos de enlace se generan posponiendo
las etiquetas _f1, _f2, _f3 y _h1, _h2 al nombre subministrado por el
usuario para el par cinemático.
La información correspondiente al par de revolución se introduce en la estruc-
tura joints mediante una instrucción del tipo:

new_joint( name, name_t1, name_t2, {name_vrot_1, ...


name_vrot_2, name_b1b2_1, name_b1b2_2, name_b1b2_3}, 0, 1)

Por otra parte, si el par de revolución queda implícito en la acotación de par-


tida, los torsores e incógnitas de enlace pueden generarse de forma automática
haciendo uso de la instrucción:
imp_revolute_joint(name, b_name_1, b_name_2, ...

pt_name, or_name, or_axis)


4.5 Funciones de Alto Nivel 223

donde
pt_name es el punto de definición del par de revolución.
or_name es la base en la que se definen las incógnitas de enlace.

PAR ANALÍTICO O GENÉRICO

Tal como se describe en la sección 4.4.4, cualquier par cinemático entre dos
sólidos (véase figura 4.17), puede caracterizarse de forma genérica a partir de las
ecuaciones cinemáticas que sirvieron para definir dicho par cinemático.
El torsor de enlace, definido con signo positivo cuando actúa sobre Sol2 , se
escribe
   
F 2 ,x M 2 ,x
         
F 2 xyz =  F 2 ,y  , M 2 xyz =  M 2 ,y 
F 2 ,z xyz
M 2 ,z xyz

Sol2

B2

h i
φv,  i

B1

Sol1

Figura 4.17: Representación de un par analítico entre dos sólidos

La definición del par cinemático debe completarse con las correspondientes


ecuaciones dinámicas de enlace, que en este caso adoptan la forma

i i T
F
Fq̇,1 +F
Fq̇,2 + φv, λi = 0
i
224 Implementación

o bien

Vqz
i
+
T
φv, i
λi = 0

Funciones de interfaz de usuario


Un par genérico entre dos sólidos se define mediante la instrucción:
new_generic_joint(name, b_name_1, pt_name_1, ...

b_name_2, pt_name_2, ...

cp pointer array p_pointer, ...

cv pointer array v_pointer )

Argumentos de entrada
name → identificador del par cinemático.
b_name_1 → primer sólido que participa en el enlace.
pt_name_1 → punto de definición del torsor de enlace en b_name_1.
b_name_2 → segundo sólido que participa en el enlace.
pt_name_1 → punto de definición del torsor de enlace en b_name_2.
p_pointer → lista42 de ecuaciones geométricas asociadas al enlace.
v_pointer → lista de ecuaciones no holónomas asociadas al enlace.

Argumentos de salida
Ninguno.

Los nombres de las fuerzas y momentos de enlace se generan posponiendo las


etiquetas _Fx, _Fy, _Fz y _Mx, _My, _Mz al nombre subministrado por el
usuario para el par cinemático.
El torsor de enlace, name_t2 , actuante sobre el punto pt_name_2 del só-
lido b_name_2 y proyectado en la base global se define de forma automática
con una instrucción del tipo:
new_etrs(name_t2, b_name_2, pt_name_2, ...
[name_Fx, name_Fy, name_Fz]’ , ’or0’, ...
[name_Mx, name_My, name_Mz]’ , ’or0’)
42
subministrada en cualquiera de las formas:
• p_pointer = [ n_1; ... n_i; ... n_n ], donde n_i representa la posición de la i-
ésima ecuación en la estructura de ecuaciones geométricas.
• p_pointer = { label_1;...label_i;...label_n }, donde label_i representa el nom-
bre que el usuario empleó para definir i-ésima ecuación geométrica.
Si el enlace no tiene asociada ninguna ecuación, p_pointer=0 .
4.5 Funciones de Alto Nivel 225

El torsor de enlace, name_t2 , actuante sobre el punto pt_name_1 del só-


lido b_name_1 se define de forma análoga al anterior.
Exportación
Si el enlace no tiene ecuaciones asociadas, es decir, dicho enlace es compatible
con la acotación de partida, la contribución de dicho enlace al juego de ecuaciones
dinámicas de enlace se exporta como parte de la función
[TrVm] = TrV_0(prm, q)

Si el enlace tiene asociadas ecuaciones, las ecuaciones dinámicas de enlace


correspondientes a dicho enlace se desarrollan siguiendo el algoritmo presentado
en la sección 4.4.4.
i T
Las matrices V zq y φv,  se evalúan en el plano numérico haciendo uso
i
respectivo de las funciones
[TrVm] = TrV_name(prm, q) y [Jvtm] = Jvt_name(prm, q)
donde name representa el nombre asignado por el usuario al par cinemático.

4.5.3. Planteamiento de Torsores Constitutivos


La definición de una acción de tipo constitutivo entre dos sólidos queda refle-
jada en la estructura de torsores constitutivos, etrss.
Los elementos constitutivos típicos que se analizan en la presente sección son
los siguientes:
• Fuerza gravitatoria
• Elemento muelle-amortiguador
• Elemento muelle-amortiguador
• Elemento muelle-amortiguador con rigidez en rotaciones
• Elemento viga de Bernouilli
• Elemento viga generalizado
El Sistema de Álgebra Simbólica de Bajo Nivel propuesto permite plantear
los torsores constitutivos asociados a los elementos anteriores en términos de las
coordenadas de partida. Sin embargo, la definición de dichos torsores resulta más
sencilla cuando éstos se plantean en términos de coordenadas auxiliares tales co-
mo la longitud de un muelle o el desplazamiento relativo entre los extremos de un
elemento viga43 .
43
Nótese que, la introducción de coordenadas auxiliares requiere introducir las ecuaciones que
las definen en términos de las coordenadas de partida, lo cual se traduce en sistemas de ecuaciones
de mayor tamaño.
226 Implementación

En la mayoría de los casos, los torsores constitutivos serán planteadas en tér-


minos de variables auxiliares definidas de forma automática. El tratamiento de
dichas variables será descrito con más detalle en la sección C.1.

F UERZA GRAVITATORIA

El torsor asociado a la fuerza gravitatoria, actuante sobre el centro de grave-


dad, Gk , del sólido Solk se expresa:
   
0 0
     g   
F gk

xyz
= 0  , M k xyz =  0 


−mSolk g xyz 0 xyz

Funciones de interfaz de usuario


El torsor correspondiente a una acción gravitatoria se introduce en la estructura
ctrss haciendo uso de la instrucción:

new_gravity_ctrs(string name, string bd_name, integer dir)

Argumentos de entrada
name → identificador del torsor .
bd_name → sólido sobre el que actúa la fuerza gravitatoria.
dir → dirección de la base or0 , dir = -3, -2, ... 2, 3 , en
el que actúa dicha fuerza.
Argumentos de salida
Ninguno.

El parámetro g se introduce en la estructura params al inicializar la base


de datos del problema con un valor por defecto de 9,8 m/s2 .

E LEMENTO MUELLE - AMORTIGUADOR

El elemento muelle-amortiguador direccional presentado en la figura 4.18 re-


laciona el desplazamiento relativo entre los puntos B1 y B2 , haciendo una
fuerza en la dirección del vector de posición que los une.
La fuerza asociado al elemento muelle-amortiguador direccional, actuante so-
bre el punto B2 del sólido Sol2 se expresa:
h i    
F kc2 = −kd (d − d0 ) v x yz − cd d˙ v x yz
x yz
4.5 Funciones de Alto Nivel 227

Sol2

B2
Sol1
δL
L0

B1

Figura 4.18: Elemento muelle-amortiguador direccional

mientras que el momento actuante en cualquier punto se expresa:


 
h i 0
 
Mkc2 = 0
x yz
0 x yz

donde

• d es una variable auxiliar que representa la distancia entre los puntos B1


y B2 .

• d0 es la longitud natural del muelle.

• v es un vector auxiliar que se define en términos del vector B1 B2 según


 
v1
     
B1 B2 x yz = d v x yz = d  v2  , vT v = 1
v3 x yz

La energía potencial del elemento muelle se expresa en términos de la coorde-


nada auxiliar d según:

1
U (k) = kd (d − d0 )2
2
228 Implementación

Funciones de interfaz de usuario


En el caso de la implementación propuesta, el torsor constitutivo anterior pue-
de introducirse en la estructura ctrss haciendo uso de la instrucción
[sym d, sym dd]=new_gen_kc_ctrs(name, bd_name_1, pt_name_1, ...

bd_name_2, pt_name_2, ...

sym l0, sym kl, sym cl)

Argumentos de entrada
name → identificador del torsor.
bd_name_1 → sólido sobre el que actúa el conjunto muelle-
amortiguador.
pt_name_1 → punto cinemáticamente perteneciente a bd_name_1 so-
bre el que actúa el conjunto muelle-amortiguador.
bd_name_2 → sólido sobre el que actúa el conjunto muelle-
amortiguador.
pt_name_2 → punto cinemáticamente perteneciente a bd_name_2 so-
bre el que actúa el conjunto muelle-amortiguador.
l0 → longitud natural del muelle direccional.
kl → constante de rigidez.
cl → constante de amortiguamiento.

Argumentos de salida
d → coordenada auxiliar que representa la distancia entre los puntos
pt_name_1 y pt_name_2.
dd → derivada temporal de la coordenada anterior.

Al igual que en el caso de los pares cinemáticos, la pertenencia cinemática de


los puntos se chequea comprobando que su vector de posición en la referencia de
los respectivos sólidos es constante.
El nombre de la coordenada auxiliar se elije posponiendo la etiqueta _d al
nombre subministrado por el usuario para el elemento muelle.
La ecuación de definición de la variable auxiliar recibe el nombre de
name_cp donde name representa el identificador del elemento muelle.

E LEMENTO MUELLE - AMORTIGUADOR , FIJO EN UNA BASE

El elemento muelle-amortiguador presentado en la figura 4.22 relaciona el


desplazamiento relativo entre los puntos B1 y B2 y se supone fijo a la base 123 .
4.5 Funciones de Alto Nivel 229

B1 2 δL3
B2
1 L0 δL2

Sol1 δL1

Sol2

Figura 4.19: Elemento muelle-amortiguador

El torsor asociado al elemento muelle-amortiguador, actuante sobre el punto


B2 del sólido Sol2 se expresa:

h i   h i
kc
F 2
= − Kl 123
B1 B2 − L0
123 123
 
  d  
− Cl 123 dt
B1 B2 123


h i 0
Mkc2 = 0  (4.115)
123
0 123

donde L0 representa la longitud natural del muelle.


La expresión simbólica del torsor anterior se simplifica mediante la introduc-
ción de las coordenadas auxiliares δl1 , δl2 y δl3 , de forma que
   
δl1 ˙1
δl
    d   ˙ 
B1 B2 =  δl2  , B1 B2 123 =  δl 2
123 dt
δl3 123 ˙3
δl 123
230 Implementación

La energía potencial del elemento muelle se expresa en términos de las coor-


denadas auxiliares introducidas según:

1  T  
U (k) = q a − L0 K l q a − L0
2
 T
q a = δl1 δl2 δl3

Funciones de interfaz de usuario


Los torsores constitutivos correspondientes a un elemento del tipo muelle-
amortiguador se introducen en la estructura ctrss haciendo uso de la instruc-
ción:
new_disp_kc_ctrs(name, bd_name_1, pt_name_1, ...

or_name_1, b_name_2, pt_name_2, ...

sym 3x1 L0, sym 3x1 Kl, sym 3x1 Cl)

Argumentos de entrada (tan sólo los que difieren de la instrucción anterior)


or_name_1 → orientación cinemáticamente perteneciente a bd_name_1 en
la que se expresan todas las constantes constitutivas.
L0 → longitud natural del muelle, expresada en la base or_name_1.
Kl → rigidez, expresada en la base or_name_1.
Cl → amortiguamiento, expresado en la base or_name_1.

Argumentos de salida
Ninguno.

Los nombres de las tres coordenadas auxiliares introducidas se eligen pospo-


niendo las etiquetas _dltx, _dlty y _dltz al nombre subministrado por el
usuario para el elemento muelle.
Las ecuaciones de definición de las variables auxiliares reciben los nombres
name_cpx, name_cpy y name_cpz donde name tiene el mismo significado
que en el apartado anterior.

E LEMENTO MUELLE - AMORTIGUADOR , FIJO EN DOS BASES

El elemento muelle-amortiguador presentado en la figura 4.20 relaciona el


desplazamiento relativo entre los puntos B1 y B2 además del giro relativo entre
las bases 123 y 1 0 2 0 3 0 .
4.5 Funciones de Alto Nivel 231

Sol2

30
20
B2

B1 B2 3

L0
10

B1 2
1

Sol1

Figura 4.20: Elemento muelle-amortiguador con rigidez en rotaciones

El torsor asociado al elemento muelle-amortiguador con rigidez en rotaciones,


actuante sobre el punto B2 del sólido Sol2 se expresa:

h i   h i    
kc
F 2
123
=− Kl 123
δl − L0
123
− Cl 123
˙
δl 123

h i   h i
kc
M 2
= − Kr 123
Θ123 (10 20 30 ) − Θ0
123 123

  h i
− Cr 123
Ω123 (10 20 30 )
123
(4.116)

donde

• Θ123 (10 20 30 ) es el vector de rotación (sección 4.5.1) asociado a la matriz de


h i10 20 30
cambio de base I .
123

• Θ0 representa la posición de reposo para el resorte angular.

La expresión simbólica del torsor anterior se simplifica mediante la introduc-


ción de las coordenadas auxiliares δl1 , δl2 , δl3 además de tres ángulos de Euler
232 Implementación

con secuencia de giro 123 , de forma que

   
h i θ1 h i θ̇1
   
Θ123 (10 20 30 ) 0 0 0
=  θ2  , Ω123 (1 2 3 ) =  θ̇2  (4.117)
123 123
θ3 123 θ̇3 123

La energía potencial del elemento muelle se expresa en términos de las coor-


denadas auxiliares introducidas según:

  T    
1 L0 Kl 0 L0
U (k) = qa − qa − ,
2 Θ0 0 Kr Θ0

 T
qa = δl1 δl2 δl3 θ1 θ2 θ3

Funciones de interfaz de usuario


Los torsores correspondientes a un elemento muelle-amortiguador con rigidez
en rotaciones se introcucen en la estructura ctrss haciendo uso de la instruc-
ción:
new_disp_rot_kc_ctrs(name, bd_name_1, pt_name_1, or_name_1, ...

bd_name_2, pt_name_2, or_name_2, ...

sym 3x1 L0, 3x1 Kl, 3x1 Cl, 3x1 R0, ...

sym 3x1 Kr, 3x1 Cr, [3x1 RotVect]);

Argumentos de entrada (sólo los que difieren de instrucciones anteriores)


or_name_2 → orientación cinemáticamente perteneciente a bd_name_2.
bd_name_2 → sólido sobre el que actúa el conjunto muelle-
amortiguador.
pt_name_2 → punto cinemáticamente perteneciente a bd_name_2 so-
bre el que actúa el conjunto muelle-amortiguador.
R0 → posición de reposo para el resorte angular.
Kr → rigidez angular, expresada en la base or_name_1.
Cr → amortiguamiento angular, expresado en la base or_name_1.
RotVect → vector de rotación correspondiente al cambio de base
or_name_1 -> or_name_2. Este vector es opcional. En el caso más
general, se crean tres variables auxiliares según 4.117.
4.5 Funciones de Alto Nivel 233

Argumentos de salida
Ninguno.

Los nombres de las variables auxiliares de desplazamiento relativo se eligen


de forma análoga a los del apartado anterior.
Si la matriz de cambio de base entre los dos sólidos resulta ser una base
de Euler con secuencia de giro 123 , 3D_M EC _M AT L AB calcula el vector
de rotación de forma automática. Si el usuario introduce el vector de rotación
de forma explícita, el torsor constitutivo se construye con dicho vector. En
cualquier otro caso se genera una nueva matriz de cambio de base entre 123
y 1 0 2 0 3 0 en términos de tres coordenadas auxiliares que reciben los nombres
name_aa1, name_aa2 y name_aa3 . Los elementos de la matriz de cambio
de comparan uno a uno generando nueve ecuaciones de definición, de las cuales
seis son redundantes. Las ecuaciones de definición anteriores se etiquetan con los
nombres name_cpaai, i=1..9 donde name representa el identificador del
elemento muelle.

E LEMENTO VIGA DE B ERNOUILLI


El elemento viga de Bernouilli presentado en la figura 4.21 relaciona el despla-
zamiento relativo entre los puntos B1 y B2 además del giro diferencial relativo
entre las bases 123 y 1 0 2 0 3 0 .

30 Sol2

B2
20
Sol1 10
3
B1 L0
2
1

Figura 4.21: Elemento viga de Bernouilli entre los sólidos Sol1 y Sol2
234 Implementación

El torsor asociado al elemento viga, actuante sobre el punto B2 del sólido Sol2
se expresa:

 EA   
L
0 0 0 0 0 δl1 − L
12EIz
   0 0 0 0 − 6EI z   δl2 
F kc2 
 0
L3
0 12EIy
0 6EIy
0
L2 





δl3
  = − 

L3
GJ
L2 





kc  0 0 0 L
0 0   θ1 
M 2 123  0 0 6EIy
0 4EIy
0   θ2 
L2 L
4EIy θ3
0 − 6EI
L2
z
0 0 0 L 123 123
 
˙1
δl
    ˙2
δl
 
Cl 0   ˙3
δl
−    

 (4.118)
 θ̇1 
0 Cr 
123  θ̇ 

2
θ̇3 123

donde

• E es el módulo de Young del material.

• G es el módulo de cortadura del material.

• L es la longitud de la viga.

• A es el área de la sección.

• J es el momento polar de inercia de la sección.

• Iy e Iz son los momentos de inercia de la sección respecto a los ejes


transversales de la viga (en este caso 2 y 3 respectivamente).

• δl es un vector auxiliar que se define como


   
δl 123 = B1 B2 123

• θ se define de la misma forma que en 4.117. En este caso, la ecuación cons-


titutiva 4.118 exige que los valores de θi , i = 1 . . . 3 sean diferenciales o,
en su defecto, suficientemente pequeños.
4.5 Funciones de Alto Nivel 235

La energía potencial se expresa en términos de la matriz de rigidez, Kv ,y


las variables auxiliares introducidas según :

1 T
U (k) = q
2 a
Kv qa

 T
qa = δl1 − L δl2 δl3 θ1 θ2 θ3

Funciones de interfaz de usuario


Los torsores correspondientes a un elemento viga de Bernouilli se introducen
en la estructura ctrss haciendo uso de la instrucción:
new_beam_ctrs(name, bd_name_1, pt_name_1, or_name_1, ...

bd_name_2, pt_name_2, or_name_2, ...

sym 7x1 Prm, sym 3x1 Cl, ...

sym 3x1 Cr, [sym 3x1 RotVect])

Argumentos de entrada (sólo los que difieren de instrucciones anteriores)


Prm → parámetros constitutivos del elemento viga, dispuestos de la
forma prm = [ E, G, L, A, I_y, I_z, J ]’

Argumentos de salida
Ninguno.

Los nombres de las variables auxiliares de desplazamiento relativo se eligen


de forma análoga a los de apartados anteriores.
Si el usuario introduce el argumento opcional RotVect de forma explícita,
el torsor constitutivo se construye con dicho vector. En caso contrario, la librería
3D_M EC _M AT L AB calculará el vector de rotación de forma automática siempre
que la matriz de cambio de base entre las orientaciones de los extremos de los
elementos se corresponda en topología con la de una base de pequeñas rotaciones.

E LEMENTO VIGA GENERALIZADO

El elemento viga generalizado presentado en la figura 4.21 es análogo al pre-


sentado en la sección anterior. La única diferencia es que la matriz de rigidez del
elemento se sustituye por una matriz genérica de dimensión (6, 6) .
236 Implementación

3 Sol2
B1
30
K
 
1 2 B2
L0 10
20
Sol1

Figura 4.22: Elemento viga generalizada

El torsor asociado al elemento viga, actuante sobre el punto B2 del sólido Sol2
se expresa ahora

   
δl1 − L ˙1
δl
       ˙2
δl 
δl2  
F kc2   
 
 Cl 0  ˙3
   δl3   δl 
=− Kv 123   −   
 θ1   θ̇1 
M kc2 123  θ2  0 Cr 
123  θ̇ 

2
θ3 123 θ̇3 123

donde K v representa una matriz, a subministrar por el usuario de forma


numérica, de las mismas características que la presentada en el apartado anterior.
La expresión para la energía potencial del elemento es análoga a la del aparta-
do anterior.
Funciones de interfaz de usuario
new_gen_beam_ctrs(name, bd_name_1, pt_name_1, or_name_1, ...

bd_name_2, pt_name_2, or_name_2, ...

sym 6x6 K_matrix, sym L0, ...

sym 3x1 Cl, sym 3x1 Cr, [sym 3x1 RotVect])


4.5 Funciones de Alto Nivel 237

Argumentos de entrada (sólo los que difieren de la instrucción anterior)


K_matrix → matriz de rigidez del elemento viga.

Argumentos de salida
Ninguno.

La matriz simbólica K_matrix se construye de forma automática a partir de


una matriz numérica de dimensión (12, 12) subministrada por el usuario haciendo
uso de la instrucción:
[sym 6x6 rKe] = build_gen_rK_matrix(string K_name, ...
real 12x12 K_num, tol)

Argumentos de entrada
K_name → nombre de la matriz.
K_num → matriz de rigidez numérica, expresada en la base or_name_1.
tol → tolerancia para filtrar los valores numéricos de la matriz. Cual-
quier valor por debajo de tol será considerado nulo.

Argumentos de salida
rKe → matriz simbólica de dimensión (6, 6) en el formato requerido
por la función new_gen_beam_ctrs .

La matriz de rigidez numérica introducida debe ser simétrica y los elementos


no nulos se sustituyen por parámetros simbólicos de nombre K_name_i_j don-
de i y j representan los índices del elemento en la matriz K_name .
En la sección 5.6 se muestra un ejemplo de uso de este elemento así como del
elemento viga de Bernouilli presentado en la sección anterior.
5. Ejemplos

5.1. Introducción
Tal como se describe en la introducción de la Tesis Doctoral, en este capítulo se
presentarán una serie de ejemplos destinados a ilustrar la capacidad del programa
en el planteamiento de los diferentes problemas presentados en el Capítulo 4.
En primer lugar, y a modo de resumen del capítulo anterior, se describirá la
filosofía de trabajo de la librería 3D_M EC _M AT L AB .
Después, y con el objeto de introducir al usuario en el manejo de la librería, se
resolverán los siguientes problemas:
• Mecanismo pistón-biela-manivela básico.
• Mecanismo pistón-biela-manivela avanzado.
• Disco rodando por encima de una superficie parabólica.
De los tres ejemplos anteriores, los dos primeros ilustran los diferentes ni-
veles de interacción con 3D_M EC _M AT L AB , mientras que el tercero pone de
manifiesto la capacidad de la librería en el planteamiento de restricciones no ha-
bituales.

La colección se completa con dos ejemplos de complejidad superior:


• Máquina transportadora.
• Interacción con el entorno S IMU L INK .
El primero de los ejemplos anteriores presenta una aplicación de la librería a
un problema del mundo real, mientras que el segundo ilustra la forma en la que
un modelo dinámico, generado con 3D_M EC _M AT L AB , puede introducirse en
el entorno de simulación S IMU L INK .
240 Ejemplos

5.2. Funcionamiento de 3D_M EC _M AT L AB


La figura 5.1 muestra, a modo de diagrama de flujo, la forma habitual de inte-
racción con la librería simbólico-numérica 3D_M EC _M AT L AB .
movimiento forzado
valores iniciales fuerzas exteriores
parametros zetas.m leyes constitutivas
q_init.m dzetas.m
input dq_init.m prm_init.m ddzetas.m ues.m

main_symbolic.m

Ficheros de generación automática

init euler_dynamics
main_numeric.m tolerancias
solver
simbolico user lagrange_dynamics
3d_Mec_Matlab

kinematics gr

numerico
Matlab resultado
plantillas independientes del problema

cinematica dinamica

integradores graficos

Figura 5.1: Flujo del programa

El fichero main_symbolic.m , programado por el usuario utilizando las fun-


ciones de librería de 3D_M EC _M AT L AB , contiene la definición del sistema me-
cánico cuya simulación se pretende realizar.
La interpretación por parte de la librería simbólica del fichero anterior, produ-
ce como resultado una serie de ficheros, en formato legible por M AT L AB , que
permitirán realizar, desde el interfaz numérico, la simulación deseada.
Una vez exportados, los ficheros anteriores se almacenan de forma estructura-
da en los directorios siguientes:
• init → funciones de inicialización de los diferentes vectores analíticos:
q, dq, ddq, ...
• user → funciones especiales modificables por el usuario: z, dz
ddz, u, ...
• kinematics → funciones numéricas relacionadas con los problemas
cinemáticos.
• lagrange_dynamics → funciones numéricas relacionadas con el pro-
blema dinámico de Lagrange y con el problema de equilibrio estático.
5.2 Funcionamiento de 3D_M EC _M AT L AB 241

• euler_dynamics → funciones numéricas relacionadas con el problema


dinámico de Newton-Euler y con las ecuaciones dinámicas de enlace.
• gr → funciones de representación gráfica.
La figura 5.2 presenta, a modo de esquema, la ubicación por directorios así
como los nombres de las funciones exportadas en el caso más general.

Me.m Me_i.m i=1..n

Qec_i.m i=1..n
Qe.m
Qei_i.m i=1..n

Ve.m Ve_i.m i=1..n


q_init.m
dq_init.m Ml.m Ml_i.m i=1..n
ddq_init.m
Qlc_i.m i=1..n
lmb_init.m euler_dynamics Ql.m Qli1_i.m i=1..n
lmbp_init.m Qli2_i.m i=1..n
epsln_init.m
init lagrange_dynamics

prm_init.m user gr
zetas.m
dzetas.m
kinematics draw_all.m gr_i.m i=1..n
ddzetas.m
redraw_all.m rgr_i.m i=1..n
ues.m

Cp.m bCp.m
bv.m
bCv.m
Cp_t0.m

Jp_t0.m dJq.m
ba.m dACv.m
Jq.m JbCpq.m JbCpdq.m JbCpz.m JbCpdz.m
Jv.m
ACv.m JbCvq.m JbCvdq.m JbCvz.m JbCvdz.m

Figura 5.2: Ficheros generados de forma automática desde el interface simbólico

La exportación de las funciones que permiten resolver los diferentes proble-


mas de la mecánica se lleva a cabo empleando funciones de alto nivel, tales como:
• export_kinematics → problema cinemático.
• export_equilibrium_position → problema de equilibrio estático.
• export_euler → problema dinámico de Newton-Euler.
242 Ejemplos

• export_lagrange → problema dinámico de Lagrange.


• export_DinEq → ecuaciones dinámicas de enlace.

Desde el punto de vista de la simulación numérica, la librería


3D_M EC _M AT L AB dispone de una serie de plantillas que, junto con los fi-
cheros exportados, permitirán al usuario resolver diferentes problemas de la
mecánica presentados en el capítulo 4.

La figura 5.3 muestra, organizadas por disciplinas, las diferentes plantillas


numéricas provistas por la librería:

euler_num.m lagrange_num.m equilibium_num.m


matlab_num.m modelo.mdl

solve_initial_position.m
solve_initial_velocity.m draw_node.m redraw_node.m
solve_position.m numericas draw_line.m redraw_line.m
solve_velocity.m draw_ref.m redraw_ref.m
solve_acceleration.m draw_force.m redraw_force.m
draw_torque.m redraw_torque.m
cinematica graficos

euler_A.m dinamica integradores


euler_B.m euler_ode_solver.m
solve_euler_dynamics.m euler_matlab_odefun.m
euler_simulink_odefun.m
lagrange_A.m
lagrange_B.m lagrange_ode_solver.m
solve_lagrange_dynamics.m lagrange_matlab_odefun.m
lagrange_simulink_odefun.m
solve_equilibrum_position.m

Figura 5.3: Plantillas que forman la librería de simulación numérica

• numéricas → resolución de los diferentes problemas de la mecánica.


• cinemática → montaje y resolución de las ecuaciones cinemáticas.
• dinámica → montaje y resolución de las ecuaciones cinemáticas junto
con las dinámicas empleando diferentes formalismos.
• integración → encapsulación de las ecuaciones anteriores para ser
utilizadas por diferentes integradores.
• gráficos → representación gráfica de puntos, líneas, referencias, fuer-
zas, momentos, ...
5.2 Funcionamiento de 3D_M EC _M AT L AB 243

Antes de realizar cualquier simulación numérica, el usuario deberá revisar las


funciones contenidas en el directorio user ,
prm_init, zetas, dzetas, ddzetas y ues ,
así como los valores iniciales de posición y velocidad, q_init.m y
dq_init.m respectivamente, presentes en el directorio init .

Además, el usuario deberá ajustar una serie de parámetros, tales como: tiem-
pos de simulación y tolerancias para los diferentes solvers, que generalmente apa-
recen en las plantillas denotadas por numéricas.
244 Ejemplos

5.3. Ejemplo 1: Pistón-biela-manivela básico


En esta sección se presenta el listado de definición correspondiente al meca-
nismo pistón-biela-manivela que aparece en la figura 5.4.
La definición del mecanismo es análoga a la presentada en la sección 3.8,
es decir, el movimiento del mecanismo queda caracterizado mediante dos coor-
denadas generalizadas, a1 y a2 , que representan los giros absolutos de los
eslabones manivela y biela respectivamente.
or2, ref2
6

3 l2 or0, ref3
l1 a2
2

d e
1

a1
0
c
org0
−1
−4 −2 0 2 4 6 8 10 12

or1, ref1 error de montaje

Figura 5.4: Acotación y parámetros cinemáticos del problema

En este caso, el problema se plantea empleando la funcionalidad básica del


interfaz simbólico, es decir, todos los datos se introducen de forma manual en las
diferentes estructuras que dan soporte al planteamiento analítico de las ecuaciones
cinemáticas y dinámicas.

I NICIALIZACIÓN DE LA LIBRERÍA

La librería simbólica 3D_M EC _M AT L AB se inicializa haciendo uso de las


siguientes rutinas:
• La rutina environment.m , presentada en el anexo A.1, actualiza la va-
riable path de M AT L AB para que todas las funciones de interface de la
librería simbólica estén accesibles.
• La rutina initialize.m , presentada en el anexo A.1, inicializa las varia-
bles y estructuras de datos que dan soporte al planteamiento simbólico del
problema.
5.3 Ejemplo 1 245

Con el fín de asegurar el correcto funcionamiento de la librería, ambas rutinas


deberán ejecutarse en las primeras lineas del listado de definición del mecanismo.

5.3.1. Listado de definición del mecanismo


Por coherencia con lo presentado en el capítulo 4, los listados de defini-
ción se dividirán en las secciones: problema cinemático, problema dinámico y
exportación.
Además, se suprimirá la parte concerniente a la representación gráfica de los
diferentes elementos.

P ROBLEMA CINEMÁTICO

La acotación del mecanismo así como las características del problema cine-
mático se representan en la figura 5.4.
1 % Longitudes de los eslabones 1 y 2
2
3 [l1]=new_param(’l1’, 4);
4 [l2]=new_param(’l2’, 10);
5
6 % Coordenadas generalizadas
7
8 [a1, da1]=new_q(’a1’);
9 [a2, da2]=new_q(’a2’);
10
11 % Nota: las velocidades generalizadas se utilizan
12 % en la definición de diferentes elementos constitutivos.
13
14 % Posición inicial para la coordenada a1
15
16 [a10]=new_param(’a10’, pi/3);
17
18 new_Cpini(’Cpini1’, a1-a10);
19
20 % Orientaciones
21
22 new_or(’or1’, 1, ’or0’, a1, 3);
23 new_or(’or2’, 1, ’or0’, a2, 3);
24
25 % Nota: El parámetro ’1’ representa un ’giro elemental’.
26 % ’or0’ es el nombre de la base global, la cual se
27 % genera al inicializar la base de datos del problema.
28
29 % Puntos característicos
30
31 new_pt(’b’, ’org0’, ’or1’, [l1 0 0]’);
246 Ejemplos

32 new_pt(’c’, ’b’, ’or2’, [l2 0 0]’);


33
34 % Nota: ’org0’ es el nombre del origen de coordenadas, el cual
35 % se genera al inicializar la base de datos del problema.
36
37 % Referencias
38
39 new_ref(’ref1’, ’org0’, ’or1’);
40 new_ref(’ref2’, ’b’, ’or2’);
41 new_ref(’ref3’, ’c’, ’or0’);
42
43 % Aplicación de la restricción cinemática en el punto c
44
45 PoC=position_vector(’c’, ’org0’,’or0’);
46
47 new_Cp(’Cp1’, PoC(2,1));

P ROBLEMA DINÁMICO

La figura 5.5 muestra los parámetros y elementos considerados en el problema


dinámico.
6

5
bd1 → [ref1, d, m1, Izz1] g

4
b bd2 → [ref2, e, m2, Izz2]

bd3 → [ref3, c, m3]


c2
2

d
e
1

c1 c3
c
0
org0
body0 → [ref0, org0, 0, 0] k3, l03
−1
0 2 4 6 8 10 12

Figura 5.5: Parámetros dinámicos del problema


5.3 Ejemplo 1 247

En este caso, la simulación dinámica del mecanismo se realiza bajo los si-
guientes supuestos:
• La gravedad actúa sobre cada uno de los componentes en la dirección nega-
tiva del eje z de la base global.
• El anclaje de la manivela y el pistón están unidos por un conjunto muelle-
amortiguador de constantes k3 y c3 respectivamente.
• El rozamiento viscoso presente en los pares de revolución sj_01 y
sj_02 se caracteriza mediante las constantes c1 y c2 respectiva-
mente.
48 % TORSORES DE INERCIA
49
50 % Sólido ’bd1’
51 %%%%%%%%%%%%%%
52
53 % centro de gravedad, punto ’d’
54
55 new_pt(’d’, ’org0’, ’or1’, [l1/2 0 0]’);
56
57 % las ecuaciones dinámicas de ’bd1’ se plantean en ’d’.
58
59 new_body(’bd1’, ’ref1’, ’d’);
60
61 % masa del sólido
62
63 [m1]=new_param(’m1’, 1);
64
65 % momento lineal en la referencia ’ref0’.
66
67 Lmbd1_or0=m1*ref_velocity_vector(’d’,’ref1’,’ref0’, ’or0’);
68
69 % derivada del momento lineal en la referencia ’ref0’.
70
71 Fibd1=diff_vector_t(Lmbd1_or0);
72
73 % momento de inercia en el punto ’d’ proyectado
74 % en la base ’or1’
75
76 [Ixx1]=new_param(’Ixx1’, 0);
77 [Iyy1]=new_param(’Iyy1’, 0);
78 [Izz1]=new_param(’Izz1’, 1);
79 [I1_or1]=diag([Ixx1;Iyy1;Izz1]);
80
81 % momento cinético en la referencia ’ref0’.
82
83 Ambd1=or_matrix(’or1’,’or0’)*...
84 I1_or1*omega(’or1’, ’or0’, ’or1’);
248 Ejemplos

85
86 % derivada del momento cinético en la referencia ’ref0’.
87
88 Mibd1=diff_vector_t(Ambd1);
89
90 % torsor de inercia de ’bd1’
91
92 new_itrs(’itrs1’, ’bd1’, ’d’, Fibd1, ’or0’, Mibd1, ’or0’);
93
94 % Sólido ’bd2’
95 %%%%%%%%%%%%%%
96
97 % centro de gravedad en ’e’
98
99 new_pt(’e’, ’b’, ’or2’, [l2/2 0 0]’);
100
101 % las ecuaciones dinámicas de ’bd2’ se plantean en ’e’.
102
103 new_body(’bd2’, ’ref2’, ’e’);
104
105 % masa del sólido
106
107 [m2]=new_param(’m2’, 2);
108
109 % momento lineal en la referencia ’ref0’
110
111 Lmbd2_or0=m2*ref_velocity_vector(’e’,’ref2’,’ref0’, ’or0’);
112
113 % derivada del momento lineal en la referencia ’ref0’
114
115 Fibd2=diff_vector_t(Lmbd2_or0);
116
117 % momento de inercia en el punto ’e’ proyectado
118 % en la base ’or2’
119
120 [Ixx2]=new_param(’Ixx2’, 0);
121 [Iyy2]=new_param(’Iyy2’, 0);
122 [Izz2]=new_param(’Izz2’, 2);
123 [I2_or2]=diag([Ixx2;Iyy2;Izz2]);
124
125 % momento cinético en la referencia ’ref0’
126
127 Ambd2=or_matrix(’or2’,’or0’)*...
128 I2_or2*omega(’or2’, ’or0’, ’or2’);
129
130 % derivada del momento cinético en la referencia ’ref0’
131
132 Mibd2=diff_vector_t(Ambd2);
133
5.3 Ejemplo 1 249

134 % torsor de inercia de ’bd2’


135
136 new_itrs(’itrs2’, ’bd2’, ’e’,Fibd2, ’or0’, Mibd2, ’or0’);
137
138 % Sólido ’bd3’
139 %%%%%%%%%%%%%%
140
141 % las ecuaciones dinámicas de ’bd3’ se plantean en ’c’.
142
143 new_body(’bd3’, ’ref3’, ’c’);
144
145 % masa del sólido
146
147 [m3]=new_param(’m3’, 3);
148
149 % velocidad absoluta del punto ’c’.
150
151 VoC=ref_velocity_vector(’c’,’ref3’,’ref0’, ’or0’);
152
153 % momento lineal en la referencia ’ref0’.
154
155 Lmbd3_or0=m3*VoC;
156
157 % derivada del momento lineal en la referencia ’ref0’.
158
159 Fibd3=diff_vector_t(Lmbd3_or0);
160
161 % momento de inercia (no se define)
162
163 [Ixx3]=new_param(’Ixx3’, 0);
164 [Iyy3]=new_param(’Iyy3’, 0);
165 [Izz3]=new_param(’Izz3’, 0);
166
167 % derivada del momento lineal en la referencia ’ref0’.
168 % el sólido ’bd3’ no gira -> ’Mibd3’ es nulo.
169
170 Mibd3=sym([0, 0, 0]’);
171
172 % torsor de inercia de ’bd3’
173
174 new_itrs(’itrs3’, ’bd3’, ’c’, Fibd3, ’or0’, Mibd3, ’or0’);
175
176
177 % TORSORES DE ENLACE
178
179 % Fuerzas de enlace: unión 01 en el punto ’org0’
180 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
181
182 % incógnitas de enlace
250 Ejemplos

183
184 Fx01=new_trsc(’Fx01’);
185 Fy01=new_trsc(’Fy01’);
186
187 % torsor de enlace reacción sobre ’body0’ en el punto ’org0’.
188
189 new_etrs(’etrs01’, ’body0’, ’org0’,-[Fx01, Fy01, 0]’ , ...
190 ’or0’, sym([0, 0, 0]’), ’or0’);
191
192 % torsor de enlace acción sobre ’bd1’ en el punto ’org0’.
193
194 new_etrs(’etrs10’, ’bd1’, ’org0’,[Fx01, Fy01, 0]’ , ...
195 ’or0’, sym([0, 0, 0]’), ’or0’);
196
197 % Fuerzas de enlace: unión 12 en el punto ’b’
198 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
199
200 % incógnitas de enlace
201
202 Fx12=new_trsc(’Fx12’);
203 Fy12=new_trsc(’Fy12’);
204
205 % torsor de enlace reacción sobre ’bd1’ en el punto ’b’.
206
207 new_etrs(’etrs12’, ’bd1’, ’b’, -[Fx12, Fy12, 0]’ , ...
208 ’or0’, sym([0, 0, 0]’), ’or0’);
209
210 % torsor de enlace acción sobre ’bd2’ en el punto ’b’.
211
212 new_etrs(’etrs21’, ’bd2’, ’b’, [Fx12, Fy12, 0]’ , ...
213 ’or0’, sym([0, 0, 0]’), ’or0’);
214
215 % Fuerzas de enlace: unión 23 en el punto ’c’
216 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
217
218 % incógnitas de enlace
219
220 Fx23=new_trsc(’Fx23’);
221 Fy23=new_trsc(’Fy23’);
222
223 % torsor de enlace reacción sobre ’bd2’ en el punto ’c’.
224
225 new_etrs(’etrs23’, ’bd2’, ’c’, -[Fx23, Fy23, 0]’ , ...
226 ’or0’, [0, 0, 0]’, ’or0’);
227
228 % torsor de enlace acción sobre ’bd3’ en el punto ’c’.
229
230 new_etrs(’etrs32’, ’bd3’, ’c’, [Fx23, Fy23, 0]’ , ...
231 ’or0’, [0, 0, 0]’, ’or0’);
5.3 Ejemplo 1 251

232
233 % Momento de enlace: unión 3s en el punto ’c’
234 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
235
236 % incógnita de enlace (problema 2d)
237
238 M3sz=new_trsc(’M3sz’);
239
240 % torsor de enlace reacción sobre ’body0’ en el punto ’c’.
241
242 new_etrs(’etr3s’, ’body0’, ’c’, sym([0, 0, 0]’) , ...
243 ’or0’, [0, 0, -M3sz]’, ’or0’);
244
245 % torsor de enlace acción sobre ’bd3’ en el punto ’c’.
246
247 new_etrs(’etrs3’, ’bd3’, ’c’, sym([0, 0, 0]’) , ...
248 ’or0’, [0, 0, M3sz]’, ’or0’);
249
250 % Fuerza de enlace asociada a ’Cp1’
251 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
252
253 % incógnita de enlace (mínimo)
254
255 F3sy=new_trsc(’F3sy’);
256
257 % torsor de enlace reacción sobre ’body0’ en el punto ’c’.
258
259 new_etrs(’etr3src’, ’body0’, ’c’, [0, -F3sy, 0]’ , ...
260 ’or0’, sym([0, 0, 0]’), ’or0’);
261
262 % torsor de enlace acción sobre ’bd3’ en el punto ’c’.
263
264 new_etrs(’etrs3rc’, ’bd3’, ’c’, [0, F3sy, 0]’ , ...
265 ’or0’, sym([0, 0, 0]’), ’or0’);
266
267 % TORSORES CONSTITUTIVOS
268
269 % Fuerza de gravedad, actuante sobre ’bd1’ en el punto ’d’
270 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
271
272 new_ctrs(’Fg01’, ’bd1’, ’d’, [0, -m1*g, 0]’, ’or0’, ...
273 sym([0, 0, 0]’), ’or0’);
274
275 % Fuerza de gravedad, actuante sobre ’bd2’ en el punto ’e’
276 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
277
278 new_ctrs(’Fg02’, ’bd2’, ’e’, [0, -m2*g, 0]’, ’or0’, ...
279 sym([0, 0, 0]’), ’or0’);
280
252 Ejemplos

281 % Fuerza de gravedad, actuante sobre ’bd3’ en el punto ’c’


282 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
283
284 new_ctrs(’Fg03’, ’bd3’, ’c’, [0, -m3*g, 0]’, ’or0’, ...
285 sym([0, 0, 0]’), ’or0’);
286
287 % Muelle entre los puntos ’org0’ y ’c’
288 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
289
290 % parámetros dinámicos del muelle
291
292 k3=new_param(’k3’, 50);
293 c3=new_param(’c3’, 0);
294 l03=new_param(’l03’, 2);
295
296 % torsor constitutivo actuante sobre ’body0’ en el punto ’org0’
297
298 new_ctrs(’fm30’, ’body0’, ’org0’, ...
299 [k3*(PoC(1,1)-l03)+c3*VoC(1,1), 0, 0]’, ’or0’, ...
300 sym([0, 0, 0]’), ’or0’);
301
302 % torsor constitutivo actuante sobre ’bd3’ en el punto ’c’.
303
304 new_ctrs(’fm03’, ’bd3’, ’c’, ...
305 [-k3*(PoC(1,1)-l03)-c3*VoC(1,1), 0, 0]’, ’or0’, ...
306 sym([0, 0, 0]’), ’or0’);
307
308 % Rozamiento viscoso entre ’body0’ y ’bd1’ en el punto ’org0’
309 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
310
311 % parámetro dinámico
312
313 c1=new_param(’c1’, 0);
314
315 % torsor constitutivo actuante sobre ’body0’ en el punto ’org0’
316
317 new_ctrs(’fm10’, ’body0’, ’org0’, sym([0, 0, 0]’), ’or0’, ...
318 [0, 0, c1*da1]’, ’or0’);
319
320 % torsor constitutivo actuante sobre ’bd1’ en el punto ’org0’
321
322 new_ctrs(’fm01’, ’bd1’, ’org0’, sym([0, 0, 0]’), ’or0’, ...
323 [0, 0, -c1*da1]’, ’or0’);
324
325
326 % Rozamiento viscoso entre ’bd1’ y ’bd2’ en el punto ’b’
327 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
328
329 % parámetro dinámico
5.3 Ejemplo 1 253

330
331 c2=new_param(’c2’, 0);
332
333 % torsor constitutivo actuante sobre ’bd1’ en el punto ’b’.
334
335 new_ctrs(’fm21’, ’bd1’, ’b’, sym([0, 0, 0]’), ’or0’, ...
336 [0, 0, c2*(da2-da1)]’, ’or0’);
337
338 % torsor constitutivo actuante sobre ’bd2’ en el punto ’b’.
339
340 new_ctrs(’fm12’, ’bd2’, ’b’, sym([0, 0, 0]’), ’or0’, ...
341 [0, 0, -c2*(da2-da1)]’, ’or0’);

Tal como se aprecia en el listado anterior, para calcular la derivada del mo-
mento cinético, líneas 81 − 88 , se emplea la función diff_vector_t . Alter-
nativamente, la derivada anterior puede calcularse según
81 % momento cinético, expresado en la base ’or1’
82
83 Ambd1_or1=I1_or1*omega(’or1’, ’or0’, ’or1’);
84
85 % derivada del momento cinético, expresado en ’or0’
86
87 Mibd1=movil_orientation_rule_derivative(Ambd1_or1, ...
88 ’or1’, ’or0’, ’or0’);

La función movil_orientation_rule_derivative , que implementa la


regla de derivación en bases móviles, calcula la derivada temporal del vector
Ambd1_or1 , definido en la base móvil or1 , en la base fija or0 , expresando
el resultado en la base or0 .
Si el problema se plantea empleando el formalismo de Lagrange, se obtienen
2 ecuaciones dinámicas y 1 ecuación geométrica. El sistema anterior se resuelve
para dda1, dda2 y el multiplicador Cp1_lmb .
Si el problema se plantea empleando el formalismo de Newton-Euler, se ob-
tienen 9 ecuaciones dinámicas y 1 geométrica que puede resolverse para
dda1, dda2 y el grupo de incógnitas de enlace

Fx01, Fy01, Fx12, Fy12, Fx23, Fy23, F3sy, M3sz

La definición de las acciones sobre el suelo, body0 , no es estrictamente


necesaria para realizar la simulación dinámica, pero se incluirá a título informativo
en todos los casos.
254 Ejemplos

E XPORTACIÓN
El listado que se presenta a continuación exporta las funciones de iniciali-
zación de los diferentes vectores analíticos además de las relacionadas con los
problemas cinemático y dinámico de Lagrange.
1 % exportar: diferentes funciones
2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3
4 % prm_init, q_init, dq_init, ddq_init,
5 % epsln_init, lmbp_init, lmbv_init, ...
6
7 export_definitions
8
9 % zetas, dzetas, ddzetas
10
11 export_zetas
12
13 % ues
14
15 export_ues
16
17 % exportar: problema cinemático
18 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
19
20 export_kinematics(0)
21
22 % 0 -> problema cinemático
23 % 1 -> problema cinemático & problema equilibrio
24
25 % exportar: ecuaciones de Lagrange
26 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
27
28 export_lagange_dynamics(0)
29
30 % 0 -> problema dinámico
31 % 1 -> problema dinámico & problema equilibrio

Internamente, la función export_lagrange_dynamics evalúa otras funcio-


nes de más bajo nivel que el usuario podría emplear directamente en el listado de
definición.
La figura 5.6 muestra la estructura de directorios así como el contenido de los
mismos para el caso del listado de definición presentado en la sección anterior.
5.3 Ejemplo 1 255

Figura 5.6: Funciones obtenidas como resultado del proceso de exportación

5.3.2. Resultados de la simulación


Previo a la simulación dinámica, se revisa el contenido de las funciones de
inicialización presentes en el directorio init , en particular:
prm_init.m, q_init.m y dq_init.m
La revisión del directorio user no es necesaria por no haberse definido fun-
ciones del tipo z(t) o u (q, q̇, t).
La simulación numérica del mecanismo se lleva a cabo empleando cualquiera
de las plantillas1:

• lagrange_num , basada en un integrador de tipo RK4 con corrección en


posición y velocidad.

• matlab_num , basada en cualquiera de los integradores de la Ode-Suite de


M AT L AB .

1
El listado de dichas plantillas se presenta en los anexos A.2 y A.5 respectivamente.
256 Ejemplos

La figura 5.7 muestra el resultado de la simulación dinámica para las variables


de estado a1, a2, da1 y da2 .
6 6
a1 da1
a2 da2
5
5

4
3
Desplazamiento [rad]

Velocidad [rad/s]
3
2

1
2

0
1

−1

0
−2

−1 −3
0 1 2 3 4 5 6 0 1 2 3 4 5 6
Tiempo (s) Tiempo (s)

Figura 5.7: Resultados de la simulación dinámica

La simulación del mecanismo se realiza partiendo en reposo desde la posición


inicial a10 = pi/3 y empleando los valores
l03 = 8, k3 = 100, c3 = 4, c1 = 1 y c2 = 1
para las constantes de los diferentes elementos constitutivos. El resto de paráme-
tros pueden consultarse en el anexo B.1.
5.4 Ejemplo 2 257

5.4. Ejemplo 2: Pistón-biela-manivela avanzado


El presente ejemplo, basado en el mismo mecanismo que el anterior, se plantea
empleando algunas de las funciones de alto nivel presentadas en la sección 4.5.
Las diferentes estructuras se rellenan de forma automática, lo cual resulta más
cómodo desde el punto de vista del usuario.

5.4.1. Listado de definición del mecanismo


P ROBLEMA CINEMÁTICO

La definición cinemática del mecanismo es idéntica a la presentada en el ejem-


plo 5.3 suprimiendo las líneas 45 − 47 , por lo que no se volverá a presentar.
La restricción geométrica, presente en el punto C, se define de forma
automática al emplear la instrucción new_prismatic_joint para definir el par
prismático pistón-suelo.

P ROBLEMA DINÁMICO

El enunciado del problema dinámico es el mismo que el presentado en la sec-


ción 5.3.1, figura 5.5.
Las funciones de alto nivel, empleadas en el listado que se muestra a conti-
nuación, permitirán al usuario:
• Definir sólidos y calcular de forma automática los torsores de inercia.
• Definir enlaces atendiendo a su tipo.
• Definir elementos constitutivos y calcular de forma automática los torsores
constitutivos.
48 % SOLIDOS Y TORSORES DE INERCIA
49
50 % Sólido ’bd1’
51 %%%%%%%%%%%%%%
52
53 % centro de gravedad en ’d’
54
55 new_pt(’d’, ’org0’, ’or1’, [l1/2 0 0]’);
56
57 % parámetros dinámicos
58
59 [m1]=new_param(’m1’, 1);
60 [Ixx1]=new_param(’Ixx1’, 1);
61 [Iyy1]=new_param(’Iyy1’, 1);
62 [Izz1]=new_param(’Izz1’, 1);
258 Ejemplos

63 [I1_or1]=diag([Ixx1;Iyy1;Izz1]);
64
65 % tensor de inercia
66
67 new_tensor(’tensor1’, ’d’, ’or1’, I1_or1);
68
69 % sólido con centro de gravedad en el punto ’d’
70
71 new_body(’bd1’, ’ref1’, ’d’, m1, ’tensor1’);
72
73 % Sólido ’bd2’
74 %%%%%%%%%%%%%%
75
76 % centro de gravedad en ’e’
77
78 new_pt(’e’, ’b’, ’or2’, [l2/2 0 0]’);
79
80 % parámetros dinámicos
81
82 [m2]=new_param(’m2’, 2);
83 [Ixx2]=new_param(’Ixx2’, 2);
84 [Iyy2]=new_param(’Iyy2’, 2);
85 [Izz2]=new_param(’Izz2’, 2);
86 [I2_or2]=diag([Ixx2;Iyy2;Izz2]);
87
88 % tensor de inercia
89
90 new_tensor(’tensor2’, ’e’, ’or2’, I2_or2);
91
92 % sólido con centro de gravedad en el punto ’e’
93
94 new_body(’bd2’, ’ref2’, ’e’, m2, ’tensor2’);
95
96 % Sólido ’bd3’
97 %%%%%%%%%%%%%%
98
99 % parámetros dinámicos
100
101 [m3]=new_param(’m3’, 3);
102 [Ixx3]=new_param(’Ixx3’, 3);
103 [Iyy3]=new_param(’Iyy3’, 3);
104 [Izz3]=new_param(’Izz3’, 3);
105 [I_tensor3]=diag([Ixx3;Iyy3;Izz3]);
106
107 % tensor de inercia
108
109 new_tensor(’tensor3’, ’c’, ’or0’, I_tensor3);
110
111 % sólido con centro de gravedad en el punto ’c’
5.4 Ejemplo 2 259

112
113 new_body(’bd3’, ’ref3’, ’c’, m3, ’tensor3’);
114
115
116 % TORSORES DE ENLACE
117
118 % Pares de revolución
119 %%%%%%%%%%%%%%%%%%%%%
120
121 imp_revolute_joint(’sj01’, ’body0’, ’bd1’, ’org0’, ’or0’, 3);
122 imp_revolute_joint(’sj12’, ’bd1’, ’bd2’, ’b’, ’or0’, 3);
123 imp_revolute_joint(’sj23’, ’bd2’, ’bd3’, ’c’, ’or0’, 3);
124
125 % Par prismático pistón-suelo
126 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
127
128 new_prismatic_joint(’pj03’, ’body0’, ’org0’, ’or0’,...
129 ’bd3’, ’c’, ’or0’, 1);
130
131 % TORSORES CONSTITUTIVOS
132
133 % Fuerza gravitatoria
134 %%%%%%%%%%%%%%%%%%%%%
135
136 new_gravity_ctrs(’fgbd1’, ’bd1’, -2);
137 new_gravity_ctrs(’fgbd2’, ’bd2’, -2);
138 new_gravity_ctrs(’fgbd3’, ’bd3’, -2);
139
140 % Muelle generalizado entre los puntos ’org0’ y ’c’
141 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
142
143 k3=new_param(’k3’, 50);
144 c3=new_param(’c3’, 0);
145 l03=new_param(’l03’, 2);
146
147 [fm03_d, dfm03_d]=new_gen_kc_ctrs(’fm03’, ’body0’, ...
148 ’org0’, ’bd3’, ’c’, l03, k3, c3);
149
150 % Rozamiento viscoso entre ’body0’ y ’bd1’ en el punto ’org0’
151 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
152
153 % (se respeta la definición del caso práctico anterior)
154
155 c1=new_param(’c1’, 0);
156
157 new_ctrs(’fm01’, ’bd1’, ’org0’, sym([0, 0, 0]’), ...
158 ’or0’, [0, 0, -c1*da1]’, ’or0’);
159
160 new_ctrs(’fm10’, ’body0’, ’org0’, sym([0, 0, 0]’), ...
260 Ejemplos

161 ’or0’, [0, 0, c1*da1]’, ’or0’);


162
163 % Rozamiento viscoso entre ’bd1’ y ’bd2’ en el punto ’org0’
164 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
165
166 % (se respeta la definición del caso práctico anterior)
167
168 c2=new_param(’c2’, 0);
169
170 new_ctrs(’fm12’, ’bd2’, ’b’, sym([0, 0, 0]’), ’or0’, ...
171 [0, 0, -c2*(da2-da1)]’, ’or0’);
172
173 new_ctrs(’fm21’, ’bd1’, ’b’, sym([0, 0, 0]’), ’or0’, ...
174 [0, 0, c2*(da2-da1)]’, ’or0’);

La definición de los pares de revolución en los puntos org0, b y c , líneas


108 − 110 , genera de forma automática las incógnitas de enlace:
sj01_f1, sj01_f2, sj01_f3, sj01_h1, sj01_h2
sj12_f1, sj12_f2, sj12_f3, sj12_h1, sj12_h2
sj23_f1, sj23_f2, sj23_f3, sj23_h1, sj23_h2

Por otra parte, la definición del par prismático, líneas 112 − 126 , introduce
las incógnitas de enlace:
pj03_f2, pj03_f3, pj03_h1, pj03_h2 , pj03_h3

Además, con la definición del muelle 03 , se genera la coordenada auxiliar


fm03_d , que representa el desplazamiento del punto c a lo largo del eje 1 de
la orientación or0 . La coordenada auxiliar fm03_d se incluye en el vector de
coordenadas generalizadas, de tal forma que
q = [ a1, a2, fm03_d ]’

Si el problema se plantea empleando el formalismo de Lagrange, se obtienen


3 ecuaciones dinámicas, 1 ecuación geométrica y 1 de definición de la coorde-
nada fm03_d . El sistema anterior se resuelve para dda1, dda2, ddfm03_d y
los multiplicadores Cp1_lmb y fm03_cp_lmb .
Si el problema se plantea empleando el formalismo de Newton-Euler, se ob-
tienen 18 ecuaciones dinámicas y 2 ecuaciones cinemáticas. Como incógnitas
del problema dinámico aparecen 3 aceleraciones generalizadas y 20 incógnitas
de enlace. El sistema anterior, formado por 20 ecuaciones, presenta 23 − 20 = 3
indeterminaciones que afectan a los grupos de incógnitas:
sj01_f3, sj12_f3, sj23_f3, pj03_f3
sj01_h1, sj12_h1, sj23_h1, pj03_h1
5.4 Ejemplo 2 261

sj01_h2, sj12_h2, sj23_h2, pj03_h2

Si se compara el planteamiento anterior con el propuesto en la sección 5.3.1, se


pone de manifiesto que, en general, el acceso a las estructuras básicas del interfaz
simbólico permite al usuario plantear el problema de forma más eficiente.

E XPORTACIÓN
Se exportarán las funciones necesarias para realizar la simulación numérica
empleando el formalismo de Newton-Euler.
1 % exportar: diferentes funciones
2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3
4 % prm_init, q_init, dq_init, ddq_init, ...
5
6 export_definitions
7
8 % zetas, dzetas, ddzetas
9
10 export_zetas
11
12 % ues
13
14 export_ues
15
16 % exportar: problema cinemático
17 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
18
19 export_kinematics(0)
20
21 % exportar: ecuaciones de Newton-Euler
22 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
23
24 export_euler_dynamics(0)
25
26 % 0 -> problema dinámico
27 % 1 -> problema dinámico & torsores de cada sólido

Tal como se aprecia, las instrucciones empleadas para exportar el proble-


ma mecánico son idénticas a las del ejemplo anterior, exceptuando la función
export_euler_dynamics(0).
262 Ejemplos

5.4.2. Resultados de la simulación


Al igual que en el caso del ejemplo anterior, la simulación dinámica del me-
canismo se realiza partiendo del reposo desde la posición inicial a10 = pi/3 ,
empleando para ello la plantilla numérica euler_num , cuyo listado se presenta
en el anexo A.2.
Los resultados obtenidos para las coordenadas y velocidades generalizadas
son idénticos a los presentados en la figura 5.7.
La figura 5.8 muestra la solución para las fuerzas de enlace en los diferentes
pares cinemáticos.

300
sj01 f1
sj01 f2
250 sj12 f1
sj12 f2
sj12 f1
sj12 f2
200 sj03 f2

150
Fuerza [N]

100

50

−50

−100

−150
0 1 2 3 4 5 6 7 8 9 10
Tiempo [s]

Figura 5.8: Resultados de la simulación dinámica

Los parámetros empleados para realizar la simulación dinámica son idénticos


a los del ejemplo anterior y pueden consultarse en el anexo B.1.
5.5 Ejemplo 3 263

5.5. Ejemplo 3: Disco rodando por encima de una parábola


Este tercer ejemplo pretende ilustrar la capacidad del programa a la hora de
plantear restricciones no tan habituales. Además, los torsores de enlace se carac-
terizarán de forma genérica con el objeto de mostrar la forma que adoptan las
ecuaciones dinámicas de enlace.
El sistema mecánico propuesto es similar al presentado en el ejemplo anterior.
El pistón se sustituye por un disco que gira libremente alrededor del punto C,
al que se impone la condición de rodar sin deslizar por encima de la parábola
representada en la figura 5.9.

(x − xc )2 + (y − yc )2 = rd2
or2, ref2 or3, ref3
b

e
a2
a3

d c
Pg
a1
(xpg, ypg)
org0

or1, ref1

y − yop = cop (x − xop )2

Figura 5.9: Acotación y parámetros cinemáticos del problema

Con el objeto de caracterizar el fenómeno de rodadura sin deslizamiento, se


introducen tres nuevas coordenadas generalizadas:
• a3 → giro del disco alrededor del eje y de la base global.
• xpg e ypg → posición del punto geométrico de contacto, Pg , entre
el disco y la parábola.
Así pues, el movimiento del mecanismo queda representado en este caso por
el grupo de coordenadas generalizadas:
q = [ a1, a2, a3, xpg, ypg ]’
264 Ejemplos

5.5.1. Listado de definición del mecanismo


P ROBLEMA CINEMÁTICO

La acotación del mecanismo y los parámetros del problema cinemático se re-


presentan en la figura 5.9.
La condición de contacto se implementa haciendo que el punto Pg pertenez-
ca a la circunferencia de radio rd y a la parábola cuyas ecuaciones se presentan
en la figura 5.9.
La condición de no penetrabilidad se implementa haciendo que los gradientes
de ambas curvas, evaluados en el punto geométrico de contacto, sean paralelos.
La condición de rodadura sin deslizamiento se implementa haciendo que
la velocidad del punto Pg , considerado cinemáticamente perteneciente al
disco, ref3 , sea nula.
1 % longitudes de los eslabones 1 y 2
2
3 [l1]=new_param(’l1’, 4);
4 [l2]=new_param(’l2’, 10);
5
6 % giros de los eslabones
7
8 [a1]=new_q(’a1’, pi/3); % manivela
9 [a2]=new_q(’a2’, 0); % biela
10 [a3]=new_q(’a3’, 0); % disco
11
12 % orientaciones
13
14 new_or(’or1’, 1, ’or0’, a1, 3);
15 new_or(’or2’, 1, ’or0’, a2, 3);
16 new_or(’or3’, 1, ’or0’, a3, 3);
17
18 % puntos característicos
19
20 new_pt(’b’, ’org0’, ’or1’, [l1 0 0]’);
21 new_pt(’c’, ’b’, ’or2’, [l2 0 0]’);
22
23 % referencias
24
25 new_ref(’ref1’, ’org0’, ’or1’);
26 new_ref(’ref2’, ’b’, ’or2’);
27 new_ref(’ref3’, ’c’, ’or3’);
28
29 % Condición de contacto disco-parábola
30 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
31
5.5 Ejemplo 3 265

32 % Parabola (y-y0p) = -c0p*(x-x0p)^2.


33
34 [x0p]=new_param(’x0p’, 12);
35 [y0p]=new_param(’y0p’, 0);
36 [c0p]=new_param(’c0p’, 0.15);
37
38 % Circumferencia de radio ’rd’.
39
40 [rd]=new_param(’rd’, 1.5);
41
42 % Posición del punto geométrico de contacto ’Pg’.
43
44 [xpg]=new_q(’xpg’,12);
45 [ypg]=new_q(’ypg’, 0);
46
47 new_pt(’Pg’, ’org0’, ’or0’, [xpg ypg 0]’);
48
49 % El punto ’Pg’ verifica la ecuación de
50 % la circumferencia con centro en ’c’ y radio ’rd’.
51
52 [Poc]=position_vector(’c’, ’org0’, ’or0’);
53
54 eq1=(xpg-Poc(1,1))^2+(ypg-Poc(2,1))^2-rd^2;
55
56 new_Cp(’Cp1’, simple(eq1));
57
58 % El punto ’Pg’ verifica la ecuación
59 % de la parábola (y-y0p) = -c0p*(x-x0p)^2.
60
61 eq2=(ypg-y0p)+c0p*(xpg-x0p)*(xpg-x0p);
62
63 new_Cp(’Cp2’, simple(eq2));
64
65 % Posición inicial para el punto ’Pg’.
66
67 [xpg0]=new_param(’xpg0’, 12);
68 [ypg0]=new_param(’ypg0’, 10);
69
70 new_Cpini(’Cpini1’, xpg-xpg0);
71 new_Cpini(’Cpini2’, ypg-ypg0);
72
73
74 % Condición de no penetrabilidad disco-parábola
75 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
76
77 % Los gradientes de las dos curvas
78 % en el punto geométrico son paralelos
79
80 grad_1=jacobian(eq1, [xpg, ypg]’);
266 Ejemplos

81
82 % grad_1=[2*(xpg-Poc(1,1)),2*(ypg-Poc(2,1))]
83
84 grad_2=jacobian(eq2, [xpg, ypg]’);
85
86 % grad_2=[2*c0p*(xpg-x0p),1]
87
88 % producto vectorial de ambos gradientes
89
90 eq3=grad_1(1)*grad_2(2)-grad_1(2)*grad_2(1);
91
92 new_Cp(’Cp3’, simple(eq3));
93
94 % Condición de rodadura
95 %%%%%%%%%%%%%%%%%%%%%%%
96
97 % La velocidad de ’Pg’, considerado cinemáticamente
98 % perteneciente a la referencia ref3, es nula
99
100 [VPg_ref3]=ref_velocity_vector(’Pg’, ’ref3’, ’ref0’, ’or0’)
101
102 new_Cv(’Cv1’, VPg_ref3(1,1));
103 new_Cv(’Cv2’, VPg_ref3(2,1));

P ROBLEMA DINÁMICO

La figura 5.10 muestra los parámetros considerados en el problema dinámico,


además de la posición de montaje.
6

5 bd3 → [ref3, c, m3, Izz3]

4
b bd2 → [ref2, e, m2, Izz2]
3

2 d e
g
1
c
bd1 → [ref1, d, m1, Izz1]
0

org0
−1
Pg
rueda sin deslizar
−2
−5 0 5 10 15

Figura 5.10: Parámetros dinámicos del problema


5.5 Ejemplo 3 267

En este caso, la simulación dinámica del mecanismo se realiza bajo el siguien-


te supuesto: se suprimen todos los muelles y amortiguadores presentes en el sis-
tema de tal forma que el mecanismo cae por gravedad.
104 % SOLIDOS Y TORSORES DE INERCIA
105
106 % Sólido ’bd1’
107 %%%%%%%%%%%%%%
108
109 % centro de gravedad en ’d’
110
111 new_pt(’d’, ’org0’, ’or1’, [l1/2 0 0]’);
112
113 % parámetros dinámicos
114
115 [m1]=new_param(’m1’, 3);
116 [Ixx1]=new_param(’Ixx1’, 0);
117 [Iyy1]=new_param(’Iyy1’, 0);
118 [Izz1]=new_param(’Izz1’, 6);
119 [I1_or1]=diag([Ixx1;Iyy1;Izz1]);
120
121 % tensor de inercia
122
123 new_tensor(’tensor1’, ’d’, ’or1’, I1_or1);
124
125 % sólido con centro de gravedad en el punto ’d’
126
127 new_body(’bd1’, ’ref1’, ’d’, m1, ’tensor1’);
128
129 % Sólido ’bd2’
130 %%%%%%%%%%%%%%
131
132 % centro de gravedad en ’e’
133
134 new_pt(’e’, ’b’, ’or2’, [l2/2 0 0]’);
135
136 % parámetros dinámicos
137
138 [m2]=new_param(’m2’, 2);
139 [Ixx2]=new_param(’Ixx2’, 0);
140 [Iyy2]=new_param(’Iyy2’, 0);
141 [Izz2]=new_param(’Izz2’, 2);
142 [I2_or2]=diag([Ixx2;Iyy2;Izz2]);
143
144 % tensor de inercia
145
146 new_tensor(’tensor2’, ’e’, ’or2’, I2_or2);
147
148 % sólido con centro de gravedad en el punto ’e’
268 Ejemplos

149
150 new_body(’bd2’, ’ref2’, ’e’, m2, ’tensor2’);
151
152 % Sólido ’bd3’
153 %%%%%%%%%%%%%%
154
155 % parámetros dinámicos
156
157 [m3]=new_param(’m3’, 3);
158 [Ixx3]=new_param(’Ixx3’, 0);
159 [Iyy3]=new_param(’Iyy3’, 0);
160 [Izz3]=new_param(’Izz3’, 3);
161 [I3_or3]=diag([Ixx3;Iyy3;Izz3]);
162
163 % tensor de inercia
164
165 new_tensor(’tensor3’, ’c’, ’or3’, I3_or3);
166
167 % sólido con centro de gravedad en el punto ’c’
168
169 new_body(’bd3’, ’ref3’, ’c’, m3, ’tensor3’);
170
171
172 % TORSORES DE ENLACE
173
174 % Pares de revolución
175 %%%%%%%%%%%%%%%%%%%%%
176
177 new_generic_joint_ne(’sj01’, ’body0’, ’org0’, ’bd1’, ’org0’,0, 0);
178 new_generic_joint_ne(’sj12’, ’bd1’, ’b’, ’bd2’, ’b’,0, 0);
179 new_generic_joint_ne(’sj23’, ’bd2’, ’c’, ’bd3’, ’c’,0, 0);
180
181 % Fuerza de enlace asociada a las ecuaciones cinemáticas
182 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
183
184 new_generic_joint_ne(’ecr’, ’body0’, ’Pg’, ’bd3’, ’Pg’,...
185 {’Cp1’;’Cp2’;’Cp3’}, {’Cv1’;’Cv2’});
186
187
188 % TORSORES CONSTITUTIVOS
189
190 % Fuerza gravitatoria
191 %%%%%%%%%%%%%%%%%%%%%
192
193 new_gravity_ctrs(’fgbd1’, ’bd1’, -2);
194 new_gravity_ctrs(’fgbd2’, ’bd2’, -2);
195 new_gravity_ctrs(’fgbd3’, ’bd3’, -2);
5.5 Ejemplo 3 269

El problema dinámico se resuelve empleando las ecuaciones de Newton-Euler


junto con las ecuaciones dinámicas de enlace. El vector de incógnitas correspon-
diente al problema dinámico se expresa ahora:
x = [ ddqv, epslnv, lmbdv ]

donde:

• ddqv es un vector formado por 5 aceleraciones generalizadas,

dda1, dda2, dda3, ddxpg, ddypg

• epslnv es un vector formado por 24 incógnitas de enlace,

sj01_Fx, sj01_Fy, sj01_Fz, sj01_Mx, sj01_My, sj01_Mz


sj12_Fx, sj12_Fy, sj12_Fz, sj12_Mx, sj12_My, sj12_Mz
sj23_Fx, sj23_Fy, sj23_Fz, sj23_Mx, sj23_My, sj23_Mz
ecr_Fx, ecr_Fy, ecr_Fz, ecr_Mx, ecr _My, ecr_Mz

• lmbdv es un vector formado por 5 multiplicadores asociados a las ecua-


ciones cinemáticas,

Cp1_lmb, Cp2_lmb, Cp3_lmb, Cv1_lmb, Cv2_lmb

El conjunto de ecuaciones obtenido en este caso está formado por 18 ecua-


ciones de Newton-Euler, más 5 cinemáticas, de las cuales una es dependiente,
más 8 dinámicas de enlace.
El sistema anterior, formado por 30 ecuaciones independientes, presenta
34 − 30 = 4 indeterminaciones, de las cuales una afecta al grupo de variables
algebraicas2 lmbdv y las otras tres afectan al grupo de incógnitas
sj01_Fz, sj12_Fz, sj23_Fz, ecr_Fz
sj01_Mx, sj12_Mx, sj23_Mx, ecr_Mx
sj01_My, sj12_My, sj23_My, ecr_My

2
redundancia presente en las ecuaciones cinemáticas
270 Ejemplos

E XPORTACIÓN
Se exportarán las funciones necesarias para realizar la simulación numérica
empleando el formalismo descrito en la sección anterior.
1 % exportar: diferentes funciones
2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3
4 % prm_init, q_init, dq_init, ddq_init,...
5
6 export_definitions
7
8 % zetas, dzetas, ddzetas
9
10 export_zetas
11
12 % ues
13
14 export_ues
15
16 % exportar: problema cinemático
17 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
18
19 export_kinematics(0)
20
21 % exportar: ecuaciones de Newton-Euler
22 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
23
24 export_euler_dynamics(0)
25
26 % exportar: ecuaciones dinámicas de enlace
27 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
28
29 export_joint_dynamics

5.5.2. Resultados de la simulación


La simulación dinámica del mecanismo se realiza partiendo del reposo des-
de la posición inicial representada en la figura 5.10, en la cual se imponen las
condiciones xpg0 = 12 y ypg0 = 10.
5.5 Ejemplo 3 271

La figura 5.11 muestra la solución para las fuerzas y momentos de enlace en


los diferentes pares cinemáticos.
3000 2500
sj01_Fx sj12_Fx
sj01_Fy sj12_Fy
sj01_Mz sj12_Mz
2500
2000

2000
1500
Fuerza [N], Momento [Nm]

1500

1000

1000

500
500

0
0

−500 −500
0 1 2 3 4 5 6 7 8 9 10 0 1 2 3 4 5 6 7 8 9 10

2000 800
sj23_Fx ecr_Fx
sj23_Fy ecr_Fy
sj23_Mz ecr_Mz
600

1500
400
Fuerza [N], Momento [Nm]

200
1000

500
−200

−400
0

−600

−500 −800
0 1 2 3 4 5 6 7 8 9 10 0 1 2 3 4 5 6 7 8 9 10
Tiempo (s) Tiempo (s)

Figura 5.11: Resultados de la simulación dinámica

Ya que se trata de un problema plano, se omite la solución para las incógnitas


de enlace del tipo
j_i_Fz, j_i_My, j_i_Mz, i=1..4

donde j_i hace referencia a cualquiera de los pares cinemáticos caracterizados.

El listado completo de parámetros correspondiente a la simulación puede


consultarse en el anexo B.2.
272 Ejemplos

5.6. Ejemplo 4: Máquina transportadora


La figura 5.12 representa el modo de funcionamiento de la máquina transpor-
tadora analizada en el presente ejemplo.

Bandeja

Bastidor Ballestas

Grupo excitador (motores) Silentblocks

Figura 5.12: Funcionamiento de la máquina transportadora

La bandeja superior de la máquina transportadora descansa sobre un bastidor


que se sujeta al suelo mediante cuatro silentblocks. El grupo excitador de la má-
quina está formado por dos motores asíncronos independientes con sendas excén-
tricas girando en sentidos opuestos. El grupo anterior, colocado en la parte trasera
del bastidor, hace vibrar la bandeja de tal forma que el producto se desplaza en la
dirección positiva del eje horizontal. Este hecho se consigue gracias al fenómeno
de acoplamiento dinámico o sincronización de los motores.
La máquina se modeliza tridimensionalmente en 3D_M EC _M AT L AB según
se muestra en la figura 5.13.
En este caso, el movimiento del sistema se caracteriza mediante 14 coorde-
nadas generalizadas:

• xbs, ybs, zbs, a1bs, a2bs y a3bs → desplazamientos y giros


diferenciales del bastidor, bs , en la referencia absoluta.

• xba, yba, zba, a1ba, a2ba y a3ba → desplazamientos y giros


diferenciales de la bandeja, ba , en la referencia absoluta.

• phim1 y phim2 → giros relativos de los motores, m1 y m2 , res-


pecto al bastidor.
5.6 Ejemplo 4 273

orba, refba

1.5
zba, a3ba

yba, a2ba
1
xba, a1ba
zbs, a3bs
orm1, refm1
0.5 φm1 orbs, refbs
φm2 ybs, a2bs xbs, a1bs

0
1 orm2, refm2
0.5
1
0 0.5
0
−0.5 −0.5
−1
−1

Figura 5.13: Acotación del problema

C ARACTERIZACIÓN DEL PAR MOTOR

El par motor correspondiente a un motor asíncrono puede aproximarse con


una expresión polinómica del tipo

aS 3 + bS ωs − ω
Tm = , S = (5.1)
cS 4 + dS 2 + 1 ωs
donde:

• a, b, c y d son constantes que dependen de las características físicas del


bobinado y entre-hierro así como de la tensión de alimentación del mismo.

• S es el deslizamiento del motor.

• ωs y ω son la velocidad de sincronismo y la velocidad de funcionamiento


del motor respectivamente.

Teniendo en cuenta que un motor asíncrono trabaja en un rango de velocidades


próximas a la de sincronismo, la curva de par presentada en la ecuación 5.1 puede
sustituirse por su aproximación de primer orden alrededor de ω s ,

Tm = Cm (ωs − ω) = am ω + bm (5.2)

donde Cm es un coeficiente que representa la rigidez del motor.


274 Ejemplos

La figura 5.14 muestra la simplificación adoptada para la curva de par en el


caso del motor m1 , donde a_m = -0.2 y b_m = 21 . El motor m2 se ca-
racteriza con una curva de características similares, pero simétrica a la anterior
respecto al eje de abcisas.

T [N m]
Tmax

T = −0,2 ω + 21

T = Cm (ω − ωs )

ωs = 105 ω [rad/s]

Figura 5.14: Simplificación adoptada para la curva de par

S INCRONÍA DE LOS MOTORES Y DIRECCIÓN PRINCIPAL DE EXCITACIÓN

El sistema mecánico presentado llega a un estacionario en el que los motores


alcanzan la misma velocidad de régimen. Esta sincronía marca una dirección pre-
ferencial de excitación que depende de las características del conjunto bastidor-
bandeja.
La figura 5.15 muestra la relación entre el giro de los motores y la dirección
preferencial de excitación en el caso de la acotación propuesta.
El par motor, de signo contrario en cada uno de los motores, hace girar las
excéntricas hasta que se alcanza el régimen estacionario, en el que los motores
giran con velocidad ω.
La dirección preferencial queda definida mediante la expresión

φs = (φm1e + φm2e ) /2 ,

donde φm1e y φm2e representan los ángulos girados por las excéntricas de
los motores m1 y m2 en t = ∞ respectivamente.
5.6 Ejemplo 4 275

φs ≈ (φm1e + φm2e ) /2
Tm1

φm1 = π/2 φm1e ≈ φs1 + ω t


Tm2

φm2 = π/2 φm2e ≈ φs2 − ω t

t = t0 t=∞

Figura 5.15: Dirección preferencial de excitación en el estacionario

5.6.1. Listado de definición del mecanismo


P ROBLEMA CINEMÁTICO

La acotación del mecanismo así como las características del problema cine-
mático se muestran en la figura 5.13.
La figura 5.16 muestra el significado de algunos de los parámetros que de-
terminan la posición de los motores y de los elementos constitutivos, ballestas y
silentblocks, que actúan sobre el sólido bs , es decir, el bastidor.
1 % Desplazamientos bastidor
2
3 [xbs]=new_q(’xbs’);
4 [ybs]=new_q(’ybs’);
5 [zbs]=new_q(’zbs’);
6
7 % Giros (diferenciales) bastidor
8
9 [a1bs]=new_q(’a1bs’);
10 [a2bs]=new_q(’a2bs’);
11 [a3bs]=new_q(’a3bs’);
12
13 % Desplazamientos bandeja
14
15 [xba]=new_q(’xba’);
276 Ejemplos

b1_bs b4_bs

sup_bs
z
bm
x ycgbs
lm
vista alzado

zm xcgbs
philm

anclaje motor anclaje Silentblock inf_bs

excéntrica

l_bs/2 l_bs/2
drha.

b2_bs b4_bs
w_bs/2
vista planta

y
x

anclajes ballestas w_bs/2


izda.

rear front

Figura 5.16: Definición de puntos característicos en el sólido bastidor

16 [yba]=new_q(’yba’);
17 [zba]=new_q(’zba’);
18
19 % Giros (diferenciales) bandeja
20
21 [a1ba]=new_q(’a1ba’);
22 [a2ba]=new_q(’a2ba’);
23 [a3ba]=new_q(’a3ba’);
24
25 % Giros de los motores
26
27 [phm1, dphm1]=new_q(’phm1’);
28 [phm2, dphm2]=new_q(’phm2’);
29
5.6 Ejemplo 4 277

30 % Referencia del bastidor ’refbs’


31
32 new_pt(’orgbs’, ’org0’, ’or0’, [xbs ybs zbs]’);
33 new_or(’orbs’, 3, ’or0’, [a1bs, a2bs, a3bs]’);
34 new_ref(’refbs’, ’orgbs’, ’orbs’);
35
36 % Referencia de la bandeja ’refba’
37
38 new_pt(’orgba’, ’org0’, ’or0’, [xba yba zba]’);
39 new_or(’orba’, 3, ’or0’, [a1ba, a2ba, a3ba]’);
40 new_ref(’refba’, ’orgba’, ’orba’);
41
42 % Posición de los anclajes de los motores
43
44 [phlm]=new_param(’phlm’, 0);
45 [lm]=new_param(’lm’, -.85);
46 [zm]=new_param(’zm’, .1);
47
48 new_or(’orlm’, 1, ’orbs’, phlm, 2);
49 new_pt(’om3’, ’orgbs’, ’orlm’, [lm 0 zm]’);
50 new_pt(’om4’, ’orgbs’, ’orlm’, [lm 0 -zm]’);
51
52 new_or(’or3’, 1, ’orbs’, phm1, 2);
53 new_or(’or4’, 1, ’orbs’, phm2, 2);
54
55 % Referencia del motor superior ’ref3’
56
57 new_ref(’ref3’, ’om3’, ’or3’);
58
59 % Referencia del motor inferior ’ref4’
60
61 new_ref(’ref4’, ’om4’, ’or4’);

P ROBLEMA DINÁMICO

La figura 5.17 muestra los parámetros y elementos considerados en la simula-


ción dinámica, que en este caso se realiza bajo los siguientes supuestos:

• La gravedad actúa sobre cada uno de los componentes en la dirección nega-


tiva del eje z de la base global.
• El bastidor, bs , se fija al suelo, body0 , mediante cuatro silentblocks,
que en este caso se representan como elementos viga de Bernouilli.
• La bandeja, ba , se fija al bastidor, bs , mediante ocho ballestas, que en
este caso se representan como elementos viga generalizados.
• Los motores son excitados tal como se explica en la introducción de esta
misma sección.
278 Ejemplos

base orbllba
ba → [refba, gcba, mba, I_ba]
(solidaria a refba)
bainf_1d
bainf_4i g
orgba
bssup_4i
bssup_1d
base orbllbs
m1 → [ref3, gc3, m3, I_3] (solidaria a refbs)
orgbs
m2 → [ref4, gc4, m4, I_4] om3

om4
bs → [refbs, gcbs, mbs, I_bs] bsinf_5i
bsinf_0d
s5i
s0d base orslbbs
(solidaria a refbs)
base orslbs
(solidaria a ref0)

Elemento viga generalizada Elemento viga Bernouilli

Figura 5.17: Elementos dinámicos presentes en el problema

62 % SOLIDOS Y TORSORES DE INERCIA


63
64 % Sólido ’bs’
65 %%%%%%%%%%%%%
66
67 % centro de gravedad, punto ’bscg’
68
69 [xcgbs]=new_param(’xcgbs’);
70 [ycgbs]=new_param(’ycgbs’);
71 [zcgbs]=new_param(’zcgbs’);
72
73 new_refpt(’bscg’, ’refbs’, [xcgbs, ycgbs, zcgbs]’);
74
75 % parámetros dinámicos
76
77 [mbs]=new_param(’mbs’);
78 [Ixxbs]=new_param(’Ixxbs’);
79 [Iyybs]=new_param(’Iyybs’);
80 [Izzbs]=new_param(’Izzbs’);
81 [Ibs_orbs]=diag([Ixxbs;Iyybs;Izzbs]);
82
83 new_tensor(’tensorbs’, ’bscg’, ’orbs’, Ibs_orbs);
5.6 Ejemplo 4 279

84
85 % definición del sólido
86
87 new_body(’bs’, ’refbs’, ’bscg’, mbs, ’tensorbs’);
88
89 % Sólido ’ba’
90 %%%%%%%%%%%%%
91
92 % centro de gravedad, punto ’bacg’
93
94 [xcgba]=new_param(’xcgba’)
95 [ycgba]=new_param(’ycgba’)
96 [zcgba]=new_param(’zcgba’)
97
98 new_refpt(’bacg’, ’refba’, [xcgba, ycgba, zcgba]’);
99
100 % parámetros dinámicos
101
102 [mba]=new_param(’mba’);
103 [Ixxba]=new_param(’Ixxba’);
104 [Iyyba]=new_param(’Iyyba’);
105 [Izzba]=new_param(’Izzba’);
106 [Iba_orba]=diag([Ixxba;Iyyba;Izzba]);
107
108 new_tensor(’tensorba’, ’bacg’, ’orba’, Iba_orba);
109
110 % definición del sólido
111
112 new_body(’ba’, ’refba’, ’bacg’, mba, ’tensorba’);
113
114 % Sólido ’m1’
115 %%%%%%%%%%%%%
116
117 % centro de gravedad, punto ’gc3’
118
119 [bm]=new_param(’bm’, .1);
120
121 new_refpt(’gc3’, ’ref3’, [bm, 0, 0]’);
122
123 % parámetros dinámicos
124
125 [m3]=new_param(’m3’);
126 [Ixx3]=new_param(’Ixx3’);
127 [Iyy3]=new_param(’Iyy3’);
128 [Izz3]=new_param(’Izz3’);
129 [I3_or3]=diag([Ixx3;Iyy3;Izz3]);
130
131 new_tensor(’tensor3’, ’gc3’, ’or3’, I3_or3);
132
280 Ejemplos

133 % definición del sólido


134
135 new_body(’m1’, ’ref3’, ’gc3’, m3, ’tensor3’);
136
137 % Sólido ’m2’
138 %%%%%%%%%%%%%
139
140 % centro de gravedad, punto ’gc4’
141
142 new_refpt(’gc4’, ’ref4’, [bm, 0, 0]’);
143
144 % parámetros dinámicos
145
146 [m4]=new_param(’m4’);
147 [Ixx4]=new_param(’Ixx4’);
148 [Iyy4]=new_param(’Iyy4’);
149 [Izz4]=new_param(’Izz4’);
150 [I4_or4]=diag([Ixx4;Iyy4;Izz4]);
151
152 new_tensor(’tensor4’, ’gc4’, ’or4’, I4_or4);
153
154 % definición del sólido
155
156 new_body(’m2’, ’ref4’, ’gc4’, m4, ’tensor4’);
157
158 % TORSORES DE ENLACE
159
160 % Pares de revolución en los motores
161 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
162
163 imp_revolute_joint(’pcj01’, ’bs’, ’m1’, ’om3’, ’or0’, 2)
164 imp_revolute_joint(’pcj02’, ’bs’, ’m2’, ’om4’, ’or0’, 2)
165
166 % TORSORES CONSTITUTIVOS
167
168 % Fuerza gravitatoria
169 %%%%%%%%%%%%%%%%%%%%%
170
171 new_gravity_ctrs(’fgbs’, ’bs’, -3);
172 new_gravity_ctrs(’fgba’, ’ba’, -3);
173 new_gravity_ctrs(’fgm1’, ’m1’, -3);
174 new_gravity_ctrs(’fgm2’, ’m2’, -3);
175
176 % Elementos viga (silentblocks) entre el suelo y el bastidor.
177 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
178
179 % Rigidez y amortiguamiento (silentblocks front)
180
181 [zs0f]=new_param(’zs0f’);
5.6 Ejemplo 4 281

182
183 csf(1,1)=new_param(’csxf’);
184 csf(2,1)=new_param(’csyf’);
185 csf(3,1)=new_param(’cszf’);
186
187 csrf(1,1)=new_param(’csrxf’);
188 csrf(2,1)=new_param(’csryf’);
189 csrf(3,1)=new_param(’csrzf’);
190
191 % constantes del elemento viga (silentblocks front)
192
193 Ksf_params(1,1)=new_param(’Esf’);
194 Ksf_params(2,1)=new_param(’Gsf’);
195 Ksf_params(3,1)=zs0f;
196 Ksf_params(4,1)=new_param(’Asf’);
197 Ksf_params(5,1)=new_param(’Iysf’);
198 Ksf_params(6,1)=new_param(’Izsf’);
199 Ksf_params(7,1)=new_param(’Jsf’);
200
201 % Rigidez y amortiguamiento (silentblocks rear)
202
203 [zs0r]=new_param(’zs0r’);
204
205 csr(1,1)=new_param(’csxr’);
206 csr(2,1)=new_param(’csyr’);
207 csr(3,1)=new_param(’cszr’);
208
209 csrr(1,1)=new_param(’csrxr’);
210 csrr(2,1)=new_param(’csryr’);
211 csrr(3,1)=new_param(’csrzr’);
212
213 % constantes del elemento viga (silentblocks rear)
214
215 Ksr_params(1,1)=new_param(’Esr’);
216 Ksr_params(2,1)=new_param(’Gsr’);
217 Ksr_params(3,1)=zs0r;
218 Ksr_params(4,1)=new_param(’Asr’);
219 Ksr_params(5,1)=new_param(’Iysr’);
220 Ksr_params(6,1)=new_param(’Izsr’);
221 Ksr_params(7,1)=new_param(’Jsr’);
222
223 % Orientaciones para el elemento viga
224
225 new_or(’orslbs’, 1, ’or0’, sym(-pi/2), 2)
226 new_or(’orslbbs’, 1, ’orbs’, sym(-pi/2), 2)
227
228 % definición de puntos característicos
229
230 % Referencia absoluta
282 Ejemplos

231 %%%%%%%%%%%%%%%%%%%%%
232
233 [x_0i]=new_param(’x_0i’);
234 [y_0i]=new_param(’y_0i’);
235 [z_0i]=new_param(’z_0i’);
236
237 new_refpt(’s0i’,’ref0’,[x_0i y_0i z_0i]’);
238
239 [x_0d]=new_param(’x_0d’);
240 [y_0d]=new_param(’y_0d’);
241 [z_0d]=new_param(’z_0d’);
242
243 new_refpt(’s0d’, ’ref0’, [x_0d y_0d z_0d]’);
244
245 [x_5i]=new_param(’x_5i’);
246 [y_5i]=new_param(’y_5i’);
247 [z_5i]=new_param(’z_5i’);
248
249 new_refpt(’s5i’, ’ref0’, [x_5i y_5i z_5i]’);
250
251 [x_5d]=new_param(’x_5d’);
252 [y_5d]=new_param(’y_5d’);
253 [z_5d]=new_param(’z_5d’);
254
255 new_refpt(’s5d’, ’ref0’, [x_5d y_5d z_5d]’);
256
257 % Referencia bastidor
258 %%%%%%%%%%%%%%%%%%%%%
259
260 [w_bs]=new_param(’w_bs’);
261 [l_bs]=new_param(’l_bs’);
262
263 [inf_bs]=new_param(’inf_bs’);
264
265 new_refpt(’bsinf_0d’, ’refbs’, [-.5*l_bs, .5*w_bs, inf_bs]’);
266 new_refpt(’bsinf_5d’, ’refbs’, [.5*l_bs, .5*w_bs, inf_bs]’);
267
268 new_refpt(’bsinf_0i’, ’refbs’, [-.5*l_bs, -.5*w_bs, inf_bs]’);
269 new_refpt(’bsinf_5i’, ’refbs’, [.5*l_bs, -.5*w_bs, inf_bs]’);
270
271 % Torsores constitutivos (silentblocks front)
272
273 new_aux_beam_ctrs(’f5i’, ’body0’, ’s5i’, ’orslbs’, ’bs’,
274 ’bsinf_5i’, ’orslbbs’, Ksf_params, csf, csrf)
275
276 new_aux_beam_ctrs(’f5d’, ’body0’, ’s5d’, ’orslbs’, ’bs’,
277 ’bsinf_5d’, ’orslbbs’, Ksf_params, csf, csrf)
278
279 % Torsores constitutivos (silentblocks rear)
5.6 Ejemplo 4 283

280
281 new_aux_beam_ctrs(’f0i’, ’body0’, ’s0i’, ’orslbs’, ’bs’,
282 ’bsinf_0i’, ’orslbbs’, Ksr_params, csr, csrr)
283
284 new_aux_beam_ctrs(’f0d’, ’body0’, ’s0d’, ’orslbs’, ’bs’,
285 ’bsinf_0d’, ’orslbbs’, Ksr_params, csr, csrr)
286
287 % Elementos viga (ballestas) entre el bastidor y la bandeja
288 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
289
290 % Rigidez y amortiguamiento (ballestas)
291
292 l0bll=new_param(’l0bll’);
293
294 cb(1,1)=new_param(’cbx’);
295 cb(2,1)=new_param(’cby’);
296 cb(3,1)=new_param(’cbz’);
297
298 cbr(1,1)=new_param(’cbrx’);
299 cbr(2,1)=new_param(’cbry’);
300 cbr(3,1)=new_param(’cbrz’);
301
302 % Matrices numéricas de rigidez de las ballestas
303 % dimensión (12,12); formato ascii legible por matlab
304
305 % lado derecho
306
307 load real_d1.dat
308 load real_d2.dat
309 load real_d3.dat
310 load real_d4.dat
311
312 rkd1=build_gen_rK_matrix(’kd1’, real_d1, 1e-1)
313 rkd2=build_gen_rK_matrix(’kd2’, real_d2, 1e-1);
314 rkd3=build_gen_rK_matrix(’kd3’, real_d3, 1e-1);
315 rkd4=build_gen_rK_matrix(’kd4’, real_d4, 1e-1);
316
317 % lado izquierdo
318
319 load real_i1.dat
320 load real_i2.dat
321 load real_i3.dat
322 load real_i4.dat
323
324 rki1=build_gen_rK_matrix(’ki1’, real_i1, 1e-1);
325 rki2=build_gen_rK_matrix(’ki2’, real_i2, 1e-1);
326 rki3=build_gen_rK_matrix(’ki3’, real_i3, 1e-1);
327 rki4=build_gen_rK_matrix(’ki4’, real_i4, 1e-1);
328
284 Ejemplos

329 % Orientaciones para las ballestas


330
331 phibll=new_param(’phibll’);
332
333 new_or(’orbllbs’, 1, ’orbs’, phibll, 2)
334 new_or(’orbllba’, 1, ’orba’, phibll, 2)
335
336 % definición de puntos característicos
337
338 % Referencia bastidor
339 %%%%%%%%%%%%%%%%%%%%%
340
341 [sup_bs]=new_param(’sup_bs’);
342
343 [b1_bs]=new_param(’b1_bs’);
344 [b2_bs]=new_param(’b2_bs’);
345 [b3_bs]=new_param(’b3_bs’);
346 [b4_bs]=new_param(’b4_bs’);
347
348 new_refpt(’bssup_1d’, ’refbs’, [b1_bs, .5*w_bs, sup_bs]’);
349 new_refpt(’bssup_2d’, ’refbs’, [b2_bs, .5*w_bs, sup_bs]’);
350 new_refpt(’bssup_3d’, ’refbs’, [b3_bs, .5*w_bs, sup_bs]’);
351 new_refpt(’bssup_4d’, ’refbs’, [b4_bs, .5*w_bs, sup_bs]’);
352
353 new_refpt(’bssup_1i’, ’refbs’, [b1_bs, -.5*w_bs, sup_bs]’);
354 new_refpt(’bssup_2i’, ’refbs’, [b2_bs, -.5*w_bs, sup_bs]’);
355 new_refpt(’bssup_3i’, ’refbs’, [b3_bs, -.5*w_bs, sup_bs]’);
356 new_refpt(’bssup_4i’, ’refbs’, [b4_bs, -.5*w_bs, sup_bs]’);
357
358 % Referencia bandeja
359 %%%%%%%%%%%%%%%%%%%%
360
361 [w_ba]=new_param(’w_ba’);
362
363 [inf_ba]=new_param(’inf_ba’);
364
365 [b1_ba]=new_param(’b1_ba’);
366 [b2_ba]=new_param(’b2_ba’);
367 [b3_ba]=new_param(’b3_ba’);
368 [b4_ba]=new_param(’b4_ba’);
369
370 new_refpt(’bainf_1d’, ’refba’, [b1_ba, .5*w_ba, inf_ba]’);
371 new_refpt(’bainf_2d’, ’refba’, [b2_ba, .5*w_ba, inf_ba]’);
372 new_refpt(’bainf_3d’, ’refba’, [b3_ba, .5*w_ba, inf_ba]’);
373 new_refpt(’bainf_4d’, ’refba’, [b4_ba, .5*w_ba, inf_ba]’);
374
375 new_refpt(’bainf_1i’, ’refba’, [b1_ba, -.5*w_ba, inf_ba]’);
376 new_refpt(’bainf_2i’, ’refba’, [b2_ba, -.5*w_ba, inf_ba]’);
377 new_refpt(’bainf_3i’, ’refba’, [b3_ba, -.5*w_ba, inf_ba]’);
5.6 Ejemplo 4 285

378 new_refpt(’bainf_4i’, ’refba’, [b4_ba, -.5*w_ba, inf_ba]’);


379
380 % Torsores constitutivos para las ballestas (derecho)
381
382 new_aux_gen_beam_ctrs(’fb1d’, ’bs’, ’bssup_1d’, ’orbllbs’, ...
383 ’ba’, ’bainf_1d’, ’orbllba’, rkd1, l0bll, cb, cbr)
384
385 new_aux_gen_beam_ctrs(’fb2d’, ’bs’, ’bssup_2d’, ’orbllbs’, ...
386 ’ba’, ’bainf_2d’, ’orbllba’, rkd2, l0bll, cb, cbr)
387
388 new_aux_gen_beam_ctrs(’fb3d’, ’bs’, ’bssup_3d’, ’orbllbs’, ...
389 ’ba’, ’bainf_3d’, ’orbllba’, rkd3, l0bll, cb, cbr)
390
391 new_aux_gen_beam_ctrs(’fb4d’, ’bs’, ’bssup_4d’, ’orbllbs’, ...
392 ’ba’, ’bainf_4d’, ’orbllba’, rkd4, l0bll, cb, cbr)
393
394 % Torsores constitutivos para las ballestas (izquierdo)
395
396 new_aux_gen_beam_ctrs(’fb1i’, ’bs’, ’bssup_1i’, ’orbllbs’, ...
397 ’ba’, ’bainf_1i’, ’orbllba’, rki1, l0bll, cb, cbr)
398
399 new_aux_gen_beam_ctrs(’fb2i’, ’bs’, ’bssup_2i’, ’orbllbs’, ...
400 ’ba’, ’bainf_2i’, ’orbllba’, rki2, l0bll, cb, cbr)
401
402 new_aux_gen_beam_ctrs(’fb3i’, ’bs’, ’bssup_3i’, ’orbllbs’, ...
403 ’ba’, ’bainf_3i’, ’orbllba’, rki3, l0bll, cb, cbr)
404
405 new_aux_gen_beam_ctrs(’fb4i’, ’bs’, ’bssup_4i’, ’orbllbs’, ...
406 ’ba’, ’bainf_4i’, ’orbllba’, rki4, l0bll, cb, cbr)
407
408 % Accionamiento Motores
409 %%%%%%%%%%%%%%%%%%%%%%%
410
411 % Leyes constitutivas de los motores
412
413 [am1]=new_param(’am1’);
414 [bm1]=new_param(’bm1’);
415 [am2]=new_param(’am2’);
416 [bm2]=new_param(’bm2’);
417
418 [T1t]=new_u(’T1t’, am1*dphm1+bm1)
419 [T2t]=new_u(’T2t’, am2*dphm2+bm2)
420
421 % Par de acción sobre el motor 1
422
423 new_ctrs(’fm1m1’, ’m1’, ’om3’, [0; 0; 0], ’orbs’, ...
424 [0; T1t; 0], ’orbs’);
425
426 % Par de acción sobre el motor 2
286 Ejemplos

427
428 new_ctrs(’fm2m2’, ’m2’, ’om4’, [0; 0; 0], ’orbs’, ...
429 [0; T2t; 0], ’orbs’);
430
431 % Pares de reacción sobre el bastidor
432
433 new_ctrs(’fm1bs’, ’bs’, ’om3’, [0; 0; 0], ’orbs’, ...
434 -[0; T1t; 0], ’orbs’)
435
436 new_ctrs(’fm2bs’, ’bs’, ’om4’, [0; 0; 0], ’orbs’, ...
437 -[0; T2t; 0], ’orbs’)

Tal como se aprecia en el listado anterior, los elementos de tipo silentblock


se introducen haciendo uso de la función new_beam_ctrs . La función anterior
calcula los torsores según lo descrito en la sección 4.4.4.
La matriz de rigidez3 de cualquier silentblock, en el sistema de coordenadas
local a dicho silentblock, presenta la siguiente topología:
[ ks_77, 0, 0, 0, 0, 0 ]
[ 0, ks_88, 0, 0, 0, ks_812 ]
[ 0, 0, ks_99, 0, ks_911, 0 ]
[ 0, 0, 0, ks_1010, 0, 0 ]
[ 0, 0, ks_119, 0, ks_1111, 0 ]
[ 0, ks_128, 0, 0, 0, ks_1212 ]

La definición de cada uno de los elementos anteriores mediante la instrucción


new_aux_beam_ctrs , genera de forma automática tres coordenadas auxiliares
que representan el desplazamiento del punto extremo respecto al punto origen de
los citados elementos en la base origen, es decir, or0 . Las 12 coordenadas
introducidas reciben los nombres siguientes:
f0i_dltx, f0i_dlty, f0i_dltz, f0d_dltx, f0d_dlty, f0d_dltz
f5i_dltx, f5i_dlty, f5i_dltz, f5d_dltx, f5d_dlty, f5d_dltz

Los torsores constitutivos asociados a los elementos de tipo silentblock se ge-


neran en términos de las variables auxiliares anteriores y se almacenan en la es-
tructura ctrss .
La introducción de coordenadas auxiliares podría evitarse haciendo uso de la
instrucción new_beam_ctrs , la cual calcula el desplazamiento relativo entre los
extremos del elemento en términos de las coordenadas de partida. Sin embargo,
3
Nótese que, en este caso, 3D_M EC _M AT L AB trabaja con la información necesaria para
construir el torsor constitutivo actuante sobre el segundo sólido introducido como argumento en la
función new_aux_beam_ctrs .
5.6 Ejemplo 4 287

la expresión simbólica de los torsores es más simple si se emplean coordenadas


auxiliares, como es el caso de este ejemplo.
El giro relativo entre los extremos de los silentblocks se calcular a partir de
la de la matriz de cambio de base que relaciona las bases or0 y orbs . La
base orbs es del tipo pequeñas rotaciones por lo que, en este caso, el vector de
rotación adoptará la sencilla expresión:
vrot = [ a1_bs, a2_bs, a3_bs ]’

Los elementos de tipo ballesta se introducen haciendo uso de la función


new_aux_gen_beam_ctrs , la cual calcula los torsores correspondientes según
lo descrito en la sección 4.4.4.
En este caso, las matrices de rigidez numéricas de dimensión (12, 12) ,
almacenadas en ficheros externos del tipo real_d1.dat , se transforman en
matrices simbólicas de dimensión (6, 6) haciendo uso de la instrucción
build_gen_rK_matrix .

La matriz de rigidez de cualquier ballesta, en el sistema de coordenadas local


a dicha ballesta, presenta la siguiente topología:
[ kd1_77, 0, 0, 0, kd1_711, kd1_712 ]
[ 0, kd1_88, 0, kd1_810, 0, kd1_812 ]
[ 0, 0, kd1_99, kd1_910, kd1_911, 0 ]
[ 0, kd1_810, kd1_910, kd1_1010, kd1_1011, kd1_1012 ]
[ kd1_711, 0, kd1_911, kd1_1011, kd1_1111, kd1_1112 ]
[ kd1_712, kd1_812, 0, kd1_1012, kd1_1112, kd1_1212 ]

La definición de cada uno de los elementos anteriores mediante la instrucción


new_aux_gen_beam_ctrs , genera de forma automática tres coordenadas auxi-
liares que, al igual que en el caso anterior, representan el desplazamiento relativo
del punto origen al punto extremo de los citados elementos en la base origen, es
decir, orbs . Las 12 coordenadas auxiliares introducidas reciben los nombres
siguientes:
fb1d_dltx, fb1d_dlty, fb1d_dltz, fb2d_dltx, fb2d_dlty, fb2d_dltz
fb3d_dltx, fb3d_dlty, fb3d_dltz, fb4d_dltx, fb4d_dlty, fb4d_dltz
fb1i_dltx, fb1i_dlty, fb1i_dltz, fb2i_dltx, fb2i_dlty, fb2i_dltz
fb3i_dltx, fb3i_dlty, fb3i_dltz, fb4i_dltx, fb4i_dlty, fb4i_dltz

El giro relativo entre los extremos de las ballestas se calcular a partir de la de


la matriz de cambio de base que relaciona las orientaciones orbs y orba .
288 Ejemplos

Las dos bases anteriores son del tipo pequeñas rotaciones por lo que el vector
de rotación adoptará la sencilla expresión:
vrot = [ a1_ba-a1_bs, a2_ba-a2_bs, a3_ba-a3_bs ]’

E XPORTACIÓN
Se exportarán las funciones necesarias para simular numéricamente el sistema
empleando el formalismo de Lagrange además de las que se emplean para resolver
el problema de equilibrio estático, es decir:
• JJplmbq(prm, q, z, lmbp, t) → export_kinematics(1)
• JQl_eq(prm, q, u, t) → export_lagrange_dynamics(1)
El cálculo de frecuencias propias y modos de vibración se apoya en las matri-
ces de masa, Ml(prm, q) y rigidez, JQl_eq(prm, q, u, t) , del problema
de Lagrange, exportadas para resolver el problema de simulación y el problema
de equilibrio estático respectivamente.
1 % exportar: diferentes funciones
2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3
4 % prm_init, q_init, dq_init, ddq_init ...
5
6 export_definitions
7
8 % zetas, dzetas, ddzetas
9
10 export_zetas
11
12 % ues
13
14 export_ues
15
16 % exportar: problema cinemático
17 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
18
19 export_kinematics(1)
20
21 % 1 -> exporta la matriz [d/dq(Jp’*lmbp)]
22
23 % exportar: ecuaciones dinámicas de Lagrange
24 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
25
26 export_lagrange_dynamics(1)
27
28 % 1 -> exporta la matriz [d/dq(Ql)] (rigidez)
5.6 Ejemplo 4 289

5.6.2. Resultados de la simulación


P ROBLEMA MODAL

El problema modal se resuelve haciendo uso de la plantilla numérica


natural_modes.m , cuyo algoritmo se describe en la sección 4.4.4, y cuyo
listado se presenta en el anexo A.4.
La figura 5.18 representa algunos de los modos de vibración del sistema alre-
dedor de la posición de equilibrio.
freq=9.5346 freq=9.7695

3 3

2.5 2.5

2 2

1.5 1.5

1 1

0.5 0.5

0 0
1.5 1.5
1 1
1.5 1.5
0.5 1 0.5 1
0 0.5 0 0.5
−0.5 0 −0.5 0
−0.5 −0.5
−1 −1 −1 −1
−1.5 −1.5 −1.5 −1.5

freq=17.0263 freq=22.8325

3 3

2.5 2.5

2 2

1.5 1.5

1 1

0.5 0.5

0 0
1.5 1.5
1 1
1.5 1.5
0.5 1 0.5 1
0 0.5 0 0.5
−0.5 0 −0.5 0
−0.5 −0.5
−1 −1 −1 −1
−1.5 −1.5 −1.5 −1.5

Figura 5.18: Modos de vibración en la posición de equilibrio

Como es obvio, el resultado de la simulación dinámica depende de diferentes


factores, como el amortiguamiento o la respuesta en frecuencia del mismo, que no
se tuvieron en cuenta al resolver el problema modal. Sin embargo, la visualización
gráfica de los modos puede resultar bastante útil como herramienta en la etapa de
diseño de la máquina transportadora.
290 Ejemplos

P ROBLEMA D INÁMICO
El problema dinámico se resuelve empleando el formalismo de Lagrange en
coordenadas independientes. El conjunto de ecuaciones de movimiento está for-
mado por 14 ecuaciones dinámicas que resuelven las 14 aceleraciones genera-
lizadas de partida.
Los valores de las coordenadas y velocidades auxiliares, necesarios para eva-
luar el vector de fuerza generalizada, se obtienen como postproceso en cada ins-
tante de tiempo haciendo uso de las ecuaciones de posición y velocidad respecti-
vamente. Las ecuaciones para aceleraciones podrían emplearse para calcular las
aceleraciones auxiliares en términos de las aceleraciones generalizadas de partida,
pero en este caso no se utilizan.
Las funciones empleadas para realizar la simulación numérica del transitorio
de arranque de los motores se detallan en el anexo A.7.
La simulación dinámica se realiza partiendo del reposo desde la po-
sición de equilibrio estático, que se calcula haciendo uso de la función
solve_equilibrium_position documentada en el anexo A.3.
−0.13

−0.135
PSD −3
10

−4
10
−0.14

−5
−0.145 10

−0.15
PSD (xba−xbs) [m /Hz]

−6
10
(xba−xbs) [m]

−0.155
−7
10

−0.16
−8
10
−0.165
−9
10
−0.17

−10
10
−0.175

−11
−0.18 10
0 1 2
0 2 4 6 8 10 12 10 10 10
Tiempo (s) Frecuencia (Hz)

1.8
−3
10

−4
10
1.75

−5
10

1.7
PSD (θ +θ )/2 [rad /Hz]

−6
10
(θ1+θ2)/2 [rad]

−7
10
1 2

1.65
−8
10

−9
10
1.6

−10
10

PSD −11
1.55 10
0 1 2
0 2 4 6 8 10 12 10 10 10
Tiempo (s) Frecuencia (Hz)

Figura 5.19: Resultados de la simulación dinámica


5.6 Ejemplo 4 291

La parte superior de la figura 5.19 muestra la evolución del movimiento re-


lativo de la bandeja, ba , respecto al bastidor4 , bs , durante el transitorio de
arranque de los motores. Tal como se aprecia, la señal presenta alto contenido en
las frecuencias:
• 9 Hz → segundo modo propio de los que aparecen en la figura 5.18.
• 16 Hz → velocidad de régimen de los motores y tercer modo propio de
los que aparecen en la figura 5.18.
El modo propio de frecuencia 9 Hz, excitado en el transitorio de arranque de
los motores, se irá atenuando con el paso del tiempo siempre que dicho modo no
esté dinámicamente acoplado con el de 17 Hz.
La parte inferior de la figura 5.19 muestra la evolución del ángulo de sincro-
nismo, entendido tal como se explica en la introducción del ejemplo durante el
mismo periodo de tiempo. En este caso, la señal presenta alto contenido a va-
rias frecuencias, lo cual demuestra la complejidad del fenómeno de acoplamiento
mecánico entre los dos motores.
El listado de parámetros empleados para llevar a cabo la simulación puede
consultarse en el anexo B.4.

4
nótese que dicho movimiento es el promotor del arrastre de producto en la máquina transpor-
tadora.
292 Ejemplos

5.7. Ejemplo 5: Interacción con S IMU L INK


En esta sección se presenta un problema para ilustrar cómo se introduce un
modelo dinámico generado con la librería 3D_M EC _M AT L AB en el programa de
simulación de sistemas dinámicos S IMU L INK .
La definición del sistema mecánico es idéntica a la presentada en la sección
5.3. El problema dinámico se completa en este caso imponiendo el giro de la
manivela mediante la acción de un motor. El par entregado por el motor al sistema
se controla aplicando una ley de control proporcional -integral.
La figura 5.20 muestra el aspecto que presenta el modelo dinámico del proble-
ma planteado en el entorno de simulación S IMU L INK .

z, dz, ddz, u q, dq

Bucle de realimentacion
4

−1
0 2 4 6 8 10 12

Figura 5.20: Modelo dinámico en el entorno S IMU L INK

El modelo dinámico está compuesto por los siguientes bloques funcionales:

• sfuncom → módulo para las señales de comando introducidas desde


el interface simbólico. La señal de control depende del estado del sistema,
por lo que se hace necesario introducir un bucle de realimentación.
5.7 Ejemplo 5 293

El bloque sfuncom se implementa mediante una función genérica5 de tipo


s cuyo argumento de entrada es el estado del sistema y cuyo argumento de
salida es la señal de comando.
En este caso, la definición del bloque de comando incluye una función
del tipo u = u(prm, q, dq, t) . En un caso más general, el guiado
del sistema mecánico puede llevarse a cabo empleando funciones del tipo
z = z(prm, t).
Teniendo en cuenta lo anterior, el bloque de control sfuncom podrá susti-
tuirse por uno de los controladores provistos por S IMU L INK , siempre que
el formato para el argumento de salida de dicho controlador sea el siguiente:

out = [ zs, dzs, ddzs, us ]’

donde los vectores zs, dzs, ddzs se corresponden con z , ż y z̈ (t) res-
pectivamente y us se corresponde con el vector de excitación u (q, q̇, t).
• sfundin → módulo que representa el sistema dinámico definido.
El modelo dinámico, sfundin , resuelve las ecuaciones de movimiento,
 
q
ẋ = f (t, x) , x = , (5.3)

devolviendo el vector de estado, x , que sirve como argumento de entrada
al módulo de control, sfuncom.
• retraso → módulo que representa el retraso sufrido por el vector de
estado hasta llegar al módulo de control.

El resto de elementos presentes en la figura 5.20 están destinados a mostrar


los resultados de la simulación.

5.7.1. Listado de definición del mecanismo


P ROBLEMA DINÁMICO

En este caso, la simulación dinámica del mecanismo se realiza bajo los si-
guientes supuestos:
• La gravedad actúa sobre cada uno de los componentes en la dirección nega-
tiva del eje z de la base global.
• El rozamiento dinámico presente en el par de revolución sj_02 se carac-
teriza mediante la constante c2 = 5 .
5
referencias [Mat02b] y [Mat02c]
294 Ejemplos

La figura 5.5 muestra los parámetros dinámicos y los elementos de control


considerados en el problema.

5
bd1 → [ref1, d, m1, Izz1] g

4
b bd2 → [ref2, e, m2, Izz2]

c2 bd3 → [ref3, c, m3]


2

d
e
1

u → u [prm, q, dq] c
0

org0
−1
0 2 4 6 8 10 12

Figura 5.21: Parámetros del problema

P ROBLEMA CINEMÁTICO Y P ROBLEMA DINÁMICO

La definición de los problemas cinemático y dinámico es idéntica a la que


aparece en el apartado 5.3 de este mismo capítulo, por lo que no se presentarán
aquí.

P ROBLEMA DE CONTROL

El motor, solidario al punto org0 de la referencia inercial, actúa sobre la


manivela controlando el movimiento del sistema mecánico. La señal de control,
que en este caso representa el par motor, responde a una ley de control de tipo
proporcional-integral que se implementa mediante la función de tipo u denotada
por par en el siguiente listado:
1 % TORSORES CONSTITUTIVOS
2
3 % Motor actuante sobre la manivela
4 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5
6 % control ...
7
5.7 Ejemplo 5 295

8 ki=new_param(’ki’, 0.25); % Integral


9 kp=new_param(’kp’, 20); % Proporcional
10
11 % consigna en velocidad de giro: 10 rad/s
12
13 da1r=new_param(’da1r’, 10);
14
15 % ley de control
16
17 par_motor = ki*(a10+da1r*t-a1)+kp*(da1r-da1);
18
19 % función de excitación
20
21 par=new_u(’par’, par_motor);
22
23 tresceros=sym([0, 0, 0]’);
24
25 % torsor constitutivo actuante sobre ’bd1’ en el punto ’org0’
26
27 new_ctrs(’tpar01’, ’bd1’, ’org0’, tresceros, ’or0’, ...
28 [0, 0, par]’, ’or0’);
29
30 % torsor constitutivo actuante sobre ’body0’ en el punto ’org0’
31
32 new_ctrs(’tpar10’, ’body0’, ’org0’, tresceros, ’or0’, ...
33 [0, 0, -par]’, ’or0’);

La consigna del control es la velocidad de giro de la manivela, da1r , que


en el caso del listado anterior se fija en 10 rad/s . Las constantes proporcional e
integral del controlador se asignan a los parámetros kp y ki respectivamente.

E XPORTACIÓN
Las instrucciones empleadas para exportar el problema dinámico son idénticas
a las que aparecen en el apartado 5.3, por lo que no se presentarán aquí.
La inclusión del modelo dinámico en el entorno de simulación S IMU L INK se
lleva a cabo empleando una serie de plantillas cuyo listado se presenta en el anexo
A.6.
El interfaz gráfico de S IMU L INK permite adecuar el modelo presentado en la
figura 5.20 de forma sencilla. Las únicas consideraciones que el usuario deberá
tener en cuenta para el buen funcionamiento del modelo son las siguientes:

• El bloque correspondiente al sistema mecánico, implementado mediante la


función de tipo s sfundin , toma como argumentos de entrada:
• El vector de estado, x = [q, dq]’.
296 Ejemplos

• La señal de comando en el formato [z, dz, ddz, u]’.


• El grupo de parámetros prm, tolv, tola en el orden indicado6 .
De los tres anteriores, el primero representa el vector de parámetros,
mientras que tolv y tola representan la tolerancia para los sol-
vers de velocidad y aceleración respectivamente.
Como argumento de salida, la función sfundin devuelve el vector de
estado, x.

• El bloque correspondiente al controlador, implementado en este caso me-


diante la función de tipo s , sfuncom , toma como argumentos de entrada
el vector de estado, x = [q, dq]’ , y el vector de parámetros, prm_init.
Para implementar un bloque de control basado en primitivas del entorno S I -
MU L INK como el que aparece en la figura 5.22, basta sustituir las funciones
zetas, dzetas, ddzetas y ues por primitivas del entorno S IMU -
L INK cuyos outputs mantengan las dimensiones de los vectores z , ż ,
z̈ y u respectivamente.

Modulo de control
alternativo

Figura 5.22: Control implementado mediante primitivas de S IMU L INK

6
para más información, léase el listado de la plantilla modelo.mdl , anexo A.6.
5.7 Ejemplo 5 297

5.7.2. Resultados de la simulación


La simulación dinámica se ha realizado con ayuda de uno de los integrado-
res de la Ode-Suite de M AT L AB , partiendo en reposo desde la posición inicial
a10 = pi/3 y empleando los valores ki = 4, kp = 2 y da1r = 10 para
sintonizar el módulo de control. El resto de parámetros pueden consultarse en el
anexo B.4.
La figura 5.23 muestra el resultado de la simulación dinámica para las varia-
bles de estado a1, a2, da1 y da2 , es decir, giros y velocidades angulares
de la manivela y de la biela respectivamente.
600

a1, da1
500
a2, da2
400
Posicion [rad]

300

200

100

−100
0 10 20 30 40 50 60
Tiempo [s]

20

15

10
Velocidad [rad/s]

−5

−10
0 10 20 30 40 50 60
Tiempo [s]

Figura 5.23: Resultados de la simulación dinámica

Tal como se aprecia en la figura, los parámetros del control proporcional -


integral no proporcionan un resultado satisfactorio debido a la amplitud de osci-
lación de la consigna de velocidad, pero el ajuste de los parámetros anteriores no
se analizará en este caso.
6. Conclusiones y Trabajo Futuro

6.1. Conclusiones
Como se ha comentado en la introducción, el objetivo de la tesis doctoral era
el de analizar y poner de manifiesto las posibilidades de un Sistema de Álgebra
Simbólica Computacional para la Dinámica de Sistemas Multi-Cuerpo, DSM ,
basado en un subsistema de Álgebra Simbólica.
Para ello se proponía desarrollar una prueba de concepto basada en el lenguaje
M AT L AB –M APLE .
Así, se ha implementado un lenguaje Simbólico sobre el lenguaje M AT L AB –
M APLE específico para la DSM . Este lenguaje se plasma en la definición de
estructuras de datos y de una serie de funciones y operadores que permiten intro-
ducir sus elementos u operar con estos. Estructuras que han sido definidas a partir
del análisis de la estructura matemática de los problemas de la DSM .
El lenguaje especificado permite la intervención del usuario en la definición
del Sistema Multi-Cuerpo en tres niveles programáticos de abstracción diferen-
ciados y compatibles entre si:

• Sistema Simbólico mínimo: Es la funcionalidad provista por el propio sis-


tema M AT L AB –M APLE sin más funcionalidad añadida.

• Sistema Simbólico DSM de bajo nivel: Permite definir por completo cual-
quier problema DSM . No incluye funciones específicas o librerías asocia-
das a elementos particulares susceptibles de aparecer en la definición del
sistema, como enlaces o fuerzas constitutivas específicas. Su implementa-
ción se basa exclusivamente en el Sistema Simbólico Mínimo.

• Sistema Simbólico DSM de alto nivel: Proporciona al usuario un conjun-


to adicional de funciones específicas para la definición de enlaces, fuerzas
constitutivas más típicas, etc... Se basa en el Sistema Simbólico de bajo ni-
vel y mínimo.
300 Conclusiones y Trabajo Futuro

El lenguaje proporciona además librerías de exportación, a dos niveles:

• Primer nivel: Librerías que generan las diferentes ecuaciones, es decir las
matrices y vectores simbólicos asociados a la formulación analítica de la
DSM .

• Segundo Nivel: Librerías que, a partir de las anteriores, exportan las matri-
ces y vectores anteriores en forma de funciones y variables en un lenguaje
de programación específico.

Finalmente, junto con la librería se proveen una serie de platillas numéricas,


destinadas a la solución de los problemas típicos de la DSM .
L IMITACIONES DE LA IMPLEMENTACIÓN

• El Sistema Simbólico Mínimo M AT L AB –M APLE utilizado para la imple-


mentación está limitado por la no posibilidad de sobrecarga de operadores.
Así, queda limitada la definición de operadores sobre tipos de datos estruc-
turados, como vector y tensor del Álgebra Cartesiana, frente a matriz (1, 3)
y matriz (3, 3) de M AT L AB . Estos tipos de dato, junto con sus operadores,
simplificarían el interfaz que el lenguaje o librería proporciona al usuario.

• La exportación está limitada a el lenguaje de programación M AT L AB nu-


mérico, aunque la exportación a otros lenguajes como C es muy sencillo.

• Pese a que las estructuras de datos soportan el formalismo de las Potencias


Virtuales con toda generalidad, no se ha habilitado la definición de veloci-
dades virtuales arbitrarias para la exportación de las ecuaciones dinámicas.
De esta forma sería posible plantear cualquiera de los subformalismos a los
que este principio puede dar lugar.

• Los sólidos considerados son rígidos. Es decir, en la actualidad, la inclu-


sión de modelos de sólidos derivados del Método de los Elementos Finitos,
MEF , no se considera. No obstante, sí que se contempla la definición de
fuerzas constitutivas producidas por elementos flexibles lineales sin masa.

• La librería no contempla la definición de eventos, ni la definición de valo-


res límites para los valores de las coordenadas en la que podría basarse la
definición de eventos. Tampoco considera la detección de contactos o coli-
siones. No obstante, dichos aspectos pueden ser implementados a nivel del
integrador, utilizando integradores que permitan la definición de eventos en
términos de valores límite de las coordenadas y/o de la detección de la co-
lisión. Evidentemente este último aspecto requeriría de la definición de la
6.1 Conclusiones 301

geometría de la superficie de los sólidos que puedan colisionar, este último


aspecto se dejaría a una librería externa para la detección de colisiones.
• La estructura de funciones u , si bien cumple sin limitaciones las funciones
asignadas, desde un punto de vista conceptual sería más adecuado limitar
su aplicación a la definición de fuerzas exteriores, y desarrollar un tipo de
función específica a utilizar en la definición simbólica de leyes constitutivas.
Esto es debido a la diferente función que juegan y a la diferencia en su
dependencia funcional cuando se tratan como funciones.
• El interfaz para la representación del esquema tridimensional del mecanis-
mo provisto por el programa tiene una funcionalidad limitada. El autor se ha
centrado en los aspectos mecánicos y computacionales del problema. Aun-
que no ha sido explicado con profusión, el programa permite exportar una
estructura de datos con información geométrica de puntos, lineas, vectores y
otras primitivas básicas que permiten representar el mecanismo en el propio
M AT L AB así como interactuar con sistemas de representación de propósito
general. Por citar un ejemplo, a partir de dichos datos han sido realizadas
animaciones utilizando el programa de renderizado P OV R AY [Pov04].

H ECHOS S OBRESALIENTES
Si bien la definición de una librería específica en un determinado lenguaje de
programación para la definición de un Sistema Multi-Cuerpo no es en absoluto
novedosa, el basarse en un lenguaje de programación que incorpore de forma na-
tural los tipos de datos simbólicos como M AT L AB –M APLE , puede considerarse
novedoso, siendo los únicos antecendentes conocidos:

• 3D_M EC [3dM04] presenta una funcionalidad muy reducida que apenas


implementa la parte Cinemática del Sistema de Bajo Nivel y un mínimo de
la Dinámica.
• AUTOLEV [Aut04] es un sistema cerrado que implementa un lenguaje
propio de programación que, si bien provee ciertas capacidades simbólicas,
dista mucho de tener la generalidad, modernidad y facilidad de uso que
presenta el trabajo propuesto.
• M BSYMBA [Mbs03], aunque orientado a la simulación dinámica vehicu-
lar, provee un sistema simbólico para la DSM , similar en filosofía al de
3D_M EC _M AT L AB , que permite plantear las ecuaciones dinámicas em-
pleando los formalismos más comunes. A día de hoy, el código anterior no
permite exportar código a otros lenguajes de programación, por lo que su
entorno de simulación queda limitado a la línea de comandos de M APLE .
302 Conclusiones y Trabajo Futuro

Aunque, como se ha comentado anteriormente, la idea de desarrollo de una


librería para la DSM no es una idea novedosa en si, la implementación propuesta
incorpora ciertas características novedosas que pueden resumirse en los siguientes
puntos:

• La elección del sistema M AT L AB –M APLE presenta ventajas añadidas,


como el amplio reconocimiento y conocimiento que la comunidad cien-
tífica y tecnológica tiene del citado entorno de programación. Además,
3D_M EC _M AT L AB permite la exportación de modelos del sistema mecá-
nico a S IMU L INK , lo que abre un nuevo campo a la librería desarrollada.

• El sistema está basado en código abierto, de hecho se distribuye bajo la


licencia LGPL [Lic04], lo cual permite la extensión de las capacidades del
Sistema Simbólico de Alto Nivel e incluso si fuese necesario del de Bajo
Nivel. El hecho de que tanto el sistema como el interfaz que éste ofrece
al usuario esté basado en el lenguaje M AT L AB , confiere una importante
simplicidad a este proceso.

• La definición de un conjunto de tipos de dato y/o estructuras

Tiempo, Parámetros, Coordenadas y Funciones z (t)

que junto con el operador Derivada Total, constituyen la base para el plan-
teamiento de la Cinemática Analítica.

• La incorporación de estructuras de ecuaciones

Geométricas, No-Holónomas e Iniciales de Posición y Velocidad

que junto con los tipos de dato anteriores, permiten plantear los diferentes
problemas de la Cinemática documentados en el Capítulo 4.

• La definición de un conjunto de tipos de dato y/o estructuras

Vector Cartesiano, Punto, Base y Referencia

que junto con los operadores

Vector de Posición, Cambio de Base y/o Velocidad Angular


6.2 Trabajo Futuro 303

constituyen un Álgebra Cartesiana completa para el trabajo en la DSM .


El resto de operadores como velocidad, aceleración y aceleración angular
pueden plantearse sobre el conjunto de operadores básicos anteriores.
Las estructuras anteriores dotan al sistema de un interfaz programático com-
pletamente cartesiano y afín al lenguaje natural empleado en el plantea-
miento de los diferentes problemas de la Mecánica Clásica. Dicho interfaz
permite desarrollar de forma muy simple y rápida un sistema completamen-
te general, no limitado por el tipo de coordenadas o por el tipo de formula-
ción dinámica.

• La incorporación de las estructuras cartesianas separadas para los torsores


de Inercia, de Enlace y Constitutivos.

• La definición de bajo nivel de la conectividad entre sólidos a partir los co-


rrespondientes torsores de enlace, y en el caso de aparecer, las ecuaciones
de enlace holónomo y no holónomo.

• La incorporación de un algoritmo de bajo nivel que, sin atender a la topo-


logía de los enlaces, es capaz de caracterizar los torsores, siempre que se
aplique el formalismo de Newton-Euler.

• La incorporación de la estructura de funciones u para la representación de


Fuerzas y Momentos Exteriores al Sistema, y para la definición de Leyes
Constitutivas.

• Las estructuras de funciones z y u , de las que se puede prescindir comple-


tamente para plantear el problema, cuando se utilizan, no imponen ninguna
limitación sobre los problemas planteables y abren el código exportado a
la interacción de otros programas como S IMU L INK , o a la posibilidad de
modificar los modelos constitutivos o leyes de movimiento en ecuaciones
rheónomas en el código exportado.

6.2. Trabajo Futuro


A continuación se enumeran los diferentes aspectos teóricos y relativos a la
implementación que quedan pendientes de una mayor profundización y que pue-
den ser objeto de nuevos trabajos de investigación:
A NIVEL S IMBÓLICO

• Incorporación de funciones de alto nivel para la representación de nuevos


pares cinemáticos así como nuevos elementos constitutivos.
304 Conclusiones y Trabajo Futuro

• Incorporación de algoritmos recursivos, tanto en la generación de los dife-


rentes términos que componen las ecuaciones dinámicas como en la expor-
tación de los mismos.

• Incorporación de estructuras y algoritmos de exportación que permitan


plantear y exportar las ecuaciones dinámicas empleando el formalismo de
las Potencias Virtuales sin limitaciones.

• Incorporación de estructuras y algoritmos de exportación que implemen-


ten el concepto de observador, presente en la mayoría de los programas de
propósito general y bastante útil en el contexto de control. La implementa-
ción anterior podría entenderse como extensión del concepto de coordenada
auxiliar.

• Incorporación de estructuras y algoritmos de exportación que implementen


el concepto de subsistema, muy útil en entornos de simulación orientados
al control de sistemas dinámicos como S IMU L INK .

• Extensión de la formulación planteada para contemplar problemas de coli-


sión.

• Incorporación de estructuras y algoritmos de exportación para la resolución


de Sistemas Multi-Cuerpo Flexibles. Aunque no se incluye en el contenido
de la presente Tesis Doctoral, se han realizado pruebas de implementación
de las formulaciones más comunes:
• Referencia Flotante: adoptada como solución en varios paquetes co-
merciales como A DAMS [Mec99] o S IM PACK [Wal95], permite hacer
uso de la información obtenida mediante programas MEF de propósi-
to general como NASTRAN [Nas04] o ANSYS [Ans04], pero su uso
queda limitado a problemas de pequeñas deformaciones.
• Coordenadas Nodales Absolutas: adoptada como solución para casos
en los que se producen grandes deformaciones, exige una reformula-
ción de los elementos, [Sha98], que normalmente limita la interacción
con códigos MEF de propósito general como los mencionados en el
párrafo anterior.
En cualquier caso, la definición de un sólido flexible implica completar el
tipo de dato sólido con un campo específico para recoger la información
MEF , y extender el algoritmo de cálculo de la fuerza generalizada de iner-
cia a este nuevo caso. La utilización de formalismos flexibles específicos co-
mo la representación de la deformabilidad del sólido mediante coordenadas
modales se delegaría al exportador. En este contexto, el Sistema Simbólico
de bajo nivel gozaría de total generalidad de cara al planteamiento de las
ecuaciones de Sistemas Multi-Cuerpo Flexibles.
6.2 Trabajo Futuro 305

• Extensión del módulo de exportación a otros lenguajes de programación co-


mo C o F ORTRAN . Dicha extensión podría llevarse a cabo bien ampliando
la capacidad actual del módulo de exportación, o bien haciendo uso de he-
rramientas como P ERL [Wal00].

• Con el fin de evitar la limitación del entorno simbólico de M AT L AB a la


hora de definir nuevos tipos de dato, el sistema simbólico completo podría
portarse a un lenguaje programación orientado a objetos como C++ [Str00].
En tal caso, el sistema de Álgebra Simbólica podría implementarse con ayu-
da de librerías para cálculo simbólico como G INAC [Gin04].

A NIVEL N UMÉRICO

• Traducción de las plantillas de resolución de los problemas cinemáticos y


dinámicos presentados en el Capítulo 4 a otros lenguajes de programación
como C o F ORTRAN .
• Mejora de los actuales algoritmos para la simulación dinámica en coordena-
das independientes y para el tratamiento eficiente de las variables auxiliares.
• Implementación eficiente y/o paralelización de algoritmos para la simula-
ción y control en tiempo real.
• Implementación de algoritmos para la simulación y control de Sistemas
Multi-Cuerpo Flexibles.

A NIVEL DE I NTERFAZ DE U SUARIO

• Interacción con programas de tipo CAD y/o implementación de un interfaz


gráfico que permita definir sólidos y caracterizar uniones entre los mismos
como alternativa a su definición en línea de comandos.

• Interacción con programas de tipo MEF y/o implementación de un interfaz


gráfico que permita procesar los modelos flexibles antes de ser incluidos en
la formulación. Aunque no se incluye en el contenido de la presente Te-
sis Doctoral, se han realizado pruebas de Caracterización Modal de Sólidos
Flexibles con ayuda de ANSYS [Inc95] y M AT L AB [Mat02a] que sirvieron
como trabajo de investigación del autor y cuyos resultados pueden apreciar-
se en la referencia [Gil01].

• Interacción en tiempo de simulación con librerías y/o estándares de repre-


sentación gráfica como O PEN G L [OP04] y VRML [VR97], que permitan
al usuario visualizar el mecanismo con mayor calidad.
306 Conclusiones y Trabajo Futuro

• Incorporación de rutinas que permitan controlar cómodamente el formato y


la cantidad de información a generar desde el interfaz numérico en la etapa
de simulación del mecanismo.

• Incorporación de nuevas rutinas, basadas éstas en las propias primitivas de


representación M AT L AB , que faciliten al usuario la etapa de post-proceso.
Anexo A

A.1. Inicialización de la librería 3D_M EC _M AT L AB


Listado de la rutina de inicialización environment
La rutina environment se encarga de actualizar la variable path de M AT-
L AB para que todas las funciones de la librería simbólica sean accesibles para el
usuario.
1 if isunix,
2 addpath routines/exports;
3 addpath routines/news;
4 addpath routines/grs;
5 addpath routines/auxs;
6 addpath routines/implicits;
7 addpath routines/adds;
8 addpath routines/op_primitives;
9 addpath routines/small_rotations;
10 addpath routines;
11 else,
12 addpath routines\exports;
13 addpath routines\news;
14 addpath routines\grs;
15 addpath routines\auxs;
16 addpath routines\implicits;
17 addpath routines\adds;
18 addpath routines\op_primitives;
19 addpath routines\small_rotations;
20 addpath routines;
21 end

En este caso la cadena de caracteres routines representa la ruta o path


absoluto donde la librería simbólica se encuentra instalada.

Listado de la rutina de inicialización initialize


La rutina initialize se encarga de inicializar las variables y estructuras
que sirven de base al planteamiento simbólico del problema mecánico.
1 %%%%%%%%%%%%%%%%%%%%%%%%%%%
2 % Definición de variables %
308 Anexo A

3 %%%%%%%%%%%%%%%%%%%%%%%%%%%
4
5 % CINEMÁTICA
6 %%%%%%%%%%%%
7
8 % Cinemática Analítica
9 %%%%%%%%%%%%%%%%%%%%%%
10
11 % Tiempo
12
13 global t
14
15 % Parámetros
16
17 global params
18 global auto_params
19
20 % Coordenadas Generalizadas
21
22 global qs
23
24 % Velocidades Generalizadas
25
26 global dqs
27
28 % Aceleraciones Generalizadas
29
30 global ddqs
31 global auto_qs
32
33 % Funciones del tiempo, en general
34
35 global zs
36
37 % Derivadas de las anteriores
38
39 global dzs
40
41 % Derivadas de las anteriores
42
43 global ddzs
44 global auto_zs
45
46 % Funciones de excitación
47
48 global us
49 global auto_us
50
51 % Pequeñas Variables (diferenciales)
A.1 Inicialización de la librería 3D_M EC _M AT L AB 309

52
53 global smalls
54 global auto_smalls
55
56 % Ecuaciones Cinemáticas
57 %%%%%%%%%%%%%%%%%%%%%%%%
58
59 % Ecuaciones Geométricas
60
61 global Cp
62 global auto_Cp
63
64
65 % Ecuaciones Iniciales de Posición
66
67 global Cpini
68 global auto_Cpini
69
70
71 % Ecuaciones No Holónomas
72
73 global Cv
74 global auto_Cv
75
76 % Ecuaciones Iniciales de Velocidad
77
78 global Cvini
79 global auto_Cvini
80
81 % Interfaz Cinemático Cartesiano
82 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
83
84 % Puntos
85
86 global pts
87 global auto_pts
88
89 % Bases
90
91 global ors
92 global auto_ors
93
94 % Referencias
95
96 global refs
97 global auto_refs
98
99 % DINÁMICA
100 %%%%%%%%%%
310 Anexo A

101
102 % Dinámica Analítica
103 %%%%%%%%%%%%%%%%%%%%
104
105 % Incógnitas de enlace
106
107 global trscs;
108 global auto_trscs;
109
110 % Multiplicadores de Lagrange (ecs. geométricas)
111
112 global lmbps;
113 global auto_lmbp;
114
115 % Multiplicadores de Lagrange (ecs. no holónomas)
116
117 global lmbvs;
118 global auto_lmbv;
119
120 % Ecuaciones Dinámicas
121 %%%%%%%%%%%%%%%%%%%%%%
122
123 global DynEqs
124 global auto_DynEq
125
126
127 % Interfaz Dinámico Cartesiano
128 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
129
130 % Tensores
131
132 global tensors
133 global auto_tensors
134
135 % Sólidos
136
137 global bodies
138 global auto_bodies
139
140
141 % Torsores de Inercia
142
143 global itrss;
144 global auto_itrss;
145
146 % Torsores de Enlace
147
148 global etrss;
149 global auto_etrss;
A.1 Inicialización de la librería 3D_M EC _M AT L AB 311

150
151 % Torsores Constitutivos y de otros tipos
152
153 global ctrss;
154 global auto_ctrss;
155
156 % Pares cinemáticos
157
158 global joints
159 global auto_joints
160
161 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
162 % Incialización de estructuras %
163 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
164
165 % CINEMÁTICA
166 %%%%%%%%%%%%
167
168 % Cinemática Analítica
169 %%%%%%%%%%%%%%%%%%%%%%
170
171 syms t real
172
173 auto_params=0;
174 auto_qs=0;
175 auto_zs=0;
176 auto_us=0;
177 auto_smalls=0;
178
179
180 % Ecuaciones Cinemáticas
181 %%%%%%%%%%%%%%%%%%%%%%%%
182
183 auto_Cp=0;
184 auto_Cv=0;
185 auto_Cpini=0;
186 auto_Cvini=0;
187
188 % Interfaz Cinemático Cartesiano
189 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
190
191 null_vector=sym(zeros(3,1));
192 null_tensor=sym(zeros(3,3));
193 I3_matrix=sym(eye(3));
194
195 % Definición del punto ’org0’
196
197 auto_pts=1;
198
312 Anexo A

199 pts(auto_pts).id=2;
200 pts(auto_pts).name=’org0’;
201 pts(auto_pts).pt_ptr=1;
202 pts(auto_pts).or_ptr=1;
203 pts(auto_pts).lcoords=null_vector;
204
205 % Definición de la base ’or0’
206
207 auto_ors=1;
208
209 ors(auto_ors).id=3;
210 ors(auto_ors).name=’or0’;
211 ors(auto_ors).type=1;
212 ors(auto_ors).or_ptr=1;
213 ors(auto_ors).matrix=I3_matrix;
214 ors(auto_ors).local_omega=null_vector;
215 ors(auto_ors).global_omega=null_vector;
216
217 % Definición de la referencia ’ref0’
218
219 auto_refs=0;
220 new_ref(’ref0’, ’org0’, ’or0’);
221
222 % DINÁMICA
223 %%%%%%%%%%
224
225 % Dinámica Analítica
226 %%%%%%%%%%%%%%%%%%%%
227
228 auto_trscs=0;
229 auto_lmbp=0;
230 auto_lmbv=0;
231
232 % Ecuaciones Dinámicas
233 %%%%%%%%%%%%%%%%%%%%%%
234
235 auto_DynEq=0;
236
237 % Interface Dinámico Cartesiano
238 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
239
240 auto_tensors=0;
241 auto_bodies=0;
242
243 % Definición del sólido ’body0’
244
245 new_tensor(’zero_tensor’, ’org0’, ’or0’, null_tensor);
246 new_body(’body0’, ’ref0’, ’org0’);
247
A.1 Inicialización de la librería 3D_M EC _M AT L AB 313

248 % Torsores
249
250 auto_ctrss=0;
251 auto_etrss=0;
252 auto_itrss=0;
253
254 % Pares Cinemáticos
255
256 auto_joints=0;

Todas las variables que aparecen en el listado anterior deberán entenderse co-
mo variables reservadas por la librería para su correcto funcionamiento.
314 Anexo A

A.2. Plantillas numéricas para la simulación Dinámica


Listado de la plantilla lagrange_num
1 % modificación del path de matlab
2
3 num_environment;
4
5 %%%%%%%%%%%%%%%%%%%%
6 % PROBLEMA INICIAL %
7 %%%%%%%%%%%%%%%%%%%%
8
9 % inicializa vectores
10 %%%%%%%%%%%%%%%%%%%%%
11
12 t0=0;
13 inc=1e-2;
14 tf=4;
15
16 prm = prm_init
17 q = q_init
18 dq = dq_init
19 ddq = ddq_init
20 lmb = lmb_init
21 lmbp = lmbp_init
22 epsln = epsln_init
23
24 % tolerancias del solver de posición
25 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
26
27 relax=.25;
28 nmax=300;
29 tol=1e-13;
30
31 % problema de posición inicial
32 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
33
34 [q]=solve_initial_position(prm, q, t0, relax, nmax, tol);
35
36 % problema de velocidad incicial
37 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
38
39 [dq]=solve_initial_velocity(prm, q, dq, t0);
40
41 % problema de aceleración incicial (Lagrange)
42 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
43
44 [ddq, lmb]=solve_lagrange_acceleration(prm, q, dq, ddq, ...
45 lmb, t0, 1e4*tol);
A.2 Plantillas numéricas para la simulación Dinámica 315

46
47 %%%%%%%%%%%%%%%%%%%%%%%%%%%
48 % SIMULACIÓN EN EL TIEMPO %
49 %%%%%%%%%%%%%%%%%%%%%%%%%%%
50
51 count=0;
52
53 for t=t0:inc:tf,
54
55 count=count+1;
56
57 [q, dq, ddq, lmb]=lagrange_ode_solver(prm, q, dq, ddq, ...
58 lmb, t, inc, relax, nmax, tol);
59
60
61 qs(count,:)=q’;
62 dqs(count,:)=dq’;
63 ddqs(count,:)=ddq’;
64
65 end

Listado de la plantilla euler_num


1 % modificación del path the matlab
2
3 num_environment;
4
5 %%%%%%%%%%%%%%%%%%%%
6 % PROBLEMA INICIAL %
7 %%%%%%%%%%%%%%%%%%%%
8
9 % inicializa vectores
10 %%%%%%%%%%%%%%%%%%%%%
11
12 t0=0;
13 inc=1e-2;
14 tf=4;
15
16 prm = prm_init
17 q = q_init
18 dq = dq_init
19 ddq = ddq_init
20 lmb = lmb_init
21 lmbp = lmbp_init
22 epsln = epsln_init
23
24 % tolerancias del solver de posición
25 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
26
316 Anexo A

27 relax=.25;
28 nmax=300;
29 tol=1e-13;
30
31 % problema de posición inicial
32 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
33
34 [q]=solve_initial_position(prm, q, t0, relax, nmax, tol);
35
36 % problema de velocidad incicial
37 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
38
39 [dq]=solve_initial_velocity(prm, q, dq, t0);
40
41 % problema de aceleración incicial (Euler)
42 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
43
44 [ddq, epsln]=solve_euler_acceleration(prm, q, dq, ddq,...
45 epsln, t0, 1e4*tol);
46
47
48 %%%%%%%%%%%%%%%%%%%%%%%%%%%
49 % SIMULACIÓN EN EL TIEMPO %
50 %%%%%%%%%%%%%%%%%%%%%%%%%%%
51
52 count=0;
53
54 for t=t0:inc:tf,
55
56 count=count+1;
57
58 [q, dq, ddq, epsln]=euler_ode_solver(prm, q, dq, ddq,...
59 epsln, t, inc, relax, nmax, tol);
60
61 qs(count,:)=q’;
62 dqs(count,:)=dq’;
63 ddqs(count,:)=ddq’;
64 epslns(count,:)=epsln’;
65
66 end
A.3 Plantilla numérica para el Problema de Equilibrio 317

A.3. Plantilla numérica para el Problema de Equilibrio


Listado de la plantilla equilibrium_num
1 % modificación del path the matlab
2
3 num_environment;
4
5 %%%%%%%%%%%%%%%%%%%%
6 % PROBLEMA INICIAL %
7 %%%%%%%%%%%%%%%%%%%%
8
9 % inicializa vectores
10 %%%%%%%%%%%%%%%%%%%%%
11
12 t0=0;
13
14 prm = prm_init;
15 q = q_init;
16 lmbp = lmbp_init;
17
18 % tolerancias del solver de posición
19 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
20
21 relax=0.75;
22 nmax=300;
23 tol=1e-7;
24
25 % resuelve la posición inicial
26 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
27
28 q=solve_initial_position(prm, q, t0, relax, nmax, tol);
29
30 % resuelve la posición de equilibrio
31 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
32
33 q=solve_equilibrium_position(prm, q, lmbp, t0, relax, nmax, tol)
34
35 % (punto de partida: posición inicial)

Listado de la plantilla solve_equilibrium_position


1 function [new_q]=solve_equilibrium_position(prm, q, lmbp, t, ...
2 relax, nmax, tol)
3
4 % tamaño de los vectores q y lmbp (multiplicadores asociados a
5 % las ecuaciones geométricas)
6
7 nq=size(q,1);
318 Anexo A

8 nlmbp=size(lmbp,1);
9
10 % guarda el vector de entrada
11
12 q_ini = q;
13
14 if (norm(equeqs(prm, q, lmbp, t))~=0),
15
16 % inicializa el método
17
18 Jp_num=Jequeqs(prm, q, lmbp, t);
19 cv=equeqs(prm, q, lmbp, t);
20
21 deltaq=zeros(nq,1);
22 deltalmb=zeros(nlmbp,1);
23
24 itnum=0;
25
26 % aplica el método de Newton-Rhapson
27
28 while (norm(cv) > tol),
29
30 itnum=itnum+1;
31
32 if itnum > nmax,
33
34 % devuelve el vector de entrada
35
36 disp(’The equilibrium problem has not good convergence.’)
37 new_q=q_ini;
38
39 return;
40
41 end
42
43 % resuelve los incrementos
44
45 [deltaq, dltlmb,p,r]=myqreq(Jp_num, deltaq, dltlmb, ...
46 -cv, tol);
47
48 % aplica los incrementos
49
50 q = q + relax*deltaq;
51 lmbp = lmbp + relax*dltlmb;
52
53 % error admisible ?
54
55 Jp_num=Jequeqs(prm, q, lmbp, t);
56 cv=equeqs(prm, q, lmbp, t);
A.3 Plantilla numérica para el Problema de Equilibrio 319

57
58 end
59
60 end
61
62 new_q = q;

Listado de la plantilla equeqs


1 function eqs=equeqs(prm, q, lmbp, t)
2
3 % velocidad y aceleración = \vec{0}
4
5 dq=zeros(size(q)); ddq=zeros(size(q));
6
7 % se evalúa z en el instante t
8
9 z=zetas(prm, t);
10
11 % se evalúa u en el instante t
12 % u = 0 para fuentes externas !
13
14 u=ues(prm, q, dq, t); u=zeros(size(u));
15
16 % error en las ecuaciones geométricas
17
18 pos_er = Cp(prm, q, z, t);
19
20 % error en las ecuaciones dinámicas
21
22 dyn_er = Ql(prm, q, dq, u, t)-Jp(prm, q, z, t)’*lmbp;
23
24 eqs=[dyn_er; pos_er];

Listado de la plantilla Jequeqs


1 function J=Jequeqs(prm, q, lmbp, t)
2
3 % velocidad y aceleración = \vec{0}
4
5 dq=zeros(size(q)); ddq=zeros(size(q));
6
7 % se evalúa z en el instante t
8
9 z=zetas(prm, t);
10
11 % se evalúa u en el instante t
12 % u = 0 para fuentes externas !
13
320 Anexo A

14 u=ues(prm, q, dq, t); u=zeros(size(u));


15
16 % matriz de rigidez del sistema, [d/dq(Ql)]
17
18 JQlm = JQl_eq(prm, q, u, t);
19
20 % término [d/dq(Jp’*lmbp)]
21
22 JJpm = JJplmbq(prm, q, z, lmbp, t);
23
24 % Jacobiano de posición
25
26 Jpm = Jp(prm, q, z, t);
27
28 zero=zeros(size(Jpm,1),size(Jpm,1));
29
30
31 J=[ JQlm-JJpm, -Jpm’;
32 Jpm , zero];
A.4 Plantilla numérica para el Problema Modal 321

A.4. Plantilla numérica para el Problema Modal


Listado de la plantilla natural_modes
1 % modificación del path the matlab
2
3 num_environment;
4
5 % inicializa vectores
6 %%%%%%%%%%%%%%%%%%%%%
7
8 t0=0;
9
10 prm = prm_init;
11 q = q_init;
12 lmbp = lmbp_init;
13
14 % tolerancias del solver de posición
15 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
16
17 relax=0.75;
18 nmax=300;
19 tol=1e-7;
20
21 % resuelve la posición inicial
22 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
23
24 q=solve_initial_position(prm, q, t0, relax, nmax, tol);
25
26 % resuelve la posición de equilibrio
27 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
28
29 q_eq=solve_equilibrium_position(prm, q, lmbp, t0, relax, ...
30 nmax, tol)
31
32 % evalúa la matriz de masa en q=q_eq
33 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
34
35 Mass=Ml(prm,q_eq);
36
37 % evalúa la matriz de rigidez en q=q_eq
38 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
39
40 % se evalúa u en el instante t0
41 % u = 0 para fuentes externas !
42
43 u=ues(prm, q, dq, t0); u=zeros(size(u));
44
45 JQlm= -JQl_eq(prm, q_eq, u, t0);
322 Anexo A

46
47 % selecciona coordenadas independientes
48 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
49
50 z=zetas(prm, t0);
51
52 Jpm = Jp(prm, q_eq, z, t0);
53
54 [Q,R,p]=qr(Jpm,0);
55
56 ra=rank(R);
57
58 Rdd=R(1:ra,1:ra);
59 Rii=R(1:ra,ra+1:end);
60
61 % construye la matriz S_eq
62 %%%%%%%%%%%%%%%%%%%%%%%%%%
63
64 Seq=[-Rdd\Rii;eye(size(Rii,2))];
65
66 % re-construye la matriz M
67 %%%%%%%%%%%%%%%%%%%%%%%%%%
68
69 Mi=Seq’*Mass(p,p)*Seq;
70
71 % re-construye la matriz K
72 %%%%%%%%%%%%%%%%%%%%%%%%%%
73
74 Ki=Seq’*JQlm(p,p)*Seq;
75
76 % problema generalizado de vectores y
77 % valores propios: Choleski para matriz
78 % de masa simétrica y definida positiva
79 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
80
81 [Vi, D]=eig(Ki, Mi, ’chol’);
82
83 % omega(rad/s)=2*pi*f_nat(Hz)
84 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
85
86 omega=sqrt(diag(D));
87
88
89 % filtra modos sólido rígido
90 %%%%%%%%%%%%%%%%%%%%%%%%%%%%
91
92 rep=0;
93
94 for i=1:1:size(omega,1),
A.4 Plantilla numérica para el Problema Modal 323

95
96 if (omega(i) < 1e-3),
97
98 % modos de sólido rígido
99
100 omega(i)=0;
101
102 else
103
104 rep=rep+1; irep(rep)=i;
105
106 end
107 end
108
109 omega=omega(irep);
110
111 % extrae modos de la matriz de modos, Vi
112 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
113
114 V=Vi(:, irep);
115
116 % expande modos q_i -> q
117 %%%%%%%%%%%%%%%%%%%%%%%%
118
119 modes(p,:)=Seq*V;
120
121
122
123 % proyecta modos sobre la posición de equilibrio
124 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
125
126 Amp=0.25;
127
128 nm=size(irep,2);
129
130 for i=1:1:nm, auxq(:,i)=q_eq; end
131
132 mode_matrix=auxq+Amp*modes;
324 Anexo A

A.5. Wrapper general para la Ode Suite de M AT L AB


Listado de la función matlab_num.m
1 function [t,y]=matlab_num(solver, tspan)
2
3 if (nargin==1),
4 tspan = 0:.01:2;
5 elseif(nargin<1),
6 error(’Too few arguments !’);
7 end
8
9 % modificación del path de matlab
10
11 num_environment
12
13 %%%%%%%%%%%%%%%%%%%%
14 % PROBLEMA INICIAL %
15 %%%%%%%%%%%%%%%%%%%%
16
17 % inicializa vectores
18 %%%%%%%%%%%%%%%%%%%%%
19
20 t0=0;
21
22 prm = prm_init;
23 q = q_init;
24 dq = dq_init;
25 ddq = ddq_init;
26 lmbp = lmbp_init;
27 lmb = lmb_init;
28 epsln= epsln_init;
29
30 % tolerancias del solver de posición
31 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
32
33 relax=.75;
34 nmax=200;
35 tol=1e-8;
36
37 % tolerancias para el solver de velocidad y aceleración
38 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
39
40 tolv=1e-8;
41 tola=1e-8;
42
43 % problema de posición inicial
44 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
45
A.5 Wrapper general para la Ode Suite de M AT L AB 325

46 q=solve_initial_position(prm, q, t0, relax, nmax, tol);


47
48 % problema de velocidad incicial
49 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
50
51 dq=solve_initial_velocity(prm, q, dq, t0);
52
53 %%%%%%%%%%%%%%%%%%%%%%%%%%%
54 % SIMULACIÓN EN EL TIEMPO %
55 %%%%%%%%%%%%%%%%%%%%%%%%%%%
56
57 % vector de estado
58 %%%%%%%%%%%%%%%%%%
59
60 y0=[q; dq];
61
62 % opciones del integrador
63 %%%%%%%%%%%%%%%%%%%%%%%%%
64
65 options = odeset(’AbsTol’, 1e-6, ’RelTol’, 1e-4, ...
66 ’Stats’, ’on’, ’InitialStep’, 1e-2, ...
67 ’OutputFcn’, @odeplot);
68
69 tic
70
71 switch solver
72
73 case ’ode23’,
74 [t, y]=ode23(@f, tspan, y0, options, prm, tolv, tola);
75 case ’ode23s’,
76 [t, y]=ode23s(@f, tspan, y0, options, prm, tolv, tola);
77 case ’ode23t’,
78 [t, y]=ode23t(@f, tspan, y0, options, prm, tolv, tola);
79 case ’ode45’,
80 [t, y]=ode45(@f, tspan, y0, options, prm, tolv, tola);
81 case ’ode15s’,
82 [t, y]=ode15s(@f, tspan, y0, options, prm, tolv, tola);
83 otherwise
84 error(’Unknown solver !’);
85
86 end
87
88 toc
89
90 %%%%%%%%%%%%%%%%%%%%%%%%%%
91 % FUNCIÓN DEL INTEGRADOR %
92 %%%%%%%%%%%%%%%%%%%%%%%%%%
93
94 function dydt = f(t, y, prm, tolv, tola)
326 Anexo A

95
96 dydt=matlab_odefun(t, y, prm, tolv, tola);

Listado de la función matlab_odefun.m


Aunque podría corregirse en velocidades, el error del integrador se estabiliza
empleando la corrección de Baumgarte en la función matlab_ba.m .
1 function dydt = matlab_odefun(t, y, prm, tolv, tola)
2
3 if (nargin==3),
4 tolv=1e-10;
5 tola=1e-8;
6 end
7
8 nq=size(y,1)/2;
9
10 q=y(1:nq,1);
11 dq=y(nq+1:end,1);
12
13 [ddq, algv]=solve_matlab_acceleration(prm, q, dq, ...
14 zeros(size(q)), algv_init, t, tola);
15
16 % algv representa cualquier vector de variables algebraicas,
17 % ya sea lmb (lambda) o epsln (epsilon)
18
19 dydt=[dq;ddq];

Listado de la función solve_matlab_acceleration.m


1 function [ddq, algv]=solve_matlab_acceleration(prm, q, dq, ...
2 ddq_ant, algv_ant, t, tol)
3
4 % algv representa cualquier vector de variables algebraicas
5 % ya sea lmb (lambda) o epsln (epsilon)
6
7 nq=size(q,1);
8
9 z = zetas(prm, t);
10 dz = dzetas(prm, t);
11 ddz = ddzetas(prm, t);
12
13 u = ues(prm, q, dq, t);
14
15 Ja_num=matlab_A(prm, q, z, t);
16 Ba=matlab_B(prm, q, dq, u, z, dz, ddz, t);
17
18 solv=[ddq_ant; algv_ant];
A.5 Wrapper general para la Ode Suite de M AT L AB 327

19
20 [solv, p , r]=qr_n_m(Ja_num, solv, Ba);
21
22 ddq=solv(1:nq,1);
23 algv=solv(nq+1:end,1);

Listado de la función matlab_A.m


Varía dependiendo del formalismo empleado en el planteamiento de las ecua-
ciones dinámicas. En este caso se resuelve por Euler.
1 function [Am]=matlab_A(prm, q, z, t)
2
3 nq=size(q,1);
4
5 V= Ve(prm, q);
6 M= Me(prm, q);
7
8 ntrsc=size(V,2);
9
10 phiq=Jv(prm, q, z, t);
11
12 nrest=size(phiq,1);
13
14 zero=zeros(nrest, ntrsc);
15
16 Am=[M , V ;
17 phiq , zero ];

Listado de la función matlab_B.m


Varía dependiendo del formalismo empleado en el planteamiento de las ecua-
ciones dinámicas. En este caso se resuelve por Euler.
1 function [B_vector]=matlab_B(prm, q, dq, u, z, dz, ddz, t)
2
3 B_vector=[Qe(prm, q, dq, u, t);
4 matlab_ba(prm, q, dq, z, dz, ddz, t)];

Listado de la función matlab_ba.m


La corrección de Baumgarte permite estabilizar el error de posición. Los va-
lores de α y β deben elegirse de forma apropiada en cada problema.
1 function [bav]=matlab_ba(prm, q, dq, z, dz, ddz, t)
2
3 % se seleccionan los parámetros
4
328 Anexo A

5 alpha=10;
6 beta=20;
7
8 % se evalúan los términos de corrección
9
10 Bg1 = beta^2*Cp(prm, q, z, t);
11 Bg2 = 2*alpha*(Jv(prm, q, z, t)*dq-bv(prm, q, z, dz, t));
12
13 % se aplica la corrección de Baumgarte
14
15 bav= ba(prm, q, dq, z, dz, ddz, t) - Bg1 - Bg2;
A.6 Wrapper general para la para S IMU L INK 329

A.6. Wrapper general para la para S IMU L INK


Listado del modelo dinámico modelo.mdl
En este caso, únicamente se mostrará lo necesario. El modelo puede adaptarse
de forma sencilla con ayuda del interface gráfico de S IMU L INK .
1 Model {
2
3 Name "modelo"
4
5 ................................
6
7 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8 % Parámetros del integrador %
9 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
10
11 SimulationMode "normal"
12 Solver "solver"
13 SolverMode "Auto"
14 StartTime "0.0"
15 StopTime "60"
16 RelTol "1e-4"
17 AbsTol "auto"
18 OutputTimes "[0:.05:60]"
19
20 System {
21
22 Name "modelo"
23
24 ...............................
25
26 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
27 % Bloque del sistema mecánico %
28 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
29
30 Block {
31 BlockType "S-Function"
32 Name "Modelo Dinámico"
33 Ports [1, 1]
34 Position [a, b, c, d]
35 FunctionName "sfuntmpl"
36 Parameters "prm_init, tolv, tola"
37 MaskInitialization "initialize_sizes"
38 MaskIconFrame on
39 MaskIconOpaque on
40 MaskIconRotate "none"
41 MaskIconUnits "autoscale"
42 }
330 Anexo A

43
44 ...............................
45
46 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
47 % Retraso en la lectura del estado %
48 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
49
50 Block {
51 BlockType TransportDelay
52 DelayTime "0.01"
53 InitialInput "0"
54 BufferSize "1024"
55 PadeOrder "0"
56 TransDelayFeedthrough off
57 }
58
59 ...............................
60
61 %%%%%%%%%%%%%%%%%%%%%%
62 % Bloque de comandos %
63 %%%%%%%%%%%%%%%%%%%%%%
64
65 Block {
66 BlockType "S-Function"
67 Name "comandos"
68 Ports [1, 1]
69 Position [a, b, c, d]
70 FunctionName "sfuncom"
71 Parameters "prm_init"
72 }
73 }
74 }

Listado de la función initialize_sizes.m


La función de tipo S correspondiente al modelo dinámico, sfundin ,
se inicializa mediante la función exportada desde el interface simbólico
initalize_sizes.m :
1 function initialize_sizes()
2
3 global nq
4 global nz
5 global nu
6
7 load(’sys_sizes.dat’);
8
9 nq=sys_sizes(1,1);
A.6 Wrapper general para la para S IMU L INK 331

10 nz=sys_sizes(2,1);
11 nu=sys_sizes(3,1);

El cometido de la función anterior es declarar las variables nq (número de


coordenadas generalizadas), nz (número de funciones de tipo z ) y nu (nú-
mero de funciones de tipo u ) como variables globales para que éstas puedan ser
empleadas con su valor original en el resto de las funciones.
La función initialize_sizes construye el array numérico sys_sizes a
partir de la información contenida en el fichero sys_sizes.dat , exportado des-
de el interface simbólico.
El fichero anterior, para el caso particular del ejemplo 5.7, presenta la forma:
1 2 % número de coordenadas generalizadas
2 1 % número de funciones de tipo z(prm,t)
3 1 % número de funciones de tipo u(prm, q, dq, t)

Listado de la función sim_ues.m


La función sim_ues se emplea para encapsular las funciones externas al
modelo dinámico, es decir, z, dz, ddz y u .
1 function sim_u = sim_ues(prm, q, dq, t)
2
3 % Encapsular zs y us
4
5 % sim_u(1:nz,1) -> Vector z
6 % sim_u(nz+1:2*nz,1) -> Vector dz
7 % sim_u(2*nz+1:3*nz,1) -> Vector ddz
8 % sim_u(3*nz+1:3*nz+nu,1) -> Vector u
9
10 z = zetas(prm, t);
11 dz = dzetas(prm, t);
12 ddz = ddzetas(prm, t);
13
14 u = ues(prm, q, dq, t);
15
16 sim_u=[z ; dz ; ddz ; u ];

Listado de la función desim_ues.m


La función desim_ues se emplea para desencapsular las funciones anterio-
res.
1 function [z, dz, ddz, uv] = desim_ues(u)
2
3 global nz
332 Anexo A

4 global nu
5
6 z=u(1:nz,1);
7 dz=u(nz+1:2*nz,1);
8 ddz=u(2*nz+1:3*nz,1);
9
10 uv=u(3*nz+1:3*nz+nu,1);

Listado de la función sfuncom.m


La función sfuncom se emplea para encapsular las funciones de control,
u e introducirlas como función de tipo S en el bucle de control del modelo
modelo.mdl .

1 function [sys,x0,str,ts] = sfuncom(t,x,u,flag, prm)


2
3 switch flag,
4
5 case 0
6
7 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8 % Inicialización del modelo %
9 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
10
11 [sys,x0,str,ts]=mdlInitializeSizes;
12
13 case 3
14
15 %%%%%%%%%%%%%%%%%%%%%%%%%%
16 % Salida del controlador %
17 %%%%%%%%%%%%%%%%%%%%%%%%%%
18
19 sys=mdlOutputs(t,x,u, prm);
20
21 case { 1, 2, 4, 9 }
22
23 %%%%%%%%%%%%%%%%%%%
24 % Unhandled flags %
25 %%%%%%%%%%%%%%%%%%%
26
27 sys=[];
28
29 otherwise
30
31 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
32 % Unexpected flags (error handling) %
33 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
34
A.6 Wrapper general para la para S IMU L INK 333

35 error([’Unhandled flag = ’,num2str(flag)]);


36
37 end
38
39 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
40 % Inicialización del modelo %
41 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
42
43 function [sys,x0,str,ts] = mdlInitializeSizes()
44
45 global nz % Dimensión del vector z
46 global nu % Dimensión del vector u
47 global nq % Dimensión del vector q
48
49 sizes = simsizes;
50 sizes.NumContStates = 0;
51 sizes.NumDiscStates = 0;
52 sizes.NumOutputs = 1+3*nz+nu; % Dimensión de ’sim_ues’.
53 sizes.NumInputs = 2*nq; % Dimensión de [q, dq]’.
54 sizes.DirFeedthrough = 1;
55 sizes.NumSampleTimes = 1; % Al menos 1.
56
57 sys = simsizes(sizes);
58 str = [];
59 x0 = [];
60 ts = [-1 0];
61
62 %%%%%%%%%%%%%%%%%%%%%%%%%%
63 % Salida del controlador %
64 %%%%%%%%%%%%%%%%%%%%%%%%%%
65
66 function sys = mdlOutputs(t,x,u, prm)
67
68 global nq % Dimensión del vector q
69
70 q = u(1:nq, 1);
71 dq = u(nq+1:end, 1);
72
73 sys = sim_ues(prm, q, dq, t);

Listado de la función sfundin.m


La función sfundin se emplea para encapsular el sistema mecánico e intro-
ducirlo como función de tipo S en el modelo modelo.mdl .
1 function [sys,x0,str,ts] = sfundin(t,x,u,flag, prm, tolv, tola)
2
3 switch flag,
4
334 Anexo A

5 case 0,
6
7 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8 % Inicialización del modelo %
9 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
10
11 [sys,x0,str,ts]=mdlInitializeSizes;
12
13 case 1,
14
15 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
16 % Derivada del vector de estado %
17 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
18
19
20 sys=mdlDerivatives(t, x, u, prm, tolv, tola);
21
22 case {2,4,9}
23
24 %%%%%%%%%%
25 % Update %
26 %%%%%%%%%%
27
28 sys=[];
29
30 case 3,
31
32 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
33 % salida (vector de estado) %
34 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
35
36 sys=mdlOutputs(t, x, u, prm);
37
38
39 otherwise
40
41 %%%%%%%%%%%%%%%%%%%%
42 % Unexpected flags %
43 %%%%%%%%%%%%%%%%%%%%
44
45 error([’Unhandled flag = ’,num2str(flag)]);
46
47 end
48
49 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
50 % Inicialización del modelo %
51 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
52
53 function [sys,x0,str,ts]=mdlInitializeSizes
A.6 Wrapper general para la para S IMU L INK 335

54
55 global nq % Dimensión del vector q
56 global nz % Dimensión del vector z
57 global nu % Dimensión del vector u
58
59 sizes = simsizes;
60
61 sizes.NumContStates = 2*nq; % Dimensión de [q, dq].
62 sizes.NumDiscStates = 0; % Es un modelo contínuo.
63 sizes.NumOutputs = 2*nq; % Dimensión de [q, dq].
64 sizes.NumInputs = 3*nz+nu; % Dimensión de ’sim_ues’.
65 sizes.DirFeedthrough = 1;
66 sizes.NumSampleTimes = 1; % Al menos 1.
67
68 sys = simsizes(sizes);
69
70 % vector de estado inicial
71 %%%%%%%%%%%%%%%%%%%%%%%%%%
72
73 x0 = initial_state;
74
75 % otros vectores (defecto)
76 %%%%%%%%%%%%%%%%%%%%%%%%%%
77
78 str = [];
79
80 ts = [0 0];
81
82 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
83 % Función que devuelve la derivada del vector de estado %
84 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
85
86 function sys=mdlDerivatives(t, x, u, prm, tolv, tola)
87
88 sys = sim_odefun(t, x, u, prm, tolv, tola);
89
90 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
91 % Función de salida del bloque (en este caso, el estado) %
92 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
93
94 function sys=mdlOutputs(t,x,u, prm)
95
96 sys = x ;

Listado de la función initial_state.m


La función initial_state se emplea para inicializar los valores de la fun-
ción sfundin.m al comenzar la simulación del modelo.
336 Anexo A

1 function [y0]=initial_state()
2
3 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4 % Actualizar el path de Matlab %
5 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
6
7 num_environment
8
9 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
10 % Inicializar valores de los vectores analíticos %
11 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
12
13 prm = prm_init;
14 q = q_init;
15 dq = dq_init;
16 ddq = ddq_init;
17 lmbp = lmbp_init;
18 lmb = lmb_init;
19 epsln= epsln_init;
20
21 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
22 % Tolerancias para el solver de posición %
23 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
24
25 relax=.75;
26 nmax=200;
27 tol=1e-8;
28
29 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
30 % Resuelve el problema de posición inicial %
31 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
32
33 q=solve_initial_position(prm, q, 0, relax, nmax, tol);
34
35 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
36 % Resuelve el problema de velocidad incicial %
37 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
38
39 dq=solve_initial_velocity(prm, q, dq, 0);
40
41
42 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
43 % devuelve el vector de estado %
44 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
45
46 y0=[q; dq];
A.6 Wrapper general para la para S IMU L INK 337

Listado de la función sim_odefun.m


La función sim_odefun se emplea para evaluar la derivada del vector de
estado. El integrador se elige en el fichero de definción modelo.mdl .
1 function dxdt = sim_odefun(t, x, u, prm, tolv, tola)
2
3 if (nargin==4),
4 tolv=1e-10;
5 tola=1e-8;
6 end
7
8 % Separar el vector de estado
9
10 nq=size(x,1)/2;
11
12 q=x(1:nq,1);
13 dq=x(nq+1:end,1);
14
15 % Resolver aceleración
16
17 [ddq, algv] = solve_sim_acceleration(prm, q, dq, ...
18 zeros(size(q)), u, algv_init, t, tola);
19
20 % Corregir velocidad
21
22 dq = solve_sim_velocity(prm, q, dq, u, t, tolv);
23
24 dxdt=[dq;ddq];

Listado de la función solve_sim_position.m


La función solve_sim_position se emplea en sustitución de la función
solve_position.m y permite desencapsular el vector sim_ues .
1 function [new_q]=solve_sim_position(prm, q, u, t, relax, nmax, tol)
2
3 % Desencapsular zs y us
4
5 [z, dz, ddz, uv] = desim_ues(u);
6
7 % Resolver el problema de posición
8
9 if (norm(Cp(prm, q, z, t))~=0),
10
11 while norm(Cp(prm, q, z, t)) < tol,
12
13 % Método de Newton Rhapson
14
338 Anexo A

15 end
16
17 end
18
19 new_q= q;

Listado de la función solve_sim_velocity.m


La función solve_sim_velocity se emplea en sustitución de la función
solve_velocity.m y permite desencapsular el vector sim_ues .
1 function [dq]=solve_sim_velocity(prm, q, dq_ant, u, t, tol)
2
3 % Desencapsular zs y us
4
5 [z, dz, ddz, uv] = desim_ues(u);
6
7 % Resolver el problema de velocidad
8
9 ...

Listado de la función solve_sim_acceleration.m


La función solve_sim_acceleration se emplea en sustitución de la
función solve_matlab_acceleration.m y permite desencapsular el vector
sim_ues .
1 function [ddq, algv]=solve_sim_acceleration(prm, q, dq, ...
2 ddq_ant, u, algv_ant, t, tol)
3
4 % Desencapsular zs y us
5
6 [z, dz, ddz, uv] = desim_ues(u);
7
8 % Resolver aceleración
9
10 nq=size(q,1);
11 nl=size(lmb_ant,1);
12
13 solv=[ddq_ant; algv_ant];
14
15 Ja_num=matlab_A(prm, q, z, t);
16 Ba=matlab_B(prm, q, dq, uv, z, dz, ddz, t);
17
18 [solv, p , r]=qr_n_m(Ja_num, solv, Ba);
19
20 ddq=solv(1:nq,1);
21
22 algv=solv(nq+1:end,1);
A.7 Plantillas numéricas para resolver el ejemplo 4 339

A.7. Plantillas numéricas para resolver el ejemplo 4


En este anexo se incluyen algunas de las funciones empleadas en la simulación
del transitorio de arranque de la máquina transportadora presentada en el ejemplo
4 , sección 5.6.
La función matlab_num es una adaptación de la función general presentada
en el anexo A.5.
El resto de las funciones puede personalizarse de forma sencilla tomando co-
mo referencia las plantillas generales que se incluyen en la librería.

Listado de la función matlab_num


1 function [t,y,qs]=matlab_num(solver, tspan)
2
3 % modificación del path de Matlab
4 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5
6 num_environment
7
8 % tiempo inicial, tiempo final
9 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
10
11 t0=0;
12 tf=10;
13
14 % valores iniciales
15 %%%%%%%%%%%%%%%%%%%
16
17 prm = prm_init;
18 q = q_init;
19 dq = dq_init;
20 lmbp = lmbp_init;
21
22 u= ues(prm, q, dq, t0);
23
24 % tolerancias de los diferentes solvers
25 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
26
27 relax=.75;
28 nmax=200;
29 tol=1e-8;
30 tolv=1e-8;
31 tola=1e-8;
32
33 % representa la posición inicial de la máquina
34 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
340 Anexo A

35
36 [handle, handlen]=draw_all(prm, q, dq, u, epsln, 0);
37 view(3);
38 axis([-1.5 1.5 -1.5 1.5 0 3]);
39 axis square;
40 grid;
41
42 pause
43
44 % tolerancias del solver de posición
45 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
46
47 relax=.75;
48 nmax=200;
49 tol=1e-8;
50
51 % tolerancias para el solver de velocidad y aceleración
52 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
53
54 tolv=1e-8;
55 tola=1e-8;
56
57 % problema de posición inicial
58 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
59
60 q=solve_initial_position(prm, q, t0, relax, nmax, tol);
61
62 % Resuelve el problema de equilibrio
63 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
64
65 q=solve_equilibrium_position(prm, q, lmbp, t0, relax, ...
66 nmax, tol);
67
68 [handle, handlen]=redraw_all(prm, q, dq, u, epsln, 0, ...
69 handle, handlen);
70
71 pause
72
73 % Simulación en el tiempo (con un integrador de Matlab)
74 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
75
76 nq=size(q,1);
77
78 ni=14;
79 dq_i=dq(1:14);
80
81 % Vector de estado: Todo el vector ’q’
82 % y sólo las velocidades independientes
83 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
A.7 Plantillas numéricas para resolver el ejemplo 4 341

84
85
86 y0=[q; dq_i];
87
88
89 % opciones del integrador
90 %%%%%%%%%%%%%%%%%%%%%%%%%
91
92 options = odeset(’AbsTol’, 1e-6, ’RelTol’, 1e-4, ...
93 ’Stats’, ’on’, ’InitialStep’, 1e-2, ...
94 ’OutputFcn’, @odeplot);
95
96 % Elección del solver y resultado
97 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
98
99 tic
100
101 switch solver
102
103 case ’ode23’,
104 [t, y]=ode23(@f, tspan, y0, options, prm, tolv, tola);
105 case ’ode23s’,
106 [t, y]=ode23s(@f, tspan, y0, options, prm, tolv, tola);
107 case ’ode23t’,
108 [t, y]=ode23t(@f, tspan, y0, options, prm, tolv, tola);
109 case ’ode45’,
110 [t, y]=ode45(@f, tspan, y0, options, prm, tolv, tola);
111 case ’ode15s’,
112 [t, y]=ode15s(@f, tspan, y0, options, prm, tolv, tola);
113 otherwise
114 error(’Unknown solver !’);
115
116 end
117
118 toc
119
120 pause
121
122 disp(’Stroke a key to continue ...’);
123
124 % Representación de la simulación (post)
125 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
126
127 close
128
129 [handle, handlen]=draw_all(prm, q, dq, u, epsln, 0);
130 view(3);
131 axis([-1.5 1.5 -1.5 1.5 0 3]);
132 axis square;
342 Anexo A

133 grid;
134
135 pause;
136
137 qs=y(:, 1:nq)’;
138 dqs_i=y(:, nq+1:end)’;
139
140 for i=1:1:size(qs,2),
141
142 u = ues(prm, qs(:,i), dqs(:,i), t(i));
143 z = zetas(prm, t(i));
144 [Cpv]= Cp(prm, qs(:,i), z, t(i));
145
146 [handle, handlen]=redraw_all(prm, qs(:,i), dqs(:,i),...
147 u, epsln, 0, handle, handlen);
148
149 end
150
151
152 pause
153
154 close all;
155
156 % Función del integrador (derivada del vector de estado)
157 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
158
159 function dydt = f(t, y, prm, tolv, tola)
160
161 % en este caso: dydt=[dq, ddq_i]’
162
163 [dydt]=odefun(t, y, prm, tolv, tola);

Listado de la función odefun


1 function dydt = odefun(t, y, prm, tolv, tola)
2
3 % y = [q_i, q_a, dq_i]’
4
5 [q_i, q_a, dq_i]=qi_qa_dqi_from_state(y);
6
7 % resuelve dq_a en función de dq_i
8
9 [dq_a]=solve_aux_velocities(prm, [q_i;q_a], dq_i, t, tolv);
10
11 % resuelve ddq_i en función de [q_i, q_a, dq_i, dq_a]
12
13 [ddq_i]=solve_indep_accelerations(prm, [q_i;q_a], ...
14 [dq_i;dq_a], t, tola);
15
A.7 Plantillas numéricas para resolver el ejemplo 4 343

16 % devuelve la derivada del vector de estado


17
18 dydt=[dq_i;dq_a;ddq_i];

Listado de la función solve_aux_velocities


La función solve_aux_velocities se emplea para resolver las velocida-
des auxiliares en términos de las de partida.
1 function [dq_a]=solve_aux_velocities(prm, q , dq_i, t, tolv)
2
3 % indices de velocidades independientes
4
5 ni=14;
6 ii=1:ni;
7
8 % indices de velocidades auxiliares
9
10 na=36;
11 da=ni+1:nq;
12
13 % evaluar funciones z, dz ...
14
15 z=zetas(prm, t);
16 dz=dzetas(prm, t);
17
18 % resolver problema de velocidad
19
20 Jv_num=Jv(prm, q, z, t);
21 Bv=bv(prm, q, z, dz, t);
22
23 Jv_i=Jv_num(:,ii);
24 Bv=Bv-Jv_i*dq_i;
25
26 dq_a=Jv_num(:,di)\Bv;

En este caso, las velocidades auxiliares son necesarias para evaluar correcta-
mente el vector de cargas en cada instante de tiempo.

Listado de la función solve_indep_accelerations


La función solve_indep_accelerations resuelve el problema dinámico
para el subconjunto de coordenadas independientes.
1 function [ddq_i]=solve_indep_accelerations(prm, q, dq, t, tola)
2
3 % matriz de masa de Lagrange
4
344 Anexo A

5 M=Ml(prm, q);
6
7 % q -> todas las coordenadas
8
9 % vector de cargas de Lagrange
10
11 u = ues(prm, q, dq, t);
12
13 Q=Ql(prm, q, dq, u, t);
14
15 % dq -> todas las velocidades
16
17 ni=14;
18
19 % matriz de masa en coordenadas independientes
20
21 M_i=M(1:ni, 1:ni);
22
23 % vector de cargas en coordenadas independientes
24
25 Ql_i=Q(1:ni,1);
26
27 % resolver las aceleraciones independientes
28
29 ddq_i=M_i\Ql_i;

Las aceleraciones auxiliares no se calculan.

Listado de la función qi_qa_dqi_from_state


La función qi_qa_from_state , tomando como argumento el vector de es-
tado, x , devuelve los vectores de coordenadas independientes, qi , y coorde-
nadas dependientes qa.
1 function [q_i, q_a, dq_i]=qi_qa_dqi_from_state(state)
2
3 % El vector de estado: todas las coordenadas
4 % y sólo las velocidades independientes
5
6 nq=50; % número total de coordenadas
7 ni=14; % número de coordenadas independientes
8
9 q_i=state(1:ni,1);
10 q_a=state(ni+1:nq, 1);
11
12 dq_i=state(nq+1:end,1);
A.7 Plantillas numéricas para resolver el ejemplo 4 345

Listado de la función qi_qa_from_q


La función qi_qa_from_q , separa el vector de coordenadas en dos subvec-
tores: independientes, qi , y dependientes qa.
1 function [q_i, q_a]=qi_qa_from_q(q)
2
3 % Separa las coordenadas de partida de las auxiliares.
4
5 ni=14;
6
7 q_i=q(1:ni,1);
8 q_a=q(ni+1:end, 1);
Anexo B

B.1. Parámetros: Ejemplos 1 y 2


1 % gravedad
2
3 g = 9.81;
4
5 % longitudes de los eslabones
6
7 l1 = 4;
8 l2 = 10;
9
10 % ángulo inicial para la manivela
11
12 a10 = 1.0472;
13
14 % PROPIEDADES INERCIALES
15 %%%%%%%%%%%%%%%%%%%%%%%%
16
17 % Propiedades inerciales de la manivela
18
19 m1 = 1;
20 Ixx1 = 0;
21 Iyy1 = 0;
22 Izz1 = 1;
23
24 % Propiedades inerciales de la biela
25
26 m2 = 2;
27 Ixx2 = 0;
28 Iyy2 = 0;
29 Izz2 = 2;
30
31 % Propiedades inerciales del disco
32
33 m3 = 3;
34 Ixx3 = 0;
35 Iyy3 = 0;
36 Izz3 = 3;
37
38 % PARÁMETROS DINÁMICOS
39 %%%%%%%%%%%%%%%%%%%%%%
348 Anexo B

40
41 % parámetros dinámicos del muelle
42 % entre los puntos ’org0’ y ’c’
43
44 k3 = 100;
45 c3 = 4;
46 l03 = 8;
47
48 % rozamiento dinámico en la unión sj_01
49
50 c1 = 1;
51
52 % rozamiento dinámico en la unión sj_12
53
54 c2 = 1;

B.2. Parámetros: Ejemplo 3


1 % gravedad
2
3 g = 9.81;
4
5 % longitudes de los eslabones
6
7 l1 = 4;
8 l2 = 10;
9
10 % parámetros de la parábola
11
12 x0p = 12;
13 y0p = 0;
14 c0p = 0.15;
15
16 % radio del disco
17
18 rd = 1.5;
19 xpg0 = 12;
20 ypg0 = 0;
21
22 % PROPIEDADES INERCIALES
23 %%%%%%%%%%%%%%%%%%%%%%%%
24
25 % Propiedades inerciales de la manivela
26
27 m1 = 3;
28 Ixx1 = 0;
29 Iyy1 = 0;
30 Izz1 = 6;
B.3 Parámetros: Ejemplo 4 349

31
32 % Propiedades inerciales de la biela
33
34 m2 = 2;
35 Ixx2 = 0;
36 Iyy2 = 0;
37 Izz2 = 2;
38
39 % Propiedades inerciales del disco
40
41 m3 = 3;
42 Ixx3 = 0;
43 Iyy3 = 0;
44 Izz3 = 3;

B.3. Parámetros: Ejemplo 4


1 % gravedad
2
3 g = 9.81;
4
5 % Posición de los motores (bastidor)
6
7 phlm = 0;
8 lm = -.85;
9 zm = .1;
10 bm = .1;
11
12 % PUNTOS CLAVE
13 %%%%%%%%%%%%%%
14
15 % Posición de anclajes (suelo)
16
17 x_0i=-.5*l_bs;
18 y_0i=-.5*w_bs;
19 z_0i=0;
20
21 x_0d=-.5*l_bs;
22 y_0d=.5*w_bs;
23 z_0d=0;
24
25 x_5i=.5*l_bs;
26 y_5i=-.5*w_bs;
27 z_5i=0;
28
29 x_5d=.5*l_bs;
30 y_5d=.5*w_bs;
31 z_5d=0;
350 Anexo B

32
33 % Centro de gravedad (bastidor)
34
35 xcgbs = -.25;
36 ycgbs = 0;
37 zcgbs = 0;
38
39 % Posición de puntos clave (bastidor)
40
41 w_bs = 1;
42 l_bs = 2;
43 sup_bs = 0.5;
44 inf_bs = -0.5;
45 b1_bs = -0.85;
46 b2_bs = -0.7;
47 b3_bs = 0.7;
48 b4_bs = 0.85;
49
50 % Centro de gravedad (bandeja)
51
52 xcgba = 0;
53 ycgba = 0;
54 zcgba = 0;
55
56 % Posición de puntos clave (bandeja)
57
58 w_ba = 1;
59 l_ba = 2;
60 sup_ba = .2;
61 inf_ba = 0;
62 b1_ba = -0.85;
63 b2_ba = -0.7;
64 b3_ba = 0.7;
65 b4_ba = 0.85;
66
67 % PROPIEDADES INERCIALES
68 %%%%%%%%%%%%%%%%%%%%%%%%
69
70 % Propiedades inerciales (bastidor)
71
72 mbs = 150;
73 Ixxbs=1e-3*5382.6;
74 Iyybs=1e-3*22084;
75 Izzbs=1e-3*25405.;
76
77 % Propiedades inerciales (bandeja)
78
79 mba = 40;
80 Ixxba=1e-3*2442.4;
B.3 Parámetros: Ejemplo 4 351

81 Iyyba=1e-3*9394.5;
82 Izzba=1e-3*11462;
83
84 % Propiedades inerciales (motor 1)
85
86 rb=.05
87
88 m3 = 1.5;
89 Ixx3=0.5*m3*rb^2;
90 Iyy3=0.5*m3*rb^2;
91 Izz3=0.5*m3*rb^2;
92
93 % Propiedades inerciales (motor 2)
94
95 m4 = 1.5;
96 Ixx4=0.5*m4*rb^2;
97 Iyy4=0.5*m4*rb^2;
98 Izz4=0.5*m4*rb^2;
99
100 % SILENTBLOCKS
101 %%%%%%%%%%%%%%
102
103 % Longitud natural silentblocks
104
105 zs0f = 0.06;
106 zs0r = 0.06;
107
108 % Amortiguamiento silentblocks
109
110 % Parte delantera
111
112 csxf = 2.5;
113 csyf = 2.5;
114 cszf = 2.5;
115 csrxf = 0.5;
116 csryf = 0.5;
117 csrzf = 0.5;
118
119 % Parte trasera
120
121 csxr = 2.5;
122 csyr = 2.5;
123 cszr = 2.5;
124 csrxr = 0.5;
125 csryr = 0.5;
126 csrzr = 0.5;
127
128 % Constantes reales sientblocks
129
352 Anexo B

130 % Parte delantera


131
132 nusf=.35;
133 Esf=2100*1e6;
134 Gsf=.5*Esf/(1+nusf);
135 Asf=10*1e-6;
136 Iysf=228.95*1e-12;
137 Izsf=Iysf;
138 Jsf=2196.15*1e-12;
139
140 % Parte trasera
141
142 nusr=.35;
143 Esr=2100*1e6;
144 Gsr=.5*Esr/(1+nusr);
145 Asr=20*1e-6;
146 Iysr=228.95*1e-12;
147 Izsr=Iysr;
148 Jsr=2196.15*1e-12;
149
150 % BALLESTAS
151 %%%%%%%%%%%
152
153 % longitud natural ballestas
154
155 l0bll = 0.3;
156
157 % amortiguamiento ballestas
158
159 cbx = 0.35;
160 cby = 0.35;
161 cbz = 0.35;
162 cbrx = 0.15;
163 cbry = 0.15;
164 cbrz = 0.15;
165
166 % Constantes reales ballestas (d)
167
168 kd1_77 = 8.20829e+007*2e-1;
169 kd1_711 = -3657.24*2e-1;
170 kd1_712 = 8911.56*2e-1;
171 kd1_88 = 3.6931e+006*2e-1;
172 kd1_810 = 251.931*2e-1;
173 kd1_812 = -427476*2e-1;
174 kd1_99 = 80077.9*2e-1;
175 kd1_910 = 2.75055*2e-1;
176 kd1_911 = 9269.02*2e-1;
177 kd1_1010 = 1357.35*2e-1;
178 kd1_1011 = 0.318375*2e-1;
B.3 Parámetros: Ejemplo 4 353

179 kd1_1012 = -29.161*2e-1;


180 kd1_1111 = 14201.7*2e-1;
181 kd1_1112 = -0.649301*2e-1;
182 kd1_1212 = 73890.7*2e-1;
183
184 kd2_77 = 8.20829e+007*2e-1;
185 kd2_711 = -3657.24*2e-1;
186 kd2_712 = 8911.56*2e-1;
187 kd2_88 = 3.6931e+006*2e-1;
188 kd2_810 = 251.931*2e-1;
189 kd2_812 = -427476*2e-1;
190 kd2_99 = 80077.9*2e-1;
191 kd2_910 = 2.75055*2e-1;
192 kd2_911 = 9269.02*2e-1;
193 kd2_1010 = 1357.35*2e-1;
194 kd2_1011 = 0.318375*2e-1;
195 kd2_1012 = -29.161*2e-1;
196 kd2_1111 = 14201.7*2e-1;
197 kd2_1112 = -0.649301*2e-1;
198 kd2_1212 = 73890.7*2e-1;
199
200 kd3_77 = 8.20829e+007*2e-1;
201 kd3_711 = -3657.24*2e-1;
202 kd3_712 = 8911.56*2e-1;
203 kd3_88 = 3.6931e+006*2e-1;
204 kd3_810 = 251.931*2e-1;
205 kd3_812 = -427476*2e-1;
206 kd3_99 = 80077.9*2e-1;
207 kd3_910 = 2.75055*2e-1;
208 kd3_911 = 9269.02*2e-1;
209 kd3_1010 = 1357.35*2e-1;
210 kd3_1011 = 0.318375*2e-1;
211 kd3_1012 = -29.161*2e-1;
212 kd3_1111 = 14201.7*2e-1;
213 kd3_1112 = -0.649301*2e-1;
214 kd3_1212 = 73890.7*2e-1;
215
216 kd4_77 = 8.20829e+007*2e-1;
217 kd4_711 = -3657.24*2e-1;
218 kd4_712 = 8911.56*2e-1;
219 kd4_88 = 3.6931e+006*2e-1;
220 kd4_810 = 251.931*2e-1;
221 kd4_812 = -427476*2e-1;
222 kd4_99 = 80077.9*2e-1;
223 kd4_910 = 2.75055*2e-1;
224 kd4_911 = 9269.02*2e-1;
225 kd4_1010 = 1357.35*2e-1;
226 kd4_1011 = 0.318375*2e-1;
227 kd4_1012 = -29.161*2e-1;
354 Anexo B

228 kd4_1111 = 14201.7*2e-1;


229 kd4_1112 = -0.649301*2e-1;
230 kd4_1212 = 73890.7*2e-1;
231
232 % Constantes reales ballestas (i)
233
234 ki1_77 = 8.20829e+007*2e-1;
235 ki1_711 = -3657.24*2e-1;
236 ki1_712 = 8911.56*2e-1;
237 ki1_88 = 3.6931e+006*2e-1;
238 ki1_810 = 251.931*2e-1;
239 ki1_812 = -427476*2e-1;
240 ki1_99 = 80077.9*2e-1;
241 ki1_910 = 2.75055*2e-1;
242 ki1_911 = 9269.02*2e-1;
243 ki1_1010 = 1357.35*2e-1;
244 ki1_1011 = 0.318375*2e-1;
245 ki1_1012 = -29.161*2e-1;
246 ki1_1111 = 14201.7*2e-1;
247 ki1_1112 = -0.649301*2e-1;
248 ki1_1212 = 73890.7*2e-1;
249
250 ki2_77 = 8.20829e+007*2e-1;
251 ki2_711 = -3657.24*2e-1;
252 ki2_712 = 8911.56*2e-1;
253 ki2_88 = 3.6931e+006*2e-1;
254 ki2_810 = 251.931*2e-1;
255 ki2_812 = -427476*2e-1;
256 ki2_99 = 80077.9*2e-1;
257 ki2_910 = 2.75055*2e-1;
258 ki2_911 = 9269.02*2e-1;
259 ki2_1010 = 1357.35*2e-1;
260 ki2_1011 = 0.318375*2e-1;
261 ki2_1012 = -29.161*2e-1;
262 ki2_1111 = 14201.7*2e-1;
263 ki2_1112 = -0.649301*2e-1;
264 ki2_1212 = 73890.7*2e-1;
265
266 ki3_77 = 8.20829e+007*2e-1;
267 ki3_711 = -3657.24*2e-1;
268 ki3_712 = 8911.56*2e-1;
269 ki3_88 = 3.6931e+006*2e-1;
270 ki3_810 = 251.931*2e-1;
271 ki3_812 = -427476*2e-1;
272 ki3_99 = 80077.9*2e-1;
273 ki3_910 = 2.75055*2e-1;
274 ki3_911 = 9269.02*2e-1;
275 ki3_1010 = 1357.35*2e-1;
276 ki3_1011 = 0.318375*2e-1;
B.4 Parámetros: Ejemplo 5 355

277 ki3_1012 = -29.161*2e-1;


278 ki3_1111 = 14201.7*2e-1;
279 ki3_1112 = -0.649301*2e-1;
280 ki3_1212 = 73890.7*2e-1;
281
282 ki4_77 = 8.20829e+007*2e-1;
283 ki4_711 = -3657.24*2e-1;
284 ki4_712 = 8911.56*2e-1;
285 ki4_88 = 3.6931e+006*2e-1;
286 ki4_810 = 251.931*2e-1;
287 ki4_812 = -427476*2e-1;
288 ki4_99 = 80077.9*2e-1;
289 ki4_910 = 2.75055*2e-1;
290 ki4_911 = 9269.02*2e-1;
291 ki4_1010 = 1357.35*2e-1;
292 ki4_1011 = 0.318375*2e-1;
293 ki4_1012 = -29.161*2e-1;
294 ki4_1111 = 14201.7*2e-1;
295 ki4_1112 = -0.649301*2e-1;
296 ki4_1212 = 73890.7*2e-1;
297
298 % orientación base ballestas
299
300 phibll = -pi/2 - pi/6;
301
302 % ACCIONAMIENTO MOTORES
303 %%%%%%%%%%%%%%%%%%%%%%%
304
305 % Rigidez de los motores
306
307 am1 = -.2;
308 bm1 = -21;
309 am2 = -.2;
310 bm2 = 21;

B.4. Parámetros: Ejemplo 5


1 % gravedad
2
3 g = 9.81;
4
5 % longitud de los eslabones
6
7 l1 = 4;
8 l2 = 10;
9
10 % ángulo inicial de la manivela
11
356 Anexo B

12 a10 = 1.0472;
13
14 % parámetros dinámicos manivela
15
16 m1 = 1;
17 Ixx1 = 0;
18 Iyy1 = 0;
19 Izz1 = (1/12)*m1*l1*l1;
20
21 % parámetros dinámicos biela
22
23 m2 = 1.5;
24 Ixx2 = 0;
25 Iyy2 = 0;
26 Izz2 = (1/12)*m2*l2*l2;
27
28 % parámetros dinámicos pistón
29
30 m3 = 1;
31 Ixx3 = 0;
32 Iyy3 = 0;
33 Izz3 = 0;
34
35 % parámetros del controlador
36
37 ki = 4;
38 kp = 2;
39
40 % velocidad de referencia
41
42 da1r = 10;
43
44 % rozamiento dinámico en la unión ’sj_12’
45
46 c2 = 5;
Anexo C

C.1. Posible Tratamiento Numérico de las Variables Auxiliares


Tal como se explica en la sección 4.3.1, las coordenadas auxiliares son aque-
llas que se introducen en la formulación con el objeto de simplificar la definición
del sistema.
Teniendo en cuenta que la evolución del sistema mecánico depende exclusi-
vamente del conjunto de coordenadas de partida y sus derivadas, en el presente
anexo se propondrá un algoritmo de solución para las ecuaciones cinemáticas y
dinámicas del sistema, capaz de calcular las coordenadas auxiliares, a , y sus
derivadas, ȧ y ä , en términos de las coordenadas generalizadas, q , y sus
derivadas, q̇ y q̈ .
El desarrollo matemático se lleva a cabo bajo los siguientes supuestos:

• Las ecuaciones dinámicas presentadas son las que se obtienen al plantear el


formalismo de Lagrange con multiplicadores. Sin embargo, el resultado ob-
tenido es completamente general y puede aplicarse a cualquier formalismo
dinámico.

• Las coordenadas auxiliares, aj , j = 1 . . . na , nunca se emplean para definir


la posición u orientación de un sólido.
Dicho supuesto se traduce en que la velocidad de los puntos cinemática-
mente pertenecientes a cualquiera de los sólidos del sistema se calcula en
términos de las velocidades generalizadas de partida, q̇ , de tal forma que:

• La matriz de masa del sistema, M qq (q) , nunca presenta dependen-


cias en las coordenadas auxiliares.
• La contribución de cualquier torsor1 al vector de fuerza generalizada
de Lagrange, Qq , presenta la forma2
   
Aj A
FF
 q̇,q   F Fq̇,q j
Aj 
Fq̇ = 
F 
=
  (C.1)
Aj
FFq̇,a 0
358 Anexo C

• Existe un grupo de ecuaciones3 ,

φa = φa (q, a) = 0 , (C.2)

suficiente para determinar las coordenadas auxiliares, a , en términos de


las coordenadas de partida q .
El conjunto de ecuaciones anterior nunca presenta dependencias explícitas
en la variable tiempo, t. Las ecuaciones de guiado del sistema presentan la
forma general φ (q, t) = 0 , y se incluyen en el conjunto de ecuaciones de
restricción (siguiente punto).
Las derivadas totales del grupo de ecuaciones anterior se escriben:

a a
φq q̇ + φa ȧ = −bav (C.3)
a a
φq q̈ + φa ä = −baa (C.4)

 a

donde siempre se cumple que rango φa = na .
El resto de ecuaciones cinemáticas y sus correspondientes derivadas, si exis-
ten, se expresan según

φc = φc (q, t) = 0 (C.5)
c
φq q̇ = −bcv (C.6)
c
φq q̈ = −bca (C.7)

c
donde, en el caso más general, la matriz φq presenta las dependencias
funcionales

c c
φq = φq (q, a, t) (C.8)
2
ya sea éste de inercia, de enlace, o asociado a otras acciones.
2
En el proceso de exportación, el campo booleano isaux de la estructura qs se emplea pa-
ra reordenar el vector de coordenadas, q , de tal forma que las coordenadas auxiliares aparecen
después de las de partida.
3
En el proceso de exportación, el campo booleano isaux de la estructura Cp se emplea para
reordenar el vector de restricciones, Cpv , de tal forma que las ecuaciones de definición de las
coordenadas auxiliares siempre aparecen después de las ecuaciones geométricas de enlace.
C.1 Posible Tratamiento Numérico de las Variables Auxiliares 359

Las ecuaciones de movimiento, en términos de q̈ y ä , se expresan:

    c T  
Mqq 0 q̈ φq 0 
λc
 Qq
  +


 = 
a a λa
0 0 ä φq φa 0

 c    
φq 0 q̈ −bca
  = 
  (C.9)
a a
φq φa ä −baa

Teniendo en cuenta la tipología de las matrices que aparecen en el conjun-


to de ecuaciones C.9, éstas pueden expresarse en términos de las aceleraciones
generalizadas de partida, q̈ , según
  T  
c   
 Mqq φq  q̈ Qq
  =  (C.10)
  c
c λc −ba
φq 0

donde, en el caso más general, la evaluación numérica de Q q requiere haber


calculado todas las posiciones y velocidades auxiliares.
A LGORITMO DE I NTEGRACIÓN

Teniendo presente la distinción entre coordenadas de partida y auxiliares, el


algoritmo de integración propuesto se reduce a lo siguiente:

• Resolver los problemas de posición y velocidad iniciales.

• Resolver el problema de aceleración empleando la ecuación C.10. Si fuese


necesario, las aceleraciones auxiliares, ä , podrían calcularse en términos
de las aceleraciones de partida, q̈ ,

ä = Sa q̈ − T a (C.11)

donde
h i
a −1 a
h i
a −1
Sa =− φa φq y Ta = − φa baa

pueden calcularse numéricamente en cada iteración.


360 Anexo C

• Integrar las aceleraciones generalizadas, q̈ y actualizar los valores de las


coordenadas generalizadas, q .

• Corregir el valor de las coordenadas generalizadas, q , empleando el con-


junto de ecuaciones C.6. .

• Actualizar el valor de las coordenadas auxiliares empleando el conjunto de


ecuaciones, en general no lineales, C.2.

• Corregir el valor de las velocidades generalizadas, q̇ , empleando el con-


junto de ecuaciones C.7.

• Actualizar el valor de las velocidades auxiliares empleando el conjunto de


ecuaciones lineales C.4.

• Resolver el problema de aceleración, evaluando el vector de cargas con las


actuales coordenadas y velocidades auxiliares.

El algoritmo anterior presenta las siguientes ventajas computacionales:

• Normalmente, el cálculo de las aceleraciones auxiliares no se requiere, por


lo que la dimensión del problema dinámico se reduce.
En cualquier caso, la actualización de las velocidades auxiliares, necesarias
para evaluar el vector de cargas, requiere calcular la matriz S a , por lo que
el esfuerzo computacional de evaluar ä se reduce al de calcular el término
T a de la ecuación C.11.

• La actualización del estado se lleva a cabo eliminando la posible influencia 4


de las coordenadas auxiliares.

4
Si el conjunto de ecuaciones geométricas se resuelve sin tener en cuenta la distinción entre
coordenadas de partida y auxiliares, puede que la corrección de las coordenadas de partida se vea
afectada por el valor de las auxiliares.
Anexo D

D.1. Notación Cinemática Analítica


t Variable tiempo.
q Vector de coordenadas generalizadas.
q̇ Vector de velocidades generalizadas.
q̈ Vector de aceleraciones generalizadas.
z Vector de funciones rehónomas.
φq Jacobiano de las ecuaciones geométricas.

φv Jacobiano de las ecuaciones cinemáticas.


bv Término independiente de velocidades.
ba Término independiente de aceleraciones.

D.2. Notación Dinámica Analítica


 Vector de incógnitas de enlace.
u Vector de incógnitas de enlace asociadas a accionamientos.
λp Vector de multiplicadores asociados a las ecuaciones geométricas.
λv Vector de multiplicadores asociados a las ecuaciones no holónomas.
λ Vector de multiplicadores.
u Vector de funciones de excitación o leyes constitutivas.
Mqq Matriz de masa de Lagrange.

Mzq Matriz de masa de Newton-Euler.

Vzq Parcial del torsor global de enlace respecto a .

Vqz Parcial de la fuerza generalizada de enlace respecto a .


362 Anexo D

R Matriz de redundancias matemáticas en las condiciones de enlace.


Qq Vector de Fuerza Generalizada en términos de q̇.
Qz Vector de Fuerza Generalizada en términos de ż.
T Rzq Matriz de transformación Newton-Euler → Lagrange.
T () Energía Cinética.
U () Energía Potencial.
L () Lagrangiano.
Vżvj (Bi ) Velocidad virtual parcial de Bi respecto a la pseudo-velocidad żj .
Vq̇vj (Bi ) Velocidad virtual parcial de Bi respecto a la velocidad generalizada
q̇j .
v
Ẇ Potencia virtual de las fuerzas exteriores.
v
Ẇ Potencia virtual de las fuerzas de inercia.
v
Ẇq̇j Potencia virtual parcial respecto a la velocidad generalizada q̇j de
las fuerzas de inercia.
v
Ẇq̇j Potencia virtual parcial respecto a la velocidad generalizada q̇j de
las fuerzas exteriores.
F
Fq̇j Fuerza generalizada parcial respecto a la velocidad generalizada q̇ j
de las fuerzas exteriores.
F
Fq̇j Fuerza generalizada parcial respecto a la velocidad generalizada q̇ j
de las fuerzas de inercia.
Fq̇ q̇
F Fuerza generalizada asociada a las fuerzas Centrífugas y de Coriolis.

SN Matriz de transformación a Coordenadas Independientes.

KN Matriz de Rigidez del Sistema.

CN Matriz de Amortiguamiento del Sistema.

BN Matriz de Control del Sistema.


η Vector de Coordenadas Modales.
Ψ Matriz de Modos.
D.3 Notación Cinemática Cartesiana 363

D.3. Notación Cinemática Cartesiana


x yz Orientación de la Referencia Absoluta.
OAbs Origen de la Referencia Absoluta.
Abs Referencia Absoluta.
Bi Bj Vector de posición entre los puntos Bi y Bj .
 
Bi Bj bi
Proyección del vector anterior en la base bi .
ux , uy , uz Versores de la base xyz , asociada a la Referencia Absoluta.
eb1i , eb2i , eb3i Versores de la base genérica bi .
h i bj
I Matriz de cambio de base bj → bj .
bi
Ωbi (bj ) Velocidad angular de la base bj respecto a la base bi .
αb (bj ) i
Aceleración angular de la base bj respecto a la base bi .
VR (Bi ) Velocidad del punto Bi en la referencia R .
AR (Bi ) Aceleración del punto Bi en la referencia R .

D.4. Notación Dinámica Cartesiana


Solk k-ésimo sólido del sistema.
Aj j-ésima acción de enlace.
Ane
j j-ésima acción no de enlace.
Aj
F Fuerza asociada a la acción Aj .
M Akj Momento en el punto Bk asociado a la acción Aj .
D Momento lineal.
HGk Momento cinético en el punto Gk .
II 

k
(Solk ) Tensor de inercia del sólido Solk en el punto Gk .
F (Solk ) Fuerza de inercia sobre el sólido Solk .
M k (Solk ) Momento de inercia en el punto Gk sobre el sólido Solk .

Bibliografía

[3dM04] 3d_Mec, http://www.imem.unavarra.es/3d_mec, Departamen-


to Ingeniería Mecánica, Universidad Pública de Navarra, 2004.
[Ada04] Adams, http://www.mscsoftware.com, Msc Software Inc., 2004.
[Agu96] J. Agulló, Mecánica de la partícula y del sólido rígido, OK Punt, Bar-
celona, 1996, ISBN: 84-920850-2-9.
[Ala04] Alaska, http://www.tu-chemnitz.de/ifm, Universität Chem-
nitz, Institut für Mechatronik, 2004.
[Ans04] Ansys, http://www.ansys.com, Ansys Inc., 2004.
[Aut04] Autolev, http://www.autolev.com, Online Dynamics, Inc., 2004.
[Bau72] J. Baumgarte, Stabilizations of constraints and integrals of motions in
dynamical systems, Comp. Methods in Appl. Mech. and Eng. 1 (1972),
no. 1, 1–16.
[Car04] Carsim, http://www.carsim.com, Mechanical Simulation Corpo-
ration Inc., 2004.
[CB68] R. Craig and M. Bamptom, Coupling of substructures for dynamic
analysis, AIAA Journal 6 (1968), no. 7, 1313–1319.
[Cea97] J. Cuadrado et al., Modelling and solution methods for efficient real
time simulation of multibody dynamics, Multibody System Dynamics
(1997), 259–280.
[Cra86] R. Craig, Introduction to robotics, mechanics and control, Addison-
Wesley, New York, 1986.
[Dad04] Dads, http://www.lmsintl.com, The Mathworks Inc., 2004.
[Dyn04] Dynaflex, http://real.uwaterloo.ca/ ∼dynaflex, University
of Waterloo, Department of System Design Engineering, 2004.
[Eul76] L. Euler, Nova methodus motum corporum regidarum determinandi,
Opera Omnia 2 (1776), no. 9, 99–125.
366 BIBLIOGRAFÍA

[GdJB94] J. García de Jalón and E. Bayo, Kinematic and dynamic simulation


of multibody systems: the real time challenge, Springer Verlag, New
York, 1994, ISBN: 0-387-94096-0.

[Gil01] J. Gil, Caracterización modal de sólidos flexibles, Dpto. Ingeniería


Mecánica, Energética y de Materiales, Universidad Pública de Nava-
rra, 2001.

[Gin01] Jerry H. Ginsberg, Mechanical and structural vibrations, Wiley &


Sons, New York, 2001, ISBN: 0-471-37084-3.

[Gin04] Ginac, http://www.ginac.de, Christian Bauer, 2004.

[Guy65] R. Guyan, Reduction of stiffness and mass matrices, AIAA Journal


(1965), no. 2.

[Inc95] ANSYS Inc, Ansys user’s guide and reference manual, SAS IP, Ca-
nonsburg,Pennsylvania, 1995.

[Inm00] Daniel J. Inman, Engineering vibrations, Prentice Hall, New York,


2000, ISBN: 0-137-26142-x.

[Jea95] J.M. Jiménez et al., An efficient implementation of the velocity trans-


formation method for real time dynamics with illustrative examples,
Computational Dynamics in Multibody Systems (1995), 15–35.

[KC69] T.R. Kane and Wang C.F., On the derivation of the ecuations of motion,
Journal of Soc. Ind. App. Math. 13 (1969).

[KD85] T.R. Kane and Levinson D.A., Dynamics, theory and applications, Mc-
Graw Hill, New York, 1985.

[Lag88] J. Lagrange, Mécanique analytique, LÁcademie Royal des Sciences,


Paris, 1788.

[LDL04] R. Lot and M. Da Lio, A symbolic approach for automatic generation


of the equations od motion of multibody systems, Multibody System
Dynamics (2004), no. 12, 147–172.

[Lic04] GNU Lesser General Public License, http://www.gnu.org/, 2004.

[Map04] Maple, http://www.maplesoft.com, Waterloo Maple Inc., 2004.

[Mat02a] The Math Works Inc, Natick, Massachussetts, Using matlab, version
6.5, 2002.
BIBLIOGRAFÍA 367

[Mat02b] The MathWorks Inc., Manual de documentación: Using simulink,


2002.

[Mat02c] The MathWorks Inc., Manual de documentación: Writing s-functions,


2002.

[Mat04] Matlab, http://www.mathworks.com, The Mathworks Inc., 2004.

[Max04] Maxima, http://maxima.sourceforge.net, The Maxima Group


(GPL), 2004.

[Mbs03] Mbsymba, http://www.dim.unipd.it/lot/mbsymba.html,


Università di Padova, Dipartimento di Ingegneria Meccanica, 2003.

[Mec99] Mechanical Dynamics Inc, Adams reference, theory of flexible bodies


in adams, 1999.

[Mec04] MechML, http://mat21.etsii.upm.es/mbs/mechml, Departa-


mento de Matemática Aplicada, Universidad Politécnica de Madrid,
2004.

[Mth04] Mathematica, http://www.wolfram.com, Wolfram Research Inc.,


2004.

[Nas04] Nastran, http://www.mscsoftware.com, Msc Software Inc.,


2004.

[New04] Neweul, http://www.mechb.uni-stuttgart.de/forschung/


neweul, Universität Stuttgart, Institut B für Mechanik, 2004.

[Nik88] P.Ñikravesh, Computer aided analysis of mechanical systems, Prentice


Hall, New York, 1988.

[OP04] OpenGl, http://www.opengl.org, SGI Software, 2004.

[Pov04] Povray, http://www.povray.org/, PovRay Raytracer, 2004.

[PS93] U. Popp and W. Schiehlen, Fahrzeugdynamik., 1st ed., Teubner-Verlag,


Stuttgart, 1993.

[Rao03] Singiresu S. Rao, Mechanical vibrations, Prentice Hall, New York,


2003, ISBN: 0-130-48987-5.

[Rea04] J. Rodriguez et al., Recursive and residual algorithms for the efficient
numerical integration of multi-body systems, Multibody System Dyna-
mics (2004), 295–320.
368 BIBLIOGRAFÍA

[Red04] Reduce, http://www.reduce-algebra.com, Anthony C. Earn,


2004.

[Rob04] Robotran, http://www.prm.ucl.ac.be/robotran, Université


catholique de Louvain, Faculté de production mécanique et machines,
2004.

[Ros00] J. Ros, Apuntes de dinámica, Departamento de Ingeniería Mecánica,


Universidad Pública de Navarra, 2000.

[Say90] M. Sayers, Symbolic computer methods to automatically formulate


vehicle simulation codes, Master Thesis, 1990.

[SF03] J.C. Samin and P. Fisette, Symbolic modelling of multibody systems,


Kluwer Academic Publishers, Netherlands, 2003, ISBN: 1-4020-1629-
8.

[Sha98] A. Shabana, Dynamics of multibody systems, 2nd ed., Wiley & Sons,
New York, 1998, ISBN: 0-521-59446-4.

[Sim04] Simpack, http://www.simpack.de, Intec GmbH, 2004.

[Str00] B. Stroustrup, The c++ programming language, Addison Wesley, New


York, 2000, ISBN: 0-201-70073-5.

[VR97] VRML, http://www.web3d.org, Web 3D Consortium, 1997.

[Wal95] A. Wallrapp, O.; Eichberger, Fembs an interface between fem codes


and mbs codes, user manual for ansys and nastran, DLR, Oberpfaf-
fenhofen, 1995.

[Wal00] L. Wall, Programming perl, O’Reilly, New York, 2000, ISBN: 0-596-
00027-8.

You might also like