拘束法の動力学シミュレータのための 安定なバネダンパモデル

Springhead:An open source physics simulator
物理シミュレーションの現状と未来
Physics simulation, state of the art and future
○長谷川晶一 東京工業大学精密工学研究所/JSTさきがけ
田崎勇一
東京工業大学大学院情報環境学専攻
http://springhead.info/
hasevr あっと gmail.com
1
Springhead:An open source physics simulator
目次


物理シミュレーションの役割
物理シミュレーションのしくみ



計算法
安定性と誤差の解消




Articulated Bodyのシミュレーション(Featherstone法)
ペナルティ法
接触検出



前進(Explicit)積分と後退(Implicit)積分
誤差の解消法
その他の物理シミュレーション手法


剛体の運動.拘束力.運動方程式への拘束の組み込み
大まかな判定
詳細な判定
物理シミュレータの今後


並列・専用ハード/性能と安定性
さまざまな応用
2
Springhead:An open source physics simulator
物理シミュレーションとは

コンピュータの中で物理世界の物の動きを再現
物理世界(実世界)

質量・摩擦係数・跳ね返り係数・位置・速度 …
物体の動きを決める法則と数値計算



物理シミュレーション:
物体の運動
物体の動きを決めるパラメータ(初期条件)を持つ


3DCGモデル:色・形
運動方程式(ニュートン、オイラー、ナビエ・ストークス)
数値計算(オイラー、ルンゲクッタ、前進積分、後退積分)
未来の状態が計算で求まる
3
Springhead:An open source physics simulator
「ふつうの」物理シミュレーション
目的:何かを知りたい・理解したい
 例:


銀河の生成


観測結果にあう
シミュレーション
→銀河のこれま
でが分かる
SPH法など
楕円銀河の光度進化[Kobayashi 2004]

気候

今日の天気の観測
→明日の天気が分かる

地球シミュレータ
グリッド法

大気循環モデル [地球シミュレータセンター大気・海洋シミュレーション研究グループ]
4
Springhead:An open source physics simulator
「ふつうの」物理シミュレーション

例

応力



目に見えない
力を見たい
有限要素法
(FEM)
流体

ANSYSによる構造解析の例 [ANSYS Inc]
目に見えない
流れを見たい
エンジン開発のための三次元流体シミュレーションの結果[NASUDA NEWS No.261]
5
Springhead:An open source physics simulator
エンタテインメントのための物理シミュレーション

目的:楽しみを感じたい

エンタテインメントの対象が感じられる必要がある
リアルタイム
 インタラクティブ



人の作用に反応
反作用を感じる
そこに世界があると
感じられる
リアルタイムの1/10
リアルタイム
6
Springhead:An open source physics simulator
エンタテインメントの対象と物理シミュレーション

ゲーム

画面
計算機
コンピュータの中
コントローラ
対象

バーチャルリアリティ



コンピュータの中
コンピュータの中の世界に
入り込める
実世界指向


実世界
コンピュータが実世界を
理解・制御
計算機
対象
没入映像
インタフェース
実世界を再現
計算機
センサ
実世界のモデル
実世界を
認識・制御
ロボット
対象
7
Springhead:An open source physics simulator
コンピュータの使い方

実世界の課題をコンピュータで

旧来の使い方



記録,計算,検索...
人間が実世界とつなぐ
実世界
の課題
新しい使い方


実世界の課題
身近な課題へ利用
身体でコンピュータを使う
実世界のモデル
人間のモデル
計算機
実世界のモデル
人間のモデル
センサ
インタフェース
実世界
の課題
ロボット
ディスプレイ
8
Springhead:An open source physics simulator
コンピュータの使い方

実世界志向

実世界を理解・制御
するための
シミュレーション
計算機
センサ
実世界のモデル
実世界を
認識・制御

バーチャルリアリティ

コンピュータの中に
実世界を作るための
シミュレーション
ロボット 課題
計算機
ディスプレイ
課題
インタフェース
実世界を再現
9
Springhead:An open source physics simulator
物理シミュレーションの役割

実世界の面白さ

実世界は、行動に応じて変化


多様な行動・多様な変化
ビデオゲーム・バーチャルリアリティ

行動に応じてさまざまに変化するものを作るには?
たくさんの変化の結果を用意
→ 場合分けの爆発・膨大な手間と時間
 物理シミュレーション
→ 多様でリアルな変化を自動生成


従来の新技術と同じこと
多量の2次元画像
 ストーリの分岐

→
→
3DCG
束構造に
10
Springhead:An open source physics simulator
バーチャルバスケット 1998
11
Springhead:An open source physics simulator
バーチャルカヌー 2005
12
Springhead:An open source physics simulator
物理シミュレーションの役割

実世界指向
実世界の便利さ、面白さをそのまま利用
 計算機による実世界の認識・実世界への介入を補助

Virtual Rubik’s cube
指先の位置から手全体の位置姿勢を認識
13
Springhead:An open source physics simulator
物理シミュレーションの役割

実世界指向

実世界の認識を補助
作品Kobito
紅茶缶を画像から、こびとたちと
インタラクション可能な物体として認識
14
Springhead:An open source physics simulator
まとめ

「ふつうの」物理シミュレーション
→物理現象の理解予測
エンタテインメントのための物理シミュレーション
→物理世界の楽しさを感じたい

物理世界は楽しい
人の行動に応じて変化する
半分制御可能・半分制御不可能
物理シミュレーションは、
 ゲーム・VRでは、これを再現する
 実世界指向では、変化する世界を捉える
15
Springhead:An open source physics simulator
物理シミュレーションのしくみ
剛体の運動
拘束力
運動方程式への組み込み
16
Springhead:An open source physics simulator
物理シミュレーションのしくみ

物理法則(現実世界)は微分方程式で記述できる

たとえば
質点の運動
f  mx
剛体の運動
 
mv  f , Iω
流体の運動

シミュレーションは微分方程式の数値解の計算
運動方程式:
f  mx
f t
m
x(t  t )  x(t )  x (t )t
差分方程式にすると: x (t  t )  x (t ) 
順番に求めて行く:
x(t )  x (t )t  x(0)
x(2t )  ...
x(3t )  ......
m f
x
…
x(0) x(t) x(2t)
17
Springhead:An open source physics simulator
剛体運動のシミュレーション

剛体

硬いもの,変形しないもの


剛体でないもの


積み木,ボール,ロボット・・・
スポンジ,粘土,水・・・
剛体のシミュレーション

剛体だと思えるものは多い


机・椅子・箱・石…
剛体だと思えることは多い

人や動物の体の動きなど、
本当は剛体ではないけれど、剛体だと思って計算すると
運動が再現できる
こんな感じに
18
Springhead:An open source physics simulator
剛体の運動
v: 速度
w:角速度
運動方程式
m: 質量
I: 慣性テンソル
f: 外力
mv  f
v(t  t )  v(t )  ft / m
 τ
Iω
I(t  t )ω(t  t )  I (t )ω(t )  τt
f  0, τ  0 ならば,速度一定・角運動量一定
19
Springhead:An open source physics simulator
剛体に働く力
重力→ f=mg… 定数
 バネ→ f=kx… 位置に比例
 拘束力



力の大きさは不明
剛体同士の位置・速度関係が決まっている




mg
kx
蝶番:2物体の相対位置が一定
抗力:2物体が互いに侵入しない
静止摩擦力:物体が滑らない
拘束力の計算が難しい
fn
ft
20
Springhead:An open source physics simulator
物理シミュレータの種類

拘束力の計算法が違う
多体の剛体運動(Multi Body Dynamics)シミュレータ
解析法
撃力法
ペナルティ法
全自由度法
Hahn 88
Mirtich 96
Jean
Jacques
Moreau
の方法
自由度削減法
LCPによる定式化
加速度
ベース
速度ベース
Stewart 96
ODE
Baraff 89

Moore &
Williams 89
Springhead1
Armstrong 79
Springhead2 Featherstone 83
OpenTissue
速度ベース・LCPへ定式化

もっとも良く使われている
参考:
Havok Novodex ODE …
Kenny Erleben: Multibody Dynamics Animation Lecture 12
Department of Computer Science Copenhagen University
21
Springhead:An open source physics simulator
剛体の運動方程式

2物体+拘束+外力
mj I j
vj wj
ri
慣性
M
速度 u
角速度
fc
その他の外力
拘束力 重力とか f
e
rj
mi I i
vi wi

たくさんの剛体+拘束+外力
22
Springhead:An open source physics simulator
拘束の例

関節(蝶番の例、接触などは後で)
連結点での相対速度・角速度
w
l
j
連結点に作用する拘束力・トルク
w 1, l1
i
e1
w 4, l4
e2
w2,, l2
w 6 , l6
w 3 , l3
e3
w 5 , l5
拘束の座標系


速度
蝶番の軸e3まわりの回転以外は相対運動をしない:
蝶番の軸e3まわりは自由に回転=トルクは働かない:
力
速度
力
23
Springhead:An open source physics simulator
拘束を運動方程式に組み込む

拘束を剛体の座標系で書きたい→ w,lを書いてみる
vj ,wj
rj
w
ri
Jrow1
vi ,wi
u
外積の行列表示
Jrow4
w2 w3, w5 w6,も同様に書ける
u
24
Springhead:An open source physics simulator
拘束を運動方程式に組み込む
vj ,wj
rj
w
ri
w 拘束座標での
速度・角速度
vi ,wi
u 剛体座標の速度・角速度
f j , j
rj
l
ri
f i , i
fc 剛体座標での
力・トルク
l 拘束座標での力・トルク
25
Springhead:An open source physics simulator
拘束の組み込み

拘束を考えやすいように、運動方程式を変形

拘束条件と連立させる(蝶番の例)
拘束:
運動方程式に代入:
連立方程式を解いて求める
26
Springhead:An open source physics simulator
シミュレーションの手順

拘束力l を計算

剛体の速度を更新

剛体の位置を更新
全剛体の
位置姿勢
計算法のところで説明
位置
姿勢
Quaternion
速度を
Quaternionの微分に
変換する行列
27
Springhead:An open source physics simulator
接触の拘束

接触
接触点での相対速度
接触点に作用する接触力


お互いに侵入しない
=力が働いて止まる 又は 力は働かず離れる:
速度
力
静止摩擦か動摩擦:
速度
力

トルクは0:
速度
力
28
Springhead:An open source physics simulator
拘束の組み込み(接触の例)

拘束を考えやすいように変形した運動方程式

拘束条件と連立させる
速度
力
速度
力
一見、 1本の式に変数が2つあるように
見えるけれど、
実はどちらか片方しか動かないので解ける
29
Springhead:An open source physics simulator
まとめ

速度ベースの拘束法・LCPへ定式化する方法
が良く使われている

LCPに定式化して拘束力を求め、積分を繰り返す
剛体の運動方程式をヤコビアンJで座標変換
→ wとlの運動方程式
 拘束を相対速度wと拘束力lについての式に定式化
wとlの運動方程式に代入LCPになる
 LCPを解いてlを求め、剛体の速度・位置を更新


拘束


関節は直線、接触は折れ線
2変数あるように見えて実は1変数
30
Springhead:An open source physics simulator
計算法
連立方程式の解法
LCPの近似解法
誤差の解消法
31
Springhead:An open source physics simulator
連立方程式の解き方

拘束を組み込んだ運動方程式
式1本で変数が2つ
線形相補問題 (LCP:Linear Complementary Problem)

LCPを解く


ピボッティング法 ・・・ 厳密.低速
反復解法 ・・・ 高速.精度は反復回数に依る
行列分割法
 ヤコビ法
 ガウス・ザイデル法,SOR法
 ニュートン法

32
Springhead:An open source physics simulator
ガウスザイデル法・SOR法

行列分割法

巨大な連立方程式の近似解を少ない計算で解く
方法のひとつ
もし、漸化式
が収束するなら
なので、求めたい
となる。
Aが正定値対称行列なら収束する
細長いもの・慣性テンソルが小さいものは
収束しにくい


Dは対角行列のような簡単な行列にする。
DをAの対角成分とし、残りをFとしたのがヤコビ法
それを工夫したのがガウスザイデル法
33
Springhead:An open source physics simulator
ガウスザイデル法・SOR法

ガウスザイデル法
ヤコビ法:lを一度に更新
ガウス・ザイデル法: lを1行ずつ更新
更新済み
更新中
未更新

SOR法
 ガウスザイデル法をちょっとだけ加速
ガウスザイデル法
1.6倍加速

早く収束することもある
34
Springhead:An open source physics simulator
LCPとガウスザイデル法

ガウスザイデル法は1行ずつ更新
更新済み
更新中
未更新

接触力をうまく計算できる

お互いに侵入しない=力が働いて止まる 又は 力は働かず離れる:
l1を更新するたびに、 l1>0をチェック 負になったら l10に設定

静止摩擦か動摩擦:
更新したl1を使って ml1 <l2< ml1をチェック
はみ出したら、l1m l1でクリップ
35
Springhead:An open source physics simulator
シミュレーション例
36
Springhead:An open source physics simulator
解析法とペナルティ法の計算の比較

どちらも繰り返し計算で接触力を求めるが:
解析法(ガウスザイデル法)

ペナルティ法
解析法は,最初から接触力同士の相互作用を考慮

少ない回数で解にたどり着く可能性がある
37
Springhead:An open source physics simulator
安定性と誤差の解消法
前進(Explicit)積分と後退(Implicit)積分
バネダンパの例
拘束を満たす時刻と安定性
誤差の解消法
この項については,以下で発表をしています:
田崎勇一, 長谷川晶一, “拘束法の動力学シミュレータのための安定なバネダンパモデル”,
情報処理学会 グラフィクスとCAD研究会第124回研究発表会資料, 2006.8
38
Springhead:An open source physics simulator
安定性と積分の方法

前進(Explicit)積分と後退(Implicit)積分
バネ・ダンパの運動方程式
K
m
Explicit Euler 法
B
バネ・ダンパ係数やステップ幅
を大きくすると不安定となる
39
Springhead:An open source physics simulator
バネ・ダンパの計算法 (Explicit Euler法)
なぜ不安定か?
安定となるための
バネ・ダンパ係数の領域
現在時刻の位置・速度から現在時刻の力を計算
→ 積分誤差による不安定化
40
Springhead:An open source physics simulator
バネ・ダンパの計算法 (Implicit Euler法)
次の時刻の位置・速度から現在時刻の力を計算
全域で安定
41
Springhead:An open source physics simulator
拘束を満たす時刻と安定性
加速度ベース [baraff 89など]
解析法
全自由度法
Jean
Jacques
Moreau
の方法
自由度削減法
LCP
加速度
ベース
Baraff 89
速度ベース
Stewart 96
ODE
Springhead2
OpenTissue
Armstrong 79
Featherstone 83
運動方程式
拘束式 (加速度レベル)
この瞬間[t]に、拘束を満たす
連立
速度更新
位置更新
積分誤差の累積によるドリフト
42
Springhead:An open source physics simulator
拘束運動の計算法
速度ベース [Stewart96など]
解析法
全自由度法
Jean
Jacques
Moreau
の方法
自由度削減法
LCP
加速度
ベース
Baraff 89
速度ベース
Stewart 96
ODE
Springhead2
OpenTissue
Armstrong 79
Featherstone 83
運動方程式
連立
速度更新
拘束式 (速度レベル)
次の時刻[t+1]に拘束を満たす
位置更新
積分(速度更新)を考慮して拘束力を計算→ドリフトが少ない
43
Springhead:An open source physics simulator
拘束の組み込み

拘束を考えやすいように、運動方程式を変形
ここが、w[t+1]なので、

拘束条件と連立させる(蝶番の例)
拘束:
拘束は、w[t+1]についての拘束になっている
運動方程式に代入:
連立方程式を解いて求める
44
Springhead:An open source physics simulator
Implicitのバネダンパ

時刻[t+1]にバネダンパの制約を満たす

関節にバネダンパー

並進のバネダンパー
関節角度
伸び(定数)
関節角速度
伸びの速度
関節トルク
バネダンパ力
LCPに組み込むことができる
45
Springhead:An open source physics simulator
安定性の評価
剛体5つ
 蝶番5つ,4つにバネダンパ
 バネダンパ1つ
 重力

このバネ・ダンパについて
Implicit版とExplicit版を比較
46
Springhead:An open source physics simulator
誤差の解消法

誤差がたまる原因は…もう一度拘束を考えてみる
vj ,wj
rj
p,w
ri
vi ,wi

関節位置での相対速度がwi[t+1]=0
となるように、拘束力lを計算している
速度を積分した相対位置には、誤差がたまる
→誤差を解消する必要あり
誤差の解消法

速度を変化させる方法(ペナルティ法)
ODE, 誤差が残る(隙間が開いたりする)が自然で安定

位置を変化させる方法(位置についての解析法)
OpenTissue, 誤差が見えないが、不安定になることがある
47
Springhead:An open source physics simulator
誤差の解消法1:速度を変化させる方法
拘束+運動方程式
e
に速度の修正を加える
誤差が減るような速度になるような拘束力l’が求まる
48
Springhead:An open source physics simulator
誤差の解消法2:位置についての解析法
運動方程式から作った速度の更新式
e
の位置版を考える。
位置版に、拘束条件の変形をする
速度版
位置版
ガウスザイデル法でlを求め、s’を求める
49
Springhead:An open source physics simulator
誤差の解消法:どちらがよいか
速度を変化
位置の解析法
誤差はすぐには解消しない
ペナルティ法的
毎回、誤差を0にしてくれる
解析法的
わずかな式変形
Al+bのAは再利用できるが
計算はとても少ない
あとは計算が必要
ガウスザイデルをもう1つ解く
速度に影響がない
速度が変化する
誤差
誤差
ステップ
ステップ
50
Springhead:An open source physics simulator
誤差の解消法:どちらがよいか

強い外力の影響

強い外力feに対抗する
関節の拘束力l
ガウス・ザイデル法の
打ち切りのため、 | l | < | fe |
となり、剛体はだんだん加速。

速度変化で解消の場合

位置の解析法で解消の場合
fe
w
e
l
で位置sを補正するが、速度wは補正なし→加速し続ける
速度変化は必須、位置の補正は誤差を隠してくれる
51
Springhead:An open source physics simulator
ガウスザイデル法の誤差

計算のイメージ

どちらから近づくか



内側(原点側)から近づく
→真の値より小さな値
→安定、ダンパ気味
外側から近づく
→真の値より大きな値
→不安定
1つ前のシミュレーションで求めた
lprevからスタートすると収束が早い
が、外側から近づく危険あり
 不安定になりやすい(例)
1.0
0.8
1.2
lprev
0
52
Springhead:An open source physics simulator
その他の物理シミュレーション手法
フェザーストーン法
ペナルティ法
53
Springhead:An open source physics simulator
Articulated Bodyのシミュレーション

Articulated Body
解析法
全自由度法
Jean
Jacques
Moreau
の方法
自由度削減法
LCP
速度ベース
加速度
ベース
Baraff 89
Stewart 96
ODE
Springhead2
Armstrong 79
Featherstone 83
OpenTissue
多数の剛体を関節でつないだもの
 動物や人間の体,ロボットなど
普通にLCPでも解けるが…


自由度削減法


可動関節だけをシミュレーション
剛体が輪になっていない=木構造 で高速な手法
輪になっている例
54
Springhead:An open source physics simulator
解析法で求めると...
l2
l1
l3
l5
l4
l6
からlを解いて、剛体の速度uを更新
uから剛体の姿勢sを更新
uの誤差→sに誤差がたまる
→蝶番がずれたりする
55
Springhead:An open source physics simulator
Featherstoneの方法

状態変数
根のリンクの速度・角速度,位置・姿勢
 各関節の可動部分の角度,角速度


リンクの位置・速度など他の値は持たない

関節が外れることはない
fi , t i
リンクi
葉のリンク
v i , ωi
葉のリンク
リンクi と,より葉側のリンク
根のリンク
Springhead:An open source physics simulator
関節の拘束力の計算

Featherstoneの方法

木構造のリンク用
リンクiの運動方程式は,
 fi 
 v i 
   I i    Z i
i
 ti 
ω
Ii: リンクIと葉側のリンクの慣性項
Zi: 外力,重力,コリオリ力による項
Ii,Ziは関節加速度によらない
のように,書ける.
 Ziはリンクiと葉側のリンクの
姿勢・速度で決まる
fi , t i
リンクi
 Ii , Zi を葉から順に計算
 根側から,v, wを計算
葉のリンク
v i , ωi
葉のリンク
リンクi と,より葉側のリンク
根のリンク
Springhead:An open source physics simulator
FeatherstoneのLCPへの組み込み

LCPによる定式化では、
剛体の質量・慣性を並べて運動方程式を作った

これにArticulated Bodyを加えると
解析法
全自由度法
Jean
Jacques
Moreau
の方法
加速度
ベース
Baraff 89
wjoint
IA
vbase
wjoint
自由度削減法
LCP
wbase
速度ベース
Armstrong 79
Stewart 96
ODE
Springhead2
OpenTissue
wjoint
wjoint
Featherstone 83
wjoint
wjoint
参考: S. Redon et al. "Adaptive Dynamics of Articulated Bodies" SIGGRAPH 2005
58
Springhead:An open source physics simulator
解析法
全自由度法

ここまでで取り上げた方式
利点
 動作が安定
 低速更新が可能
ペナルティ法
解析法
撃力法
Jean
Jacques
Moreau
の方法
自由度
削減法
LCPによる定式化
速度ベース
欠点
 1ステップの計算量はある程度多い.
⇒低速更新
安定だが精度が悪い
59
Springhead:An open source physics simulator
ペナルティ法

ペナルティ法
解析法
撃力法
全自由度法
Jean LCPによる定式化
Jacques
速度ベース
Moreau
の方法
拘束を満たす向きに適当な力を加える
自由度
削減法
.
侵入量 d,侵入量の速度 d
fn  k nd  bn d
バネ
ダンパ
.
滑り量 l,滑り速度l
ff  k f l  b f l
バネ
ダンパ
欠点
利点
 tを小さくしなければならない
 1ステップの計算が速い. O(n)
 安定性が低い
⇒高速更新可能
 高速更新⇒高精度
 Featherstone法と簡単に組み合わせ
られる
60
Springhead:An open source physics simulator
接触体積の形状を考えたペナルティ法

広い接触面があるとき

バネダンパモデルはどこに置けばよいか?
?
最侵入点にした場合
61
Springhead:An open source physics simulator
広い接触面の扱い

バネダンパモデルはどこに置けばよいか?
?
頂点にした場合
Top view
62
Springhead:An open source physics simulator
広い接触面の扱い

バネダンパモデルはどこに置けばよいか?
?
うまく働くが,
計算時間がかかりすぎる
多点でサンプリング
63
Springhead:An open source physics simulator
広い接触面の扱い
!
分散バネ・ダンパモデル

3角形ごとに分散バネ・ダンパモデルからの力を積分
64
Springhead:An open source physics simulator
処理の手順

接触力の計算
1.
2.
3.
接触体積内の1点と法線を求める(GJK)
接触体積の形状を求める(Muller and Preparata)
接触面にかかった力を積分する
65
Springhead:An open source physics simulator
接触解析


接触部分= 2つの凸多面体の交差部分.
D. E. Muller and F.P.Preparata:
“Finding the intersection of two convex” (1978)
 2つの凸多面体と交差部分上の1点が与えられたとき,
 交差部分の形状を求める
66
Springhead:An open source physics simulator
力の積分
抗力
 動摩擦力
 最大静止摩擦力

分散バネ・ダンパモデルからの力を3角形ごとに積分
67
Springhead:An open source physics simulator
3角形ごとの積分
p2
p3 p
3
h3
抗力バネモデルによる力
f  k  h p ndS
h2
p1
ptri
1
 k (h1 h2  h3 ) n
3
抗力バネモデルによるトルク
τ  k  p  hpndS
ptri
1
 k (( h1 h2  h3 ) (p1 p 2  p3 )  3(h1p1 h2p 2  h3p3 ) )
36
68
Springhead:An open source physics simulator
フォースフィードバックへの応用例

高速更新なので、フォースフィードバックの感覚が良
い
69
Springhead:An open source physics simulator
ペナルティ法と解析法の拘束力と動作の比較

解析法

次のステップで拘束を満たすlを
繰り返し計算で求める
位置の
誤差

ペナルティ法

拘束違反を減らす向きのlを
毎ステップ加える
lp
l\
l20
速度の
誤差
70
Springhead:An open source physics simulator
接触検出
大まかな判定
バウンディングボックス
ソート
詳細な判定
GJK
接触形状
71
Springhead:An open source physics simulator
接触検出

接触の拘束を考えるためには、接触検出が必要

高速化のための工夫


まず大まかな判定をして、明らかに接触してないものを候
補からはずす。
その後詳細な判定をする。
72
Springhead:An open source physics simulator
接触検出と計算速度
接触力を求める→高速な衝突判定が必要
 階層化





簡単な境界で囲む
階層的に境界を作る
大まかに判定してから,詳細な判定をする
境界(Bounding)の例
球
判定簡単
K-DOP
AABB
ぴったりフィット
73
Springhead:An open source physics simulator
階層化と計算時間

階層化すると
log2n
回の検出で終わる
log2n
n
74
Springhead:An open source physics simulator
アルゴリズムの速度

a を検索

ランダム
AdhjJLfC gMalmD bpEH UVstwQ RWYxzOZ
頭から見ていく

O(n)
ソートされている場合
ACDEHJLMOQRUVWYZabdfghjlmpstwxz
あたりをつけてみていく

O(log n)
きちんと並んでいる場合
ABCDEFGHIJKLMNOPQRSTUVWXYZabcde
どこにあるか分かる
O(1)
75
Springhead:An open source physics simulator
アルゴリズムの速度

対象に対する知識があるほど速く出来る

ランダム


a = = ? しか分からない場合
ソートされている場合


知識なし
左<右
<演算が定義されている
きちんと並んでいる場合

右-左=3
何がどこにあるか分かっている
76
Springhead:An open source physics simulator
アルゴリズムの速度(ソート)



総当りソート: O(n2)
5 7 3 6 9 1 2
1 5 7 6 9 3 2
1 2 5 7 6 9 3
最小を先頭へ
最小を先頭へ
クイックソート: O(n log n)
5 7 3 6 9 1 2
<5を前へ
3 1 2 5 7 6 9
3 1 2 <3を前へ
7 6 9 <7を前へ
n回比較 n回
n回比較
n回比較
log n回
n回比較
バケツソート: O(n)
5 7 3 6 9 1 2
1
2
3
1 2 3
4
5
6
7
5 6 7
8
9
9
n回移動 1回
77
Springhead:An open source physics simulator
運動する物の接触検出

物体が動き回る場合,毎回境界の更新が必要

境界の更新に時間がかかる

総当りも時間がかかる
5
2
41
3
6
1-2
1-3
1-4
1-5
1-6
2-3
2-4 3-4
2-5 3-5 4-5
2-6 3-6 4-6 5-6
n
n
O(n2 )
78
Springhead:An open source physics simulator
運動する物の接触検出

ソート=境界を作りながら判定
5
2
41
3
6 1より左?
1-2 1-3 1-4 1-5 1-6
1より右? 1-3 1-4 1-6
5
2
4
41
要判定
3
2より左? 2-5 2-4
6 4より左?
2-4
1-4 の判定
O(n log n)
79
Springhead:An open source physics simulator
接触検出

中身の判定


中身は 三角形?
凸多面体
多面体?
凸形状

凸形状 距離が極小となる点が1点





非凸形状
最近傍点が簡単に求まる GJK algorithm
E. G. Gilbert, D. W. Johnson and S. S. Keerthi
A Fast Procedure for Computing the Distance between Complex
Objects in Three-Dimensional Space (1988)
ほかにLin-Canny algorithm というのもあります
Ming Lin, John Canny
A fast algorithm for incremental distance calculation (1991)
80
Springhead:An open source physics simulator
GJK
凸形状A上の点から,凸形状B上の点へのベクトルを
原点を始点に並べる(Minkowski sum)と
ベクトルの終点の集合も凸形状になる
元の図形
Minkowski Sum をとったもの
81
Springhead:An open source physics simulator
GJK
V0 : 凸形状内の任意の点
Wi :OViとOWiの内積が最小の点(support point)
1
OVi
2
Wi
OVi
Wi
Vi :三角形Wi-2 Wi-1 Wi内の点で原点に一番近い点
Vi = s Wi-2 +t Wi-1 +(1-s-t) Wi
W3
3
4
V
W2
W1
元の図形上で、最近傍点が求まる
82
Springhead:An open source physics simulator
速度を考慮したGJK
衝突の瞬間(Time
of Impact TOI)と
衝突の位置・法線が分かる.
接触点
もとの図形
Minkowski Sum
83
Springhead:An open source physics simulator
GJKを使った接触点の計算
1
r
r
3


0
2
r

4

参照: Continuous Collision Detection of General Convex Objects
under Translation [G. van den Bergen]
84
Springhead:An open source physics simulator
GJKの結果の解釈

法線
そのまま実世界の法線

接触点
Support point を内分した点
→実世界の Support points を内分して求める.
これを求める→実世界の頂点の引き算
どれを使ったか覚えておけば元に戻せる
85
Springhead:An open source physics simulator
GJKの結果の解釈2

重なっていると,戻せない
Minkowski Sum
元の形状
元の形状でのの3つの点は,変換した形状では1点
→どこだか分からない.
86
Springhead:An open source physics simulator
接触解析

衝突部分の形状(切り口)を求める方法


切り口の頂点に接触の拘束を考える
D. E. Muller and F.P.Preparata:
“Finding the intersection of two convex” (1978)
 凸形状2つの交差部分の形を求める


共有点1点が必要(GJKで求められる)
切り口の形、頂点を知ることができる
切り口
上から見た図
断面図
87
Springhead:An open source physics simulator
接触解析(2)

2つの凸形状の交差部
半空間表現
88
Springhead:An open source physics simulator
接触解析(3)

2つの凸形状の交差部(2)
半空間表現
双対変換
交差部の頂点
双対変換
Quick hull
n log n
89
Springhead:An open source physics simulator
物理シミュレーションのこれから
並列化・ハードウェア化
スピードと安定性
いろいろな利用
90
Springhead:An open source physics simulator
並列化について

物理シミュレーションは
たくさんのものに同じ法則を適用
→並列化に向いている




粗い判定:
n2の並列計算も可能
GJK・接触解析: 接触ペアの数だけ並列計算
ガウスザイデル: 行列の1行ごとに並列計算
専用計算機向きか?

GRAPE

剛体・流体…は?
天体シミュレーション用 (1991 15GFPS @ i486の時代)
 重力計算が主 → 専用ハードが作りやすい
データが複雑(特に接触検出・解析)
 対象がさまざま
→専用チップ化にはあまり向かない

CELL/PhysX は並列汎用計算機。 GPGPUはソートなどあと一歩。
91
Springhead:An open source physics simulator
スピードと安定性

剛体はスピードより安定性
そろそろ数は十分
 どんなシミュレータも発振する
 制御の安定性の保証がほしい

Havok FXの例
PD制御発振の例
Wrotek et al. 2006
92
Springhead:An open source physics simulator
スピードと安定性

流体はまだまだスピードがたりない



2次元の波面
→ 十分リアルタイム
3次元のメッシュ → かなり厳しい
3次元の粒子
→ たくさんの量は扱えない
 組み合わせが必要かもしれない

A Fluid Resistance Map Method for Real-time Haptic Interaction with
Fluids [Y. Dobashi et al. 2006]
3次元流体シミュレーション
圧力場・流速 (FRM :Fluid Resistance Map)
事前計算
パドルの速度
水の速度
R
力覚フィードバック

リアルタイム波シミュレーション
リアルタイム
Efficient Simulation of Large Bodies of Water by Coupling Two- and
Three-Dimensional Techniques
[G. Irving et al. 2006]
93
Springhead:An open source physics simulator
物理シミュレーションの利用

リアルな動きの生成に利用
ゲームの物理
 キャラクタモーション
 身体のシミュレーション


実世界とバーチャル世界をつなぐ


実世界の認識の補助
実世界で再現可能なバーチャル世界を作る
94
Springhead:An open source physics simulator
キャラクタモーション

Oshita 2001
PD制御で加速度を決める
← トルク/ZMPの制約
○ PDの調整が簡単。
△外力が加わった場合の動作

トルクではなく、加速度
Liu et al.2005
軌道全体を最適化
○ 高度な最適化
△ リアルタイム生成は困難

Zordan et al. 2005, Zordan and Hodgins 2002,
Natural Motion Endorphin
コントローラ+シミュレーション. 関節角度をPD制御
○ リアルタイム生成
△ コントローラの作成
95
Springhead:An open source physics simulator
キャラクタモーション

モーションキャプチャデータの変換



人体モデルのマーカ位置を
キャプチャした
データ位置に
PD制御
関節角を記録
関節トルク・床反力の計算


関節をPD制御して動作を再生
関節と床から働く力を計算
96
Springhead:An open source physics simulator
キャラクタモーション

Hasegawa et.al 2005
関節と手先位置をPD制御
力覚インタフェース
物理シミュレータ
力フィード
バック
Motion Controller
Reaching motion
Default posture
手の位置
The World
State transition
Attack
予測用シミュレータ
Guard
行動ルール
Wait
Virtual human’s mind
97
Springhead:An open source physics simulator
身体のシミュレーション

筋骨格系+神経系のシミュレーション
M. Otake and Y. Nakamura 2005
98
Springhead:An open source physics simulator
ロボット・作業のシミュレーション
レスキュー
機構シミュレーション
ロボカップ
99
Springhead:An open source physics simulator
まとめ

エンタテインメントのための物理シミュレーション



物理シミュレーションのしくみ





人が物理を感じられるシミュレーション
リアルタイム・インタラクティブ
定式化、LCPの近似解法
安定性と誤差の解消
Featherstone法・ペナルティ法
接触検出(GJK, 接触部分の形状)
物理シミュレータの今後


並列・専用ハード/スピードと安定性
さまざまな応用
100