1 Modelagem Baseada na Física Simulação de Corpos Rígidos César Candido Xavier Mestrado...

Post on 16-Apr-2015

108 views 0 download

Transcript of 1 Modelagem Baseada na Física Simulação de Corpos Rígidos César Candido Xavier Mestrado...

1

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

César Candido XavierMestrado Computação GráficaUFRJ - COPPE

2

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.

3

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

4

Modelando o Movimento de uma Partícula

Movimento de uma Partícula

5

Estado da Partícula

)(

)(

tv

txY

6

Dinâmica da Partícula

7

Variáveis de Estado

mtF

tv

tv

tx

dt

dY

dt

d

/)(

)(

)(

)(

8

Múltiplas Partículas

)(tF )(tF

)(tF)(tF

)(tv

)(tv

)(tv

)(tv

9

Variáveis de Estado

mtF

tv

mtF

tv

tv

tx

tv

tx

dt

dY

dt

d

n

n

n

n

/)(

)(

/)(

)(

)(

)(

)(

)(

1

1

1

1

10

Solução EDO

11

Solução EDO

Y(t0)

len t0 Solucionador Y(t1)

EDO

t1

dydt

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

12

dydt

mtF

tv

mtF

tv

tYdt

d

tv

tx

tv

tx

tY

n

n

n

n

/)(

)(

/)(

)(

)(

)(

)(

)(

)(

)(1

1

1

1

13

Modelando um Corpo Rígido

• Variáveis de Estado do Corpo Rígido

14

Equação Movimento de um Corpo Rígido

?

)(

?

)(

?

)(

?

)(11

tF

tv

tMv

tx

dt

dY

dt

d

15

Malha de Forças

1f

1f

1f

2f

3f

1)( ftF

16

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)

17

Mudança de Coordenadas

Coordenadas Espaço CorpoCoordenadas Espaço

18

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 ?

19

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

• Sabemos que:

• Quem seria:

xz

xy

xx

r

r

r

tR

0

0

1

)(

zzyzxz

zyyyxy

zxyxxx

rrr

rrr

rrr

tR )(

?

0

0

1

)(

tR

20

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

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

btwtr )()(

btwtr

)()(

21

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 derivada desta, é a taxa de mudança deste vetor que é:

• Sabemos entretanto que a b é:

xz

xy

xx

r

r

r

tw )(

yxyx

zxzx

zyzy

abba

abba

abba

22

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:

0

0

0

xy

xz

yz

aa

aa

aa

a

ba

abba

abba

abba

b

b

b

aa

aa

aa

ba

yxyx

zxzx

zyzy

z

y

x

xy

xz

yz

0

0

0

23

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:

zz

zy

zx

yz

yy

yx

xz

xy

xx

r

r

r

r

r

r

r

r

r

twtR )()(

)()()( tRtwtR

zz

zy

zx

yz

yy

yx

xz

xy

xx

r

r

r

tw

r

r

r

tw

r

r

r

twtR )()()()(

24

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á

)()()(0

txrtRtrii

N

ii

mM1

25

Velocidade de uma Partícula

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

• Podemos reescrever como:

)()()()(0

tvrtRtwtrii

)())()()(()()(0

tvtxtxrtRtwtrii

)())()(()()( tvtxtrtwtrii

)())()(()()( tvtxtrtwtrii

26

Velocidade de uma Partícula

27

Centro de Massa

• É definido como

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

M

trmN

iii

1)(

0

0

0)(1

0

0M

trmN

iii

28

Centro de Massa

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

• Outra relação importante:

)()()()())()()(()(

1110

10

1 txM

mtx

M

txmrmtR

M

txtrtRm

M

trmN

ii

N

ii

N

iii

N

iii

N

iii

0))()(( txtrmii

29

Equação do Movimento Corpo Rígido

?

)(

)()(

)(

?

)(

)(

)(11

tF

tRtw

tv

tMv

tR

tx

dt

dY

dt

d

30

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.

31

Força e Torque

32

Força e Torque

33

Momento Linear

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

• O momento total P(t) é:

• Podemos escrevê-lo como:

mvp

)()( trmtP ii

)))()(()()(()( txtrtwmtvmtPiii

)))()(()()(()( txtrtwmtvmtPiii

)()()()( tMvtvmtvmtPii

34

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:

M

tPtv

)(

)(

M

tFtv

)()(

)()( tFtP

35

Momento Angular

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

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

• O momento angular é definido como:).(, rpsenlémódulocujoprl

36

Momento Angular

vu

r

p

37

Momento Angular

• Sabemos que: .

• Multiplicando vetorialmente por r :

– ou seja,

• Sabemos que: , o qual podemos escrever como:

)()( tFtp

)()( tprtFr

)(tpr

dt

prd

dt

dl )(

dt

dprp

dt

dr

dt

dl

dt

dprmvv

dt

dl)(

dt

dpr

dt

dl

38

Momento Angular

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

• E o torque total será:

• Que é o equivalente de

N

iiNllllL

121

)(

)(

td

tdL

)(

)(

td

tdPF

39

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.

:,,2

1 22

22

2

11temoswrvcomovmvmvmK

iiNN

N

iiiNNwrmwrmwrmwrmK

1

2222

22

2

11)(

2

1)()()(

2

1

N

iiirmI

1

2

40

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).

)()()( twtItL

)()( tMvtP

41

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:

)()('

txtrrii

)(

)(

)(

)(2´2´´´´´

´´2´2´´´

´´´´2´2´

ixiyiiyiziixizi

iziyiizixiixiyi

izixiiyixiiziyi

rrmrrmrrm

rrmrrmrrm

rrmrrmrrm

tI

42

Momento de Inércia

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

• Tomando o produto:

2´´´´´

´´2´´´

´´´´2´

´´´

´

´

´

''

iziyizixiz

iziyiyixiy

izixiyixix

iziyix

iz

iy

ix

T

ii

rrrrr

rrrrr

rrrrr

rrr

r

r

r

rr

2´2´2´''

iziyixi

T

irrrrr

2´´´´´

´´2´´´

´´´´2´

´´

100

010

001

)(

iziiyiziixizi

iziyiiyiixiyi

izixiiyixiixi

i

T

ii

rmrrmrrm

rrmrmrrm

rrmrrmrm

rrmtI

43

Momento de Inércia

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

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

))(()('''' T

iii

T

iirrrrmtI -1

)()()(0

txrtRtrii

ir0

iirtRr0

´ )(

)))()()())(())((()(0000

T

iii

T

iirtRrtRrtRrtRmtI (-1

))()())()(()(0000

TT

iii

TT

iitRrrtRrtRtRrmtI (-1

44

Momento de Inércia

))()()())(((()(0000

TT

ii

T

i

T

iitRrrtRtRrrtRmtI (-1

))()()()(0000

TT

iii

T

iitRrrtRrrmtI (-1

))()())()(()(0000

TT

iii

TT

iitRrrtRrtRtRrmtI (-1

TT

iii

T

iitRrrrrmtRtI )()))(()(()(

0000-1

))((0000

T

iii

T

iibodyrrrrmI -1

T

bodytRItRtI )())(()(

45

Inverso do Momento de Inércia

11 ))())((()( T

bodytRItRtI

1111 )())(()( tRItRtIbody

T

T

bodytRItRtI )()()( 11

46

Equações do Movimento do Corpo Rígido

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

)(

)(

)(

)(

)(

1

tL

tP

tR

tx

tY

)(

)(

)()(

)(

)(

)(

)(

)(

)(

t

tF

tRtw

tv

tL

tP

tR

tx

dt

dtY

dt

d

47

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 33 e pontos em 3-d.

48

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];

49

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”.

50

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];

}

51

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;}

52

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]);

}

53

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}

}

54

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];}

55

Rotina Star

• A rotina Star utilizada é definida como:

matrix Star(triple a);

e retorna a seguinte matrix:

0]0[]1[

]0[0]2[

]1[]2[0

aa

aa

aa

56

Executando a Simulaçãovoid 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();}

}

57

“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.

58

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.

59

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