ODE質問・要望募集! WinKITがRoboCup2006 Bremenの出場権獲得!
2 月 05

前回質問を募集したところ,貴重な質問を頂きありがとうございます.初心者用のODE本の原稿を執筆しているところですが,ご質問の内容が抜けていたところもあり参考になりました.今月末の脱稿を目指していますのでまた気軽に質問してください. さて,今回はODE(Open Dynamic Engine)講座の12回目となります.ご質問の中でインタラクティブにシミュレーションをしたいという要望が多かったのでサンプルプログラム5を作りました.ODEでは,シミュレーション中にキーボードからの入力を受付けますので,入力するキーに対応する関数などを作成するとインタラクティブなシミュレーションが可能となります.ODEもブログもインタラクティブなところが魅力の一つですね.  以下に重要な部分だけソースコードを示します.このプログラムはsample2を変更し,ボールの他に円柱オブジェクトを表示して,キーボードからの入力により外力を加えたり,シミュレーションの再スタートを可能としています.  void  prepDrawStuff() {   fn.version = DS_VERSION;   fn.start   = &start;   fn.step    = &simLoop;   fn.command = &command; // キー入力で呼び出される関数のアドレス   fn.stop    = NULL;   fn.path_to_textures = “../../drawstuff/textures”; } //キー入力で呼び出される関数 void command(int cmd) {   switch (cmd) {   case ’s’: dBodyAddForce(pillar.body,50, 0, 0);break;   case ‘j’: dBodyAddForce(ball.body    ,0,-10, 0);break;   case ‘k’: dBodyAddForce(ball.body    ,0,  0,50);break;   case ‘l’: dBodyAddForce(ball.body    ,0, 10, 0);break;   case ‘r’:restart()                            ;break;   } }  // シミュレーションを再スタート void restart() {   // 破壊だー                                                                                dJointGroupDestroy(contactgroup); // 接触点のグループを破壊   destroyBall();    // ボールを破壊   destroyCylinder(); // 円柱を破壊   // 生成                                                                                  contactgroup = dJointGroupCreate(0); //接触点グループの生成   createBall();   // ボールの生成   createPillar();  // 円柱の生成 } // ボールを破壊する void destroyBall() {   dBodyDestroy(ball.body);   dGeomDestroy(ball.geom); } void destroyCylinder() {   dBodyDestroy(pillar.body);   dGeomDestroy(pillar.geom); } static void simLoop (int pause) {  // キーボードからcontrolキーを押しながらpキーを押すと // シミュレーションが一時停止する if (!pause) {      dSpaceCollide(space,0,&nearCallback);     dWorldStep(world,0.01);     dJointGroupEmpty(contactgroup);   }   drawObject(ball.geom,1.3,0,0);   drawObject(pillar.geom,0,0,1.3); }  ソースコードはここにありますのでダウンロードして実行してください. キーボードのs, j ,k, lキーを押すと円柱やボールに外力が働き,rキーを押すとシミュレーションがリスタートし,コントロールキーを押しながらpキーを押すと一時停止します.お試しあれ. 最近は政治の世界でも(党議)拘束がかかるようなので,次回は拘束についてお話したいと思います.
投稿:06年02月05日

Leave a Reply

カウンタ (since 2008-1-11)
Copyright © 1998-2008    Kosei Demura