Human interface Section, P&I Lab, Titech 実時間物理シミュレーション技術 東京工業大学精密工学研究所 長谷川晶一 Human interface Section, P&I Lab, Titech 内容 物理シミュレーションの意義 なぜ,今物理シミュレーションなのか? 物理シミュレーションでできること シミュレータの特徴と選び方 接触力計算法,高速化法 制御 シミュレータ内の物体の動かし方 デモ 我々が開発している物理シミュレータ付きVR開発環境 Springheadと力覚インタフェースSPIDARのデモ なぜ物理シミュレーションが必要 か? Human interface Section, P&I Lab, Titech 入力に対する反応の多様さ →ゲーム世界の多様さ・楽しさ 入力の進化 アナログパッド,画像,力覚 → 選択肢の増加 たくさんの反応を用意しなければならない 従来の延長 シミュレーション 場合分けの爆発 たくさんの手間と時間 自動的に多様でリアルな反応 従来の新技術と同じこと 多量の2次元画像 ストーリの分岐 → → 3DCG 束構造に Human interface Section, P&I Lab, Titech 物理シミュレーションが役立つ例 動きの生成 例:歩行 シミュレーションなし: 足の動きと体の動きを別々に計算 シミュレーションあり: 足を動かすと自然と体が動く 当たり判定 なし: 当たり判定専用計算 あり: ポリゴンモデルの接触位置が毎ステップ求まる ダメージ計算 なし: 当たったもの,当たり方毎に値を用意 あり: 加わった力の大きさからダメージを計算 効果音 なし: イベントごとに音を用意 あり: 加わった力,材質から自動的に音を発生 Human interface Section, P&I Lab, Titech 物理シミュレーションの役割 ゲーム世界の物体が 現実世界と同様に自律的に動く 計測と制御 従来のゲームでも物理は使われていた? 従来は,特別に,物理法則を作りこんでいた. 物理シミュレータでは,物体はすべて 物理法則にしたがう. Human interface Section, P&I Lab, Titech 物理シミュレータを使うには 物理シミュレータの中身を知る 物理シミュレータの選定 自分のゲームでは何が大事か? Havok, MathEngine? (商用), Tokamak(無料) Open Dynamics Engine, Springhead (オープンソース) パフォーマンスを引き出す スピードと精度のトレードオフ 精度同士のトレードオフ ボトルネックの特定 Human interface Section, P&I Lab, Titech 物理シミュレーションとは 物理法則(現実世界)は微分方程式で記述できる たとえば 質点の運動 剛体の運動 流体の運動 f mx mv f , Iω シミュレーションは微分方程式の数値解の計算 f mx 運動方程式: f m f t 差分方程式にすると: x (t t ) x (t ) m x(t t ) x(t ) x (t )t 順番に求めて行く: x(t ) x (t )t x(0) x(2t ) ... x(3t ) ...... x … x(0) x(t) x(2t) Human interface Section, P&I Lab, Titech 剛体運動のシミュレーション 剛体の運動の話だけにします. 剛体 硬いもの,変形しないもの 剛体だと考えてよいものが多い 積み木,ボール,ロボット,人体・・・ 剛体でないもの スポンジ,粘土,水・・・ Human interface Section, P&I Lab, Titech 剛体の運動 v: 速度 ω:角速度 m: 質量 I: 慣性テンソル f: 外力 (すべて絶対座標系) 運動方程式 mv f τ Iω mv(t t ) mv(t ) ft I(t t ) ω(t t ) I(t ) ω(t ) τt f 0, τ 0 ならば,速度一定・角運動量一定 Human interface Section, P&I Lab, Titech 剛体に働く力 重力→ f=mg… 定数 バネ→ f=kx… 位置に比例 拘束力 mg kx 力の大きさは不明 剛体同士の位置・速度関係が決まっている 蝶番:2物体の相対位置が一定 抗力:2物体が互いに侵入しない 静止摩擦力:物体が滑らない 拘束力の計算が難しい fn ft Human interface Section, P&I Lab, Titech 拘束力の求め方 例:球関節の拘束. 2物体が 点pAと点pBで繋がっている 拘束の式: pA = pB A pA この式を満たすように,関節に働く力を求める 解析法:運動方程式と拘束の式を連立させて解く David Baraff 89-93など Havok,Tokamak, Open Dynamics Engine ペナルティ法:拘束違反に応じた力を加える 昔からいろいろな用途に使われてきた Springhead 接触判定時に拘束違反の量(侵入量)を調べる必要がある pB B Human interface Section, P&I Lab, Titech 解析法1(関節) B f A rB pA pB B p A 0 拘束: p (rA, θ A (p A rA ) θ A (p A rA )) (r θ (p r ) θ (p r )) 0 B, rA IA mB M B B B B B Br b 0 運動方程式: mA B 1 rA θ A (p A rA ) r f 1 B I B θ B (p B rB ) r C f Af b 0 計算量はo(n3) Human interface Section, P&I Lab, Titech 解析法2(抗力) B p A ) n 0 拘束: (p B pB fn 運動方程式: Mr Cfn af b 0 pA A (Br b) n 0 抗力は,反発だけ: これを満たす f を見つける→ 利点: 欠点: 0 -a/b f 0 線形計画法,2次計画法・・・ 物体同士が侵入しない. 遅い,跳ね返り係数を考慮していない. f Human interface Section, P&I Lab, Titech 解析法3(摩擦力) クーロンの摩擦モデル f S 0 f N (静止摩擦) f d f N (動摩擦) 拘束: B fN 抗力は,反発力: fS A 運動方程式: B p A ) n 0 (p Mr Cf f n 0 摩擦力の条件: f n / | f | / 1 2 場合分けを無くすため 0 とすることが多い Human interface Section, P&I Lab, Titech ペナルティ法(抗力) 拘束を解かない. Af b 0 拘束を侵した分だけ罰(ペナルティ)として力を加える. . 侵入量 d,相対速度 d f Kd Bd バネ ダンパ 繰り返すうちに拘束が満たされる...はず. 力が直接決まるので,計算量はo(n) 接触部にバネとダンパを入れたと考えられる 利点: 欠点: 高速,跳ね返り係数を考慮できる. 物体同士が多少侵入してしまう. Human interface Section, P&I Lab, Titech ペナルティ法(摩擦力) 静止摩擦:ずれに比例した力を加える 接触の履歴を利用 クーロンの摩擦モデルをそのまま利用できる f d f N (動摩擦) f S 0 f N (静止摩擦) 静止摩擦 動摩擦 静止摩擦 Human interface Section, P&I Lab, Titech ペナルティ法(面接触) 面で接触する場合 力は接触部分全体から発生 正確な接触力の計算 分布バネダンパモデルを考える 発生する力を接触部全体について積分 意外と簡単な式になる 解析法に比べ,とくに摩擦力が正確 接触部分の形を求める必要 Human interface Section, P&I Lab, Titech 計算量と高速化 ここまでで,物理の話は終わりです. 関節を持つ剛体 剛体同士の接触 のシミュレーションができるようになりました. ここからは,リアルタイム動作に必要な, 計算量と高速化について話します. Human interface Section, P&I Lab, Titech 解析法の計算量と接触数 接触している 多物体が 場合多くの拘束が働く. 関節で繋がれる f1n f2n Af b 0 f 0 行列Aの次元=抗力 fi の数 方程式を解くので,行列の次数nに対して,計算量はo(n3) 立方体の面接触1つ:4次元 10個つむと:40次元 Human interface Section, P&I Lab, Titech 解析法の高速化 Af b 0 f 0 Aを早く解く工夫 ODEの場合 巨大な行列Aを作らず, 2物体単位で計算する 繰り返し計算する 繰り返し回数が少ないと精度が落ちる 巨大行列Aを解いた場合 2体単位で,繰り返し 解く場合 Open Dynamics Engineのドキュメントより Human interface Section, P&I Lab, Titech 構造を利用した,解析法の高速化 Articulated Body 多数の剛体を関節でつないだもの 動物や人間の体,ロボットなど 構造に特徴 剛体が輪になっていない→木構造 輪になっている例 全部繋がっている例 Human interface Section, P&I Lab, Titech 解析法で求めると... 3 2 B1 A D Aの運動方程式: M ArA CA1 (f1 ) 1の拘束の式: B1ArA B1BrB b1 0 Bの・・・・・・・・・・・・・・・・ ここで, rやf は6次元ベクトル r vx v y vz x y z T 並べてみると MA B 1A C A1 MB CB1 MC CC2 MD B1B B 2B B 2C B 3C CB2 B 3D rA 0 rB 0 CC3 rC 0 C D3 rD 0 f b 1 1 f 2 b 2 f b 3 3 0だらけ,すかすか,sparse行列 普通に解くより早い方法があるのでは? Human interface Section, P&I Lab, Titech Featherstoneの方法 巨大行列を普通に解かない 根から葉に向かって1つずつ拘束力を求める とても速い O(n) Human interface Section, P&I Lab, Titech Featherstoneの方法 1. 全体を一つの剛体だと考え,加 速度を求める. 剛体Aの加速度が求まる 3 2 D B 1 A 2. AとBから先の2つの剛体と考え 1. 関節1に働く力を求める. 2. Bの加速度を求める 3 2 B 1 3. BとCから先 〃 A D Human interface Section, P&I Lab, Titech Featherstoneの方法 先ほどのsparse行列で考えると, 3 2 B1 A D 1. 葉から根に向かってMを合成 MA B 1A C A1 MB CB1 MC CC2 MD B1B B 2B B 2C B 3C CB2 B 3D 2.加速度rA を求める. rA 0 r 0 B CC3 rC 0 C D3 rD 0 f b f 3を消去 1 1 f 2 b 2 f b 3 3 rDを消去 Human interface Section, P&I Lab, Titech Featherstoneの方法 3.根から葉に向かって,fi , r を求める MA B 1A C A1 MB CB1 MC CC2 MD B1B B 2B B 2C B 3C CB2 B 3D rA 0 rB 0 CC3 rC 0 C D3 rD 0 f b 1 1 f 2 b 2 f b 3 3 rAが求まったので, f1を求める Human interface Section, P&I Lab, Titech ペナルティ法は高速 バネダンパモデルから力が求まる f kx bx 60 計算時間[ms] 50 ペナルティ法(Springhead) 解析法(Open Dynamics Engine) 40 30 20 10 0 0 5 10 ブロック数 15 Human interface Section, P&I Lab, Titech Springhead 我々が開発している物理シミュレータ 開発の動機 力覚インタフェースに使いたい 超高速更新(>300Hz),安定性重視 シミュレータでロボット対戦(ロボコン)をやりたい 2台以上 フィールドに障害物 押し合い → 摩擦が重要 Human interface Section, P&I Lab, Titech Springheadの選択 接触力計算はペナルティ法 高速性,安定性 摩擦の精度 多少剛体同士が侵入するが,気にしない ロボットなど関節を持つ物はFeatherstone法 構造が変化しないので非常に高速. ループのある機構は少ない. ペナルティ法とは簡単に組み合わせられる. シミュレーション法・高速化法の特性を考慮して, シミュレータを選んでください. Human interface Section, P&I Lab, Titech ゲームの作成 シミュレータの限界 限界を見極めてモデリングする必要がある 安定性の限界 極端に重いものと軽いもの • 衝突時に速度が大きくなりすぎる 質量と慣性モーメントの比率がおかしいもの • 回転速度が極端に大きくなることがある 極端に大きさが異なるもの • 衝突判定の精度が問題となる 計算速度の限界 物体数,ポリゴン数,時間刻み Human interface Section, P&I Lab, Titech ゲームの作成 物理以外に必要なもの ゲームのルール • 物体の位置や速度で判定 ダメージの計算 • 接触力や関節に働く力の計測 物理シミュレーションを活かして作ると効果的 人物,動物,車などの動き 自然の動きではなく,意図を持った動き → コントロール=制御が必要 Human interface Section, P&I Lab, Titech 物体の制御 シミュレータ内の物体は,速度・慣性を持つ. 自動的に運動する 強制的に位置を指定 不自然な動き,非常に大きな力が発生 シミュレーションの意味がない やわらかい動き 物理を無視せず,実世界と同じく力を加えて動かす. =制御をする Human interface Section, P&I Lab, Titech PD制御 目標位置に質点を持っていくには? 誤差に応じた力を加えてやる 例えば f=k(xg – x)では? mx k ( xg x) m x0 f xg 初期位置 目標位置 x ( x0 xg ) cos( k / m t ) xg 運動方程式: f mx 振動し続ける 誤差に比例:バネ Proportional制御 f k ( xg x) b( x g x ) では? x ( x0 xg ) e (b / 2)t cos( k / m t ) xg 減衰し,振動が止まる 微分に比例:ダンパ Differential制御 Human interface Section, P&I Lab, Titech PD制御の性質と調節 バネ係数kとダンパ係数bでPD制御の性質が決まる バネ・ダンパと考えられるので, k バネ係数 k 大きいほど早い.小さいほど柔らかい. ダンパ係数b 負だと振動がどんどん大きくなる 0だと振動が止まらない 大きいほど振動しにくい 目標位置 m b x ( x0 xg ) e(b / 2)t cos( k / m t ) xg b>0ならば,収束する(振動が収まる). kが大きいほど早く動く. 振動の周期は 2 k / m シミュレーションは時間が離散 少なくとも周期<2Δtは無理 Δt Human interface Section, P&I Lab, Titech シミュレータ上でのPD制御 シミュレータ上でのPD制御 時間が離散 m 位置 x 速度 v 0 目標位置 Human interface Section, P&I Lab, Titech シミュレータ上でのPD制御 安定性の確認 行列A An →0 ならば,このPD制御は安定になる 安定:そのうち目標位置でとまる Human interface Section, P&I Lab, Titech シミュレータ上でのPD制御 安定性の確認(つづき) |Aの固有値| < 1 ならば, An →0 なので, Aの固有値を求めてみる Aの固有値 Human interface Section, P&I Lab, Titech シミュレータ上でのPD制御 ~~ 安定な k,b の範囲, 早く静止する k,b を求める ~ b ~ ~ b=k 2 実際に良く使うのはこの辺 ~ k Human interface Section, P&I Lab, Titech 無次元化について この数値は何? この数値は質量m,ステップΔtに依らない? Human interface Section, P&I Lab, Titech PD制御の実験 ~~ いろいろな k, b での挙動をご覧ください ~ ~~ b b=k 2 1.5 ~ 0.5 2 k Human interface Section, P&I Lab, Titech ペナルティ法とPD制御 ペナルティ法もバネ・ダンパモデル . 侵入量 r,相対速度 r f Kr Br c バネ・ダンパ係数は? Springheadでは, バネ ダンパ では多物体が接触したときに安定しない. を使用 Human interface Section, P&I Lab, Titech まとめ 物理シミュレータの役割 ゲーム世界の多様性,多様な反応の実現 シミュレータの中身と選定 解析法とペナルティ法 私はペナルティ法が好きですが,目的次第です. 高速化法 行列Aをいかに早く解くか(解かずに済ますか) やわらかく動かすための制御 PD制御 バネ・ダンパ係数の決め方,無次元化 Human interface Section, P&I Lab, Titech 謝辞 このような機会を与えて下さった, 星野准一先生,新清士様,IGDAの皆様 一緒に開発したSpringhead開発チーム 田崎勇一,岡田直樹,市川宙,白井暁彦, 藤井伸旭,田上信一郎 ご清聴ありがとうございました. Human interface Section, P&I Lab, Titech 参照 デモとすべてのソースはSpringheadのWebで公開 http://springhead.info/ この資料や参考文献リストもおく予定 ご意見,ご質問,お問い合わせを [email protected] [email protected] WebのWiki・掲示板・バグトラッカー でお待ちしております Human interface Section, P&I Lab, Titech Human interface Section, P&I Lab, Titech Human interface Section, P&I Lab, Titech Human interface Section, P&I Lab, Titech 衝突 実世界の物体は 互いに侵入しない. 跳ね返る. 再現するためには 衝突検知 剛体間に働く力の決定 Human interface Section, P&I Lab, Titech 衝突検知 衝突の検出 衝突しているかどうかすべての剛体について調 べる. 剛体の形状は,多面体で表現されている. 衝突検知を簡単にするため,凸形状に分割しておく Human interface Section, P&I Lab, Titech 凸形状 凸形状の便利な性質 凸形状 距離が極小となる点が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) Human interface Section, P&I Lab, Titech 凸形状(GJK) 凸形状A上の点から, 凸形状B上の点へのベ クトルを 原点を始点に並べると ベクトルの終点の集合 も凸形状になる Human interface Section, P&I Lab, Titech 凸形状(GJK2) 1 V0 : 凸形状内の任意の点 Wi :OViとOWiの内積が最小の点 Vi :三角形Wi-2 Wi-1 Wi内の点で原点に 一番近い点 2 3 4 Human interface Section, P&I Lab, Titech 凸形状2 凸形状の便利な性質2 凸形状の交差部分も凸形状 交差部分の形状が簡単に求まる Half space representation D. E. Muller and F.P.Preparata: “Finding the intersection of two convex” (1978) Human interface Section, P&I Lab, Titech Featherstoneの方法 リンクiとより葉側のリンク全体 の運動方程式が, fi Miri Zi のように,書ける. Mi: リンクiとより葉側のリンクの 質量・慣性による項 Zi: 外力,重力,コリオリ力による項 Mi,Ziは加速度 r によらない 1. 葉のMiは既知なので, 葉から根に向かってMiを 計算する. fi 2. 根ではfiは0なので,運動方程 式から加速度r を求める. 3. 根から葉に向かって,fi , r を求める リンクi 葉のリンク ri 葉のリンク リンクi とより葉側のリンク 根のリンク
© Copyright 2024 ExpyDoc