Professional Documents
Culture Documents
T ESIS D OCTORAL
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
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
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
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:
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
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
NO SIMBÓLICOS
• 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
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
3
Existen dependencias ó relaciones cinemáticas entre ellas.
2.2 Ecuaciones cinemáticas 15
donde
" #
φv =
φq y bv =
φt
A b
con
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
P i P j · u − f (q, t) = 0 (2.6)
Puntos P j y P i coincidentes:
Pj Pi = 0 (2.8)
Pj Pi ∧ u = 0 (2.9)
2.2 Ecuaciones cinemáticas 17
P j P i · P j P i − ρ2 = 0 (2.11)
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
AC · ey − e = 0 (2.14)
20
Bie
B 10 Blo
C
D E
y θ2
n
Ma
2 Abs
θ1 e
A x
Blo
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
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
φ= l1 sin(θ1 ) + l2 sin(θ1 + θ2 ) − e = 0 . (2.19)
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
φ̇ = φq q̇ =
= l1 cos(θ1 ) + l2 cos(θ1 + θ2 ) l2 cos(θ1 + θ2 ) q̇ = 0
(2.21)
φ̈ = φ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)
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
OB1 = OB2
OC2 = OC3
OA1 = 0
OC · ey = e
e100 · ex = 1 (2.23)
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)
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
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.
(xB , yB )
l2
(xC , yC )
l1
y
x e
(0, 0)
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
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
φ̇ = φ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)
φ̈ = φ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
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.
Ane
j (Elemento)
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
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
∂ 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)
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
∂ VRI (P i ) v
Vżvj (P i ) = żj = dij (z, t) żjv (3.6)
∂ żj
v
Ẇżj (P i ) = F (P i ) · dij (z, t) żjv (3.7)
v
Ẇżj (P i ) = F (P i ) · dij (q, t) żjv (3.8)
32 Dinámica
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)
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
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
p
X ∂ ORI P i ∂ ORI P i
VRI (P i ) = q̇j + (3.13)
∂ qj ∂t
j=1 RI RI
p
X
∂ ORI P i
V v q̇jv .
q̇ (P i ) = (3.14)
∂ qj RI
j=1
p
v
X ∂ VRI (P i ) v
V q̇ (P i ) = q̇j (3.15)
∂ q̇j
j=1
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
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)
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
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
∂ VRI (P i )
∂ ẋj
= I3 j = 1...N (3.23)
h iT
Aj (Solk ) Aj (Solk )
F k
, M k
v
Ẇż (Solk ) = F (Solk ) · Vżv (Bk ) + M k (Solk ) · Ωżv (Solk ) (3.26)
h iT
F (Solk ), M k (Solk )
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
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)
• II
k
(Solk ) es el tensor de inercia del sólido Solk respecto al punto Gk .
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
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
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
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
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
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 )
M
X M
X A(Solk )
Fq̇ Solk +
F F
Fq̇ =0 (3.36)
k=1 k=1
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
nr
M L
X X k
Ajnr (Solk ) nr
Fq̇ =
F F
Fq̇ = F
Fq̇ .
k=1 j=1
Fq̇ nr + φq λ = 0
T
F (3.38)
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
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
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
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)
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)
Aj (k)
v
Ẇjk = F Aj (k) · VvSolj (Bk ) + M k
v
· ΩSolj (Solk ) (3.49)
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)
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.
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)
Fż + φTz λ = 0.
F (3.56)
1
T (Solk ) = VRI (Gk )T D (Solk ) +
2
1
+ ΩRI (Solk )T H k (Solk ) , (3.57)
2
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 )
T T
∂ T (Solk ) ∂ VRI (Gk ) D (Solk )
= . (3.60)
∂ q̇ ∂ q̇ ΩRI (Solk ) H k (Solk )
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)
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
T T T
d ∂ T (Solk ) ∂ T (Solk ) ∂ VRI (Gk ) F (Solk )
= −
dt ∂ q̇ ∂q ∂ q̇ ΩRI (Solk ) M k (Solk )
(3.63)
T T !
d ∂ T (Solk ) ∂ T (Solk )
F
Fq̇ (Solk ) = − − (3.64)
dt ∂ q̇ ∂q
" T T X Lk
#
T d ∂ T (Solk ) ∂ T (Solk ) Aj (Solk )
q̇ v − + + F
Fq̇ = 0 (3.65)
dt ∂ q̇ ∂q j=1
" T T #
T d ∂ T (Sist) ∂ T (Sist) A(Sist)
q̇ v − + +F
Fq̇ =0 (3.66)
dt ∂ q̇ ∂q
T T !
d ∂ T (Sist) ∂ T (Sist) A(Sist)
− − +F
Fq̇ =0 (3.67)
dt ∂ q̇ ∂q
50 Dinámica
donde
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
A(Sist) ne nr
F
Fq̇ =F
Fq̇ +F
Fq̇ (3.70)
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.
1 T
T (Sist) =
2
q̇ Mqq q̇ (3.72)
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
˙ 1 ∂
F
Fq̇ = − Mqq q̈ + M qq q̇ − q̇ T
2 ∂q
Mqq q̇ (3.75)
T
d ∂ T (Sist) ˙
dt ∂ q̇
= Mqq q̈ + M qq q̇
p
" #
X ∂
= Mqq q̈ +
∂ qi
Mqq q̇i q̇
i=1
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
h i q̈
Mqq T
φv λ
=F Fq̇ q̇
Fq̇ ne + F (3.77)
| {z }
Qq
donde
q̇
• 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)
Lk
M X
X
ne Ane
j (Solk )
F
Fq̇ = F
Fq̇ (3.79)
k=1 j=1
C ONSIDERACIONES FINALES
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)
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)
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
Lk " #
X F Aj (Solk ) Solk
F
Fż,Sol = A (Sol ) =− Vzq (3.86)
k
j=1 M kj k
" # 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
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
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
Sol1
F
Fz,Sol1
Vzq
.. ..
. .
Fż = − Vzq
F
= F
Fz,Solk = −
Solk
Vzq
(3.91)
.. ..
. .
F
Fz,SolM Vzq
SolM
q̇
• 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
Vzq = −F
Fż , (3.96)
58 Dinámica
M Lk
T "
#
∂ XX ∂ VRI (Bk ) F Aj (Solk )
Vzq =−
∂ k=1 j=1 ∂ ż ΩRI (Solk ) A (Sol ) . (3.97)
M j k
h i
T
Vzq − φz λ
=0 (3.98)
Solk Sol
Mqq = T RSol
zq Mzq k k
(3.99)
donde
T
Solk ∂ VRI (Gk )
TR zq
=
∂ q̇ ΩRI (Solk )
. (3.100)
M
X Sol
Mqq = T RSol
zq Mzq k k
k=1
= T Rzq Mzq ,
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
M
X
F
Fq̇ = T RSol
zq
F
Fż,Sol
k
k
Fż
= T Rzq F
k=1
T
Vqz − φv λ=0 , (3.103)
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
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
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)
q̇
b) Expresión para F
Fż
Teniendo en cuenta la definición propuesta en 3.107, la contribución de las
q̇
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
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
∂φ
φz =
∂z
.
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.
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
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
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
q = [θ1 θ2 ]T (3.115)
AC · ey − e = 0 (3.116)
l2
B
E C
lg2
l1
D
lg1 e
A
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
E CUACIONES EN VELOCIDADES
φ̇ = φq
q̇ + φt =
θ̇1
= [l1 cos θ1 l2 cos θ2 ] =0 (3.120)
θ̇2
E CUACIONES EN ACELERACIONES
φ̈ = φ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
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
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.
T ORSORES DE INERCIA
d D (Solk )
F (Solk ) = −
dt RI
d H k (Solk )
M k (Solk ) = −
dt
RI
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
0
M (Man ) x yz
= − 0
II Man
zz θ̈1 x yz
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)
0
M (Bie )
x yz
= − 0
II Bie
zz θ̈2 x yz
3.8 Ejemplo 71
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)
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.
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)
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)
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
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
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
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
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
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
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
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)
E CUACIONES DINÁMICAS
• Formalismo de Newton-Euler.
• Formalismo de Lagrange.
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)
T
z= xD y D θ 1 xE y E θ 2 xC y C (3.138)
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,
a) Equilibrio de Fuerzas
−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
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,
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
−F y,
−F x,
F (Bie ), M (Bie )
F y,
F gr,
F x,
a) Equilibrio de Fuerzas
−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
− 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,
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.
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,
a) Equilibrio de Fuerzas
−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,
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.
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
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)
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
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 .
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
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
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
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 .
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
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
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 .
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
−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
T l1 cos θ1
φq λ=
l2 cos θ2
λ
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,
h i
q̈
Mqq φq
T
= Fq̇ ne
F (3.166)
λ
donde
3
X Solk
Mqq = Mqq (3.167)
k=1
Lk
3 X
X
ne Ane
j (Solk )
F
Fq̇ = F
Fq̇ (3.168)
k=1 j=1
h i
q̈
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
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
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
∂ ∂
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
T T
q̇ d ∂ T (Sist) ∂ T (Sist)
Mqq q̈ − F
Fq̇ (Sist) =
dt ∂ q̇
−
∂q
(3.172)
q̇
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
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
−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.
3
∂ T (Sist) X ∂ T (Solk )
= (3.175)
∂ qj k=1
∂ qj
T T !
∂ ∂
q̇ T mk BV k
BV k
+ BSol k
II Solkk BSol k
q̇
∂ 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 .
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
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
LA VARIABLE TIEMPO
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
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.
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;
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.
[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 .
[real valuev]] )
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;
qv = [ qs(1).var; ...
qs(i).var; ...
qs(p).var ]
φ (q, z, t) = 0 (4.2)
donde
T
z= z1 ( t ) . . . zi ( t ) . . . znz ( t ) (4.3)
φq q̇ = −φt − φz ż
φq q̈ = − φ̇q q̇ − φ̇t − φ̇z ż − φz z̈ (4.4)
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.
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.
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)
..........................
df ∂f ∂f ∂f
= v̇1 + . . . + v̇n + (4.5)
dt ∂ v1 ∂ vn ∂t
df ∂f
dt
= Fw 1
ẇ1 + . . . + Fw m
ẇm +
∂t
(4.6)
donde
Fw k
, k = 1 . . . m es el jacobiano de f respecto al vector w k .
df ∂f
dt
= Fq q̇ + Fz ż + Fq̇ q̈ + Fż z̈ + ∂t
(4.7)
106 Implementación
diff(f, t);
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).
Cp=zeros(g,1);
Cp(1)= ...;
.......
Cp(i)= ...;
.......
Cp(g)= ...;
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),
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.
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
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.
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
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)
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
h i bj h i
b b b
I = e1j e2j e3j
bi bi
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
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.
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.
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.
En las siguientes secciones se presentan, junto con una breve descripción teó-
rica, las funciones que implementan los operadores anteriores.
bk
b1
bd
bo
h i bo h ibd −1 h ibk −1 h i bo
I = I ... I ... I
bd bd bk b1
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
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
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
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
Po Pf
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
R1
R2
OR1
P
OR2
VR2 (P ) = VR2 (OR1 ) + ΩR2 (R1 ) ∧ OR1 P + VR1 (P ) (4.14)
donde
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, ...
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 .
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
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
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
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
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
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, ...
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.
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 .
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
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)
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)
φ (q i , t)
φ q i+1 , t
q i+2 q i+1 qi q
• De forma global,
T
φ q i+1 , t φ q i+1 , t < tol,
• Ecuación a ecuación,
φ q i+1 , t < 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.
Jp=zeros(g,p);
Jp(1,1)= ...;
..............
Jp(i,j)= ...;
..............
Jp(g,p)= ...;
φ = 0
φ0 = 0 (4.22)
i
φq (qi, t) δq = −φi (q i , t)
q i+1 = q i + µ δq (4.23)
130 Implementación
donde ahora:
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.
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).
Cpini=zeros(g+npi,1);
Cp=Cp(prm, q, z, t);
Cp_t0=Cp_t0(prm, q, z, t);
Cpini=[Cp;Cp_t0];
Jpini=zeros(g+npi, p);
Jp=Jp(prm, q, z, t);
Jp_t0=Jp_t0(prm, q, z, t);
Jpini=[Jp;Jp_t0];
EL PROBLEMA DE VELOCIDAD
φv (q0, t) = Q R (4.25)
• Q es ortogonal de dimensión c .
c
c
d
→
c−d
p d p−d
R (i, i) ≥ tol
4.3 Cinemática 133
q̇ d = q̇ 0 (1 : d) y q̇ i = q̇ 0 (d + 1 : p).
" #
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
−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.
Jv=zeros(g+r,p);
Jp=Jp(prm, q, z, t);
ACv=ACv(prm, q, z, t);
Jv=[Jp;ACv];
donde:
function [ACv]=ACv(prm, q, z, t)
ACv=zeros(r,p);
ACv(1,1)= ...;
..............
ACv(i,j)= ...;
..............
ACv(r,p)= ...;
según
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).
bv=zeros(g+r,1);
bv=[bCp;bCv];
136 Implementación
donde
bCp=zeros(g,1);
bCp(1)= ...;
.............
bCp(i)= ...;
.............
bCp(g)= ...;
bCv=zeros(r,1);
bCv(1)= ...;
..............
bCv(i)= ...;
..............
bCv(r)= ...;
φ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
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, ...
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
según
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).
bvini=zeros(g+r+nvi,1);
bvini=[bv;bv_t0];
140 Implementación
donde
EL PROBLEMA DE ACELERACIÓN
donde:
∂ φ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
" #
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
−1
q̈ d = − Rd,d b ,d
+ Rd,i q̈ i , (4.34)
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.
ba=zeros(g+r,1);
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
baCp=zeros(g,1);
y la segunda:
function [baCp]=baCp(prm, q, dq, z, dz, ddz, t)
baCp=zeros(g,1);
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:
dJpm = matrix_total_derivative(Jpm); y
dAcvm = matrix_total_derivative(ACvm);
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:
∂ φ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:
∂ φ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:
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)
qik − zk ( t ) = 0 , k = 1 . . . n (4.36)
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.
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.
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()
epsln=zeros(n,1);
epsln(1)=0;
...........
epsln(i)=0;
...........
epsln(n)=0;
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
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
donde
T
u= u1 (q, q̇, t) . . . ui (q, q̇, t) . . . unu (q, q̇, t) (4.38)
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.
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.
u=zeros(nu,1);
u(1)=u1;
.......
u(i)=ui;
.......
u(n)=un;
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
R = br
donde
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 .
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)
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)
T ENSORES DE I NERCIA
k
(Solk ) bi
= − Gk P k Gk P k dm (4.39)
Solk bi bi
b
v bi
ω bi
= v bi ∧ ω bi .
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.
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
Gk
R
Bk
Ok
Abs
mSolk , II k
(Solk )
Solk
OAbs
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.
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.
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.
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
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
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
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
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.
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:
• Torsores de acción y reacción actuantes sobre los sólidos a los que afecta el
citado par cinemático.
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.
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
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
h i
q̈
Mzq Vzq
= Qz
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
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.
Lk " Aj
#
∂
X ∂ F
VSol
zq
k
=− F
∂
Fż,k = −
∂ Aj
k
Aj
j=1 M k
+ Gk Bk ∧ F k xyz
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
q̇
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
q̈
Qz
=
T
φv 0 ba
Exportación de la matriz Me
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
Me_k=zeros(6,p);
Me_k(1,1)= ...;
..............
Me_k(i,j)= ...;
..............
Me_k(6,p)= ...;
Me=zeros(6*m,p);
Me= [ Me_sol_1(prm, q) ;
..................
Me_sol_k(prm, q) ;
..................
Me_sol_m(prm, q) ];
172 Implementación
Ve_k=zeros(6,ne);
Ve_k(1,1)= ...;
..............
Ve_k(i,j)= ...;
..............
Ve_k(6,ne)= ...;
Ve=zeros(6*m,ne);
Ve= [ Ve_sol_1(prm, q) ;
..................
Ve_sol_k(prm, q) ;
..................
Ve_sol_m(prm, q) ];
Qe_k=zeros(6,1);
Qei_sol_k(prm, q, dq);
donde:
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_k=zeros(6,1);
Qei_k(1,1)= ...;
...............;
Qei_k(6,1)= ...;
q̇
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
Qe=zeros(6*m,1);
............................
Qe_sol_k(prm, q, dq, u, t) ;
............................
Qe_sol_m(prm, q, dq, u, 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].
T
Vqz − φv λ=0 (4.45)
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)
T T
F ij , M ij y F ik , M ik
donde
T
nr = T1,nr . . . Ti,nr . . . TN n,nr (4.52)
• 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
i,r
F
Fq̇ =0 (4.57)
Vqz
i,r
i,r = 0 (4.58)
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
T
r = T1,r . . . Ti,r . . . TN r,r (4.60)
• Vqzi,r
representa la derivada parcial
i,r ∂ i,r
V qz =
∂ i,r
F
Fq̇ (4.62)
Nr
X i,r
F
Fq̇ =0 (4.63)
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
r
h i
1,r i,r N r,r
V qz = V qz
... V qz
... V qz
(4.65)
nr
0
r = (4.66)
r 0
0 V 0 λ,nr
qz
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()
Vqe=zeros(p*nr,ne);
....................
Vqe_joint_i(prm, q);
....................
Vqe_joint_nr(prm, q) ];
donde:
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)
Jvet=zeros(p*nr,nlmbde);
.....................
Jvet_joint_i(prm, q, z, t);
....................
Jvet_joint_nr(prm, q, z, t) ];
donde:
Jvet_i=zeros(p,nlmbde);
Jvet_i(1,1) = ...
.................
Jvet_i(i,j) = ...
.................
Jvet_i(p,ne) = ...
Vqe_0m=zeros(p,ne);
Vqe_0m(1,1) = ...
.................
Vqe_0m(i,j) = ...
.................
Vqe_0m(p,ne) = ...
186 Implementación
donde:
zeros(p*nr, 1) ;
zeros(p, 1) ;
h i
T q̈
Mqq φv λ
= Qq
i
Lk !T !
Solk
X ∂ VAbs (Gk ) ∂ F (Solk )
M qq
=
∂ q̇ ΩAbs (Solk ) ∂ q̈ M k (Solk )
xyz xyz
i=0
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
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
!T " #
A ∂ VAbs (Gk ) F Akj
Fq̇,kj
F =
∂ q̇ ΩAbs (Solk ) xyz M Akj + Gk Bk ∧ F Akj xyz
q̇
• 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
i
Lk !T " #
q̇ X ∂ VAbs (Gk ) F (Solk )
F
Fq̇,k =
∂ q̇ ΩAbs (Solk ) M k (Solk )
i=0 xyz
q̈ =0 xyz
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)
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
Ml=zeros(p,p);
......................
Ml_sol_i(prm, q) + ...
......................
Ml_sol_m(prm, q) ;
Qlc_t=zeros(q,1);
Qlc_t(1,1)= ....
................
Qlc_t(i,1)= ....
................
Qlc_t(i,1)= ....
Ql=zeros(q,1);
.................................
.................................
.....................................................
.....................................................
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)
q̇ = q̈ = 0 , t = t0 → z = z 0 , u = u0
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
∂ 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 δλ
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 )
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.
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
JQl_i=zeros(p,p);
JQl_i(1,1) = ...
.................
JQl_i(i,j) = ...
.................
JQl_i(p,p) = ...
y k = 1 . . . M.
4.4 Dinámica 197
JJplmbqm=zeros(p,p);
.............................................
.............................................
JJplmbq_iv=zeros(1,p);
JJplmbq_iv(1,1) = ...
.....................
JJplmbq_iv(i,j) = ...
.....................
JJplmbq_iv(1,p) = ...
EL PROBLEMA MODAL
q̇ d = q̇ (1 : d) y q̇ i = q̇ (d + 1 : p).
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)
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.
φ (q) − z = 0 (4.80)
200 Implementación
Qq (q, q̇, u)
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
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 =
∂q
Mq (q) q̈ N + (4.84)
#
∂ T ∂
+
∂q
φq (q) λN − Q (q, q̇ N , uN )
∂q q
q =q N
∂
CN =− Q (q , q̇, uN )
∂ q̇ q N
(4.85)
q̇ =q̇ N
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
" #
∂ T ∂
KEq = φq (q, z 0 , t0 ) λEq − F ne (q, u0 , t0 )
F
∂q ∂ q q̇
q =q Eq
donde:
i
MEq δ q̈ i + CiEq δ q̇ i + KiEq δq i = BiEq u (4.87)
4.4 Dinámica 203
donde
Eq
Mq,i δ q̈ i + KEq
q,i
δq i = 0. (4.88)
δq i = ψ Re B exp (iωt) , B∈ , (4.89)
Eq
KEq
q,i
ψ − ω2 Mq,i ψ=0 (4.90)
Eq
KEq
q,i
ψ = ω2 Mq,i ψ (4.91)
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 ,
fj = 2πωj
ni
X
δq = ψ j Re Bj exp (iωj t) = ψ Re B exp (iωt) (4.93)
j=1
ψ j , ωj , j = 1 . . . ni (4.94)
δq i = Ψ η , δ q̇ i = Ψ η̇ , δ q̈ i = Ψ η̈
Eq
ΨT Mq,i Ψ = I , (4.95)
donde ηj es de la forma
ηj = Re Bj exp (iωj t) , Bj ∈ .
Ψq 0 = SEq Ψq,i
206 Implementación
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
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
θ θ
θ0 = cos, θ1 = v1 sin
2 2
θ θ
θ2 = v2 sin , θ3 = v3 sin (4.98)
2 2
3
X
T
θ θ= θi = 1 (4.99)
i=0
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
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
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
γ
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
P EQUEÑAS ROTACIONES
α
z
3 3
2
2
x y
x
1
α̇
γ̇
z
3
β̇ 2
γ
y
1
β 1
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
• 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])
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
Argumentos de salida
Ninguno.
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
Sol2
Sol1
B1 ≡ B2
OAbs
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
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.
donde pt_name representa el nombre del punto de definición del par esféri-
co.
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
0
F 1 xyz
= − (ft /L) B1 B2 xyz
, M1 xyz
= 0
0 xyz
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.
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
Sol2
joint axis 1 30 ≡ 3
B2
0
1
1 3
s12 20
B1
α12
2
Sol1
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
Argumentos de salida
Ninguno.
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
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
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.
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
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
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.
F UERZA GRAVITATORIA
xyz
= 0 , M k xyz = 0
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.
Sol2
B2
Sol1
δL
L0
B1
donde
1
U (k) = kd (d − d0 )2
2
228 Implementación
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.
B1 2 δL3
B2
1 L0 δL2
Sol1 δL1
Sol2
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
1 T
U (k) = q a − L0 K l q a − L0
2
T
q a = δl1 δl2 δl3
Argumentos de salida
Ninguno.
Sol2
30
20
B2
B1 B2 3
L0
10
B1 2
1
Sol1
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
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
T
1 L0 Kl 0 L0
U (k) = qa − qa − ,
2 Θ0 0 Kr Θ0
T
qa = δl1 δl2 δl3 θ1 θ2 θ3
sym 3x1 L0, 3x1 Kl, 3x1 Cl, 3x1 R0, ...
Argumentos de salida
Ninguno.
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
• L es la longitud de la viga.
• A es el área de la sección.
1 T
U (k) = q
2 a
Kv qa
T
qa = δl1 − L δl2 δl3 θ1 θ2 θ3
Argumentos de salida
Ninguno.
3 Sol2
B1
30
K
1 2 B2
L0 10
20
Sol1
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
Argumentos de salida
Ninguno.
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 .
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.
main_symbolic.m
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
Qec_i.m i=1..n
Qe.m
Qei_i.m i=1..n
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
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
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
3 l2 or0, ref3
l1 a2
2
d e
1
a1
0
c
org0
−1
−4 −2 0 2 4 6 8 10 12
I NICIALIZACIÓN DE LA LIBRERÍA
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
P ROBLEMA DINÁMICO
5
bd1 → [ref1, d, m1, Izz1] g
4
b bd2 → [ref2, e, m2, Izz2]
d
e
1
c1 c3
c
0
org0
body0 → [ref0, org0, 0, 0] k3, l03
−1
0 2 4 6 8 10 12
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
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
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’);
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
1
El listado de dichas plantillas se presenta en los anexos A.2 y A.5 respectivamente.
256 Ejemplos
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)
P ROBLEMA DINÁMICO
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
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
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
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]
(x − xc )2 + (y − yc )2 = rd2
or2, ref2 or3, ref3
b
e
a2
a3
d c
Pg
a1
(xpg, ypg)
org0
or1, ref1
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
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
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
donde:
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
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)
Bandeja
Bastidor Ballestas
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
aS 3 + bS ωs − ω
Tm = , S = (5.1)
cS 4 + dS 2 + 1 ωs
donde:
Tm = Cm (ωs − ω) = am ω + bm (5.2)
T [N m]
Tmax
T = −0,2 ω + 21
T = Cm (ω − ωs )
ωs = 105 ω [rad/s]
φ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
t = t0 t=∞
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
excéntrica
l_bs/2 l_bs/2
drha.
b2_bs b4_bs
w_bs/2
vista planta
y
x
rear front
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
P ROBLEMA DINÁMICO
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)
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
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
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’)
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
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
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)
4
nótese que dicho movimiento es el promotor del arrastre de producto en la máquina transpor-
tadora.
292 Ejemplos
z, dz, ddz, u q, dq
Bucle de realimentacion
4
−1
0 2 4 6 8 10 12
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)
q̇
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.
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
5
bd1 → [ref1, d, m1, Izz1] g
4
b bd2 → [ref2, e, m2, Izz2]
d
e
1
u → u [prm, q, dq] c
0
org0
−1
0 2 4 6 8 10 12
P ROBLEMA DE CONTROL
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:
Modulo de control
alternativo
6
para más información, léase el listado de la plantilla modelo.mdl , anexo A.6.
5.7 Ejemplo 5 297
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]
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 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.
• 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.
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:
que junto con el operador Derivada Total, constituyen la base para el plan-
teamiento de la Cinemática Analítica.
que junto con los tipos de dato anteriores, permiten plantear los diferentes
problemas de la Cinemática documentados en el Capítulo 4.
A NIVEL N UMÉRICO
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
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
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
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;
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
95
96 dydt=matlab_odefun(t, y, prm, tolv, tola);
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);
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
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 }
10 nz=sys_sizes(2,1);
11 nu=sys_sizes(3,1);
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);
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 ;
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
15 end
16
17 end
18
19 new_q= q;
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);
En este caso, las velocidades auxiliares son necesarias para evaluar correcta-
mente el vector de cargas en cada instante de tiempo.
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;
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;
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;
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
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
φa = φa (q, a) = 0 , (C.2)
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
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
ä = Sa q̈ − T a (C.11)
donde
h i
a −1 a
h i
a −1
Sa =− φa φq y Ta = − φa baa
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
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
[Inc95] ANSYS Inc, Ansys user’s guide and reference manual, SAS IP, Ca-
nonsburg,Pennsylvania, 1995.
[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.
[Mat02a] The Math Works Inc, Natick, Massachussetts, Using matlab, version
6.5, 2002.
BIBLIOGRAFÍA 367
[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
[Sha98] A. Shabana, Dynamics of multibody systems, 2nd ed., Wiley & Sons,
New York, 1998, ISBN: 0-521-59446-4.
[Wal00] L. Wall, Programming perl, O’Reilly, New York, 2000, ISBN: 0-596-
00027-8.