制御
ロボットが目標の動きをモータ指令に変換する方法を扱います。カスケードPIDループ、LQRとMPCによる状態空間設計、接触のためのインピーダンス・アドミタンス・力制御、多数のタスクを持つロボットのための全身制御を解説します。
概要
コントローラは、ロボットが実際にしている動きと本来すべき動きを比較し、その差を縮めるようにモータ指令を変えます。どこへ行くかを決めるのは計画です。制御は、摩擦、可搬物の変化、接触、モデル誤差があっても、物理が要求する周期でハードウェアを実際にそこへ動かします。
ロボットの制御が扱う範囲は広いです。一方の端には、あらゆるモータドライブに入っているPIDループがあります。一度調整すれば、あとは意識されることもありません。もう一方の端には、ヒューマノイドが手を伸ばしながらバランスを保てるよう、数ミリ秒ごとに最適化問題を解くモデル予測制御(MPC)や全身制御のコントローラがあります。このハブでは、コントローラを選定・調整・デバッグする必要があり、どの問題にどの手法が合うかを知りたいエンジニアに向けて、その範囲を整理します。
重要な考え方
PIDとカスケード
PIDコントローラは、誤差に比例する項、誤差の積分に比例する項、誤差の微分に比例する項の3つを足し合わせます。ロボットの関節では、PIDが単独で使われることはほとんどありません。関節ではカスケード構成を使います。外側の位置ループが速度目標値を出し、速度ループが電流(トルク)目標値を出し、モータドライブ内の電流ループが相電圧を決めます。内側のループは、それを囲むループより数倍速くなければなりません。そうすれば、外側のループは内側のループを理想的なものとして扱えます。
PIDの実務上の問題の多くは、3つのゲインそのものではありません。モータが飽和したときの積分器のワインドアップ、目標値のステップ変化による微分キック、微分項によるノイズの増幅、そして無負荷の関節で調整したループです。/topics/dynamics/の動力学モデルから得たフィードフォワード項を加えると、フィードバックが担う仕事の大半がなくなります。調整手順は/reference/pid-tuning/を参照してください。
状態空間、LQR、MPC
状態空間制御では、システムを状態ベクトルx、入力u、そしてxの変化を表す線形(または線形化した)方程式で記述します。結合した多数の入出力を1つの設計で扱えます。1つずつ調整するPIDループではこれができません。線形二次レギュレータ(LQR)は、状態誤差と制御入力の大きさの重み付き和を無限時間にわたって最小化するフィードバックゲインを選びます。重みを決めれば、リッカチ方程式からゲインが得られます。カートポールや車輪型倒立振子のようなバランスをとるシステムに対して、最初に試す標準的なコントローラです。
モデル予測制御(MPC)は、制御ステップごとに有限時間の最適化問題を解き、最初の入力だけを適用し、新しい状態から再び解きます。強みは制約の扱いです。トルク制限、関節可動範囲、摩擦円錐、障害物との余裕を、そのまま問題に組み込めます。代償は計算量と、良いモデルが必要なことです。脚式ロボットやドローンで広く使われており、最適化の内部には簡略化したモデルを使い、その下でより高速な追従コントローラを動かす構成がよく見られます。
インピーダンス制御、アドミタンス制御、力制御
接触を伴う作業に位置制御は向きません。硬い位置ループで工具をテーブルに押し付けると、どこかが耐えきれなくなるまで力が増え続けます。Hogan(1985年)が提案したインピーダンス制御は、代わりに運動と力の関係を制御します。ロボットは目標位置の周りで、指定したばねとダンパのようにふるまいます。関節トルクを指令でき、外力で逆駆動できるロボットが必要です。
アドミタンス制御はその双対です。通常は手首の力覚センサ(力/トルクセンサ)で接触力を計測し、それに応じて位置目標値を動かします。位置指令しか受け付けない、剛性が高く減速比の大きい産業用アームに適しています。陽的な力制御は、選んだ方向では接触力そのものを制御し、それ以外の方向では位置を制御します。Khatibの操作空間定式化は、運動制御と力制御を同じタスク空間の枠組みにまとめます。
全身制御
ヒューマノイド、四脚ロボット、移動マニピュレータは関節が多く、同時に満たすべき目標も多数あります。バランスを保つ、足を滑らせない、手を動かす、姿勢を保つ、といった目標です。全身制御では、各目標を優先度付きのタスクとして表し、接触制約とトルク制限のもとで、優先度の順にそれらを満たす関節トルクまたは関節加速度を求めます。SentisとKhatib(2005年)は、優先度付きの手法を早い時期に記述した文献です。現在の実装では、制御周期ごとに1つ、または階層化した複数の二次計画問題を解くのが一般的です。/topics/legged-and-humanoid/を参照してください。
どこから始めるか
まず/learn/beginner/05-pid-control/から始め、次に/reference/pid-tuning/を使って実際のループを調整してください。/learn/beginner/09-simulate-an-arm-in-mujoco/では、重力補償のフィードフォワードを試せるアームを用意しています。
ツールとプラットフォーム
| ツール | 用途 | ライセンス | プラットフォーム |
|---|---|---|---|
| ros2_control | ROS 2用のハードウェアインターフェース、コントローラマネージャ、標準コントローラ | Apache-2.0 | /platforms/ros/ |
| python-control | Pythonで伝達関数、状態空間、LQR、周波数領域解析を扱う | BSD-3-Clause | /platforms/opensource/ |
| acados | 非線形MPC向けの高速な組み込みソルバ | BSD-2-Clause | /platforms/opensource/ |
| CasADi | 最適制御のための記号モデリングと自動微分 | LGPL-3.0 | /platforms/opensource/ |
| OSQP | 線形MPCや全身制御のコントローラ内部で使われる二次計画ソルバ | Apache-2.0 | /platforms/opensource/ |
よくある間違い
- 内側のループが安定して十分速くなる前に、外側のループを調整する。
- アンチワインドアップがない。モータが飽和している間に積分器がたまり、飽和から戻ったときにオーバーシュートする。
- 量子化されたエンコーダ信号をフィルタなしで微分し、微分ゲインのせいにする。
- 非リアルタイムのプロセスでコントローラを動かし、ジッタの原因がわからない。ゲインだけでなく、ループ周期も計測する。
- 関節を逆駆動できないロボットにインピーダンス制御を使う。代わりに力覚センサとアドミタンス制御を使う。
さらに深く
- Karl J. Åström、Richard M. Murray、「Feedback Systems: An Introduction for Scientists and Engineers」、第2版、Princeton University Press。書籍のwikiで無料PDFを公開。
- James B. Rawlings、David Q. Mayne、Moritz M. Diehl、「Model Predictive Control: Theory, Computation, and Design」、第2版、Nob Hill Publishing。著者が無料PDFを公開。
- Neville Hogan、Impedance control: an approach to manipulation, Part I: Theory、「Journal of Dynamic Systems, Measurement, and Control」107(1)、1985年。
- Oussama Khatib、A unified approach for motion and force control of robot manipulators: the operational space formulation、「IEEE Journal on Robotics and Automation」3(1)、1987年。
- Luis Sentis、Oussama Khatib、Synthesis of whole-body behaviors through hierarchical control of behavioral primitives、「International Journal of Humanoid Robotics」2(4)、2005年。
- ros2_controlのドキュメント。ROS 2でコントローラを実機のハードウェアに接続する方法を説明しています。
- FPGA上のモータ制御ループは、固定小数点演算、デジタルフィルタ、CORDICで構成します。これらの構成要素はFPGA GuideのDSP on FPGAハブで解説しています。