ロボット開発記録

ロボット開発の進捗や記録をするブログ

動歩行の完成 [ヒューマノイド動歩行]

前回の振り返り & 今回の概要

 (だいぶ期間が空きましたが、)前回の記事では、動歩行の実装をシミュレータ内のロボットに対して行いました。しかしその実装したプログラムが不完全で、うまく歩いてくれませんでした。
 今回はそのバグを修正した結果、足を引きづらずに歩行できる動歩行動作を達成したことに関してまとめます。
 今回は理論については余り触れず、前回との差異に関して主にまとめます。

前回の記事↓

odome.hatenablog.com

開発リポジトリ

github.com

前回示した問題点

 前回の時点では、動歩行の理論、つまり歩行パターンの生成まではできていました。しかし、以下の動画のようにまともな歩行ができていませんでした(前回示した動画とは異なりますが、おおよそ原因と前提は同じ(なはず)です)。

youtu.be

 文でまとまると、以下の2つが挙げられます。

  • 遊脚が目標足上げ高さの0.8[m]まで足を上げていない。
  • 歩行途中で遊脚が床面を擦ってしまい、前に進めていない。

今回はこの問題を解決することを示します。

問題の改善

  1. 原因はどこにあるのか
     前回うまく行かなかった原因は、歩行パターンを関節角度・角速度に変換するプログラムが不完全であったことと、歩行周期などのパラメータが不適切であったことが挙げられます。
     この2点は、どうもスタンダードな設定方法があるわけではなく、主にロボットのハードウェア構造に大きく依存しているようです。ですので今回は、試行錯誤的にパラメータとプログラムの調整を行いました。

  2. 遊脚軌道の適用方法
     2足歩行の生物なりロボットは歩行時に、片脚を地面について胴体を進行方向に移動させ、もう片脚を持ち上げて次の着地位置まで足を移動させます。この持ち上げる脚を「遊脚」というのですが、ロボットの場合この遊脚の足を動かす軌道、いわゆる遊脚軌道を与えてやる必要があります。
     今回、この遊脚軌道を正弦波として与えました。正弦波を遊脚軌道として与えた場合、用いるのは正弦波の「山」の部分です。ですので、正弦波の1/2周期が歩行時の片足支持期と同等となります。また、正弦波の振幅が遊脚の最大足上げ高さと同等となります。
     以上を踏まえて正弦波を遊脚に適用してやる場合、プログラム的には、腰の高さ - 正弦波という形になります。

  3. 適したパラメータ設定方法
     歩行に関わるパラメータは、歩行の安定性に非常に大きく関わります。しかもハードによって適したパラメータがkとなるのですから、パラメータ調整は結構大変です。ここでは、ROBOTIS OP2をWebots内で歩行させた際のパラメータと、パラメータ調整手順を示します。
     まず前提として、歩行に関わる主なパラメータは以下のようになっています。もちろん実装によって変動しますが、ある程度は共通していると思います。
    |
     ・歩行パラメータ:時間に応じた、足の着地位置
     ・腰の高さ:歩行時の腰の高さ
     ・歩行周期:1歩に掛かる時間
      ・片脚支持期:歩行1周期中、片足しか床面に接していない時間
      ・両脚支持期:歩行1周期中、両脚が床面に接している時間
     ・足上げ高さ:遊脚が上げる足の最高高さ
    |
     次にパラメータの調整方法について、私は以下の手順に沿って行いました。
     |
     ・1.歩行パラメータと腰の高さを決めて、着地位置と動作計画を明確にする。
     ・2.歩行周期と両脚支持期を決め打ちする。
     ・3.足踏みをさせてみて、足上げ高さを転倒の有無から決める。
     ・4.前進させてみる。
     |
     この手順は私が勝手に立てたものですが、不順にパラメータをいじってしまうとどの組み合わせを試したかがわからなくなるので、何かしらの手順に沿っておこなったほうが良いかもしれないです。

  4. その他の調整色々 ・腰の高さを、特異姿勢にならないように設定。
    ・遊脚において、転倒防止のために足上げ&着地開始瞬間に全関節角速度を最大。

改善した結果

 上記のような改善をした結果、以下のパラメータで、以下の歩行動作を得ることができました。

パラメータ

  • 歩行パラメータ
     (基準を右足裏中心においている。適用時は基準を胴体中心に移動させている)
支持脚切替タイミング[s] 0.0 0.8 1.6 2.4 3.2 4.0 4.8 5.6
X軸方向[m] 0.0 0.0 0.03 0.06 0.09 0.12 0.12 0.12
Y軸方向[m] 0.037 0.074 0.0 0.074 0.0 0.074 0.037 0.037
  • 制御周期:10[ms] (大抵、歩行制御は10[ms]ぐらいらしい)
  • 歩行周期:0.8[s]
  • 片足支持期:0.3[s]
  • 両脚支持期:0.5[s]
  • 腰の高さ:0.171856[m] (細かいことに意味は特にない)

改善後の歩行動作

youtu.be

 改善前の動作と比べると、足を引きづらずに前進できていることがわかります。

最後に

 今回は動歩行の実装を完成させました。
 次回からは、この動歩行動作生成する歩行パターン生成器、及びその周辺ソフトウェアの開発に、主に取り組んでいきます。

開発リポジトリ

github.com