Mini Pupper2 ros2 4足歩行 Policy 強化学習
Mini Pupper2 4足歩行 Policy を探したけど、どうもどこにあるのか判らん。
あったとしても、おんちゃんの PC の GPU gtx 1070 では、まるっきり歯がたたん。
ChatGTP に、いろいろ聞いているうちに、
Ros2 Jazzy Gazebo(Harmonic) で、Mini Pupper2 ros が動いているので、Gazebo のシミュレーション環境でも、いいんじゃない?(まるっきり、時間度外視であれば)
と、行き着いた。
ChatGPT を、おだてて、
4足歩行 Policy と、強化学習の torch train 等、一式書いてもらっての、テストじゃ。
今回は、この話じゃ!!
けっして、良い子は、まねをしないように。...
結局、Gazebo 上の Mini Pupper2 を、Policy の出力で、動かして、その結果が良ければ、+何点、 NG であれば、-何点と、強化学習を繰り返すだけ。
難点は、それを、一度に 1000とか同時にできるかどうかだけじゃ。
昔、台に乗った、ポールを倒さないように、台を動かす強化学習と同じ要領みたい。
Stable Baseline3(SB3) で、PPO(Proximal Policy Optimization) で、既存の MlpPolicy をすこしカスタマイズしてつかえば、出来上がるみたい。
Python コードの原型は、ChatGTP に教えてもらって、つくったぞね!!
2. train 時のチューニングは、Google Ai のほうが、知識がおおいみたいなので、
これ以降は、Google Ai に助けてもらって、今、まさに、
Train の最中じゃ!!
当初は、立ち上がらせるところからの学習だったが、どうやら、立ち上がった状態からの、歩行学習から始めたほうがよいみたい。
おんちゃんの PC Ubuntu 24.04 GTX 1070 で、500,000 steps で、1時間20分 程みたい。
まあ、50万 1 クールで、 10 クール程 の trainが、必要か!!。
毎日、こつこつやれば、500万 steps の train も無理ではないか!!
残念!!
上記は、fps:200 の時じゃ!!
Gazebo の時間を、train step と一致させないといかんみたい。
そうすると、1 steps は、 Gazebo で、20[ms] から 40[ms] を使わないと、足が異常にブルブルするようになるみたい、
なので、おんちゃんは、 1 steps - 20[ms] で、train させることにした。
そうすると、 fps:27[Hz] あたり、なので、約10時間 50分 ほどか!!
その場での、回転の学習は、だんだん、できて来ているようじゃ!!
問題は、前進、後退 の学習が、なかなか大変みたい。
Google Ai の話だと、前進、後退は、回転に比べて、引っ転ぶ確率が高いので、ご褒美が
もらえずらい
なので、ご褒美の得やすい、回転の学習のほうへ、なびくみたい!!
けっこう、PPO + MlpPolicy も、えぐい。簡単な方の抜け道を、必死で見つけようとする。
恐るべし、Ai!!
今、Train で、一番気がかりなのは、Mini Pupper Policy が、足を小刻みに震わせて、移動することを、学習してしまうことか!!
もう少し、歩幅を大きくして、ゆっくり足を動かす動作を身に着けて欲しいが!!
この点の Reward も、Google Ai に聞いて、組み込んでいるが、あまり効果が無い!!
model = PPO("MlpPolicy", env, use_sde=True, sde_sample_freq=4, verbose=1)
use_sde=True
sde_sample_freq=n
上記を指定しないと、Mini Pupper の 足の動きが、振動するように、動く。
足の、振動で、移動するような Policy になるみたい。
obs の inputs を、ノーマライズするのが、機械学習のお約束だったを忘れていたので、
急遽、obs のなかの /cmd_vel だけ、とりあえず、ノーマライズして、train のやり直しじゃ!!
MlpPolicy の学習の特徴が、わかってきた。
いろんな動きをしてみて、報酬が多かった事を学んで、報酬が少なかった事は、学ばないやりかたみたい。
なので、できるだけ、禁止で、terminated させずに、とにかく、500 steps 動かして、報酬の上下で、学習を促す事が、かしこい train の方法みたいじゃ!!
/cmd_vel にしたがって、動く学習なので、/cmd_vel をあまり固定せずに、いろんなバリエーションを組み合わせて、/cmd_vel を作って、topic 送信する。これに尽きる!!
1度に、50万 steps は、しんどいので、1度に 10万 steps で、こつこつと、train じゃ。
いきなり、プログラムレベルの話になるが、
mini_pupper_rl/gazebo_env.py
で、
MAX_ACTION_RAD = 1.0 # 実機と同じ足の速度にするなら、こちら
を、使って、Train させたいが、いまだ出来ず!!。
上記にすることで、実機での足の運びの速度と、Gazebo 上のそれとが一致する気がするが。
train 中、最後にいつも転んでしまう場合
転んだ時は、train を terminated させると同時に、
reward を思い切って -200 など大きな値にする。
おんちゃんは、当初 -10.0 にしていたから、これがよくなかったか!
以上じゃ!!
後日、github にでも、上げるぞね!!
/cmd_vel を送って、Gazebo 上の Mini Pupper2 を動かしてみる、python コードも作ったぞね!!
enjoy_pupper.py
注) /cmd_vel の、直進、回転の度合いは、turtlebot3 の、teleop_keyboard に合わせてあるので、下記を、使ってください!!
$ ros2 run turtlebot3_teleop teleop_keyboard
実機へ、そのまま持っていっても多分動かないとは、思うけど。
注意点が、Gazebo と、実機では、サーボーの極性が、どうも逆らしい。
注) ここで、残念な情報にでくわした。
MlpPolicy は、過去の記憶情報が無い。
これでは、現実の地面の上の走行は、まず、期待できない。あくまでも、Gazebo の世界での、Policy みたい。
現実の地面などで、走行させるには、過去の記憶からの、未来予測のある、Policy が必要じゃ!!
この事が、学べただけが、今回の収穫かも!!
3. 参照。
i) stable-baselines3 PPO doc
ii) r/reinforcementlearning
iii) Mini Pupper RL
このページの Video をみると、残念!!
足が小刻みに振動して動く学習みたい。
それでも、実機でも、小刻みの振動でも、動くみたいじゃ!
Walking in reality だと、もう少し、足を動かすみたい。じゃが、物足りん!!