4脚ロボットのモデル予測制御(MPC) part1
本記事では4脚ロボットのモデル予測制御(model predictive control 通称 mpc)について解説します。4脚ロボットが蹴飛ばされて、倒れなかったり、やたら姿勢よく歩く動画などをBoston dynamicsの動画などでみたことがあると思います。モデル予測制御とは、一言で言うと「現在の時間を開始点として数ステップ先の未来の挙動を予測して参照値の状態量に追従するように最適化問題を解く」ということをしています。全然一言で言えてませんが、ご容赦ください。歩行ロボット系のモデル予測制御の実装でよくある勘違いや誤解として、「mpcを解いてロボットのボディ、足のパスを生成する」といった解釈をしてこんがらがってしまうらしいです。そういう研究もあるかもしれませんが、モデル予測制御はあくまで入力決定問題であるのでどちらかというと軌道に対して追従するための入力を生成するという認識のほうがこれからの説明でしっくりくると思います。複数の目標軌道に対してそれとなく合わせてくれるような入力を生成してくれるのがMPCの強みなので、多脚などの複雑な運動制御とはかなり相性がいいと思います。
目次
はじめに
本記事ではMITのmini cheetah にて用いられている、モデル予測制御について解説します。mpcを用いた高度な運動制御はBoston dynamicsのBig dogや、チューリッヒのETHのANYmalなど多くのロボットが実現させています。その中でもmitのmini cheetahはmpcに用いるモデルを極限までシンプルにしたうえで、高い性能があるのでまずはここから始めるのが手っ取り早いと思いました。私はまだ、シミュレーションでしか動作を確認してないのですが早く実機実装して4脚ロボットを蹴り飛ばしてSNSで炎上したいと考えています。
4脚ロボットの全体の制御フレームワーク概要
4脚ロボットは車輪ロボットと違い12自由度もあり動作計画としてかなり複雑であるため、mpc単体ですべて制御するのは難しいです。そのため、mpcの周辺にも様々な制御技術が用いられています。ここではその概要について説明します。
1.歩容生成(gait scheduler)
Fig.trot歩容
リモコンや高位のパスプランナーによって与えられた速度(\(v_x , v_y , \omega_z\))を用いてロボットの歩容(gait)を決定します。ロボットの移動速度や方向に応じて、一歩の歩幅や足を置く場所を変えます。四足歩行ロボットの歩容は、動物の歩行パターンに大きくインスパイアされています。たとえば、トロット(trot)は、馬や犬が速い歩行時に使うパターンと似ています。トロットでは、対角線上にある前脚と後脚が同時に地面から離れ、空中でスイングしながら次の接地位置に移動します。
2.遊脚モード(swing mode)
ロボットの歩容は2つのモードで構成されています。そのうちの1つのswing modeは足が空中に浮いているときを指します。スタートの足の位置とゴールの足の位置が決まった瞬間に2点間をスプライン補間やベジェ補間を用いて0~1の媒介変数を用いて軌道を生成します。正直ここの部分の制御はあまり重要ではないです。やっていることは、足を次の地面を踏む場所まで運んでいるだけです。
3.接地モード(stance mode)
stance modeは地面が足についているときです。MPCはこの部分で用いられています。MPCを用いて参照軌道を追従するための地面を蹴る最適な床反力(reaction force)を計算しています。4脚ロボットの制御で最も重要な部分です。
4.全身運動制御(whole body control : WBC)
全身運動制御とはロボットの冗長性によって生じるゼロ空間(null-space)を用いて、複数のタスクを同時に達成するための運動学的な手法です。極端な言い方ですが、逆運動学です。ヒューマノイドロボットなどでよくとられる手法ですが、4脚ロボットにおいても有効な手法です。ここでは、MPCによって得られた床反力を基に全身の駆動に必要なトルクを計算します。他にも、姿勢の安定化やstance足の制御に対して、WBCを用いて優先度付きのタスク制御を行っています。通常、WBCはボディの重心軌道(Com 軌道)に対して追従するように用いるのですが、ここでは床反力に対して追従するように使用されているところが面白いところだと思っています。
5.状態観測器(state estimator)
- ロボットの接触判定
- ロボットの姿勢
- ロボットの現在位置、速度
これらの情報をカルマンフィルタベースの手法で、推定しています。4脚ロボットはタイヤ型のロボットと違い、エンコーダを用いて直接位置を測定することが出来ません。そこでIMUや、歩容(gait)によって得られた値をうまいこと合体させて、もっともらしい位置、速度、姿勢を推定します。また、ここでは足の接触判定を外乱オブザーバ、ボディの位置、足の歩容の3つの情報を巧みに統合して推定しており、面白いと思いました。
終わりに
記事が長くなるのでpart1はここまでとさせていただきます。次回はコマンド入力から歩容生成までの部分を解説しようと思います。MPCというタイトルがついているのに、MPCにたどり着くまで工程がかなりありますが、大体の歩行ロボットはこの手法で動かせるのではないかと思っています。状態観測器まで書ききりたいと思っているのでお付き合いいただけましたらうれしいです。