Integración de movimiento rotacional (Dinámica de cuerpo rígido)

Estoy tratando de integrar el movimiento de rotación de un cuerpo rígido (un conjunto de N masas puntuales) en el marco inercial , pero mis resultados parecen totalmente erróneos. ¿Cuál de los siguientes pasos podría estar mal?

1) Asumiendo solo un marco inercial, podemos escribir:

d L d t = τ d ( I ω ) d t = τ d I d t ω + I d ω d t = τ d ω d t = I 1 ( τ d I d t ω ) ( 1 )

2) En el marco inercial tenemos:

r i ( t ) = X i ( t ) X ^ + y i ( t ) y ^ + z i ( t ) z ^
v i ( t ) = r ˙ i ( t ) = X ˙ i ( t ) X ^ + y ˙ i ( t ) y ^ + z ˙ i ( t ) z ^
ω ( t ) = ω X ( t ) X ^ + ω y ( t ) y ^ + ω z ( t ) z ^
r ˙ i ( t ) = ω × r i

3) Como he asumido solo un marco inercial, el tensor de inercia I será una función del tiempo y se actualizará en cada paso de tiempo t .

I ( t ) = [ I X X I X y I X z I y X I y y I y z I z X I z y I z z ]

dónde

I X X = metro i ( y i 2 + z i 2 )

I y y = metro i ( X i 2 + z i 2 )

I z z = metro i ( X i 2 + y i 2 )

I X y = I y X = metro i X i y i

I X z = I z X = metro i X i z i

I y z = I z y = metro i y i z i

He calculado la derivada de I ser:

I ˙ = [ I ˙ X X I ˙ X y I ˙ X z I ˙ y X I ˙ y y I ˙ y z I ˙ z X I ˙ z y I ˙ z z ]

dónde

I ˙ X X = metro i ( 2 y i y ˙ i + 2 z i z ˙ i )

I ˙ y y = metro i ( 2 X i X ˙ i + 2 z i z ˙ i )

I ˙ z z = metro i ( 2 X i X ˙ i + 2 y i y ˙ i )

I ˙ X y = I ˙ y X = metro i ( X ˙ i y i + X i y ˙ i )

I ˙ X z = I ˙ z X = metro i ( X ˙ i z i + X i z ˙ i )

I ˙ y z = I ˙ z y = metro i ( y ˙ i z i + y i z ˙ i )

4) integro la ecuación diferencial ( 1 ) usando un esquema simple de Runge-Kutta 4 como este:

t i + 1 = t i + h
ω i + 1 = ω i + h 6 ( k 1 + 2 k 2 + 2 k 3 + k 4 )

dónde h es el paso de tiempo de integración y

k 1 = F ( ω i )
k 2 = F ( ω i + k 1 h 2 )
k 3 = F ( ω i + k 2 h 2 )
k 4 = F ( ω i + k 3 h )

Comienzo la simulación inicializando el sistema con una velocidad angular ω 0 . Después de eso, en cada paso de tiempo giro todo norte puntos del cuerpo rígido alrededor del vector actual ω por un ángulo | ω | h usando una matriz de rotación calculada a través de la fórmula de Rodrigues

R = j + pecado ( ω h ) W + [ 1 porque ( ω h ) ] W 2

dónde j es el 3 × 3 matriz de identidad y W = [ 0 tu z tu y tu z 0 tu X tu y tu X 0 ] con tu = ω | ω |

Después de la rotación/actualización de todos norte puntos, recalculo el tensor de inercia I (y por lo tanto I ˙ y I 1 ) y luego, mediante la ecuación ( 1 ) Actualizo la velocidad angular ω . El ciclo continúa desde t = 0 hasta algunos t metro a X con paso h . El problema es que, al principio, los resultados son correctos (el momento angular y la energía son constantes), pero después de un tiempo de iteraciones, los números crecen rápidamente demasiado y me lleno de NaN. Incluso para el caso más simple donde el par externo es τ = 0 , sucede lo mismo. Revisé si hay un problema con el determinante de I (y por lo tanto no se puede invertir), pero el determinante sigue siendo distinto de cero. ¿Hay algo malo con alguna de las ecuaciones? ¿Debo realizar algún tipo de normalización a una cantidad durante el ciclo de tiempo? Debe haber una manera de simular la rotación del cuerpo rígido en el marco de inercia. Gracias.

algunas sugerencias: prefiera los métodos implícitos a los explícitos, ya que suelen ser más estables numéricamente. También recuerde que RK no conserva energía, es posible que desee aplicar algunas restricciones/multiplicadores de Lagrange para asegurarse de que las variaciones de energía permanezcan en cero en un orden aceptable
Si desea que los resultados sean más precisos, también puede intentar cambiar el eje al eje principal donde el tensor del momento de inercia es diagonal. Ver en.wikipedia.org/wiki/Moment_of_inertia#Principal_axes
No veo de donde sacas r(t) ? ¿Dónde están tus ecuaciones de movimiento para la traslación?
@Eli Realicé las ediciones adecuadas en la publicación, explicando exactamente cómo actualizo r (t) de cada punto. También aquí solo hay rotación. Sin traslación del centro de masa.
@RishabhJain El cuerpo está orientado desde el principio de tal manera que los ejes x, y, z coinciden con los ejes principales de inercia (el tensor de inercia es diagonal).
@lurscher Cierto, pero incluso el método explícito de primer orden 'peor' debería causar una deriva de error estable en la energía y el momento angular del cuerpo. En mi caso, estas cantidades crecen hasta el infinito en cuestión de unas pocas iteraciones de tiempo.
deberías extender tus ecuaciones diferenciales para ω ˙ con r ˙ = ω × r y resuelve ambas ecuaciones diferenciales, entonces resuelves ahora y ˙ = F ( y ) dónde y = [ ω , r ] T . ¿Qué hay de las condiciones iniciales?
¿Qué límites estás usando para tu Δ t ? me aseguraría Δ t << π / 2 ω sorber con ω sorber siendo un límite superior en todas sus velocidades angulares en cualquier paso de tiempo dado
@Eli No, no hay necesidad de agregar otra ODE en el problema. r ˙ se utiliza para calcular el nuevo ω . Pero r ˙ se calcula directamente a través de la antigua ω .
me puedes explicar como calculas r ˙ yr?
@MichaelGaitanas ¿Puede poner algunos gráficos en la pregunta que también muestren el aumento de energía y el momento angular total (si corresponde) en el tiempo para que las personas puedan entender mejor lo que está sucediendo?
Consulte estas notas sobre cómo modelar e integrar cuerpos rígidos.

Respuestas (1)

No seguí tu derivación de d I d t . En la mayoría de los libros de texto se evalúa de la siguiente manera

d I d t = ω × I = | 0 ω z ω y ω z 0 ω X ω y ω X 0 | | I X X I X y I X z I X y I y y I y z I X z I y z I z z |

con la salvedad añadida de que I depende de la orientación del cuerpo. La orientación se puede rastrear utilizando ángulos de Euler, cuaterniones o simplemente la matriz de rotación de 3 × 3 R . De cualquier manera, el resultado final es que el momento de masa del tensor de inercia debe calcularse en cada instante a partir del MMOI en el marco del cuerpo.

I = R I b o d y R

Al final tienes las ecuaciones de movimiento.

τ = I ω ˙ + ω × I ω } ω ˙ = I 1 ( τ ω × I ω )

También es común expresar lo anterior en términos de momento angular en el siguiente algoritmo. A cada paso de integración se le da la matriz de rotación R y vector de impulso L

Paso Cálculo notas 0 I = R I b o d y R MMOI en coordenadas mundiales 1 ω = I 1 L Extraer vector rotacional 2 R ˙ = ω × R Cambio de rotación 3 L ˙ = τ ( t , R , ω ) Cambio en el impulso debido al par  τ

Nota : Al integrar la matriz de rotación R usando Runge-Kutta el resultado de R R + h R ˙ ya no es una matriz de rotación y la precisión de la solución se degradará rápidamente.

Entonces, en cambio, la gente a menudo usa cuaterniones q ^ = ( q v q s ) que describen la rotación como

R = 1 + 2 q s [ q v × ] + 2 [ q v × ] [ q v × ]
dónde [ q v × ] = | 0 z y z 0 X y X 0 | es el operador matricial de producto vectorial de 3 × 3 de la parte vectorial del cuaternión q v .

La derivada del cuaternión se define como

q ^ ˙ = 1 2 ( ω q v q s ω + ω × q v )

Hay dos formas de integrar el cuaternión

  • usar q ^ q ^ + h q ^ ˙ que requiere una nueva normalización después de cada subpaso.

  • Dado q ^ = ( q v q s ) y ω vector

    ( q v q s ) | porque ( θ 2 ) pecado ( θ 2 ) z pecado ( θ 2 ) z porque ( θ 2 ) + pecado ( θ 2 ) [ z × ] | ( q v q s )

    dónde θ = h ω es el ángulo de paso y z = ω / ω es el eje de rotación del paso.

    El cuaternión resultante aún representa rotaciones siempre y no se aleja como lo hacen otras formulaciones, pero es inestable para valores de rotación bajos, como puede ver en la ω en el denominador.