ROBSTRIDE 05 倒立振子を強化学習で楽しむ1

Home > 電子工作 > ROBSTRIDE 05 倒立振子を強化学習で楽しむ1

本記事にはアフィリエイト広告が含まれます。

すき 0
うんこ 0

以前に制作したQDD Robstride 05 を用いた倒立振子を強化学習で楽しみたいと思います。

 

倒立振子はトルク制御と速度制御のどちらの夢をみるのか?

 

まずは倒立動作を学習して、走行コントロールの学習などにもチャレンジしたいと考えております。

 

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

機体復活

まずはQDD 1輪 倒立振子を復活させます。

 

コントローラはIMU内蔵のATOM Matrixを採用し、CAN通信でモータを動かします。

電源系は以下のとおり

3セルLiPoバッテリ 11.1Vをマイコン用に5V降圧、QDDモータ用に39V昇圧して供給

完成

無事に復活

 
モータは速度モードで駆動しておりモータ内部の速度制御器 (回転速度→モータ電流)のパラメータはいじらず初期値を使用しました (PI制御らしい)。

倒立振子自体の制御は以下でゲインを調整して倒立制御
 回転速度 = Kp × 姿勢角 + Kd × 姿勢角速度 + Kw × モータ回転速度

 

今回はまず倒立動作を強化学習させることを目指しますが、ゆくゆくはコントローラ入力も観測ベクトルとして学習を目指したいと考えております。

 

倒立動作 強化学習

復活した倒立振子を用いて倒立動作の強化学習を目指します。

流れは以下の素晴らしい強化学習入門レシピと同様に進めます。

[電子工作レシピ] リアクションホイールで強化学習実践レシピ

  • MuJoCoモデル制作
  • 倒立振子モデルでSim.上で手動PD制御倒立動作
     ここでSimモデルを実機と比較して調整
  • 倒立動作 強化学習実施
  • Sim2Real
     学習ポリシーを実機に移植して動作確認

 

MuJoCoモデル制作

学習用モデルをFusion360で製作します。

 

モデルは MJCF(MuJoCo XML)フォーマットで記述して形状をSTLファイルで取り込んで実機で測量した重量などの情報を書き込んで制作します。

 

モデル完成!

実機ではRobstride 05 の速度モードで動作させているのでモデルのモータにはMuJoCoの<velocity>アクチュエータを採用しました。
速度を指定して回転させます。

 

 

手動倒立Sim.

制作したモデルを実機と同じようにSim上でゲイン調整して倒立させました。

以下でモータ回転速度指定して倒立制御

 

ここで倒立制御をさせながらモータのモデルも調整しました。
<velocity>アクチュエータのパラメータは以下のようになりました。

 

Robstride 05 の最大トルクと最大回転速度を考えるとパラメータKvは0.11となります。

 

しかしSim上の倒立動作を実機と比較したうえでKv = 0.01としてモータをモデリングしました。

モータ供給電圧も定格より低い39Vですし 実動作でMaxトルクは出ないので妥当な値と考えます。

 

強化学習

モデルが完成したので倒立動作の強化学習を実施します。
学習環境は以下の通り
 MuJoCo + Gymnasium + Stable-Baselines3 (PPO)
  観測 (入力):3 次元(姿勢角・角速度・ホイール回転速度)
  アクション (出力):1 次元(ホイール回転速度)

報酬 (reward) は以下の通り

各重み(_max)を調整しつつ姿勢角(theta)、姿勢角速度(omega)、モータ回転速度(wheel_speed) がゼロになるように報酬を与えて学習します。

 

1発目の学習結果

学習は30万ステップほどで実施しました。もう少し安定させたいです。

 

モータ回転抑制のためにwheel_maxを調整して重みを増して50万ステップ学習

なかなか良い結果を得ました!!

 

Sim2Real

満足な強化学習を得たので実機でSim2Realします。

学習ポリシー (ニューラルネットワーク) をAtom Matrix (ESP32) に移植するために配列に変換します。

姿勢角、姿勢角速度、ホイール回転速度をこの配列(ニューラルネットワーク)に入れると学習済みのモータ回転速度が導出されます。

 

移植した学習ポリシーで倒立動作を確認

見事に倒立動作が実現されました。
全くのチューニングなしでそのままの移植で倒立したのでかなり驚きました。

はじめてのMuJoCo velocityアクチュエータ使用だったので不安だったのですが、実機とSimモデルで大きな差異がないのだと言えます。
機体がモータ1個で単純ですし、丁寧に段階を踏んで進めているのが効いています。
真心とセンスです。

 

ひとまず第一段階としてQDD倒立振子の安定倒立 強化学習が実現できました。

 

おわりに

ここでは強化学習による Robstride 05 倒立振子の安定倒立動作を実現しました。

次は観測ベクトルにコントローラ入力を導入して前後進走行の強化学習を目指したいと考えております。

日々成長をめざしてがんばります!!

 

コメントはこちらから

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

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