強化学習への道2 -強化学習開始-

Home > 電子工作 > 強化学習への道2 -強化学習開始-
すき 0
うんこ 0

前回は強化学習に出会い勉強することを決意いたしました。

強化学習への道1

 

まずは物理シミュレーションエンジンMoJuCoの環境を整え使い方を学びました。

強化学習の初手のテーマとしてブラシレスモータによるリアクションホイール1軸姿勢制御モジュール(SHISEGYO-1)を選択し、MoJuCoで倒立動作を確認しました。

ここではついに強化学習に挑戦します。

強化学習 環境構築

前回は姿勢制御モジュールのSim用モデルを制作して、古典制御の手動ゲイン調整で倒立動作をMoJuCo上で確認しました。

これによって割と現実的なSim用モデルができたという感触を得ました。

ここでは古典制御ではなく強化学習による倒立動作を目指します。

Python環境構築

強化学習用の環境を整えました (全部 ChatGPTに聞いた)。
構成は以下のとおり
 MuJoCo + Gymnasium + Stable-Baselines3 

この3つの役割はこんな感じ:(以下ほぼChatGPTによる文言)

MuJoCo(Multi-Joint dynamics with Contact)
 → リアルな物理挙動を計算してくれる物理エンジン。
   摩擦、接触、慣性なんかも正確にシミュレートできる。

Gymnasium(旧OpenAI Gym)
 → 強化学習環境の“インターフェース”。
   reset() と step() で状態と報酬をやりとりする形式を統一してくれる。

Stable-Baselines3(SB3)
 → PPOやSACなど、有名どころの強化学習アルゴリズムを簡単に使えるライブラリ。
   Gym形式の環境にポリシーを学習させるだけで、すぐに学習が始まる。
  今回はPPO = Proximal Policy Optimization(近接方策最適化)を使用

 

必要パッケージを以下でインストール
 pip install mujoco gymnasium stable-baselines3[extra] numpy matplotlib

姿勢制御モジュール強化学習

リアクションホイール姿勢制御モジュールのモデルをそのまま流用して強化学習を実施しました。

強化学習は報酬 [reward]を設定して試行錯誤しながら所望の動作を目指す手法です。
ここでは
 theta: 本体の傾き(Y軸)
 omega_y: 本体のY軸角速度
 wheel_speed: ホイールの回転速度
を入力(観測 [observation])としてモータトルク(行動 [action])を得て 倒立を目指します。

強化学習用PythonライブラリGymnasium環境で報酬や学習手法を定義します。

とりあえず報酬を以下のようにしてみました。

 

Gymnasium環境で定義した報酬と学習手法に基づいて強化学習アルゴリズムであるPPOで学習させました。

50000ステップ程学習させるとzipファイルで学習結果が得られました。
古いMX250搭載のノートPCで実行しましたが2分ほどで学習は終了しました。

学習結果でモデルを動かしてみました。

たった!なんか立ってる!すげー!
遂に強化学習ができてしまいました。

外乱に耐えうる倒立学習

外乱耐性を確認するために先ほどの学習結果のSimに対して姿勢制御モジュール筐体の地面接地ロール軸に±0.01Nmの外乱をランダムに印可してみました(この外乱の強さが現実的なのかはおいおい調べる)。

すぐ倒れたwww
モータも全然回ってないし。。

 

ちなみに前回の古典フィードバックで手動でゲイン調整したSimに同様の外乱を加えると実機のようにしっかりホイールを回して倒立を維持します。

報酬設計

強化学習は環境が正常に整えられれば、あとはいかに報酬を設定するかがキモであると感じました。

報酬設計の勘所を掴むのにかなり苦心しました。
最初の報酬では倒立時の動作のみ指定しており機体が傾いた際のモータ動作などを考慮していませんでした。

 

倒立動作をモジュールに優しく教える気持ちで報酬を設定したところ。。

傾いた方向にモータを回して力強く姿勢保持してくれるようになりました!
まだ外乱は印可していません。

 

報酬の重みなどを調整して、学習ステップを30万ほどに増やしたところ
外乱にも耐えうる学習結果を得ることができました。

最終的な報酬は以下のとおり

倒立による報酬の傾斜を狭くしてモータ回転方向にも報酬を設けるなどして上記の倒立動作を実現させました。

Pythonコード

姿勢制御モジュールSimモデル

前回 制作したMoJuCo用モデルをそのまま流用
Fusion360で設計したSTLファイルを読み込んでいる

Gymnasium環境の定義

モデルを取り込んで Gym形式で観測・行動・報酬を設定

Stable-Baselines3学習

強化学習アルゴリズムライブラリStable-Baselines3のPPOで強化学習

学習結果はppo_balance.zip で得られる。

学習結果確認

学習データで姿勢制御モジュールをMoJuCoで動作シミュレーション

おわりに

ついに強化学習に挑戦して、姿勢制御モジュールの倒立動作を実現することができました。

次はSim2Realで実機にフィードバックさせて強化学習の恩恵を感じたいと思います。

おそらくSimと実機の違いでかなり苦しむと思いますし、現時点ではどうやって実機に落とし込むのかもわかっていません。

さて次はどうなっているのか。
新しいことを詰め込み過ぎて頭が割れそうですが頑張ります。

コメントはこちらから

メールアドレスが公開されることはありません。コメントのみでもOKです。

This site uses Akismet to reduce spam. Learn how your comment data is processed.