Modelagem baseada na f sica simula o de corpos r gidos
This presentation is the property of its rightful owner.
Sponsored Links
1 / 59

Modelagem Baseada na Física Simulação de Corpos Rígidos PowerPoint PPT Presentation


  • 61 Views
  • Uploaded on
  • Presentation posted in: General

Modelagem Baseada na Física Simulação de Corpos Rígidos. César Candido Xavier Mestrado Computação Gráfica UFRJ - COPPE. Objetivo. Apresentar os principais conceitos das notas de aula elaboradas por David Baraff no Modelamento Baseado na Física para simulação de movimentos de Corpos Rígidos.

Download Presentation

Modelagem Baseada na Física Simulação de Corpos Rígidos

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Modelagem baseada na f sica simula o de corpos r gidos

Modelagem Baseada na FísicaSimulação de Corpos Rígidos

César Candido Xavier

Mestrado Computação Gráfica

UFRJ - COPPE


Objetivo

Objetivo

Apresentar os principais conceitos das notas de aula elaboradas por David Baraff no Modelamento Baseado na Física para simulação de movimentos de Corpos Rígidos.


Roteiro

Roteiro

  • Modelando o Movimento de uma Partícula

  • Modelando o Movimento um Corpo Rígido

    • Velocidade Angular

    • Massa de um Corpo

    • Centro de Massa

    • Força e Torque

    • Momento Linear

    • Momento Angular

      • Momento Inércia

  • Equação Movimento de um Corpo Rígido

  • Codificação em C++

  • Conclusão

  • Bibliografia


Modelando o movimento de uma part cula

Modelando o Movimento de uma Partícula

Movimento de uma Partícula


Estado da part cula

Estado da Partícula


Din mica da part cula

Dinâmica da Partícula


Vari veis de estado

Variáveis de Estado


M ltiplas part culas

Múltiplas Partículas


Vari veis de estado1

Variáveis de Estado


Solu o edo

Solução EDO


Solu o edo1

Solução EDO

Y(t0)

len

t0 Solucionador Y(t1)

EDO

t1

dydt

void dydt(double t, double y[ ],double ydot[ ])


Modelagem baseada na f sica simula o de corpos r gidos

dydt


Modelando um corpo r gido

Modelando um Corpo Rígido

  • Variáveis de Estado do Corpo Rígido


Equa o movimento de um corpo r gido

Equação Movimento de um Corpo Rígido


Malha de for as

Malha de Forças


Orienta o

Orientação

  • Iremos representar a orientação de um corpo rígido pela matriz de rotação R(t). Os pontos são transformados de coordenadas do corpo para coordenadas do espaço como:

    P(t)=R(t)p0 + x(t)


Mudan a de coordenadas

Mudança de Coordenadas

Coordenadas Espaço CorpoCoordenadas Espaço


Velocidade angular

Velocidade Angular

  • Representamos a velocidade angular como um vetor, w(t), o qual codifica tanto a velocidade quanto o eixo de giro.

    • Como w(t) e R(t)

      se relacionam ?


Interpreta o f sica da matriz r t

Interpretação Física da Matriz R(t)

  • Sabemos que:

  • Quem seria:


Rela o entre w t e r t

Relação entre w(t) e R(t)

  • r(t) é fixo ao corpo, logo independe da translação do corpo;


Rela o entre w t e r t1

Relação entre w(t) e R(t)

  • Sabemos que no tempo t a direção do eixo x é dado pela primeira coluna da matriz de rotação.

  • A derivadadesta, é a taxa de mudança deste vetor que é:

  • Sabemos entretanto que a  b é:


Rela o entre w t e r t2

Relação entre w(t) e R(t)

  • Dado um vetor a podemos definir a* como sendo a matriz:

  • Então a  b pode ser escrito:


Rela o entre w t e r t3

Relação entre w(t) e R(t)

  • Utilizando a formulação anterior temos que:

  • Pode ser escrito como:

  • Como a matriz à direita é R(t) podemos escrever:


Massa de um corpo

Massa de um Corpo

  • Consideremos um corpo rígido feito de um número grande de pequenas partículas, cada uma localizada:

  • A massa total M do corpo será


Velocidade de uma part cula

Velocidade de uma Partícula

  • A velocidade é dada pela derivada da posição da partícula, ou seja:

  • Podemos reescrever como:


Velocidade de uma part cula1

Velocidade de uma Partícula


Centro de massa

Centro de Massa

  • É definido como

  • Quando utilizamos o centro de massa como sistema de coordenadas do corpo, queremos dizer que:


Centro de massa1

Centro de Massa

  • Qual a localização do centro de massa em t ?

  • Outra relação importante:


Equa o do movimento corpo r gido

Equação do Movimento Corpo Rígido


For a e torque

Força e Torque

  • Torque difere da força uma vez que o torque em uma partícula depende da localização relativa da mesma em relação ao centro de massa x(t).

  • Intuitivamente a direção do torque é o do eixo em torno do qual o corpo gira.

  • F(t) não traz informações sobre onde as várias forças agem em um corpo, ao contrário de τ(t), que nos dá a distribuição de forças sobre o corpo.


For a e torque1

Força e Torque


For a e torque2

Força e Torque


Momento linear

Momento Linear

  • O Momento Linear de uma partícula é definido como sendo:

  • O momento total P(t) é:

  • Podemos escrevê-lo como:


Momento linear1

Momento Linear

  • O momento linear de um corpo rígido é o mesmo se ele fosse uma partícula de massa M e velocidade v(t).

  • Obtemos diretamente:


Momento angular

Momento Angular

  • É o menos intuitivo dos conceitos vistos até aqui...

  • Proporcionará equações mais simples...

  • O momento angular é definido como:


Momento angular1

Momento Angular


Momento angular2

Momento Angular

  • Sabemos que: .

  • Multiplicando vetorialmente por r :

    • ou seja,

  • Sabemos que: , o qual podemos escrever como:


Momento angular3

Momento Angular

  • O momento angular total de um corpo rígido será:

  • E o torque total será:

  • Que é o equivalente de


Tensor momento de in rcia

Tensor (Momento) de Inércia

  • Em um corpo rígido as partículas mantêm as mesmas posição relativas.

  • Consideremos um corpo rígido girando com velocidade angular em torno de um eixo. Seja K a energia cinética deste corpo.


Rela o entre o tensor de in rcia e a velocidade angular

Relação entre o Tensor de Inércia e a Velocidade Angular

  • Podemos demonstrar que:

  • Que é a forma similar de

  • O momento de inércia I(t) é o fator de escala entre o momento angular L(t) e a velocidade angular w(t).


Momento de in rcia

Momento de Inércia

  • Seja ri’ o deslocamento da i-ésima partícula em relação a x(t) no tempo t, ou seja:

  • O momento de inércia I(t) é expresso em termos de ri’ como a seguinte matriz simétrica:


Momento de in rcia1

Momento de Inércia

  • Usando o fato de que podemos reescrever I(t) como a diferença :

  • Tomando o produto:


Momento de in rcia2

Momento de Inércia

  • Seja 1a matriz unitária 33, podemos expressar I(t) como:

  • Sabemos que onde é constante. Daí e podemos escrever I(t) como:


Momento de in rcia3

Momento de Inércia


Inverso do momento de in rcia

Inverso do Momento de Inércia


Equa es do movimento do corpo r gido

Equações do Movimento do Corpo Rígido

  • Temos finalmente todos os conceitos que especificam o vetor de estados Y(t)


Codifica o b sica em c

Codificação Básica em C++

  • Assumamos a existência de tipos denominados de matrix e triple, as quais implementam operações (soma, subtração e multiplicação) respectivamente, sobre matrizes 33 e pontos em 3-d.


Estrutura de um corpo r gido

Estrutura de um Corpo Rígido

struct RigidBody { /* Constant quantities */ double mass; /* mass M */

matrix Ibody, /* Ibody */ Ibodyinv; /* I-1body (inverse of Ibody) */

/* State variables */

triple x; /* x(t) */ matrix R; /* R(t) */ triple P, /* P(t) */ L; /* L(t) */

/* Derived quantities (auxiliary variables) */

matrix Iinv; /* I-1(t) */

triple v, /* v(t)*/ omega; /* w(t) */

/* Computed quantities */

triple force, /* F(t)*/ torque; /* τ(t) */

};

/*and assume a global array of bodies */

RigidBody Bodies[NBODIES];


Estrutura de um corpo r gido1

Estrutura de um Corpo Rígido

  • As quantidades mass, Ibody e Ibodyinv devem ser previamente calculadas para cada membro do conjunto de “Bodies”.

  • Todas as condições iniciais para cada corpo rígido também são especificadas pela atribuição valores às variáveis de estado x, R, P e L de cada membro de “Bodies”.


Passando par metros ao solucionador de edo

Passando parâmetros ao solucionador de EDO

/* Copy the state information into an array */

void State_to_Array(RigidBody *rb, double *y)

{*y++ = rb->x[0]; /* x component of position */

*y++ = rb->x[1]; /* etc. */

*y++ = rb->x[2];

for(int i = 0; i < 3; i++) /* copy rotation matrix */

for(int j = 0; j < 3; j++)

*y++ = rb->R[i,j];

*y++ = rb->P[0];*y++ = rb->P[1];*y++ = rb->P[2];

*y++ = rb->L[0];*y++ = rb->L[1];*y++ = rb->L[2];

}


Recebendo par metros do solucionador de edo

Recebendo parâmetros do solucionador de EDO

/* Copy information from an array into the state variables */

void Array_to_State(RigidBody *rb, double *y)

{rb->x[0] = *y++;rb->x[1] = *y++;rb->x[2] = *y++;

for(int i = 0; i < 3; i++)

for(int j = 0; j < 3; j++)

rb->R[i,j] = *y++;

rb->P[0] = *y++;rb->P[1] = *y++;rb->P[2] = *y++;

rb->L[0] = *y++;rb->L[1] = *y++;rb->L[2] = *y++;

/* Compute auxiliary variables... */

/* v(t)=P(t)/M */

rb->v = rb->P / mass;

/* I-1(t)=R(t) I-1body R(t) T*/

rb->Iinv = R * Ibodyinv * Transpose(R);

/* w(t)=I-1(t)L(t) */

rb->omega = rb->Iinv * rb->L;

}


Passando e recebendo o estado de todos os corpos

Passando e recebendo o estado de todos os corpos

#define STATE_SIZE 18

void Array_to_Bodies(double y[])

{

for(int i = 0; i < NBODIES; i++)

Array_to_State(&Bodies[i], &y[i * STATE_SIZE]);

}

void Bodies_to_Array(double y[])

{

for(int i = 0; i < NBODIES; i++)

State_to_Array(&Bodies[i], &y[i * STATE_SIZE]);

}


Computando dydt

Computando dydt

  • Suporemos que exista a função que calcula a força F(t) e o Torque τ(t) agindo sobre cada corpo:

    void Compute_Force_and_Torque(double t, RigidBody *rb);

  • Assim dydt será:

    void dydt(double t, double y[], double ydot[])

    {

    /* put data in y[] into Bodies[] */

    Array_to_Bodies(y);

    for(int i = 0; i < NBODIES; i++)

    { Compute_Force_and_Torque(t, &Bodies[i]);

    ddt_State_to_Array(&Bodies[i],&ydot[i * STATE_SIZE]);

    m}

    }


Fun o que atualiza a estrutura de dy t dt do corpo r gido

Função que Atualiza a Estrutura de dY(t)/dt do Corpo Rígido

void ddt_State_to_Array(RigidBody *rb, double *ydot)

{

/* copy dx/dt=v(t) into ydot */

*ydot++ = rb->v[0];*ydot++ = rb->v[1];*ydot++ = rb->v[2];

/* Compute dR/dt=w(t)*R(t) */

matrix Rdot = Star(rb->omega) * rb->R;

/* copy dR/dt into array */

for(int i = 0; i < 3; i++)

for(int j = 0; j < 3; j++)

*ydot++ = Rdot[i,j];

/*dP/dt=F(t) */

*ydot++ = rb->force[0]; *ydot++ = rb->force[1]; *ydot++ = rb->force[2];

/* dL/dt=τ(t) */

*ydot++ = rb->torque[0]; *ydot++ = rb->torque[1]; *ydot++ = rb->torque[2];

}


Rotina star

Rotina Star

  • A rotina Star utilizada é definida como:

    matrix Star(triple a);

    e retorna a seguinte matrix:


Executando a simula o

Executando a Simulação

void RunSimulation()

{ double y0[STATE_SIZE * NBODIES], yfinal[STATE_SIZE * NBODIES];

InitStates();

Bodies_to_Array(yfinal);

for(double t = 0; t < 10.0; t += 1./30.)

{/* copy yfinal back to y0 */

for(int i = 0; i < STATE_SIZE * NBODIES; i++)

y0[i] = yfinal[i];

ode(y0, yfinal, STATE_SIZE * NBODIES,t, t+1./30., dydt);

/* copy dY(t+1/30.)/t into state variables */

Array_to_Bodies(yfinal);

DisplayBodies();

}

}


Quaternions x matrix de rota es

“Quaternions” x Matrix de Rotações

  • A matriz de “quaternions” é um tipo que comporta apenas 4 elementos;

  • Evita-se o uso da matriz de rotação devido a maior propagação de erros numéricos (“drift”);

  • Visualmente percebe-se um efeito de “deslizamento”; e

  • Enquanto a matriz de rotação faz uso de nove parâmetros para descrever três graus de liberdade, os quaternions utilizam quatro parâmetros com um único descrevendo os três graus de liberdade menos “drift” que as matrizes de rotação.


Conclus o

Conclusão

  • Foi apresentado, passo a passo, todo o “background” utilizado na Modelagem Baseada na Física para implementação de movimentos de corpos rígidos, assim como uma pequena codificação em C++ que pode ser utilizada como um “first step” no desenvolvimento do aplicativo.


Bibliografia

Bibliografia

  • “An Introduction to Physically Based Modeling: Rigid Body Simulation I – Unconstrained Rigid Body Dynamics”; David Baraff (Notas do Curso Siggraph 94/97);

  • Física Vol.1; R. Resnick e D. Halliday

  • “Physically-Based Modeling for Computer Graphics”; Ronen Barzel


  • Login