ROBSTRIDE 05 倒立振子を強化学習で楽しむ2

Home > 電子工作 > ROBSTRIDE 05 倒立振子を強化学習で楽しむ2

本記事にはアフィリエイト広告が含まれます。

すき 0
うんこ 0

前回は強化学習による Robstride 05 倒立振子の安定倒立動作を実現しました。

ROBSTRIDE 05 倒立振子を強化学習で楽しむ1

 
ここでは倒立振子の走行動作を強化学習で実現したいと思います。

走行は以下のようにゲームパッドのジョイスティックで速度を指定したいと考えています。

↑これは古典PD制御による走行動作

 

AudiostockでBGM・効果音を販売中!

走行強化学習

ここでは安定倒立に加えて走行の強化学習を目指します。

学習環境は以下の通り
  MuJoCo + Gymnasium + Stable-Baselines3 (PPO)
 観測 (入力):4 次元(姿勢角、角速度、ホイール回転速度、並進走行速度指定値)
  並進走行速度指定値を追加:ゲームパッドからの入力を想定
 アクション (出力):1 次元(ホイール回転速度)

報酬 (reward) は以下の通り

姿勢角(theta)、姿勢角速度(omega)、モータ回転速度(wheel_speed)に加えて
機体の並進速度(body_velocity)と走行速度指定値(velTarget)の差(vel_error) を最小にするように各重み(_max)を調整しつつ報酬を与えます。

カリキュラム強化学習

ここではカリキュラム強化学習という手法を用いて走行動作を学習しました。
以下の4Phaseで実施

Phase1:目標速度 velTarget = 0 で安定倒立を習得
Phase2:目標速度:±0.05 m/s 低速走行習得
Phase3:目標速度:±0.15 m/s
Phase4:目標速度:±0.30 m/s

Phase2~4で目標速度は学習リセット時に範囲内でランダムに変更して学習
Phase3, 4ではリセット時のみならず学習中も2秒ごとにランダムに速度指令変更して学習

学習は機体が±45°以上傾いた時と倒立が30秒以上続いた場合にリセットしています。

Phaseごとに前段の学習ポリシーを引きついて少しづつ高速に移動できるように学習したのです。
各学習step数は以下の通りで いずれもCPU並列処理で10分以内で学習終了しました。
 Phase1, 2:50万 step
 Phase3:70万 step
 Phase4:100万 step

GPUで環境ごと行列処理とかすればこんなちまちま学習せんでも一気に学習できるんだろうなぁ。。

学習結果 Sim2Sim

Phase4までカリキュラム強化学習した結果のSim2Simは以下の通り

MuJoCo上のスライダで走行速度指定値(velTarget)を指定していますが、見事に追従してくれています。
停止時の外乱耐性も高く非常にうまくいっております(*’ω’*)。

 

Python用ゲームライブラリpygameを用いてゲームパッドで velTargetを指定できるようにしました。

ちょっと目標速度0.30 m/s max. だと遅かったかな。。。

この度 外部コントローラ入力も含めた強化学習ができるようになったので、今後Sim2Simでゲームパッドの活用の機会は増えそうです。

 

Sim2Real

学習結果を前回同様に実機に移行してSim2Real実施

強化学習で得られたポリシー(ニューラルネットワーク)のチューニングを全くすることなしに移行しても見事な走行動作が実現できております 。

観測 ベクトルとして 以下の通りネットワークに入力してモータ回転速度出力を得て動作させてます。
 姿勢角:IMUによる機体傾斜角
 角速度:IMUによる機体傾斜角速度
 ホイール回転速度:QDDモータから得られる回転速度
 並進走行速度指定値:ゲームパッドのジョイスティック値

↓Sim2SimとSim2Realの比較

これはカリキュラム強化学習がうまくいったこととSimモデルの品質が高いことを証明しています。

 

おわりに

ここではゲームパッドのジョイスティック入力(走行速度)も観測ベクトルに組み込んでの強化学習実現を目指しました。

カリキュラム強化学習を導入して静止倒立からはじめて徐々に走行速度を上げて学習しました。
外部入力を含めた学習方法を確立して実機でも効果を確認できたことは私の今後の人生にとっても大きな収穫の種となるでしょう。

1輪倒立振子の強化学習で走行動作まで実現できたので、次は2輪かなぁ 🙄 

 

最後にとても参考になる強化学習入門レシピを紹介してネタを下げさせていただきます。

[電子工作レシピ] リアクションホイールで強化学習実践レシピ

 

コメントはこちらから

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

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください