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

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

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

すき 0
うんこ 0

前回はQDDモータ Robstride 05を用いた1輪倒立振子の倒立走行動作の強化学習を実施しました。

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

ゲームパッドのジョイスティック入力(走行速度)も観測ベクトルに組み込んで学習して実機でも見事に動作確認できました。

 

1輪倒立振子の強化学習がうまくいったので、ここでは2輪にグレードアップして検証してみます。

 

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

2輪倒立振子

ROBSTRIDE 05 を2個使用した倒立振子は以前に製作済みです。

ROBSTRIDE 05 を買い足してみた

私の見事な職人技ゲイン調整のPD古典制御でビュンビュン走れてます。

 
実機構成は以下の通り

 
ここではこの2輪倒立振子を強化学習で走行させてみたいと思います。

 

MuJoCoモデル制作

強化学習を目指してまずはMuJoCoモデルを制作

 

パーツを計測してモデル[MJCF = MuJoCo Control Format]を実機に近づけます。
モータのモデルは前回の1輪倒立振子の設定をそのまま流用します。

 

モデル完成

 

手動倒立Sim.

制作したMuJoCoモデルを実機と同じようにSim上でゲイン調整して動作させました。

実機同様にビュンビュン走ってます。モデルの精度の良さが伺えますね。

 

強化学習

モデルが完成したので倒立動作の強化学習を実施します。
学習環境は以下の通り
 MuJoCo + Gymnasium + Stable-Baselines3 (PPO)
  観測 (入力):6次元(機体傾斜角、傾斜角速度、左ホイール速度、右ホイール速度、目標並進速度、目標旋回速度)
  アクション (出力):2次元(左ホイール速度指令, 右ホイール速度指令)
 
2輪のためコントローラ指令は並進速度に加えて旋回速度も追加しています。

 

報酬 (reward) は以下の通り

1st 強化学習

前回同様にカリキュラム強化学習で走行と旋回動作を習得させていきます。
がんばるでー!

Phase1

まずは静止倒立を習得します。

以下の設定で50万ステップ学習
 目標並進速度 = 0
 目標旋回速度 = 0

↓学習結果のSim2Sim

Phase2

Phase1の学習結果を引き継いで低速走行の習得を目指します。

以下の設定で50万ステップ学習
 目標並進速度 = ±0.1 m/s リセット時に速度をランダムに振って学習
 目標旋回速度 = 0

↓学習結果のSim2Sim

Phase3

Phase2の学習結果を引き継いで中速走行の習得を目指します。

以下の設定で70万ステップ学習
 目標並進速度 = ±0.3 m/s
 目標旋回速度 = 0
  リセット時に加えて学習中も2秒ごとに速度をランダムに振って学習

↓学習結果のSim2Sim

Phase4

Phase3の学習結果を引き継いで低速の走行と旋回の習得を目指します。

以下の設定で100万ステップ学習
 目標並進速度 = ±0.2 m/s
 目標旋回速度 = ±1.0 rad/s
  リセット時に加えて学習中も2秒ごとに速度をランダムに振って学習

↓学習結果のSim2Sim

Phase5

Phase4の学習結果を引き継いで高速の走行と旋回の習得を目指します。

以下の設定で200万ステップ学習
 目標並進速度 = ±0.5 m/s
 目標旋回速度 = ±2.0 rad/s
  リセット時に加えて学習中も2秒ごとに速度をランダムに振って学習

↓学習結果のSim2Sim

Phase6

Phase5の学習結果を引き継いでさらに高速の走行と旋回の習得を目指します。

以下の設定で200万ステップ学習
 目標並進速度 = ±0.5 m/s
 目標旋回速度 = ±3.0 rad/s
  リセット時に加えて学習中も2秒ごとに速度をランダムに振って学習

↓学習結果のSim2Sim

観測ベクトルの目標並進速度、目標旋回速度をゲームパッドのジョイスティックで指定しています。

Sim2Real

若干ヘロヘロではありますがPhase6の学習結果を実機に移植してSim2Realしてみました。

当然Simとおりヘロヘロではありますが見事に前後進と旋回動作を強化学習させることに成功しました。

なお学習ポリシーの実機移行時に観測ベクトルや行動ベクトルに対してのチューニングはせずに動作しました。
前回同様 MuJoCoモデルを質高く制作できたということです。

2nd 強化学習

1st学習がちょっとヘロヘロだったので学習方法を変えて再学習します。

Phase1~3の結果はそのまま引き継いでPhase4以降の条件を変えます。
走行を学習後に旋回動作を習得させるイメージで設定してみました。

Phase4

1st強化学習のPhase3の結果を引き継いで実施します。

以下の設定で50万ステップ学習
 目標並進速度 = ±0.3 m/s
 目標旋回速度 = ±0.5 rad/s
  リセット時に加えて学習中も2秒ごとに速度をランダムに振って学習

Phase5

Phase4の結果を引き継いで実施します。

以下の設定で50万ステップ学習
 目標並進速度 = ±0.3 m/s
 目標旋回速度 = ±1.0 rad/s
  リセット時に加えて学習中も2秒ごとに速度をランダムに振って学習

Phase6

Phase5の結果を引き継いで実施します。

以下の設定で100万ステップ学習
 目標並進速度 = ±0.4 m/s
 目標旋回速度 = ±1.2 rad/s
  リセット時に加えて学習中も2秒ごとに速度をランダムに振って学習

Sim2Real

1stよりはスムーズな動作ができるようになりました。

 

おわりに

ここでは2輪倒立振子の動作を強化学習で楽しみました。

前回の1輪同様にコントローラ入力指令値を学習に含んで前後進に加えて旋回動作も実現できました。

もっと詰めれば私の職人技の調整古典制御のようにギュンギュン走らせられそうですが、これ以上 強化学習の計算待ち時間を自分に与えると発狂しそうなので今回は一旦これでギブ。。。
走行、旋回が確認できたことでとりあえず満足した。

やっぱGPUで超高速学習させたいなぁ…
PC買わないとね

 

1輪倒立振子の時にQDDモータ Robstride 05 のモデリングを詰めたので、今回はそれを流用して楽にモデルが制作できました。
学習結果の実機移植もチューニングなしででき、動作もSim2SimとSim2Realで大きな差がなかったので品質の高いモデリングができたと自負しております。

ここまで丁寧に実機と比較しながら強化学習を進めて、モデリングさえうまくいけばSimとRealで大きな差はでないことが分かりました。
要はモデリングが大事なんだよな。

Robstride 05 のモデリングスキルはついたと思うので 次はロボットをモデリングしてSimで動作の味見でもしてみようと思います。

ではまた

 

コメントはこちらから

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

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