Advertencia: La redacción aquí es desde el punto de vista de la robótica, y no específica para el desarrollo de juegos. Para los videojuegos, es mucho más simple considerar figuras palo de masas puntuales, en lugar de la dinámica de cuerpos rígidos 3D completos (mostrada abajo).
Un muñeco articulado está principalmente conectado con articulaciones esféricas, que restringen la posición de un punto del cuerpo rígido y permiten los tres grados de libertad. No hay respuestas fáciles, aunque las ecuaciones necesarias se pueden encontrar en un libro de dinámica de nivel universitario.
Cada junta compleja se modela como una secuencia de articulaciones más simples de un grado de libertad (1DOF), cada una con su propia posición de articulación (o ángulo), velocidad y aceleración.
Lo básico para tratar con sistemas es primero resolver la cinemática (cómo se relacionan todos los movimientos individuales de cada cuerpo entre sí), aplicar las leyes de Newton para relacionar cómo se relacionan todas las fuerzas individuales entre sí, y finalmente, utilizar las relaciones de poder en las articulaciones para resolver todo. Como mencioné, no hay respuestas fáciles.
Configuración del Problema
Considera el siguiente ejemplo simple (?!?), con dos cuerpos conectados a través de una articulación de bisagra.
-
Ejemplo - El Cuerpo 1 se considera el cuerpo padre, y el cuerpo 2 el hijo. Por lo tanto, la posición $\vec{r}_2$ del cuerpo 2, es una función de la posición $\vec{r}_1$ del cuerpo 1, así como del ángulo de la articulación $\theta$. El eje de la articulación de bisagra $\hat{z}$ es un vector unitario descrito en coordenadas mundiales abajo.
-
Cinemática de Posición - Este es uno de los pasos más complejos generalmente, pero utilizando la geometría y la orientación de los cuerpos, se describe la posición de la articulación $\vec{r}_A$ desde la posición $\vec{r}_1$ y la matriz de orientación (rotación) 3x3 $\mathbf{R}_1$ del cuerpo 1. Luego, la orientación del cuerpo 2 se describe recursivamente $$ \mathbf{R}_2 = \mathbf{R}_1 \mathrm{rot}(\hat{z},\theta) \tag{1} $$ La posición del cuerpo 2 se describe recursivamente $$ \vec{r}_2 = \vec{r}_1 + \mathbf{R}_1 \text{(local a 1)} + \mathbf{R}_2 \text{(local a 2)} \tag{2} $$
-
Cinemática de Velocidad - Este es el paso menos complejo ya que implica ecuaciones bastante intuitivas, que son el resultado de diferenciar las expresiones anteriores
$$ \begin{aligned} \vec{\omega}_2 &= \vec{\omega}_1 + \hat{z} \dot{\theta} \\ \vec{v}_2 & = \vec{v}_1 + \vec{\omega}_1 \times ( \vec{r}_A - \vec{r}_1) + \vec{\omega}_2 \times (\vec{r}_2 - \vec{r}_A) \end{aligned} \tag{3}$$ Si hubiera algún deslizamiento a lo largo de $\hat{z}$ entonces la velocidad $\vec{v}_2$ tendría algún componente añadido paralelo a $\hat{z}$.
-
Cinemática de Aceleración - Diferenciar las velocidades usando la regla de la cadena produce las aceleraciones y esto es más complejo porque hay muchos términos involucrados.
$$ \begin{aligned} \vec{\alpha}_2 &= \vec{\alpha}_1 + \hat{z} \ddot{\theta} + \vec{\omega}_1 \times \hat{z} \dot{\theta} \\ \vec{a}_2 & = \vec{a}_1 + \vec{\alpha}_1 \times ( \vec{r}_A - \vec{r}_1) + \vec{\alpha}_2 \times (\vec{r}_2 - \vec{r}_A) +\\ & + \vec{\omega}_1 \times ( \vec{v}_A - \vec{v}_1) + \vec{\omega}_2 \times (\vec{v}_2 - \vec{v}_A) \end{aligned} \tag{4}$$
-
Dinámica - Aquí es donde nos apoyamos en los diagramas de cuerpo libre para equilibrar las fuerzas y momentos. Considera solo la gravedad presente, y la articulación generando algún vector de fuerza $\vec{F}$ y momento $\vec{M}_A$ que se aplica de manera igual y opuesta a cada cuerpo. Pero primero, necesitamos encontrar el tensor de momento de inercia de masa (matriz 3x3) usando las matrices de orientación. Utiliza $ \mathbf{I}_1 = \mathbf{R}_1 \mathbf{I}_\text{body} \mathbf{R}_1^\top $ para el cuerpo 1 y $ \mathbf{I}_2 = \mathbf{R}_2 \mathbf{I}_\text{body} \mathbf{R}_2^\top $ para el cuerpo 2, donde $\mathbf{I}_\text{body}$ es el tensor de momento de inercia de masa en coordenadas montadas en el cuerpo (una matriz constante).
$$ \begin{aligned} -\vec{F} + m_1 \vec{g} & = m_1 \vec{a}_1 \\ -\vec{M}_A - ( \vec{r}_A - \vec{r}_1) \times \vec{F} & = \mathbf{I}_1 \vec{\alpha}_1 + \vec{\omega}_1 \times \mathbf{I}_1 \vec{\omega}_1 \end{aligned} \tag{5} $$
$$ \begin{aligned} \vec{F} + m_2 \vec{g} & = m_2 \vec{a}_2 \\ \vec{M}_A + ( \vec{r}_A - \vec{r}_2) \times \vec{F} & = \mathbf{I}_2 \vec{\alpha}_2 + \vec{\omega}_2 \times \mathbf{I}_2 \vec{\omega}_2 \end{aligned} \tag{6} $$
-
Potencia de la Articulación - La última parte para hacer el problema resoluble es imponer que las fuerzas y momentos en la articulación no añadan potencia al sistema (solo fuerzas de restricción). Para la simulación de muñecos de trapo, todas las articulaciones son libres de moverse, y por lo tanto deben obedecer la ley de entrada igual a salida de potencia. Para una articulación de espiga, lo anterior se simplifica a lo siguiente
$$ \hat{z} \cdot \vec{M}_A = 0 \tag{7}$$
Solución
Tenemos 6 movimientos desconocidos para cada cuerpo (traslación y rotación) más el movimiento de la articulación por resolver. Además, hay 6 componentes de fuerza/momento en la articulación desconocidos. Esto nos da un total de 6*2+1+6=19
incógnitas en el problema anterior.
También tenemos 2 ecuaciones vectoriales de cinemática, 4 ecuaciones vectoriales de dinámica más 1 ecuación escalar de potencia. Esto nos da un total de 2*3+4*3+1=19
ecuaciones para resolver el sistema, por lo tanto el sistema es resoluble.
4 votos
Eso parecería ser una situación que clama por ser tratada en mecánica lagrangiana (porque puedes definir la mayoría de tus coordenadas generalizadas como los ángulos de articulación). Vea cualquier texto de mecánica de división superior o graduado.
0 votos
También te podría interesar la pregunta Recursos para aprender a programar simulaciones de cuerpos rígidos en gamedev.SE