第三回-03 非線形制御の例



Cart-Pole Balancing :非線形制御の例

皆さんは倒立振子 (とうりつしんし) を知っているだろうか?
下図のように、重心が高い位置にある物体をなるべく倒れないように制御し続ける目的の制御工学の教材である。



YouTubeを「倒立振子」と言うキーワードで検索するとたくさんの例が見つかるので見てみるとよい。

倒立振子において、θ=0 という角度は前ページの例と異なり、鉛直上方向を表す。
そして、通常 θ が十分小さく 0 に近い範囲を取り扱う。
すなわち、倒立振子は線形領域での制御が行われることが多い (これを線形制御と呼ぶ)。

一方、θ が十分大きいときも制御の対象とするのが本ページで扱う Cart-Pole Balancing である。
Cart-Pole Swing up とも呼ばれる。これは線形領域外も対象とする非線形制御である。

さらに言えば、強化学習という学習により制御則を獲得する例になっている。

まず、Cart-Pole Balancing のデモアプリケーションを実行するためのアプリケーションをインストールする。
Java という言語の実行環境をインストールする必要があるのだが、選択肢は複数あり例えば以下である。 恐らく、前者の adoptium の方がダウンロードの選択肢が一つであるので分かりやすいかもしれない。
adoptium の場合、デフォルトの選択肢のまま「Latest release」ボタンをクリックすれば OpenJDK のインストーラーがダウンロードされる。
例えば OpenJDK17U-jdk_x64_windows_hotspot_17.0.8.1_1.msi のような名称のファイルがダウンロードされる。
これをダブルクリックしてデフォルトの選択肢のままインストールしよう。

OpenJDK のインストールが終わったら、Cart-Pole Balancing のデモアプリケーションcp_rl_app.jarをダウンロードしよう。
ダウンロードが終わったらcp_rl_app.jar をダブルクリックしてデモアプリケーションを実行しよう。

t が 0 から 20 の間、台車はおもりを鉛直上方向に振り挙げようと試行錯誤する。t=20 に達したり、台車が壁にぶつかったら新たな試行をはじめる。
デモアプリケーションの「After Learning」ボタンをクリックすると、3000 試行後の状態 (制御則の学習が済んだ状態) にセットされる。
「After Learning」ボタンをクリックした後は、おもりの振り上げ (Swing up) からおもりを鉛直上方向を保つこと (Balancing) までを実現できていることがわかるだろう。



YouTubeを「Cart-Pole Balancing」や「Cart-Pole Swing up」と言うキーワードで検索するとこれを実機で実現した例が見つかるので見てみるとよい。

Cart-Pole Balancingについてのより詳しい解説はこちらをどうぞ。



←線形と非線形をシミュレーションで確認課題→

Excel VBA で微分方程式をシミュレーションしように戻る