2足歩行ロボット HM-01 の強化学習2

Home > 電子工作 > 2足歩行ロボット HM-01 の強化学習2
すき 0
うんこ 0

2足歩行ロボット HM-01 の足踏みバランス動作を目指して強化学習の実施を決意いたしました。

前回は強化学習の計算時間短縮をめざしてGPU活用とCPU並列化の検討しました。

2足歩行ロボット HM-01 の強化学習1

強化学習からSim2Sim~Sim2Real 実現の観点から、ひとまず従来手法をCPU並列化で高速化するという結論にいたりました。

 

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

論文調査

足踏み動作をさせるための強化学習の方法がわからなかったので論文を調査しました。

コチラの論文が非常に参考になりました。

ヒューマノイドをNVIDIA の Isaac Gym をベースで学習して、そのまま (“zero-shot”) Sim2Realできる手法が紹介されています。

GitHub:https://github.com/roboterax/humanoid-gym/tree/main
 報酬記述:humanoid_env.py

 

論文の表Ⅳにヒューマノイド強化学習の報酬について記載があります。

・並進速度トラッキング(重み 1.2):ロボット胴体の移動速度を指令値に合わせる。
・角速度トラッキング(重み 1.0):胴体の回転速度を指令値に合わせる
・姿勢トラッキング(重み 1.0):ロール・ピッチ・ヨーの角度を維持する
・ベース高さトラッキング(重み 0.5):胴体のさを目標(0.7m)に保つ
・速度ミスマッチ(重み 0.5):現在速度とコマンド速度のズレを罰する
・接触パターン(重み 0.2):足の接地状態が期待されるパターンから外れないようにする
・関節位置トラッキング(重み 1.5):関節角度が目標角度に近づくようにする
・デフォルト関節(重み 0.2):関節が初期・基準姿勢から大きく離れないようにする。
・エネルギーコスト(重み -0.00001):トルクと角速度に応じて小さくペナルティを与える
・アクションのスムーズさ(重み -0.01):急激な行動変化を抑制する
・大きな接触ペナルティ(重み -0.01):床反力が一定値を超えた場合に罰則を与える

基本姿勢保持や低消費エネルギーの評価に加えて、コントローラによる指令値やリファレンスモーションへの追従にも報酬が付与されていました。

 

足踏みや歩行動作はあらかじめモーションを用意する必要があるようです。

ディズニーのBDX Droidの論文でもリファレンスモーションを模倣することに報酬を与えて、それに省エネや転倒しないことへの報酬をくわえて学習しています (表1)。

 

そっかー純粋に強化学習のみで歩き出すわけじゃないのかぁ。。
報酬の設計の仕方によってはリファレンスなしでも歩き出すかもしれないど、相当時間かかるだろうし、
基本動作は用意して学習で外乱に強くしたり機体バラつきに対応したり外部制御できるようにするのがスマートなんですね。

勉強になりました。

 

強化学習

論文を参考にHM-01の強化学習を進めます。

Gymnasiumベースの強化学習環境を、Stable-Baselines3(PPO )で学習します。

以下の直立バランス学習をベースに足踏みバランス動作を目指します。

ちなみにコレは以下の報酬で学習を実施しました。

・ベースボディのピッチ、ロールの角度・角速度をゼロに保持
・各関節を初期姿勢に強制保持
・ピッチ、ロールの角度 1°以内に保持でボーナス
・ベースボディ高さ保持

報酬追加① 足踏みリファレンスモーション

正弦波形で足の高さを左右逆相で交互に変えて足踏みモーション生成し、IKでモータ角度を算出して追従するように報酬を加えました。

足踏みできた!
やはりリファレンスモーションが必要なのねぇ

HM-01についてはすでに手製のモーションがあり実機で動かしてるからいいけど
新規のロボット設計の際に強化学習ってどのくらい使えるのかね?と疑問も増えました。
だから既存ロボのデータもセットの学習フレームワークで溢れてるのか??

まぁとりあえず足踏みがニューラルネットワークで実現できたのは大きな前進です。
しかし、Sim.でみると外乱にはまだ弱い様子。

報酬追加② ボディ並進速度

ベースボディの並進速度 (Vx, Vy, Vz)がゼロに保持されるように報酬を追加

かなりいい感じに外乱にも対応できるようになりました。

ニューラルネットワーク

今回のニューラルネットワーク構成は「64×64の全結合2層MLP」で、入力(観測ベクトル)と出力(行動ベクトル)は以下の通りです。

観測ベクトル(obs)12次元
・ピッチ角、ロール角 [rad]
・ピッチ角速度、ロール角速度 [rad/s]
・左足3軸の各モータの回転位置角度 [rad]
・右足3軸の各モータの回転位置角度 [rad]
・ sin(θ)
・ cos(θ)
 ※ θ = (2π ÷ 0.45秒) × time
  時間経過による周期フェーズをsin・cosに変換して入力することで、
  0と2πの不連続を避けて学習を安定化させています。

行動ベクトル(action)6次元
・左足3軸の各モータの回転位置角度 [rad]
・右足3軸の各モータの回転位置角度 [rad]
  各要素 -1.0 ~ +1.0 で正規化されて出力される
  学習時は50°をかけてスケーリング

 

 

Sim2Real

学習データを実機HM-01に移植して動作確認します。
要するにSim2Realします。

実機

HM-01 初号機を使用

 

入力(観測ベクトル)の角度・角速度は実機のIMUデータを使用します。
各モータの角度はエンコーダ値をCANで中枢マイコンATOM Matrixに送信します。
周期フェーズのsin・cosはATOM Matrixのカウンタで算出してニューラルネットワークに入力します。

観測ベクトルの入力で得られた行動ベクトルのモータ回転位置を各ドライバにCANで送信します。

実機のCANシステムをSim2Real用に以下のようにしました。

 

学習データ

Stable-Baselines3で得たzipファイル学習データをESP32用に配列に変換して移植します。

 
forward関数に12個の入力を入れると出力の各モータの回転位置が導出されます。

変換はいつもChatGPTにやってもらっています。
ありがとうChatGPT

Sim2Real

見事に足踏みできてる!

 

おおむねSim.通りの動作が実機で実現できております。

 

HM-01 のMJCFモデルも大きく外していないことも立証できたので安心いたしました。
と同時にもっと外乱耐性を上げたいという欲も湧いてきたのです。

 

Re 強化学習

外乱への強度を高めることを目的に再度 強化学習します。

報酬追加③ 

・外乱として前後方向とピッチ角にランダムで外乱注入
・ベース高さ保持報酬廃止
・モータトルクによる省エネ報酬追加
・ベースボディの並進速度 (Vx, Vy, Vz)ゼロ保持でVy(前後方向)のみ廃止
・転倒せずの生存ボーナス追加
・ベースボディの傾斜に応じて足前後(P制御)追加

Sim.上では外乱に強なったで (前後方向のみ特化型だけど)

Sim2Real

実機でも外乱耐性向上を確認できました。

 

ついに強化学習で思い通りの結果が得られるようになってきました。

学習環境クラスファイル

学習用スクリプト

 

 

おわりに

ここでは2足歩行ロボット HM-01 の足踏みバランス動作を目指して強化学習を実施しました。

足踏み動作はリファレンスモーションとしてあらかじめ用意して学習で追従させました。
さらに外乱印加しながら姿勢保持などの報酬を与えることでバランス耐性を高めました。

ヒューマノイドロボットの強化学習ってリファレンスモーションを用意して その動作に追従するように学習させて、以下のバラつきを付与させて耐性を高めるのが主流のやり方のようですね。

  • 地形・摩擦バラつき
  • 機体(質量、センサ、アクチュエータなど)バラつき
  • 外乱

 

今回は足踏みバランスのみですが、外部コントローラで移動なども学習するとなるとかなりの計算量となりそうです。
またリファレンスモーションなしでの学習も検討してみたいのですが、これもまた途方もない検討量や計算量になるでしょうねぇ。。。

 

ちょっと強化学習についてはこんなもんかなぁ
また新しい技術が出たら検討でいいかなぁ
オリジナルロボで報酬設計とかまじでゲロでるほど大変だから

 

リフレッシュの製作を楽しんでからまた戻ってくるかもしれません
ほな また

 

コメントはこちらから

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

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