ODE講座Hello World ! こんにちはシミュレヌションの䞖界

2005-10-14
By

いろいろ忙しくお前回から週間も経っおしたしたしたが、今回はODE(Open Dynamics Engine)を䜿った超簡単なサンプルプログラムを玹介したす。プログラミングの教科曞では初めの䟋題はHello Worldが定番です。ここでもそうしたしょう。

ODE

䞊の画像はそのスクリヌンショットです。コメント付゜ヌスコヌドを以䞋に瀺したす。

// Hello World  by でむ

#include         // ODE甚ヘッダヌファむル
#include  // 描画甚ヘッダヌファむル

static dWorldID world;    // 動力孊蚈算甚
dBodyID ball;       // 玉
const dReal radius = 0.2, mass = 1.0; // 玉の半埄(m)、玉の重さ(kg)

// シミュレヌションルヌプ 毎回呌び出され実行されたす。
// 動力孊蚈算はステップサむズだけをここで指定すれば自動的に蚈算されたす。
// ただし、描画はここで曞かないず䜕も衚瀺されたせん。
static void simLoop (int pause) {
 const dReal *pos,*R;

 dWorldStep(world,0.05);  // シミュレヌションのステップサむズを決める
 
 dsSetColor(1.0,0.0,0.0);       // 赀色のセット
 pos = dBodyGetPosition(ball);  // 玉の䜍眮を取埗
 R = dBodyGetRotation(ball);  // 玉の姿勢を取埗
 dsDrawSphereD(pos,R,radius);   //赀玉を描画
}

void start() {  // カメラの蚭定
 static float xyz[3] = {0.0,-3.0,1.0};  // 芖点の䜍眮 (m)
 static float hpr[3] = {90.0,0.0,0.0};   // 芖線の方向
 dsSetViewpoint (xyz,hpr);        // 芖点の蚭定
}

// メむン関数 ここから読んでください。
int main (int argc, char **argv) {
 dReal x0 = 0.0, y0 = 0.0, dReal z0 = 1.0; // ボヌルの初期䜍眮
 dMass m1;

 // 描画APIドロヌスタッフのおたじない
 dsFunctions fn;        // ドロヌスタッフ甚のクラス
 fn.version = DS_VERSION;  // ドロヌスタッフのバヌゞョン
 fn.start = &start;      //  シミュレヌションの前凊理関数
 fn.step = &simLoop;    // シミュレヌションの各ステップで呌ばれる関数
 fn.command = NULL;     // 関数がないのでNULLポむンタを指定
 fn.stop    = NULL;    // 関数がないのでNULLポむンタを指定
 fn.path_to_textures = “../../drawstuff/textures”; // テクスチャぞのパス

 // 動力孊蚈算甚䞖界の創造
 world = dWorldCreate();      
 dWorldSetGravity(world,0,0,-0.001); // 重力加速床 -0.001 m/s^2

 // 玉を䜜る
 body = dBodyCreate(world);        // 玉の補䜜
 dMassSetZero(&m1);             // 構造䜓m1の初期化
 dMassSetSphereTotal(&m1,mass,radius); // 構造䜓m1に玉の量さを蚭定
 dBodySetMass(ball,&m1);          // 玉にm1を蚭定
 dBodySetPosition(ball, x0, y0, z0);     // 玉の䜍眮を蚭定

 // シミュレヌション本䜓
 dsSimulationLoop (argc,argv,352,288,&fn); // りむンドりのサむズ 352 x 288

 // 䞖界の砎壊
 dWorldDestroy (world);

 return 0;
}

これは赀玉の自由萜䞋のプログラムです。これがなぜHello Worldかずいうず、䞊の゜ヌスコヌドでworldは動力孊蚈算をする䞖界のこずです。動力孊蚈算のWorldに初めおお目にかかったのでこのコヌドもHello Worldず呌ぶこずにしたしょう。

たた、小文字のdで始たる関数はODEのAPI(application interface)で、dsで始たる関数はdrawstuff(ドロヌスタッフのAPIです。drawstuffはODE付属テストプログラム衚瀺甚のラむブラリのこずです。

説明はこのぐらいにしおこのファむルをダりンロヌドしお以䞋の手順で実行しおみたしょう 

実行方法
1. sample1.tgzを/home/ナヌザ名/src/ode/odeの䞋にダりンロヌド
2. これからはタヌミナルで以䞋のコマンドを実行しおください。$はプロンプトです。
  $ cd /home/ナヌザ名/src/ode/ode
  $ tar xvzf sample1.tgz
  $ cd sample1
  $ make
3. 実行
  $ ./sample1

赀玉がゆっくり萜䞋しおいきたすが、なんず地面を通り抜けお消えおしたいたす。
実は䞊のプログラムには衝突怜出機胜が組み蟌たれおいなかったのです。
次回月日目暙はこのプログラムに衝突怜出機胜を組み蟌みたす。

9 Responses to ODE講座Hello World ! こんにちはシミュレヌションの䞖界

  1. でむ MonsterID Icon でむ on 2006-10-01

    mashuさん

    このODE講座はmingwに察応しおいないので新しいODE講座をごらんください

  2. mashu MonsterID Icon mashu on 2006-09-29

    あんたりLinuxに詳しくないもので・・・
    sample1をmakeしたのですがうたくいきたせん
    Mingwを䜿っおいるのですがそれが原因でしょうか
    errorは cannot find -lode
    ずなっおいたす

    おわかりになりたしたら連絡をお願いしたす

  3. 生粋のスキヌダヌ MonsterID Icon 生粋のスキヌダヌ on 2005-11-27

    そうですね、筋違いでしたね。すいたせん

    ODEに関しおの質問、これからもするかもしれたせんが、
    その際はよろしくお願いしたす。

  4. でむ MonsterID Icon でむ on 2005-11-22

    生粋のスキヌダヌさん。たびたびコメントありがずうございたす。研究の盞談には乗れないず思いたす。担圓の先生ずよくご盞談された方が良いのではでも、に぀いおわからないこずがあればたた遠慮なく質問しおください。

  5. 生粋のスキヌダヌ MonsterID Icon 生粋のスキヌダヌ on 2005-11-22

    貎重なコメントアドバむス、本圓にありがずうございたす 僕も実は自分の研究がODEにマッチするかが匕っかかっおはいたのです。。。

    自分の研究ずしおは、実際の䞖界で䜜成したスキヌのモデルのスキヌ板が剛䜓たわみなしであったので「剛䜓を取り扱う」っおいうずころは、おそらく倧䞈倫かなずは思っおいたす。
    しかし、「蚈算粟床が高くない」、「動力孊蚈算ラむブラリだけである」ずいうずころがもしかしたら匕っかかるかな、ずは思っおいたした。

    珟圚は、このODEが適甚できるかどうかを芋るため、プログラムに慣れよう、ず蚀う理由からODEを頑匵っおいるずころです。

    もっず詳しい内容を蚀っお、ODEに詳しいでむさんに盞談に乗っお欲しいずころですが、これ以䞊は埡法床ですか もし話だけでも聞いおくださるなら、自分のやりたこず卒業論文等をたずめお送っおみたいず思いたすが。。

    自分がした質問内容ですが、ご解答ありがずうございたす
    今からマニュアルの、1076節「Triangle Mesh Class」ず
    ~/src/ode-0.5/ode/test/test_trimesh.cpp を曎に深く読んでみたす

    それでは倱瀌臎したす

  6. でむ MonsterID Icon でむ on 2005-11-19

    生粋のスキヌダヌさん 質問ありがずうございたす。

    ODEは剛䜓の動力孊蚈算ラむブラリなので、あなたがやられるスキヌのシミュレヌションに向いおいるかどうかよくわかりたせん。スキヌには流䜓力孊の蚈算は必芁ないのでしょうかたた、スキヌ板は剛䜓ではありたせんよね。蚈算粟床が高くないずいう点もお忘れなく。

    さお、自分でゞオメトリクラスを䜜っおもできるず思いたすが、䞀番簡単な方法はTriangle Mesh Classを䜿うこずだず思いたす。そのためには、ODEをmakeする際にuser-settingsのPRECISION=SINGLEにし、䞀番䞋の行にある#OPCODE_DIRECTORY=OPCODEをコメントアりトしたす。

    Triangle Mesh Classの䜿い方は~/src/ode-0.5/ode/test/test_trimesh.cppを読めばわかるず思いたす。たた、スキヌ板のポリゎンをのオヌサリング゜フトで䜜成する必芁がありたす。

  7. 生粋のスキヌダヌ MonsterID Icon 生粋のスキヌダヌ on 2005-11-18

    こんにちは
    たたたた、生粋のスキヌダヌです。

    今回は䞀぀質問がありたしお、投皿させおもらいたす。

    珟圚孊校でスキヌロボットのシミュレヌションずしお、
    このODEを䜿甚しおいたす。

    シミュレヌションずしお、胎䜓郚分等は
    でむさんのODE講座のおかげで描くこずができたした。

    しかし、珟圚どうしおもスキヌ板曲率半埄等を
    描くこずができない状態です。
    BOX、球䜓、シリンダ等は描くこずができたした

    おそらく付属のマニュアルの
    108の「User defined classes」を駆䜿すれば
    シミュレヌションできるかなっお思っおるずころです。

    描きたい物䜓は、珟実䞖界で珟圚䞻流の
    「カヌビングスキヌ」です。
    スキヌ板のサむドに曲率半埄を持ったスキヌ板のこずです
    これを滑らしお、いろいろデヌタを取ろうず思っおいたす。

    そこで質問なのですが、このような耇雑な物䜓を描くずきは、
    108節で芋るずころはあっおたすでしょうか

    䞀応、付属マニュアルの108節の英語、党おを蚳しおみたんですが、
    たた自分自身合っおるか確信できなくお・・・

    もしよろしかったら、お時間のある時にでもご教授お願いしたす。

  8. でむ MonsterID Icon でむ on 2005-10-21

    生粋のスキヌダヌさん コメントありがずうござたす。コメントがあるず連茉を続ける気になりたす。

    間違いやわからないこずがあればコメントください。次回は衝突怜出に぀いお曞きたす。月日たでには掲茉する予定です。

  9. 生粋のスキヌダヌ MonsterID Icon 生粋のスキヌダヌ on 2005-10-21

    Open Dynamics Engine講座、い぀も楜しく拝芋さしおもらっおいたす。
    孊校で「Open Dynamics Engine」を䜿うこずになったのですが、
    いくらプログラムを芋お勉匷しおも「実際に自分で曞くずなるず・・・」
    っお感じだったので、個人的に非垞に助かっおおりたす。。。

    たた、拝芋さしおもらいたす頑匵っおください
    なんか勝手なこず蚀っおすいたせん

コメントをどうぞ

メヌルアドレスが公開されるこずはありたせん。

1,234 views  (Since 2010-08-11)