• 締切済み

剛体の回転運動と慣性テンソル

形の変わらない剛体の回転運動のコンピュータシミュレーションをしたいと考えています。 時刻を t、外部トルクのベクトルτ(t)、慣性テンソルI、 角加速度a(t)、角速度ω(t)、各位相(姿勢)θ(t)、 サンプル周期Δt として、 刻々と入力されてくるτ(t)をもとに、 a(t) = I^(-1)τ(t) - I^(-1)(ω(t-1)×Iω(t-1)) ω(t) = ω(t-1) + a(t)Δt θ(t) = θ(t-1) + ω(t)Δt と順次求めていけばだいたいよさそうなことが分かりました。 しかし、ここで、慣性テンソル I は 基準姿勢のときの質点分布から求められる値、 つまり、いわゆるオブジェクト座標系での値ですよね。 ということは慣性テンソル I は、 θ(t) の変化によってどんどん変化させなければ いけないのでしょうか? (つまり、θ(t) の回転を実現する回転行列を ROT(θ(t)) として、 I'(t) = ROT(θ(t))I とし、先ほどの I の代わりにこの I'(t) を使うような感じ) 一方、θ(t) はもちろん、ω(t) と a(t) も、 この式の場合、ワールド座標系、つまり、 剛体の姿勢にかかわらず、外部の観測者の軸を基準に考える系の変数ですよね? 変数の定義を式から後追いする形で申し訳ないですが、 回転の基準系の定義が分からなくなってきたので教えてください。

みんなの回答

  • yokkun831
  • ベストアンサー率74% (674/908)
回答No.4

>そして、私は、I だけはオブジェクト座標系表示であり、 I 以外の変数の全てがワールド座標系表示である、と 解釈しておりました。 概ねその通りであると思います。 ただし,与えられた最後の式が重要で,ここで一気にオブジェクト座標系に乗り換えています。 τ(t) = Ia(t)+ω(t)×L(t) 第2項が慣性力にあたるわけですね。するとこのIは,オブジェクト座標系のIであり,ワールド座標系のI'ではないので回転変換の必要はないということになるようです。 先に書いたように,私もこの辺の扱いにはなれていないので,このあたりが限界です。剛体に関する「オイラーの運動方程式」で当たってみてください。

ubutton
質問者

お礼

今の間にいろいろ本を読んで、 実際にシミュレーションを組んで確かめたところ、 全てワールド座標系変数とみなして L(t) = L(t-1) + τ(t)Δt (L(t) は角運動量) ω(t) = (R(t) Iobj R(t)')^-1 L(t) θ(t) = θ(t-1) + ω(t)Δt とするのが正しいことが分かりました。 この漸化式でシミュレーションすると、 宇宙空間でペンチを回す不思議ビデオと全く同じ動きが再現されたのです。 --- これから a(t) を使った正しい式はどうであったかを書くと、 変数は全てワールド座標系とみなして、 a(t) = I(t)^-1τ(t) // 並進運動の a = F/m に相当 (*) dω(t)/dt = a(t) // dv/dt = a に相当 dθ(t)/dt = ω(t) // dx/dt = v に相当 となります。つまりなんのひねりもありませんでした。 --- 一方私が本を読んで得ていた "τ(t) = I a(t)+ω(t)×L(t)" というのは、 τobj = dLobj/dt τobj = dLworld/dt - ω×Lworld τobj = Iworld aworld - ω×Lworld ということで、ご指摘の通り "τ" は τobj であって それにまつわる慣性系の項 -ω×Lworld が現れたものであることがわかりました。 (二行目で (d/dt)obj = (d/dt)world - [ω×] という微分についての座標変換公式を使っています。 また、ωobj = ωworld - ωworld×ωworld = ωworld = ω で座標系によりません) 「ゲームプログラミングのための3Dグラフィックス数学」 を読むときには気をつけないとはまる? ・p.314 の "τ(t)" は実は他の変数がワールド座標系にもかかわらずこれだけオブジェクト座標系。 ・p.314 の "I" はワールド座標系なので実は時間変化する。 I(t) と書くべき。 なのではないか思いました。 ありがとうございました。

  • yokkun831
  • ベストアンサー率74% (674/908)
回答No.3

まず,訂正です。 >Lの方向であり,またωの方向 失礼しました。Iがテンソルなのを忘れていました^^;。 ワールド座標からオブジェクト座標への回転をR,逆をR^とすると, ω' = Rω , I' = RIR^ ∴ L' = I'ω' = RIR^Rω = R(Iω) = RL 見る立場をはっきり意識すれば,迷うことはないと思います。 運動方程式は, ワールド座標系で    dL/dt = τ オブジェクト座標系で  dL'/dt = τ' ただし, dL'/dt = d(RL)/dt = (dR/dt)L+R(dL/dt) τ' ≠ Rτ がミソですね。オブジェクト座標系は加速系なので慣性力が現れるわけです。

ubutton
質問者

お礼

ご回答いただきありがとうございました。

ubutton
質問者

補足

ご提示頂いた式を始め書いた式に対応するよう 考えてみたのですが、結構混乱してきました。 だいたいどの本をみてもこう書いています↓ ω(t) = dθ(t)/dt (並進運動の v=dx/dt に相当) a(t) = dω(t)/dt (a=dv/dt に相当) L(t) = Iω(t) (p=mv に相当) τ(t) = Ia(t)+ω(t)×L(t) (F=ma に相当) (ex. 古典力学上 H.Goldstein、ゲームプログラミングのための 3Dグラフィックス数学, Eric lengyel) そして、私は、I だけはオブジェクト座標系表示であり、 I 以外の変数の全てがワールド座標系表示である、と 解釈しておりました。 もし、*この式において*「いや、この変数はオブジェクト座標系だよ」 というのがあればその形式で教えて頂けるとありがたいです。 それと、もしその式の中に軽微な間違いがあるなら それをご指摘頂けると、私の持つ本の式に沿った形で、 式を扱えるようになるわけで、 それが一番解決に近いと思っております。 (私は恐らくこの式では I の全てあるいは一部が R(t)IR(t)^(-1) の間違いではないかと疑っているわけですが) また、「その式セットじゃ全然ダメだから全部構築しなおした方がいいよ」 というならそれでもOKです。 中々わがままな要求かもしれませんが、 剛体のシミュレーションを目的とする人が本を読んで悩む 一般的な問題だと思っておりますので、ご教授頂けるとありがたいです。

  • yokkun831
  • ベストアンサー率74% (674/908)
回答No.2

>>回転軸自体が剛体に対して動いていくのならば,それに応じて慣性テンソルも回転変換しなければならないと思います。 >それはそうですね。剛体の形が変化していく場合、に当たると思います。  そういう意味でなく,本来正真の回転軸というのは瞬間的には常にひとつの軸であり,オブジェクト座標系の軸とは独立にワールド座標系の中にただひとつ定まるものだということです。その回転軸の方向がLの方向であり,またωの方向でもあるわけです。そしてこれらの変化は外力のみによって生じるのですね。  外力による変化するトルクがある一般の場合は,この回転軸がオブジェクト座標系に対して動いていくわけなので,当然慣性テンソルを回転変換する必要があると思います。

ubutton
質問者

お礼

ご回答いただきありがとうございました。

  • yokkun831
  • ベストアンサー率74% (674/908)
回答No.1

>慣性テンソル I は、 θ(t) の変化によってどんどん変化させなければ いけないのでしょうか? 私自身慣性モーメントはともかく,慣性テンソルの扱いはあまり経験がないので,多少ずれたことを申し上げるかもしれませんが… 剛体に固定された軸のまわりの回転に限られるのであれば,慣性テンソルは同じものでOKですよね。回転軸自体が剛体に対して動いていくのならば,それに応じて慣性テンソルも回転変換しなければならないと思います。なお,テンソルの回転変換は2つの回転行列ではさむ必要があるのではないでしょうか?下記など参考になれば。 http://homepage2.nifty.com/eman/dynamics/mom_tensor.html

ubutton
質問者

お礼

お返事ありがとうございます。 >回転軸自体が剛体に対して動いていくのならば,それに応じて慣性テンソルも回転変換しなければならないと思います。 それはそうですね。剛体の形が変化していく場合、に当たると思います。 今回考えたいのは、剛体のもつ角速度によって、 剛体が文字通り回転したときの話です(しかも2軸以上の回転をしているとき) この場合、回転軸は「剛体に対して」は動きませんが、 回転軸はワールド座標系からみると回転しているはずです。 (つまりワールド座標系のω(t)は外力がなくても変化していくはず) このとき、回転軸は「剛体に対して」動かず、 上記の場合には含まれないですが、 やっぱり慣性テンソルも再計算しないといけないのでしょうか? 今自分で考えてみると、 角運動量L(t)=Iω(t) であって、かつ外力が働かない場合は角運動量保存則によって L(t)は不変のはずです。 ということは、ワールド座標系の ω(t) が変化すると L(t)も変わってしまう。それを止めるにはIの方を変化させなければならない。 だからやっぱりIを回転させなければならないのかなぁと思いました。 >なお,テンソルの回転変換は2つの回転行列ではさむ必要があるのではないでしょうか? あ、そうですね。はさむのが正しいです。これは了解です。