ページへ戻る

− Links

 印刷 

SMPL7(Walk) のバックアップソース(No.1) :: Besttechnology

knowledge:SMPL7(Walk) のバックアップソース(No.1)

  Next »[4]
**初めに [#n72b1c86]
歩くサンプルプログラムです。歩行はモーションとは違い、色々な計算を行って歩行を行っています。~
ちょっと値を変えるだけで前進・後退・横歩きや腰の高さ、脚のあげる高さ、歩行周期を変えたりすることも可能です。~
脚の長さや重心というパラメータもありますので、FREEDOMjr.IIIより大きいロボットを自作したとしてもこのプログラムを使うことが可能です。
**歩行のためのパラメータ [#c81bd850]
 TWalkParam WalkParam = {
WalkParamが歩行のパラメータです。
  LegDim :{                       // 脚リンク長さ初期値 [mm *10]
    R:{{{   327,    74,     0},   //  Pivot→ID1
        {     0,   -80,  -530},   //  ID1→ID2
        {     0,     0,  -680},   //  ID2→ID3
        {     0,     0,  -508},   //  ID3→ID4
        {     0,     0,  -145},   //  ID4→ID5
        {     0,     0,   -26}}}, //  ID5→ID6
    L:{{{   327,   -74,     0},   //  Pivot→ID7
        {     0,    80,  -530},   //  ID77→ID8
        {     0,     0,  -680},   //  ID8→ID9
        {     0,     0,  -508},   //  ID9→ID10
        {     0,     0,  -145},   //  ID10→ID11
        {     0,     0,   -26}}}  //  ID11→ID12
  },
  GravityPointHight : 2000,       // 重心位置 [mm *10]
  SideWidth : 400,                // スタンス [mm *10]
  Gravity : 98067,                // 加速度 [mm/ss *10]
  RLSide : LegR,                  // 踏み出す足
脚の軸間の距離や重心などのFREEDOMjr.III固有のパラメータです。基本的にFREEDOMjr.IIIをそのまま使用している場合は変更する必要はありません。
  ws    : 0,                      // 歩幅 [mm]
  wh    : 100,                    // 腰下げ量 [mm]
  lf    : 90,                     // 脚持ち上げ量 [mm]
  pf    : 0,                      // 脚押し込み量 [mm]
  kf    : 0,                      // 脚持ち上げ保持量 [mm]
  rs    : 0,                      // 右側横歩き歩幅
  ls    : 0,                      // 左側横歩き歩幅
  ta    : 0,                      // 旋回角度 [deg]
  speed : 10,                     // 歩行動作速度
  decel : 50,                     // 減速停止時の減速量(decelの値だけws,ta,whが半周期毎に引かれる ls,rsはdecelの半分の値)
  cmd   : CMD_STOP_WALK,          // コマンド
 };
歩行を制御するためのパラメータです。初期値を設定しています。
wsを100にすると10mmの歩幅で前進し-100にすると10mmの歩幅で後退します。このパラメータを変更することでFREEDOMjr.IIIをコントロールします。
**歩行を制御するためのキースキャン [#e5504b10]
 void walkcmd (char c) {
  if (WalkPart.MotionPlaying) {
    switch (c) {
      // Back and forth
      case 'w':
        WalkParam.ws += 50;
        if (WalkParam.ws > 500) WalkParam.ws = 500;
        else if (WalkParam.ws < -300) WalkParam.ws = -300;
        break;
      case 'x':
        WalkParam.ws -= 50;
        if (WalkParam.ws > 500) WalkParam.ws = 500;
        else if (WalkParam.ws < -300) WalkParam.ws = -300;
        break;
     ・
  (中略)
     ・
 }
歩行を制御するためのキースキャンです。例えばwを1度入力するとWalkParamのwsを50増やす、つまり歩幅5mmで前進します。次にxを3回押すとwsを150減らす、つまりwsが-100になり歩幅10mmで後退します。


  Next »[4]