ODE(Open Dynamics Engine)講座の10回目です。先週は夢考房公開発表会等でバタバタして更新できませんでした。発表会ではRoboCup2005のレスキューリーグ で優勝した桐蔭横浜大学チームの監督さんも見にこられ勝つためのチーム運営などについてお話を聞くことができ大変有意義でした。
さて、今回もODEに特有なパラメータの説明をします。ODEではERPの他にCFM(Contratint Force Mixing)というパラメータがあります。日本語には訳しづらいですが直訳すると拘束力混合パラメータとなります。
拘束には 大きく分けてハード(hard)拘束とソフト(soft)拘束の2種類あり、多くはハード拘束です。ハード拘束では拘束条件を必ず守らなければいけませ ん。ODEは拘束とジョイントを同じ意味で使う場合が多いのでジョイントを例に挙げると、ハード拘束ではジョイントの拘束条件を一切破ってはいけません。 つまり、ジョイントの回転軸の位置や向きが結合されている2つのリンクが少しもずれてはいけません。一方、ソフト拘束は多少のずれはOKなのです。
これをうまく使うと生物の関節のように柔軟な関節をシミュレートできます。前回でてきたERPとこのCFMを 使うことによってバネ・ダンパシステムのシミュレートも可能です。詳しくはODEマニュアルをご覧ください。
次に、CFMの具体的な使い方を説明します。
CFMを設定する場合は以下のAPIを使います。なお、これはグローバルに働き全てのジョイントに作用します。通常、CFMの値は10の-9乗(10E-9)から1の範囲で選びます。単精度の場合のデフォルトは10E-5、倍精度の場合は10E-10となります。
- dWorldSetCFM(dWorldID, dReal cfm)
ここで、dWorldIDはワールドのID番号、cfmはCFMの値。
では、実習としてdWorldSetCFMをsample4aのWorldSetERP の下の行に挿入し、cfmの値をいろいろ変更して遊んでみてください。CFMの値を大きくするとジョイントが柔らかくなります。小さくする場合は0が最小 でこの場合はハード拘束となります。CFMが負の値はシステムが不安定になるので止めてください。
なお、CFMにはシミュレーションを安定させる働きがありますので、物体の挙動がおかしな場合は値を少しずつ大きくすることをお勧めします。
では、また次回。
コメント