
ROBSTRIDE 05 倒立振子を強化学習で楽しむ3
本記事にはアフィリエイト広告が含まれます。
前回はQDDモータ Robstride 05を用いた1輪倒立振子の倒立走行動作の強化学習を実施しました。
ゲームパッドのジョイスティック入力(走行速度)も観測ベクトルに組み込んで学習して実機でも見事に動作確認できました。
1輪倒立振子の強化学習がうまくいったので、ここでは2輪にグレードアップして検証してみます。
目次
2輪倒立振子
ROBSTRIDE 05 を2個使用した倒立振子は以前に製作済みです。
私の見事な職人技ゲイン調整のPD古典制御でビュンビュン走れてます。
←工学的思想と経験に基づいた古典制御
→計算資源を食い潰すゲーム感覚のAI強化学習 pic.twitter.com/YWqQNCKzDz— HomeMadeGarbage (@H0meMadeGarbage) March 12, 2026
実機構成は以下の通り
ここではこの2輪倒立振子を強化学習で走行させてみたいと思います。
MuJoCoモデル制作
強化学習を目指してまずはMuJoCoモデルを制作
パーツを計測してモデル[MJCF = MuJoCo Control Format]を実機に近づけます。
モータのモデルは前回の1輪倒立振子の設定をそのまま流用します。
モデル完成
MuJoCoモデル完成
実に美しい pic.twitter.com/fiplZSguKV— HomeMadeGarbage (@H0meMadeGarbage) March 11, 2026
手動倒立Sim.
制作したMuJoCoモデルを実機と同じようにSim上でゲイン調整して動作させました。
Sim上で古典制御による見事な走行
強化学習がなんぼのもんじゃい#MuJoCo pic.twitter.com/RhnplxDYSA— HomeMadeGarbage (@H0meMadeGarbage) March 11, 2026
実機同様にビュンビュン走ってます。モデルの精度の良さが伺えますね。
強化学習
モデルが完成したので倒立動作の強化学習を実施します。
学習環境は以下の通り
MuJoCo + Gymnasium + Stable-Baselines3 (PPO)
観測 (入力):6次元(機体傾斜角、傾斜角速度、左ホイール速度、右ホイール速度、目標並進速度、目標旋回速度)
アクション (出力):2次元(左ホイール速度指令, 右ホイール速度指令)
2輪のためコントローラ指令は並進速度に加えて旋回速度も追加しています。
報酬 (reward) は以下の通り
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
theta_n = theta / theta_max omega_n = omega / omega_max wheel1_n = wheel_speed1 / wheel_max wheel2_n = wheel_speed2 / wheel_max vel_n = vel_error / vel_max rot_n = rot_error / rot_max reward = ( - theta_n**2 - omega_n**2 - wheel1_n**2 - wheel2_n**2 - vel_n**2 - rot_n**2 ) |
1st 強化学習
前回同様にカリキュラム強化学習で走行と旋回動作を習得させていきます。
がんばるでー!
Phase1
まずは静止倒立を習得します。
以下の設定で50万ステップ学習
目標並進速度 = 0
目標旋回速度 = 0
↓学習結果のSim2Sim
ROBSTRIDE 05 倒立振子 強化学習
ガチSim2Realを目指してますPhase1:静止倒立習得
目標並進速度 = 0
目標旋回速度 = 0
50万ステップ学習#強化学習 #ReinforcementLearning #MuJoCo pic.twitter.com/O2wyLbjik8— HomeMadeGarbage (@H0meMadeGarbage) March 11, 2026
Phase2
Phase1の学習結果を引き継いで低速走行の習得を目指します。
以下の設定で50万ステップ学習
目標並進速度 = ±0.1 m/s リセット時に速度をランダムに振って学習
目標旋回速度 = 0
↓学習結果のSim2Sim
ROBSTRIDE 05 倒立振子 強化学習
Phase2:低速走行学習
目標並進速度 = ±0.1 m/s
目標旋回速度 = 0
リセット時に速度をランダム振って学習
Phase1のポリシー引継いで50万ステップ学習#強化学習 #ReinforcementLearning #MuJoCo pic.twitter.com/aQmyIqHhHz— HomeMadeGarbage (@H0meMadeGarbage) March 11, 2026
Phase3
Phase2の学習結果を引き継いで中速走行の習得を目指します。
以下の設定で70万ステップ学習
目標並進速度 = ±0.3 m/s
目標旋回速度 = 0
リセット時に加えて学習中も2秒ごとに速度をランダムに振って学習
↓学習結果のSim2Sim
ROBSTRIDE 05 倒立振子 強化学習
Phase3:低速走行学習
目標並進速度 = ±0.3 m/s
目標旋回速度 = 0
リセット時と学習中も2秒ごとに速度をランダム振って学習
Phase2のポリシー引継いで70万ステップ学習#強化学習 #ReinforcementLearning #MuJoCo pic.twitter.com/W6PzmaShiF— HomeMadeGarbage (@H0meMadeGarbage) March 11, 2026
Phase4
Phase3の学習結果を引き継いで低速の走行と旋回の習得を目指します。
以下の設定で100万ステップ学習
目標並進速度 = ±0.2 m/s
目標旋回速度 = ±1.0 rad/s
リセット時に加えて学習中も2秒ごとに速度をランダムに振って学習
↓学習結果のSim2Sim
ROBSTRIDE 05 倒立振子 強化学習
Phase4:低速走行&低速旋回学習
目標並進速度 = ±0.2 m/s
目標旋回速度 = ±1.0 rad/s
リセット時と学習中も2秒ごとに速度をランダムに振って学習
Phase3のポリシー引継いで100万ステップ学習#強化学習 #ReinforcementLearning #MuJoCo pic.twitter.com/2mJ1bQH8GU— HomeMadeGarbage (@H0meMadeGarbage) March 11, 2026
Phase5
Phase4の学習結果を引き継いで高速の走行と旋回の習得を目指します。
以下の設定で200万ステップ学習
目標並進速度 = ±0.5 m/s
目標旋回速度 = ±2.0 rad/s
リセット時に加えて学習中も2秒ごとに速度をランダムに振って学習
↓学習結果のSim2Sim
ROBSTRIDE 05 倒立振子 強化学習
Phase5:走行&旋回学習
目標並進速度 = ±0.5 m/s
目標旋回速度 = ±2.0 rad/s
リセット時と学習中も2秒ごとに速度をランダムに振って学習
Phase4のポリシー引継いで200万ステップ学習とりあえずこんなもんかな#強化学習 #ReinforcementLearning #MuJoCo pic.twitter.com/MWkabBbWQA
— HomeMadeGarbage (@H0meMadeGarbage) March 11, 2026
Phase6
Phase5の学習結果を引き継いでさらに高速の走行と旋回の習得を目指します。
以下の設定で200万ステップ学習
目標並進速度 = ±0.5 m/s
目標旋回速度 = ±3.0 rad/s
リセット時に加えて学習中も2秒ごとに速度をランダムに振って学習
↓学習結果のSim2Sim
ROBSTRIDE 05 倒立振子 強化学習
Phase6:走行&旋回学習
目標並進速度 = ±0.5 m/s
目標旋回速度 = ±3.0 rad/s
リセット時と学習中も2秒ごとに速度をランダムに振って学習
Phase5のポリシー引継いで200万ステップ学習いったんコレでSim2Realかますか#強化学習 #ReinforcementLearning #MuJoCo pic.twitter.com/CKnZeH2sxT
— HomeMadeGarbage (@H0meMadeGarbage) March 11, 2026
観測ベクトルの目標並進速度、目標旋回速度をゲームパッドのジョイスティックで指定しています。
Sim2Real
若干ヘロヘロではありますがPhase6の学習結果を実機に移植してSim2Realしてみました。
ROBSTRIDE 05 倒立振子 強化学習 Sim2Real
安定倒立、前後進、旋回動作を習得
もう少しビュンビュン走れるように躾けたい pic.twitter.com/0TJLqJlcMr— HomeMadeGarbage (@H0meMadeGarbage) March 11, 2026
当然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
ROBSTRIDE 05 倒立振子 強化学習 Sim2Real
まず前後走行を習得させてから
旋回を学習という体操教室の先生のマインドでRL結構ビュンビュン走れるようになったで#強化学習 #ReinforcementLearning #MuJoCo pic.twitter.com/ygp3y04rqc
— HomeMadeGarbage (@H0meMadeGarbage) March 12, 2026
1stよりはスムーズな動作ができるようになりました。
おわりに
ここでは2輪倒立振子の動作を強化学習で楽しみました。
前回の1輪同様にコントローラ入力指令値を学習に含んで前後進に加えて旋回動作も実現できました。
もっと詰めれば私の職人技の調整古典制御のようにギュンギュン走らせられそうですが、これ以上 強化学習の計算待ち時間を自分に与えると発狂しそうなので今回は一旦これでギブ。。。
走行、旋回が確認できたことでとりあえず満足した。
やっぱGPUで超高速学習させたいなぁ…
PC買わないとね
1輪倒立振子の時にQDDモータ Robstride 05 のモデリングを詰めたので、今回はそれを流用して楽にモデルが制作できました。
学習結果の実機移植もチューニングなしででき、動作もSim2SimとSim2Realで大きな差がなかったので品質の高いモデリングができたと自負しております。
ここまで丁寧に実機と比較しながら強化学習を進めて、モデリングさえうまくいけばSimとRealで大きな差はでないことが分かりました。
要はモデリングが大事なんだよな。
Robstride 05 のモデリングスキルはついたと思うので 次はロボットをモデリングしてSimで動作の味見でもしてみようと思います。
ではまた




