1 Modelagem Baseada na Física Simulação de Corpos Rígidos César Candido Xavier Mestrado Computação Gráfica UFRJ - COPPE
Mar 20, 2016
1
Modelagem Baseada na FísicaSimulação de Corpos Rígidos
César Candido XavierMestrado Computação GráficaUFRJ - COPPE
2
ObjetivoApresentar 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
)()(tvtx
Y
6
Dinâmica da Partícula
7
Variáveis de Estado
mtFtv
tvtx
dtdY
dtd
/)()(
)()(
8
Múltiplas Partículas
)(tF )(tF
)(tF)(tF
)(tv
)(tv
)(tv
)(tv
9
Variáveis de Estado
mtFtv
mtFtv
tvtx
tvtx
dtdY
dtd
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
mtFtv
mtFtv
tYdtd
tvtx
tvtx
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
dtdY
dtd
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
rrr
tR001
)(
zzyzxz
zyyyxy
zxyxxx
rrrrrrrrr
tR )(
?001
)(
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
rrr
tw )(
yxyx
zxzx
zyzy
abbaabbaabba
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:
00
0
xy
xz
yz
aaaaaa
a
baabbaabbaabba
bbb
aaaaaa
ba
yxyx
zxzx
zyzy
z
y
x
xy
xz
yz
00
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
rrr
rrr
rrr
twtR )()(
)()()( tRtwtR
zz
zy
zx
yz
yy
yx
xz
xy
xx
rrr
twrrr
twrrr
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 txrtRtr ii
N
iimM
1
25
Velocidade de uma Partícula• A velocidade é dada pela derivada da
posição da partícula, ou seja:
• Podemos reescrever como:
)()()()( 0 tvrtRtwtr ii
)())()()(()()( 0 tvtxtxrtRtwtr ii
)())()(()()( tvtxtrtwtr ii
)())()(()()( tvtxtrtwtr ii
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)(
000)(
10
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))()(( txtrm ii
29
Equação do Movimento Corpo Rígido
?)()()(
)(
?)()()( 11
tFtRtw
tv
tMvtRtx
dtdY
dtd
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
)))()(()()(()( txtrtwmtvmtP iii
)))()(()()(()( txtrtwmtvmtP iii
)()()()( tMvtvmtvmtP ii
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:– – –
MtPtv
)()(
MtFtv )()(
)()( 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
dtprd
dtdl )(
dtdprp
dtdr
dtdl
dtdprmvv
dtdl )(
dtdpr
dtdl
38
Momento Angular• O momento angular total de um corpo
rígido será:
• E o torque total será:
• Que é o equivalente de
N
iiN llllL
121
)()(tdtdL
)()(tdtdPF
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.
:,,21 22
22
2
11 temoswrvcomovmvmvmK iiNN
N
iiiNN wrmwrmwrmwrmK
1
2222
22
2
11 )(21)()()(
21
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:
)()(' txtrr ii
)(
)()(
)(2´2´´´´´
´´2´2´´´
´´´´2´2´
ixiyiiyiziixizi
iziyiizixiixiyi
izixiiyixiiziyi
rrmrrmrrmrrmrrmrrmrrmrrmrrm
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
ixT
ii
rrrrrrrrrrrrrrr
rrrrrr
rr
2´2´2´''
iziyixi
T
i rrrrr
2´´´´´
´´2´´´
´´´´2´
´´
100010001
)(
iziiyiziixizi
iziyiiyiixiyi
izixiiyixiixi
iT
ii
rmrrmrrmrrmrmrrmrrmrrmrm
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
ii rrrrmtI -1
)()()( 0 txrtRtr ii ir0ii rtRr 0
´ )(
)))()()())(())((()( 0000T
iiiT
ii rtRrtRrtRrtRmtI (-1
))()())()(()( 0000TT
iiiTT
ii tRrrtRrtRtRrmtI (-1
44
Momento de Inércia
))()()())(((()( 0000TT
iiT
iTii tRrrtRtRrrtRmtI (-1
))()()()( 0000TT
iiiTii tRrrtRrrmtI (-1
))()())()(()( 0000TT
iiiTT
ii tRrrtRrtRtRrmtI (-1
TTiii
Tii tRrrrrmtRtI )()))(()(()( 0000 -1
))(( 0000Tiii
Tiibody rrrrmI -1
Tbody tRItRtI )())(()(
45
Inverso do Momento de Inércia
11 ))())((()( Tbody tRItRtI
1111 )())(()( tRItRtI bodyT
T
body tRItRtI )()()( 11
46
Equações do Movimento do Corpo Rígido
• Temos finalmente todos os conceitos que especificam o vetor de estados Y(t)
)()()()(
)(
1
tLtPtRtx
tY
)()()()(
)(
)()()()(
)(
ttFtRtw
tv
tLtPtRtx
dtdtY
dtd
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ígidostruct 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
aaaaaa
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