92ODE: 2007年1月アーカイブ
1月22日~24日までKITの池の平セミナーハウスへ学生といってまいりました。今年は雪が少なく池の平温泉スキー場でも積雪が1mしかありませんでした。それでも滑るには十分な量で学生達とスキーやスノボーを満喫しました。それにしても、最近の若者はスノーボードしかやりません。スキーをやっている人はオヤジやご老人がほとんどでしたが、ご老人(推定年齢70歳)のスノーボーダーを発見して勇気付けられました。そのおじいちゃんは全身銀色のウェアを身にまとい、頭に銀色のヘルメットをかぶり、もの凄い速さでかっ飛ばしています。私もそれに刺激を受け、久しぶりにスノボーにチャレンジしましたが、簡単ではありません。それでも、七転び八起きしながらなんとか滑れるようになったのが今研修の成果?でした。
体がズキズキ痛みますが、ゲーム開発やロボットの研究者にも広く使われているオープンソースの物理計算エンジンODE(Open Dynamics Engine、オープン ダイナミクスエンジン)を学ぶODE講座の第18回目をはじめましょう。今回はODEについている3Dグラフィクスライブラリdrawstuffを使わずにシミュレーションをスピードアップする方法をご説明します。
drawstuffはODEの一部ではなく、テストプログラムを表示するためのいわばオマケで、OpenGLをベースに作られています。とてもシンプルでソースコードもあるのでOpenGLを勉強するにはとても良い教材だと思います。
描画しない方法はとても簡単です。テストプログラムではdsSimulationLoopをmain関数の中で呼び出しています。この部分が描画ループを呼び出しシミュレーションの各ステップで描画やキーボードからのイベント処理をしているので、これを呼び出さなければOKです。simLoop関数の中でも描画している部分があるので、そこも呼び出さないようにする必要があります。
つまり、以下のようにしてください。
- 描画をする場合
static void simLoop (int pause)
{
必要な処理に関するコードをここに書く。
dSpaceCollide(space,0,&nearCallback);
dWorldStep(world,0.01);
dJointGroupEmpty(contactgroup);
drawSphere(torso.geom);
}
int main(int argc, char *argv[])
{
略
dsSimulationLoop(argc, argv, 640, 480, &fn);
略
}
- 描画をしない場合
static void simLoop (int pause)
{
必要な処理に関するコードをここに書く。
dSpaceCollide(space,0,&nearCallback);
dWorldStep(world,0.01);
dJointGroupEmpty(contactgroup);
// drawSphere(torso.geom); 描画はしない
}
int main(int argc, char *argv[])
{
略
while (1) {
simLoop(0); // 引数は必ず0にしてください。
}
略
}
今回はこれでおしまい。
ゲーム開発やロボットの研究者にも広く使われているオープンソースの物理計算エンジンODE(Open Dynamics Engine、オープン ダイナミクスエンジン)を学ぶODE講座の第17回目です。
今回は重心の位置を移動する方法について説明します。ODE0.6からはdGeomSetOffsetPositionというAPIが導入され、昨年ODE講座で紹介したGeometry Transform オブジェクトを使う従来の方法と比べてずいぶん簡単に重心の位置をずらして設定することができるようになりました。
- ジオメトリの位置を移動させるAPI
dGeomIDの位置をbodyの位置から(x, y, z)だけずらして設定する。このAPIを使用する前にジオメトリはボディと関連づけられていなければいけない。つまり、dGeomSetBodyが先に呼び出されている必要あり。
では、サンプルプログラムとして上図の起き上がり小法師を紹介します。ソースコードはここからダウンロードしてください。この例では、小法師の胴体に相当するの球(質量10kg、半径0.4m)の重心を球の中心より0.4m下に設定し、頭に相当する球の質量は1gしかないので、この小法師は必ず起き上がってくれます。具体的には、dBodySetPositionで重心位置を球の中心から半径分(0.4m)下にずらして設定し、dGeomSetOffsetPositionでそのずらした量(オフセット,ここではdz)を設定しています。
キーボードからfキーやjキーを押すと、 起き上がり小法師へ左右方向へ100Nの力が加えられますが、復元力があるので起き上がるようすを確認できます。
3関節マニピュレータのシミュレータ (ソースコードはたった100行)
ゲーム開発やロボットの研究者にも使われているオープンソースの物理計算エンジンODE(Open Dynamics Engine、オープン ダイナミクスエンジン)を学ぶODE講座の第16回目です。
今回は今までの知識を整理するために、簡単な3関節マニピュレータのプチシミュレータを作ってみましょう。これはODEを使うと「たった100行程度でこのようなシミュレータができるんです.」というプログラムなので衝突計算部分は省略しています.運動学や逆運動学を習った方はこのロボットに実装してみてください.ロボットが動くと不思議にわかった気になるものです.
図 Yellow Dog Linux 5.0 for PLAYSTATION 3のスクリーンショット:左のターミナルにcpuinfoを表示しています。Cell Broadband Engineが2個認識され、machineがPS3PFと認識されていることがわかります。YDLの標準ウインドウマネージャはEnlightenmentですが、gnomeに変更しています。
ゲーム開発やロボットの研究者にも使われているオープンソースの物理計算エンジンODE(Open Dynamics Engine、オープン ダイナミクスエンジン)を学ぶODE講座も第15回目となりました。
今回はお正月企画として、お年玉で購入した?PLAYSTATION 3 (プレイステーション3、PS3)にLinuxをインストールしODEを動かすまでの道のりを紹介したいと思います。
LinxuのディストリビューションにはPS3用に先陣を切ったYellow Dog Linux 5.0(YDL5.0)のフリーダウンロード(英語)版を使いました。 YDLの前にMomonga Linux(20061217版) を試したのですが、何故かfirefoxが起動せずにすぐ落ちる問題点と音がでないために泣く泣く使うのをあきらめました。Momonga Linuxは私がかつて愛用したKondara Linuxの志を継ぐユニークなディストリビューションです。かわいいモモンガがちびっ子にも大人気です。今後に期待しましょう!
さて、Yellow Dog Linux 5.0をPS3にインストールする方法は超簡単でFIXSTARSによる詳細な説明が以下のウェブサイトにあるので、そちらをご覧ください。準備等も含めて2時間もあればインストールは終わると思います。私の場合は、Linux用に10GB、Game OS用に50GBのハードディスク領域を確保し、Linuxのスワップ領域は1GB確保しました。
1. Yellow Dog Linux 5.0のインストール とカスタマイズ(ウインドウマネージャの日本語化)
新年明けましておめでとうございます。
ゲーム開発やロボットの研究者にも使われているオープンソースの物理計算エンジンODE(Open Dynamics Engine、オープン ダイナミクスエンジン)を学ぶODE講座の第14回目です。
ご質問の中でインタラクティブにシミュレーションをしたいという要望が多かったので、今回はその方法を学びます。ODEでは,シミュレーション中にキーボードからの入力を受付けますので,入力するキーに対応する関数などを作成するとインタラクティブなシミュ レーションが可能となります.ODEもブログもインタラクティブなところが魅力の一つですね.
以下に重要な部分だけソースコードを示します.このプログラムはsample2を変更し,ボールの他に円柱オブジェクトを表示して,キーボードからの入力により外力を加えたり,シミュレーションの再スタートを可能としています.
