
2足歩行ロボット HM-01 の強化学習3
本記事にはアフィリエイト広告が含まれます。
以前実施した自作2足歩行ロボ HM-01の強化学習について改めて考えてみました。
ロボットの強化学習による動作生成は今や当たり前のように実用され、フレームワークも進化し整ってきているように感じます。
目次
GPU
今はGPUで環境ごと並列シミュレーションして強化学習するのが当たり前です。
以前GPUによる学習を目指してMuJoCo Playgroundについて調べましたがSim2Simができず頓挫しました。
今回はNVIDIAが提供するIsaac Simというシミュレータについて調べてみました。
What Is Isaac Sim?
コチラを参考に導入してみたのですが。。。
PCの要求スペックが高すぎる。。。
家のPCでIsaacスペックチェックしたところ全然足りてませんでした
味見すらさせてもらえない。。。
次はIsaacの要求を満たすPCを購入したいと思います (すごく高額になりそうだけど。。)。
ロボ製作&復習
GPUによる強化学習はあきらめて、前回と同様の環境で再検証をすることにします。
Gymnasiumベースの強化学習環境を、Stable-Baselines3(PPO )でCPU並列処理で学習します。
前回は最初期型の2足歩行ボットを使用して学習したのですが、ここでは最新版のHM-01に改修して検証します。
ロボ改修
旧ロボを”予算3万円でつくる BLDC 2足歩行ロボット”で紹介している最新の構成に作り直します。
股関節
股関節完成 pic.twitter.com/MTWWWqKmnK
— HomeMadeGarbage (@H0meMadeGarbage) January 27, 2026
改修完了!
わーい できたー! pic.twitter.com/QUJQANp1Rz
— HomeMadeGarbage (@H0meMadeGarbage) January 27, 2026
強化学習復習
前回の足踏み動作の学習結果を改修したロボに移植して動作検証します。
学習ポリシーをロボのコントローラ(ATOM Matrix)に移植して動作
学習ポリシー ESP32移植の復習#強化学習 pic.twitter.com/HLQuTBRm9P
— HomeMadeGarbage (@H0meMadeGarbage) January 28, 2026
見事にSim2Real実現!
ちなみにロボの構成は以下の通り
CAN通信で各モータの角度指定や角度検知しています。
ATOM Matrix内蔵のIMUで機体の角度・角速度を検知して各モータ角度と合わせて、学習ニューラルネットワークに突っ込んでます。
前進動作の強化学習
今回の検証ではGPUによる学習環境を立ち上げて、ゲームコントローラによる移動指示も観測ベクトルに取り込んで学習して 縦横無尽コントロールを実現しようと夢みていました。
しかしGPU導入がいきなり頓挫してしまったので、地道に従来通りのCPU環境での学習を考えます。
さすがに観測ベクトルを増やすと計算量が増えてきついので、ここでは前後進・左右旋回の各動作を1個づつ個別に学習させることにします。
まずは前進動作学習の検証をします。
足踏み動作学習の際には以下のように足高さを左右逆相の正弦波で指定して足踏みリファレンス動作としました。
|
1 2 3 4 5 6 7 |
z_base = 0.099 z_ampl = 0.015 zL = z_base + z_ampl * math.sin(theta) zR = z_base - z_ampl * math.sin(theta) targetL = self.ik_leg(0.0, zL) targetR = self.ik_leg(0.0, zR) |
足上げの振幅は1.5cm
IKで各モータの角度を算出して駆動、足の前後位置は0
前進歩行のリファレンスは以下のように指定
|
1 2 3 4 5 6 7 8 9 10 11 |
z_base = 0.099 z_ampl = 0.015 zL = z_base + z_ampl * math.sin(theta) zR = z_base - z_ampl * math.sin(theta) x_ampl = 0.015 xL = -x_ampl * math.cos(theta) xR = x_ampl * math.cos(theta) targetL = self.ik_leg(xL, zL) targetR = self.ik_leg(xR, zR) |
足上げに加えて足の前後位置をcos波形で指定
歩幅振幅は1.5cm
学習結果は以下の通り
前進歩行モーションをリファレンスに学習
次は外乱耐性向上を目指す#強化学習 pic.twitter.com/zWaoiNTM0D
— HomeMadeGarbage (@H0meMadeGarbage) January 29, 2026
見事に前進動作の学習ができました。
学習の報酬は以下の通りです。
・ベースボディのロール/ピッチの角度・角速度を0に維持で報酬
・各モータの角度がリファレンスモーションで指定した角度から外れたら罰則
・ベースボディの歩行進行方向以外の速度が0維持で報酬
このとき学習中(step)に外乱は印加せず、リセット時にのみ初期姿勢にランダムにブレを入れました。
外乱検証
前回の学習時は外乱を瞬間的にインパルスで印加しておりました。
ここでは持続的に外乱をいれて耐性向上をはかります。
以下のように学習step中に外乱を導入
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# === 外乱注入セクション === if self.enable_disturbance: force_scale = 1.0 # N # 外乱を新しく発生させる条件 if self.disturbance_timer <= 0 and self.np_random.random() < 0.05: self.disturbance_timer = self.np_random.integers(5, 40) # 持続step数 fx, fy = self.np_random.uniform(-force_scale, force_scale, 2) self.disturbance_force = np.array([fx, fy, 0.0]) # 外乱適用中 if self.disturbance_timer > 0: self.data.xfrc_applied[self.hip_id, 0:3] = self.disturbance_force self.disturbance_timer -= 1 else: self.data.xfrc_applied[self.hip_id, :] = 0.0 else: # 標準語コメント:sim2simでは外乱を完全に無効化する self.data.xfrc_applied[self.hip_id, :] = 0.0 # =========================== |
外乱を頻度5%でMax 1.0Nでランダムに前後左右から印加
外乱印加の持続時間も5~40step (1step:4msecでSim.)の間で振っています。
この外乱で足踏み動作を学習してみました。
足踏み 外乱耐性 Sim2Real#ReinforcementLearning pic.twitter.com/LLvlKRIE7k
— HomeMadeGarbage (@H0meMadeGarbage) January 29, 2026
耐性が向上したかは明確にはわかりませんが、、、
まぁインパルスよりは現実的な学習ができているはずです。
前進歩行も同様の外乱で学習させて実機で動作させてみました。
前進 Sim2Real
Sim.程 歩けてない
足裏のクッションや摩擦もモデル化しないと https://t.co/wJDodkxULp pic.twitter.com/U3CHRAf5Ev— HomeMadeGarbage (@H0meMadeGarbage) January 29, 2026
前進動作もRealで実現。
縦横無尽コントロール
前進動作の確認ができたので、後進、旋回動作も学習して夢の強化学習による縦横無尽コントロールを目指します。
前進の時と同様に足の前後位置を指定して後進・旋回のリファレンスモーションをつくって学習させました。
前後進 左右旋回 動作を学習#ReinforcementLearning #強化学習 pic.twitter.com/JlzAzaXLr5
— HomeMadeGarbage (@H0meMadeGarbage) January 29, 2026
足踏みに加えて前後進、左右旋回の学習ポリシーを得ることができました。
各動作の学習ポリシーをロボのコントローラ ATOM Matrixに移植して、ゲームコントローラの十字キーをトリガにそれぞれ起動するようにいたしました。
各動作の学習ポリシーをゲームコントローラボタンに割り振ってラジコン#ReinforcementLearning #強化学習 pic.twitter.com/NcMelzrE5O
— HomeMadeGarbage (@H0meMadeGarbage) January 30, 2026
夢のゲームコントローラによる縦横無尽コントロールを強化学習による動作で実現できました。
前後進が足が滑ってちょっと苦しそう。
地面との摩擦やクッションもモデル化しないといけないだろう。
しつこいけど本当はGPUでコントローラのステートも観測ベクトルに入れて学習させたかった。
次回の課題とする。PC何とかしないと。。
おわりに
ここではロボの強化学習について現状のキャッチアップと追い検証を実施しました。
モダンなロボ強化学習にはハイスペックPCが必要で貧乏人には味見すらさせてもらいない現状がつらかったですが、何とか最適なPCを入手して検証してみたいです (長男くんの3DCG製作にも使えるしね)。
MuJoCo環境でこれまで通りのCPUによる学習で各種動作の強化学習を実施しました。
雑な周期動作のリファレンスモーションを用意するだけで転ぶことなく歩行動作を実現できました。
やはり強化学習は凄いですね。
強化学習なしでIMUとモータ角度の観測だけで周期動作させても、絶対バランス歩行はできませんから。
“予算3万円でつくる BLDC 2足歩行ロボット“レシピでは足の接地をモータトルクで検知するなどして転ばないスムーズな足踏みを実現しましたが
強化学習を用いればより簡単により複雑な動作を実現してしまえるのです。
強化学習については引き続き検証したいと思います。





