
ROBSTRIDE 05 倒立振子を強化学習で楽しむ2
本記事にはアフィリエイト広告が含まれます。
前回は強化学習による Robstride 05 倒立振子の安定倒立動作を実現しました。
ここでは倒立振子の走行動作を強化学習で実現したいと思います。
走行は以下のようにゲームパッドのジョイスティックで速度を指定したいと考えています。
課題2 next step
コントローラのジョイスティック入力も観測ベクトルに組み込んでの学習実現を目指す#強化学習 #ReinforcementLearning #RL #MuJoCo pic.twitter.com/2e6GNWwNDq
— HomeMadeGarbage (@H0meMadeGarbage) March 8, 2026
↑これは古典PD制御による走行動作
目次
走行強化学習
ここでは安定倒立に加えて走行の強化学習を目指します。
学習環境は以下の通り
MuJoCo + Gymnasium + Stable-Baselines3 (PPO)
観測 (入力):4 次元(姿勢角、角速度、ホイール回転速度、並進走行速度指定値)
並進走行速度指定値を追加:ゲームパッドからの入力を想定
アクション (出力):1 次元(ホイール回転速度)
報酬 (reward) は以下の通り
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
body_velocity = self.data.qvel[0] vel_error = body_velocity - velTarget theta_max = math.radians(45) omega_max = math.radians(250) wheel_max = 30.0 vel_max = 0.3 theta_n = theta / theta_max omega_n = omega / omega_max wheel_n = wheel_speed / wheel_max vel_n = vel_error / vel_max reward = ( - theta_n**2 - omega_n**2 - wheel_n**2 - vel_n**2 ) |
姿勢角(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は以下の通り
観測ベクトルに機体の並進速度追加して走行も学習
カリキュラム学習でポリシー引き継ぎつつ段階的に並進速度範囲広げた。
倒立自体もロバストになってアガる#強化学習 #ReinforcementLearning #RL #MuJoCo pic.twitter.com/8Vbskyel9Q— HomeMadeGarbage (@H0meMadeGarbage) March 9, 2026
MuJoCo上のスライダで走行速度指定値(velTarget)を指定していますが、見事に追従してくれています。
停止時の外乱耐性も高く非常にうまくいっております(*’ω’*)。
Python用ゲームライブラリpygameを用いてゲームパッドで velTargetを指定できるようにしました。
走行学習結果のSim2Sim
ゲームパッドで走行を堪能あまり意味のある行動ではないが学習ポリシーを体で感じる
ちょっと走り遅いな。。
Sim2Realうまくいったら更に厳しカリキュラムで高速化目指すかも#MuJoCo #強化学習 pic.twitter.com/ZNjuNhzdJ6— HomeMadeGarbage (@H0meMadeGarbage) March 9, 2026
ちょっと目標速度0.30 m/s max. だと遅かったかな。。。
この度 外部コントローラ入力も含めた強化学習ができるようになったので、今後Sim2Simでゲームパッドの活用の機会は増えそうです。
Sim2Real
学習結果を前回同様に実機に移行してSim2Real実施
Robstride 05 倒立振子 走行強化学習 Sim2Real
憧れのコントローラ入力も観測ベクトルに取り込んでの学習全くの調整なしで学習ポリシーを実機移植してみごと動作
Simモデルの品質の高さを改めて実感し誇らしい#強化学習 #ReinforcementLearning pic.twitter.com/FnA0H6qG9p— HomeMadeGarbage (@H0meMadeGarbage) March 10, 2026
強化学習で得られたポリシー(ニューラルネットワーク)のチューニングを全くすることなしに移行しても見事な走行動作が実現できております 。
観測 ベクトルとして 以下の通りネットワークに入力してモータ回転速度出力を得て動作させてます。
姿勢角:IMUによる機体傾斜角
角速度:IMUによる機体傾斜角速度
ホイール回転速度:QDDモータから得られる回転速度
並進走行速度指定値:ゲームパッドのジョイスティック値
↓Sim2SimとSim2Realの比較
倒立走行を強化学習した結果のSim2Sim
学習ポリシーを実機に移植してSim2Real#強化学習 #ReinforcementLearning #MuJoCo pic.twitter.com/R2sgqsNnJC
— HomeMadeGarbage (@H0meMadeGarbage) March 10, 2026
これはカリキュラム強化学習がうまくいったこととSimモデルの品質が高いことを証明しています。
おわりに
ここではゲームパッドのジョイスティック入力(走行速度)も観測ベクトルに組み込んでの強化学習実現を目指しました。
カリキュラム強化学習を導入して静止倒立からはじめて徐々に走行速度を上げて学習しました。
外部入力を含めた学習方法を確立して実機でも効果を確認できたことは私の今後の人生にとっても大きな収穫の種となるでしょう。
1輪倒立振子の強化学習で走行動作まで実現できたので、次は2輪かなぁ 🙄
最後にとても参考になる強化学習入門レシピを紹介してネタを下げさせていただきます。
