STEP8: 4脚ロボット

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

」のStep8です.

ここでは,4脚歩行ロボットについて学びます.クロール,ウオーク,トロットなどの代表的な歩き方を学び,4脚ロボットのモデルを作り,それにクロール歩行を実装します.続きはODE本で...

以下にシミュレータの動画を掲載します.ソースコードはこのページの注意事項を読み,ダウンロード,ビルドやコンパイルし実行してください.

  • プログラム8.1: 4脚ロボットの歩行制御 (P210)
    • 説明:上の動画では体を左右にふって転ばないように歩いています.パラメータを調整していないので,歩き方がぎこちないです.これをスムーズに歩かせることが,あなたのミッションです.

(最終更新日 2008-7-27)

4脚歩行のモデルを少し書き換えて脚を2本増やしたのですが、脚6本ではうまく歩かず、ひざから下が飛んでってしまいます。

どのようにすれば6脚歩行できるのかわかる人教えてください。

  • お忙しい中,お返事ありがとうございました.

    時間が空いている時,見て頂きたいのですが,

    1を試そうと思ったのですが、膝しか曲がらず,できませんでした.

    股関節と足首にはそれぞれヒンジジョイントで,x y z方向,x y方向に設定していたのですが,ヒンジジョイントは同じ位置では2方向以上に設定することはできないのでしょうか?

  • mahiさん,

    ロボカップ世界大会でオーストリア出張したいたので仕事が溜まっていて詳しくアドバイスできませんが,以下のことを試してください.

    1.逆運動学が正しいかは,運動学を使って確かめる.
    2.1が正しい場合は,CFM, ERPの値を調整する.
    3.それでもおかしい場合は,ロボットのモデルが正しい(リンクや関節の位置)か確認する.

    でむ

  • demuさん,こんにちは.

    4脚ロボットを参考に2足歩行ロボット(脚だけ)を作ったのですが,思うようにできませんでした.

    地面までの高さ,最高到達点,左右の変位,歩幅,を少しずつ変えてみたのですが,振動しながら不規則に移動したり,片方の膝が曲がったまま停止したり,倒れたあと振動し移動したり,と全く歩行になりませんでした.

    どういう原因が考えられるでしょうか?

    因みにインバースキネマティクスの部分はこういう感じでいいのでしょうか?
    void inverseKinematics(dReal x, dReal y, dReal z,dReal *ang1,dReal *ang2, dReal *ang3, dReal *ang4, dReal *ang5,dReal *ang6)
    {
    dReal l3=0.7,l4=0.7,l6=0.1;
    dReal Px,Py,Pz;
    dReal a[3],b[3];

        a[0]=-cos(*ang1)*sin(*ang3+*ang4+*ang5)*cos(*ang6)-sin(*ang1)*(cos(*ang2)*sin(*ang6)+sin(*ang2)*cos(*ang3+*ang4+*ang5)*cos(*ang6));
    a[1]=-sin(*ang1)*cos(*ang3+*ang4+*ang5)*cos(*ang6)+cos(*ang1)*(cos(*ang2)*sin(*ang6)+sin(*ang2)*cos(*ang3+*ang4+*ang5)*cos(*ang6));
             a[2]=sin(*ang2)*sin(*ang6)-cos(*ang2)*cos(*ang3+*ang4+*ang5)*cos(*ang6);
    b[0]=cos(*ang1)*cos(*ang3+*ang4+*ang5)-sin(*ang1)*sin(*ang2)*sin(*ang3+*ang4+*ang5);
    b[1]=sin(*ang1)*cos(*ang3+*ang4+*ang5)+cos(*ang1)*sin(*ang2)*sin(*ang3+*ang4+*ang5);
    b[2]=-cos(*ang2)*sin(*ang3+*ang4+*ang5);

    Px=x-l6*a[0];
    Py=y-l6*a[1];
    Pz=z-l6*a[2];

    dReal Ca=(l3*l3+Px*Px+Py*Py+Pz*Pz-l4*l4)/2*l3*sqrt(Px*Px+Py*Py+Pz*Pz);
    dReal Cb=(l3*l3+l4*l4-Px*Px+Py*Py+Pz*Pz)/2*l3*l4;
    dReal phi=atan2(Px,sqrt(Px*Px+Py*Py));
    dReal alpha =-atan2(sqrt(1-Ca*Ca),Ca);

    *ang1=atan2(b[1],b[0]);
    *ang2=M_PI/2-atan2(sqrt(Px*Px+Py*Py),Pz);
    *ang3=M_PI/2-atan2(sqrt(Px*Px+Py*Py),Pz)-atan2(sqrt(1-Ca*Ca),Ca);
    *ang4=M_PI-atan2(sqrt(1-Cb*Cb),Cb);
    *ang5=atan2(sqrt((x-Px)*(x-Px)+(y-Py)*(y-Py)),z-Pz)+*ang4-phi-alpha;
    *ang6=atan2(sqrt(Px*Px+Py*Py),Pz)+atan2(sqrt((x-Px)*(x-Px)+(y-Py)*(y-Py)),z-Pz);

    }

    長々と申し訳ありません.
    宜しくお願いいたします.

  • コメントを残す

    メールアドレスが公開されることはありません。