ODEプãƒã‚­ãƒ£ãƒ³ãƒ—2:ロボカップ・プãƒã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚¿ã‚’作ã‚ã†ï¼

2006-10-19
By

 

 
時ãŒçµŒã¤ã®ã¯æœ¬å½“ã«æ—©ã„ã‚‚ã®ã§ï¼Œã“ã®é–“æš‘ã„ã¨æ€ã£ã¦ã„ãŸã‚‰ã‚‚ã†ã™ã£ã‹ã‚Šç§‹ã§ã™ã­ï¼Žï¼‘ï¼æœˆï¼‘6~18日ã¨å¦™é«˜é«˜åŽŸã«ã‚る大学ã®ã‚»ãƒŸãƒŠãƒ¼ãƒã‚¦ã‚¹ã«ç ”究室ã®å­¦ç”Ÿã¨è¡Œã,ã¾ã˜ã‚ã«è¼ªè¬›ã‚„テニスを楽ã—ã¿ã¾ã—ãŸï¼Žå±±ã¯ã‚‚ã†ã™ã£ã‹ã‚Šç´…葉ãŒè‰²ã¥ã美ã—ã‹ã£ãŸã®ãŒå°è±¡çš„ã§ã—ãŸï¼Ž

ã•ã¦ï¼ŒOpen Dynamics Engine プãƒã‚­ãƒ£ãƒ³ãƒ—もデビューã—ã¦ã‹ã‚‰ï¼’ヶ月ãŒã™ãŽï¼Œæ–°ã—ã„ロボコンマガジン(No.48)ãŒï¼‘ï¼æœˆï¼‘4日(土)ã«ç™ºå£²ã•れã¾ã—ãŸï¼Ž

今回ã¯é€£è¼‰ï¼’回目ã¨ãªã‚Šã¾ã™ï¼Žé€£è¼‰ãŒå…¨ï¼”回ã—ã‹ãªã„ã®ã«ã‚‚é–¢ã‚らãšï¼Œã‚°ãƒªãƒ¼ãƒ‡ã‚£ï¼ˆgreedy)ã«ã‚‚最終回ã¯ï¼’脚歩行ロボットã®ãƒ—ãƒã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚¿ã‚’作るã“ã¨ã‚’目標ã¨ã—ã¦ã„ã‚‹ãŸã‚,今回ã¯è»Šè¼ªåž‹ãƒ­ãƒœãƒƒãƒˆï¼Œæ¬¡å›žã¯ãƒ­ãƒœãƒƒãƒˆã‚¢ãƒ¼ãƒ ã®ãƒ—ãƒã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚¿ã¨ãƒ‰ãƒ³ãƒ‰ãƒ³ä½œã£ã¦ã„ãã¾ã™ï¼Ž

ロボコンマガジンã§ã¯ç´™é¢ãŒé™ã‚‰ã‚Œã¦ã„ã‚‹ãŸã‚詳ã—ã説明ã§ãã¾ã›ã‚“.ã“ã®ãƒšãƒ¼ã‚¸ã§ã¯ãれを補ã†ãŸã‚,サンプルプログラムã®å…¨ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã¨è±ªè¯ä»˜éŒ²ï¼Ÿã¨ã—ã¦é€£è¼‰ã«ç™»å ´ã—ãŸAPI集を掲載ã—ã¦ã„ã¾ã™ï¼Ž

  • å›ã‚‚サンプルプログラムをゲットã—よã†ï¼
  • プログラム1(自由è½ä¸‹ï¼šè¡çªæ¤œå‡ºãªã—)

    ゆã£ãりè½ä¸‹ã—ã¦ã„ãã¨ï¼Žï¼Žï¼Ž

  • プログラム2(自由è½ä¸‹ï¼šè¡çªæ¤œå‡ºã‚り)

    地é¢ã«ç€é™¸

  • プログラム3(プãƒã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚¿ï¼‰

     Open Dynamics Engine    Robot Simulation

    ロングシュートï¼

  • 注1:ã“れらã®ãƒ—ログラムã¯ODE教育用ã®ã‚µãƒ³ãƒ—ルプログラムã¨ã—ã¦æ›¸ã„ãŸã‚‚ã®ã§ï¼Œãƒ­ãƒœã‚³ãƒ³ãƒžã‚¬ã‚¸ãƒ³ã®è¨˜äº‹ã§èª¬æ˜Žã—ã¦ã„る全サンプルプログラムã§ã™ï¼Žä¸Šã®ãƒ—ログラムを自由ã«ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã—ã¦éŠã‚“ã§ãã ã•ã„.ã“れらã®ãƒ—ログラムã¯ç„¡ä¿è¨¼ã§ã™ï¼ŽãªãŠï¼Œå†é…布åŠã³ç„¡æ–­è»¢è¼‰ç­‰ã¯ãŠæ­¢ã‚ãã ã•ã„.
  • 注2:mingw, linux, cygwin. OS Xã«å¯¾å¿œã—ã¦ã„ã¾ã™ï¼Žã”自分ã®ç’°å¢ƒã®makefile(例ãˆã°makefile.linux)をmakefileã«ã‚³ãƒ”ーã—ã¦ã‹ã‚‰makeã—ã¦ãã ã•ã„.ãªãŠï¼Œã‚ªãƒªã‚¸ãƒŠãƒ«ã®makefileã¯mingw用ã«ãªã£ã¦ã„ã¾ã™ã®ã§mingwを利用ã•れã¦ã„ã‚‹æ–¹ã¯ã‚³ãƒ”ーã™ã‚‹å¿…è¦ã¯ã‚りã¾ã›ã‚“.
  • makeã«å¤±æ•—ã™ã‚‹æ–¹ã¸
    • makeを実行ã—ãŸã¨ã[cannot found -lode]ãªã©ã¨ã‚³ãƒ³ãƒ”ãƒ¥ãƒ¼ã‚¿ã«æ€’ã‚‰ã‚ŒãŸæ–¹ã¯odeã®ãƒ©ã‚¤ãƒ–ãƒ©ãƒªãŒæ‰€å®šã®ä½ç½®ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã¾ã›ã‚“。mingwã‚„cygwinターミナルを開ã以下ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¦ãã ã•ã„。
    • cd   /home/ユーザå/src/ode-0.6
    • make   install

    ã¾ãŸï¼Œé€£è¼‰ã‚’読んã§ã‚ˆãã‚ã‹ã‚‰ãªã„æ–¹ã¯æ˜¯éžã“ã®ãƒšãƒ¼ã‚¸ã§è³ªå•ã—ã¦ãã ã•ã„ï¼Žæ„Ÿæƒ³ã‚„ã”æ„見等も大歓迎ã§ã™ï¼Ž

     Open Dynamics Engine   Robot Simulation

    今回ã®ç›®çމã¯ä¸Šã«ã‚るロボカップ中型ロボットリーグã®ãƒ—ãƒã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚¿ã§ã™ï¼Žç”»é¢ã®ä¸­å¤®ã‚ˆã‚Šå°‘ã—å·¦ã«è¦‹ãˆã‚‹èµ¤ã„物体ã¯ãƒœãƒ¼ãƒ«ã§ï¼Œä¸­å¤®ã«ã‚ã‚‹é»’ã„物体ã¯ãƒ­ãƒœãƒƒãƒˆã§ï¼ŒFu Fightersã®ãƒ­ãƒ³ã‚°ã‚·ãƒ¥ãƒ¼ãƒˆã‚’シミュレートã—ã¦ã„ã¾ã™ï¼ŽéŠã³æ–¹ã‚„ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã®æ–¹æ³•ã¯ãƒ­ãƒœã‚³ãƒ³ãƒžã‚¬ã‚¸ãƒ³No.48ã®è¨˜äº‹ã‚’読んã§ãã ã•ã„.

    • サンプルプログラム
    • プログラム1
    • プログラム2
    • プログラム3
      実行開始時ã®è¨­å®šã§ã¯ã‚«ãƒ¡ãƒ©ã‚’é æ–¹ã«è¨­å®šã—ã¦ã„ã‚‹ãŸã‚ロボット等ãŒã‚ˆã見ãˆã¾ã›ã‚“.
      ウインドウã®éš…をドラッグã—ã¦ã‚¦ã‚¤ãƒ³ãƒ‰ã‚¦ã‚’大ããã™ã‚‹ã‹ï¼Œãƒžã‚¦ã‚¹ãƒœã‚¿ãƒ³ï¼ˆå·¦ï¼Œå³ï¼‰ã‚’押ã—ãªã‚‰ç”»é¢ã‚’ドラッグã™ã‚‹ã¨è¦–線,大ãã•ãªã©ã‚’変更ã§ãã¾ã™ï¼Ž
  • makeã«å¤±æ•—ã™ã‚‹æ–¹ã¸
    • makeを実行ã—ãŸã¨ã[-lode cannot found]ãªã©ã¨æ€’ã‚‰ã‚ŒãŸæ–¹ã¯odeã®ãƒ©ã‚¤ãƒ–ãƒ©ãƒªãŒæ‰€å®šã®ä½ç½®ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã¾ã›ã‚“。mingwã‚„cygwinターミナルを開ã以下ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¦ãã ã•ã„。
    • cd   /home/ユーザå/src/ode-0.6
  • 豪è¯ä»˜éŒ²ï¼ŸAPI集
    • dBodyID dBodyCreate(dWorldID world)
      剛体を作りã€ãã®ID番å·ã‚’戻り値ã¨ã—ã¦è¿”ã™
    • const dReal *dBodyGetPosition(dBodyID body)
      剛体bodyã®é‡å¿ƒä½ç½®ã‚’å–å¾—ã—ãã®ãƒã‚¤ãƒ³ã‚¿ã‚’è¿”ã™
    •  const dReal *dBodyGetRotation(dBodyID body)
      回転行列をå–å¾—ã—ãã®ãƒã‚¤ãƒ³ã‚¿ã‚’è¿”ã™
    • void dBodySetMass(dBodyID body, const dMass *mass)
      剛体bodyã«è³ªé‡ãƒ‘ラメータmassを設定ã™ã‚‹
    • void dBodySetPosition(dBodyID body, dReal x, dReal y, dReal z)
      剛体bodyã®é‡å¿ƒã‚’絶対座標系(x,y,z)ã®ä½ç½®ã«è¨­å®šã™ã‚‹
    • void dBodySetRotation(dBodyID body, const dMatrix3 R)
      剛体bodyを回転行列Rã§è¡¨ã™å§¿å‹¢ã«è¨­å®šã™ã‚‹
    • dGeomID dCreateBox(dSpaceID space, dReal lx, dReal ly, dReal lz)
      spaceã«å„辺ã®é•·ã•(lx,ly,lz)ã®ç›´æ–¹ä½“ジオメトリを生æˆã™ã‚‹
    • dGeomID dCreateCylinder(dSpaceID space, dReal r, dReal l)
      åŠå¾„rã€é•·ã•lã®å††æŸ±ã‚¸ã‚ªãƒ¡ãƒˆãƒªã‚’生æˆã—ã€ãã®ID番å·ã‚’è¿”ã™
    •  dGeomID dCreatePlane(dSpaceID space ,dReal a, dReal b, dReal c, dReal d)
      spaceã«ax+by+cz=dã®å¹³é¢ã‚¸ã‚ªãƒ¡ãƒˆãƒªã‚’生æˆã™ã‚‹
    • void dGeomSetBody(dGeomID geom, dBodyID body)
      物体ã®2ã¤ã®å±žæ€§ã§ã‚るジオメトリgeomã¨å‰›ä½“bodyを関連ã¥ã‘ã‚‹
    • dSpaceID dHashSpaceCreate(0)
      è¡çªè¨ˆç®—用スペースを生æˆã—ã€ãã®ID番å·ã‚’è¿”ã™
    • void dJointGroupEmpty(dJointGroupID)
      æŽ¥è§¦ç‚¹ãŒæ ¼ç´ã•れã¦ã„るジョイントグループを空ã«ã™ã‚‹
    •  void dJointAttach(dJointID joint, dBodyID body1, dBodyID dBody2)
      剛体body1ã¨body2ã«ã‚¸ãƒ§ã‚¤ãƒ³ãƒˆjointã‚’å–り付ã‘ã‚‹
    •  dJointGroupID dJointGroupCreate(0)
      接触点ã®ã‚°ãƒ«ãƒ¼ãƒ—ã‚’æ ¼ç´ã™ã‚‹ã‚¸ãƒ§ã‚¤ãƒ³ãƒˆã‚°ãƒ«ãƒ¼ãƒ—を生æˆã—ã€ãã®ID番å·ã‚’è¿”ã™
    •  void dJointSetHingeAnchor(dJointID joint, dReal x, dReal y, dReal z)
      ヒンジジョイントã®å›žè»¢è»¸ã®ä¸­å¿ƒç‚¹(x,y,z)を設定ã™ã‚‹
    •  void dJointSetHingeAxis(dJointID joint, dReal x, dReal y, dReal z)
      ヒンジジョイントã®å›žè»¢è»¸ãƒ™ã‚¯ãƒˆãƒ«(x,y,z)を設定ã™ã‚‹
    • void dMassSetBoxTotal(dMass *mass, dReal m, dReal lx, dReal ly, dReal lz)
      サイズ(lx,ly,lz)ã€å…¨è³ªmã®ç›´æ–¹ä½“ã®è³ªé‡ãƒ‘ラメータmassを計算ã™ã‚‹
    • void dMassSetCylinderTotal(dMass *mass, dReal m, int dir, dReal r, dReal l)
      æ–¹å‘dir(1=x,2=y,3=z)ã€åŠå¾„rã€é•·ã•lã€å…¨è³ªé‡mã®å††æŸ±ã®è³ªé‡ãƒ‘ラメータmassを計算ã™ã‚‹
    •  void dMassSetZero(dMass *mass)
      質é‡ãƒ‘ラメータmassã®è¦ç´ ã‚’0ã«åˆæœŸåŒ–ã™ã‚‹
    • void dRFromAxisAndAngle(dMatrix3 R, dReal ax, dReal ay, dReal az, dReal angle)軸ベクトル(ax,ay,az)周りã«angle[rad]回転ã•ã›ãŸæ™‚ã®å›žè»¢è¡Œåˆ—Rを求ã‚ã‚‹
    •  void dSpaceCollide(dSpaceID space, void *data, dNearCallback *callback)
      spaceã§è¡çªã™ã‚‹å¯èƒ½æ€§ã®ã‚ã‚‹2ã¤ã®ã‚¸ã‚ªãƒ¡ãƒˆãƒªã‚’é¸ã³å‡ºã—ã€å¼•æ•°ã®callback関数を呼ã³å‡ºã™ã€‚dataã¯callbacké–¢æ•°ã¸æ¸¡ã™ãƒ‡ãƒ¼ã‚¿ã¸ã®ãƒã‚¤ãƒ³ã‚¿
    • dWorldID dWorldCreate()
      物ç†è¨ˆç®—用ワールドを生æˆã—ã€ãã®ID(識別)番å·ã‚’戻り値ã¨ã—ã¦è¿”ã™
    • void dWorldDestroy(dWorldID world)
      物ç†è¨ˆç®—用ワールドworldを破壊ã™ã‚‹
    • void dWorldSetGravity(dWorldID world, dReal x, dReal y, dReal z)
      ワールドworldã«(x,y,z)[m/s2]ã®é‡åŠ›åŠ é€Ÿåº¦ã‚’è¨­å®šã™ã‚‹
    • void dWorldStep(dWorldID world, dReal step_size)
      ワールドworldã®ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã‚’1ステップ進ã‚る。2番目ã®å¼•æ•°step_sizeã¯ç©åˆ†ã®ã‚¹ãƒ†ãƒƒãƒ—時間[s]
    •  void dsDrawBoxD(const double pos[3], const double R[12], const double sides[3])ä½ç½®posã«å›žè»¢è¡Œåˆ—Rã‚’å–るサイズsidesã®ç›´æ–¹ä½“ã‚’æç”»ã™ã‚‹
    • void dsSetViewPoint(float xyz[3], float hpr[3])
      視点xyzã¨è¦–ç·šhpr[°]を設定ã™ã‚‹
    • void dsSimulationLoop(int argc, char **argv,int w, int h, dsfunction *fn)
      シミュレーションループを呼ã³å‡ºã™ã€‚1ã€2番目ã®å¼•æ•°ã¯main関数ã®å¼•æ•°ã§ã€3,4ç•ªç›®ã¯æç”»ã‚¦ã‚¤ãƒ³ãƒ‰ã‚¦ã®å¤§ãã•(横w,縦h)ã§ã€5番目ã®å¼•æ•°ã¯æç”»é–¢æ•°ã‚¯ãƒ©ã‚¹

    4 Responses to ODEプãƒã‚­ãƒ£ãƒ³ãƒ—2:ロボカップ・プãƒã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚¿ã‚’作ã‚ã†ï¼

    1. ã§ã‚€ MonsterID Icon ã§ã‚€ on 2007-01-05

      shanã•ã‚“ã€

      æ–°å¹´ã‚ã‘ã¾ã—ã¦ãŠã‚ã§ã¨ã†ã”ã–ã„ã¾ã™ã€‚今年もdemura.netをよã‚ã—ããŠé¡˜ã„ã—ã¾ã™ã€‚
      妙高高原ã«ã‚¹ã‚­ãƒ¼ã«ã„ã£ã¦è¿”事ãŒé…ããªã‚Šã¾ã—ãŸã€‚今年ã¯é›ªãŒå°‘ãªã„ã§ã™ã€‚

      ã•ã¦ã€simLoop関数ã¯ã‚µãƒ³ãƒ—ルプログラムã§ã¯è¦‹ãˆã¾ã›ã‚“ãŒwhileループã®ä¸­ã«ã‚りã€ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã®å„ステップ毎ã«ã‚ˆã³ã ã•れã¦ã„ã¾ã™ã€‚

      simLoop関数ã®ä¸­ã«å„ステップ毎ã®ãƒ­ãƒœãƒƒãƒˆã®å‹•作を記述ã—ã¦ãã ã•ã„。

    2. shï½ï½Ž MonsterID Icon shï½ï½Ž on 2007-01-03

      ã“ã®ã‚µãƒ³ãƒ—ルを改造ã—ã¦ãƒ­ãƒœãƒƒãƒˆã«ã‚らã‹ã˜ã‚プログラムã—ãŸå‹•ãã‚’ã•ã›ãŸã„ã®ã§ã™ãŒã€ã©ã“を変ãˆã‚Œã°ã„ã„ã®ã§ã—ょã†ã‹ï¼Ÿ

      最終的ã«ã¯static void simLoopã®ã¨ã“ã‚ã«left_velã¨right_velã®å€¤ã‚’書ã出ã™ã‚ˆã†ã«ã™ã‚Œã°ã„ã„ã‹ã¨æ€ã„ã¾ã™ãŒã€ã©ã“ã«ãƒ«ãƒ¼ãƒ—を作ã£ã¦ãƒ­ãƒœãƒƒãƒˆã®å‹•ãを計算ã•ã›ãŸã‚‰ã„ã„ã‹ã‚ã‹ã‚Šã¾ã›ã‚“。

      よã‚ã—ããŠé¡˜ã„ã—ã¾ã™ã€‚

    3. ã§ã‚€ MonsterID Icon ã§ã‚€ on 2006-11-28

      片岡ã•ã‚“ã€

      ã„ã¤ã‚‚è²´é‡ãªã‚³ãƒ¡ãƒ³ãƒˆã‚りãŒã¨ã†ã”ã–ã„ã¾ã™ã€‚大変助ã‹ã‚Šã¾ã™ã€‚
      ソースコードã®è©²å½“箇所を2ã‹ã‚‰2.0ã«å¤‰æ›´ã—ã¾ã—ãŸã€‚

    4. 片岡賢太郎 MonsterID Icon 片岡賢太郎 on 2006-11-27

      VCã§ã®ã‚³ãƒ³ãƒ‘イルエラーã®å ±å‘Šã§ã™ã€‚
      サンプルã®ãƒ—ログラム3ã§ï¼’82行目ã®éƒ¨åˆ†ã§ã™ãŒ

      dReal vmax45 = POWER * 0.01 * 8.0 / sqrt(2);

      関数sqrt()ã®å¼•æ•°ã‚’2.0ã‹2.0fã«å¤‰ãˆãªã„ã¨ã‚ªãƒ¼ãƒãƒ¼ãƒ­ãƒ¼ãƒ‰ãŒè§£æ±ºå‡ºæ¥ãªã„ã¨ã„ã†ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¦ã—ã¾ã„ã¾ã™ã€‚

    コメントをã©ã†ãž

    メールアドレスãŒå…¬é–‹ã•れるã“ã¨ã¯ã‚りã¾ã›ã‚“。

    722 views  (Since 2010-08-11)