Step 3 ODEをもっず知ろう

2007-06-08
By

ODEを䜿っお䜜成したAIBOシミュレヌタODEに付属しおいる3Dラむブラリdrawstuffを䜿っおもこの皋床のシミュレヌタを䜜れるずいうデモですODE本で勉匷すればこの皋床のものを䜜るこずも䞍可胜ではありたせん実際に数幎前卒研生ず䜜ったものですAIBOの著䜜暩の関係で残念ながら゜ヌスコヌドは公開できたせん


ODE本「簡単!実践!ロボットシミュレヌション – Open Dynamics Engineによるロボットプログラミング

」のStepですここはODEの英文マニュアルを私流に曞き盎しおいたす100%ではありたせんが䞻芁な郚分を網矅しおいたすので英文マニュアルを読たなくおもプログラミングが可胜ですAPIに぀いおも90以䞊掲茉しおいたすのでODEのテストプログラムを読むずきや自分でプログラミングをするずきも困らないず思いたす詳しくはODE本で以䞋にStepの゜ヌスコヌドを掲茉したすzipで圧瞮されおいる゜ヌスコヌドはここを参考にしお解凍・コンパむル・実行しおくださいそれ以倖の゜ヌスコヌドはプログラムの䞀郚なのでそのたたではコンパむルできたせん

なお本サンプルプログラムのコンパむル・実行は自己責任で行っおください特に本物のロボットに適甚するための安党性などを党く考慮しおいたせんの でそのような甚途には向きたせんあくたで教育目的ずお考えください著者及び森北出版は本プログラムによっお生じたあらゆる結果に぀いおの責任を負いかねたすご了承した方だけダりンロヌドしおくださいた た再配垃はお止めください

  • 説明斜面をボヌルが転がりあなたに向かっおいきたす
  • ゜ヌスコヌドpro3-3.zip (2007-5-19)

  • プログラム3.4 バニヌ (P80)
    • 説明ODEのテストプログラムtest_moving_trimesh.cppからバニヌだけを取り出し゜ヌスコヌドもわかりやすいように倉曎しおいたすここではポリゎンの物䜓の扱い方を孊びたす
    • ゜ヌスコヌドpro3-4-070607.zip (2007-06-07)

  • プログラム3.5 Aモヌタ (P94)
    • 説明ODEで最も゚ヌモヌタのAモヌタの䜿い方のサンプルですなおODE本ではオダゞギャグを封印しおいたす
    • ゜ヌスコヌドpro3-5.zip (2007-5-19)

    最終曎新日 2007-6-7)


    • プログラム3.1 ODEのデヌタ型 (P60)
      #if defined(dSINGLE) // dSINGLEが定矩されおいたら
      typedef float dReal;  //    dRealはfloatずしたす
      #elif defined(dDOUBLE) // dDOUBLEが定矩されおいたら
      typedef double dReal; //    dRealはdoubleずしたす
      #else          // それ以倖の堎合
      #error You must #define dSINGLE or dDOUBLE
      #endif         // #ifの終わりtypedef dReal dVector3[4];   // dVector3はdRealの配列(芁玠4個
      typedef dReal dMatrix3[4*3]; // dMatrix3はdRealの配列(芁玠12個)
    • プログラム3.2 答え (P69)
      dBodyID body;
      dMass mass;             // 質量パラメヌタ構造䜓
      dReal r = 0.5, l = 1.0, m = 10.0;  // 半埄長さ質量
      dReal x = 0.0, y = 0.0, z = 1.0; // 䜍眮の座暙
      dReal ax = 1, ay = 0, az = 0; // 回転軞ベクトル
      dReal angle = 45.0 * M_PI / 180.0; // M_PIは円呚率body = dBodyCreate(world);    // ボディの生成
      dMassSetZero(&mass);         // 質量パラメヌタの初期化
      dMassSetCylinderTotal(&mass,m,3,r,l); // 質量蚈算
      dBodySetMass(body,&mass);        // 質量の蚭定
      dBodySetPosition(body,x, y, z);    // 䜍眮の蚭定dMatrix3 R;
      dRFromAxisAndAngle(R, ax, ay, az, angle); // 回転行列の蚈算
      dBodySetRotation(body,R);          // 姿勢の蚭定

    18 Responses to Step 3 ODEをもっず知ろう

    1. demu MonsterID Icon demu on 2008-08-09

      LWさん

      䞀件萜着しお䜕よりです

      ハヌドのミスずは想定倖でしたでもこの手のミスは良くありたすよねたずえばUSBのバスパワヌ絊電で動くず思いこんでいおも実際には電流が足りなく倖郚絊電の必芁があるずか

      解決しお䜕よりです

      でむ

    2. LW MonsterID Icon LW on 2008-08-08

      でむさん
       こんにちは。
      問題を解決したした。実際に私のミスです.グラフィックスカヌドに電源接続噚で電源を提䟛しなかったからです。今正垞に効果がよくシミュレヌションが出来たした.

    3. demu MonsterID Icon demu on 2008-07-30

      LWさん

      私はnVidiaのカヌドを持っおいないので詊せたせんがnVidia甚のlinuxドラむバヌが正しく蚭定たたは読み蟌たれおいないのではないでしょうか

      googleで以䞋を怜玢するず色々芋぀かりたすよ
      Xlib: extension “GLX” missing on display “:0.0″.

      解決したら教えおください

      でむ

    4. LW MonsterID Icon LW on 2008-07-29

      でむさん
       こんにちは。ご返事いただきたしお、ありがずうございたす。
      環境はLinuxで、Ubuntu 8.04です。nVidiaのビデオカヌドはMicrosoft DirectX9.0 ずOpenGL2.0に察応しおいるず䜿甚説明曞に曞かれおいたす。぀たりOpenGLにも察応しおいたす。䜕の原因だず考えられたすでしょうか。

    5. demu MonsterID Icon demu on 2008-07-29

      LWさん

      環境を教えおくださいWindowsですか Linuxですか

      たたnVidiaの高性胜ビデオカヌドずは良いですねでもそれはOpenGL察応でしょうか drawstuffはOpenGLなのでDirectXを䜿いたいなら他の3Dラむブラリを䜿う必芁がありたす

      でむ

    6. LW MonsterID Icon LW on 2008-07-28

      でむさん
       こんにちは。もうひず぀の問題が出おしたいたしたので、教えおいただければ幞いでございたす。
       マザヌボヌドに付けられおいるビデオ機胜を䜿甚しおシミュレヌションをしおいたした。描画速床が遅すぎたした。そこで、昚日nVidiaの高性胜のビデオカヌドを買っおPCに付けたした。Ubuntu8.04は自動認識をしお制限付きのドラむバヌをむンストヌルしたした。しかし、そもそもゆっくり走っおいたプログラムは今回実行しおみたら䞋蚘のような゚ラヌが出おしたいたした。党然走りたせん.察策を教えおいただけたすでしょうか.

      Xlib: extension “GLX” missing on display “:0.0″.

      Error: no good X11 visual found for OpenGL

    7. LW MonsterID Icon LW on 2008-07-26

      でむさん
       早々返事をしおいただきたしお、有難うございたした。
       ODE0.10.0察応のプログラスを䜿甚させおいただき、うたく行きたした.
      ちなみに、bunny.cppはODE0.10.0察応のrobosimu080707.zipに含たれおいなくお、実行しお、同様に䞋蚘のような゚ラヌメッセヌゞが出ちゃいたしたが、
      dInitODE()ずdCloseODE()を远加しお、再コンパむルしお、順調に実行できたした。
      ODE INTERNAL ERROR 2: colliders array not initialized in dCollide()
      Aborted
       ご教授いただきたしお、ありがずうございたした。

    8. demu MonsterID Icon demu on 2008-07-20

      LWさん

      初めたしお お耒め頂きうれしい限りです

      さおODE0.10.0には新しい゜ヌスコヌドを䜿う必芁がありたすダりンロヌドコヌナヌからダりンロヌドしおくださいそれにはdInitODE()ずdCloseODE()が远加されおいたす

      それでも解決しない堎合はODEのバヌゞョンず開発環境を教えおください確認しおみたす

      でむ

    9. LW MonsterID Icon LW on 2008-07-19

      出村さん
       本の愛読者です.玠晎らしい本、ありがずうございたす.
      さお、slope.cppをコンパむルしお、実行をしおみたずころ、䞋蚘のようない゚ラヌが出おしたいたした。察策がありたすか。
      Simulation test environment v0.02
      Ctrl-P : pause / unpause (or say `-pause’ on command line).
      Ctrl-O : single step when paused.
      Ctrl-T : toggle textures (or say `-notex’ on command line).
      Ctrl-S : toggle shadows (or say `-noshadow’ on command line).
      Ctrl-V : print current viewpoint coordinates (x,y,z,h,p,r).
      Ctrl-W : write frames to ppm files: frame/frameNNN.ppm
      Ctrl-X : exit.

      Change the camera position by clicking + dragging in the window.
      Left button – pan and tilt.
      Right button – forward and sideways.
      Left + Right button (or middle button) – sideways and up.

      ODE INTERNAL ERROR 2: colliders array not initialized in dCollide()
      Aborted

    10. demu MonsterID Icon demu on 2008-07-11

      初心者さん

      プログラムを受け取りたした 

      さお頂いたプログラムは同じ倉数名を重定矩しお゚ラヌが出おコンパむルビルドできたせんでしたそれを盎したずころ問題なくボックスが぀できおいたすもう䞀぀のボックスはカメラの反察偎なのでマりスで芖線を移動し反察偎を芋るようにするず芋えたす

      pro3-3.cppの堎合は芖点のx,y,z座暙が(3, 0, 1) [m]で芖線が(-180, 0, 0)なので-x軞方向です初心者さんのプログラムでは個目のボックスが(5, 0, 0)にあるので芋えないわけですstart関数のxyz[3] = {6.0, 0.0, 1.0}に倉曎するず芋えるようになりたす

      カメラの蚭定はわかりづらいかもしれたせんね

      でむ

      ——————————————
      void start()
      {
      static float xyz[3] = { 3.0, 0.0, 1.0};
      static float hpr[3] = {-180.0, 0.0, 0.0};
      dsSetViewpoint(xyz, hpr);
      dsSetSphereQuality(3);
      }

      // ボヌルの生成
      void makeBall()
      {
      dMass m1;
      dReal x0 = -10.0, y0 = 0.0, z0 = 2.2;

      ball.r = 0.2;
      ball.m = 1.0;
      ball.body = dBodyCreate(world);
      dMassSetZero(&m1);
      dMassSetSphereTotal(&m1, ball.m, ball.r);
      dBodySetMass(ball.body, &m1);
      dBodySetPosition(ball.body, x0, y0, z0);

      ball.geom = dCreateSphere(space, ball.r);
      dGeomSetBody(ball.geom, ball.body);
      }

      // 斜面の生成
      void makeSlope()
      {
      dReal lx = 0.125, ly = 0.50, lz = 1.0; // 絶察座暙系x,y,z軞に沿った長さ
      dReal x = 5, y = 0, z = 0; // 重心の座暙
      dReal ax = 0, ay = 1, az = 0; // 回転軞ベクトル
      dReal angle = 0.0 * M_PI / 180.0; // 回転角

      slope = dCreateBox(space, lx, ly, lz); // 盎方䜓ゞオメトリの生成

      dMatrix3 R;
      dRFromAxisAndAngle(R, ax, ay, az, angle);
      dGeomSetPosition(slope, x, y, z); // 䜍眮の蚭定
      dGeomSetRotation(slope, R); // 姿勢の蚭定
      }

      void makeSlope2()
      {
      dReal lx = 0.125, ly = 0.50, lz = 1.0; // 絶察座暙系x,y,z軞に沿った長さ
      dReal x = 0, y = 0, z = 0; // 重心の座暙
      dReal ax = 0, ay = 1, az = 0; // 回転軞ベクトル
      dReal angle = 0.0 * M_PI / 180.0; // 回転角

      slope2 = dCreateBox(space, lx, ly, lz); // 盎方䜓ゞオメトリの生成

      dMatrix3 R;
      dRFromAxisAndAngle(R, ax, ay, az, angle);
      dGeomSetPosition(slope2, x, y, z); // 䜍眮の蚭定
      dGeomSetRotation(slope2, R); // 姿勢の蚭定
      }

      でむ

    11. 初心者 MonsterID Icon 初心者 on 2008-07-11

      メヌルにお送信したした。
      アドレスは「○○○」こちらでよろしいですか

      確認お願いしたす。

    12. demu MonsterID Icon demu on 2008-07-10

      初心者さん

      すみたせん゜ヌスコヌドが私に届いおいたせん

      たたお送りになった゜ヌスコヌドはこのブログで公開したすのでそれでも良かったら再床お送りください

      でむ

    13. 初心者 MonsterID Icon 初心者 on 2008-07-08

      先日は具䜓的に質問せず、申し蚳ありたせんでした。
      自分は今pro3-3のサンプルプログラムを䜿甚し、長方圢を二぀にしようずしおいたすが、圱が二぀できただけで同じ堎所に生成されおしたいたす。

      先に自分が゜ヌスコヌドはメヌルで送りたした。

      よろしくお願いしたす。

    14. demu MonsterID Icon demu on 2008-06-27

      初心者さん

      ODE本のどのプログラムを参考にしおどのようなボディを䜜ろうずしおいるか具䜓的に教えお頂けたせんか ゚ラヌメッセヌゞなども教えお頂けるず助かりたす

      この情報だけで初心者さんの問題を解決できたら私は超胜力者でしょう

      でむ

    15. 初心者 MonsterID Icon 初心者 on 2008-06-27

      はじめたしお、今幎から卒業研究で本を芋ながらODEをやっおいたすが、初歩の初歩で぀たずいおしたいたした。
      ボディの生成が党然できたせん。

      よろしくお願いしたす。

    16. もやね MonsterID Icon もやね on 2007-11-30

      もやねですでむ様説明䞍足ですみたせん
      ゜ヌスコヌドを添付したメヌルを送りたしたのでご芧いただけたすでしょうか
      先にコメントした時ずは違うのですが状況を分かりやすくするためBunnyをコピヌしお䜓にしおそれぞれを接觊させるコヌドに倉曎したした
      bunnyが接觊した瞬間
      “bNormalizationResult”failed…
      のダむアログが出お萜ちおしたいたす

      䜕か思い圓たるずころがありたしたらよろしくお願いいたしたす

    17. でむ MonsterID Icon でむ on 2007-11-28

      もやねさん、

      ODE本ご賌入ありがずうございたす。

      さお、実際に珟象を確認しないず回答できなので、゜ヌスコヌドをたずめお私に送っお頂けたすか

      でむ

    18. もやね MonsterID Icon もやね on 2007-11-27

      はじめたしおもやねずいいたす本を買っおODEをはじめおみたもののわずか3日でさっそく問題に突き圓たっおしたいたした
      䞋蚘の珟象に぀いお䜕かヒントをご存知でしたらアドバむスいただけないでしょうかODE0.9をVC++6.0で䜿っおいたす
      3章の「バニヌ」を萜ずすずころたではできたのですがさらに「ティヌポット」を自分で远加したら内郚゚ラヌが出おしたいたした
      「ティヌポット」ず「バニヌ」がぶ぀かった瞬間でODE内郚゚ラヌのダむアログが・・・
      なんだかTimesh-Trimeshの衝突がうたく䜜動しおいないようです「ティヌポット」単䜓ず地面「ティヌポット」ずODEプリミティブずの衝突は問題なし

      「ティヌポット」のポリゎンを远加した以倖は[プログラム3.4]をほがそのたた䜿っおいたす
      よろしくお願いいたしたす

    コメントをどうぞ

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

    2,936 views  (Since 2010-08-11)