強化学習への道1

Home > 電子工作 > 強化学習への道1
すき 0
うんこ 0

最近はシリアルリンク 2足歩行ロボットの製作を頑張っとります。

シリアルリンク 2足歩行ロボットの製作3 ー 足踏み動作 ー

 

足踏み動作もしっかり足上げして安定してきたので、そろそろ歩行に移行しようかと思っていたところ。。。

 

強化学習の衝撃をくらった!

一旦ロボット製作をおいといて強化学習について勉強しようと思います。

衝撃の出会い

はっきりいって強化学習なんて使い物にならないと思っていました。

強化学習をうたって成果出してるところって大概が自社でロボット製作しているので ものすごくチューニングしまくってるんじゃないかと考えていたのです (実際そうかもしれないけど)。

 

↓強化学習をなめていた時の私

 

そんなノリでサーボモータを使用した自作のBDXロボット(Open_Duck_Mini )の歩行もうまくいかないだろとふんでいました。
(実際すり足でフラフラの動画しかみてなかったので)

 

したらこの動画が出てきたの

すり足ではあるけど、明確に歩いてる!

サーボモータ STS3215 のスピードでIMUセンシングに追従しながらの動作は絶対無理だと思っていたので どうせ周期動作でタイミング調整してるだけだろとも思ったのですが、
そうではなく強化学習による関数で物理追従して歩行しているとのことでした。

衝撃でした。。。

IMUセンサ値と直近の動作を元に強化学習データで動作させることによって、スピードに劣るサーボでも歩行が実現できているのです。
センサ値を受けてからフィードバックして動作という従来の手法では絶対にできないことを強化学習がやってのけることを目の当たりにしたのです。

 

ありがたいことに強化学習による実機動作のSim2Realフローのまとめも教えていただきました。

コレをもとに俺も強化学習勉強してみるか。。。

 

以上が強化学習との出会いと衝撃そしてやってみようと思った経緯です。

Sim2Realの流れ

教えてもらったまとめを元に自分なりに調べたSim2Realの流れを現状の理解で記載します。
この強化学習への道が進むにしたがって解像度が上がるものと考えています。

Sim

学習のためにMuJoCoという物理演算シミュレータソフトを使用

MuJoCoで物理シミュレーションを行うためにMJCF(MuJoCo XMLフォーマット)でロボット筐体やアクチュエータの構造を記載する。

強化学習

MuJoCo環境をベースに所望の動作実現に向けて報酬付与による強化学習を実施

現状では明確にどう実施するのか不明

Real

強化学習で得た学習関数をワンボードPCもしくはマイコンに実装して、Sim同様にセンサ値などを入力して所望の動作をさせる。

現状では学習関数のデータ形式や使用するチップは明確になっていない。

MuJoCo

強化学習の第一歩としてまずは物理シミュレータのMuJoCoと仲良くなることにしました。

とりあえずコチラでアプリをダウンロード
 https://github.com/google-deepmind/mujoco/releases

ヒューマノイドのMJCFデータも以下で入手して表示させてみた
 https://github.com/google-deepmind/mujoco/tree/main/model/humanoid

モデル以外何も指定してないから立てないけど

 

アプリの使い方は以下の動画を参考に勉強した

 

MJCFでは以下のようにSTLファイルがそのまま導入できました。
これは便利!

STLファイルはメートル単位で出力する必要があります。

2足歩行ロボットのSTL取り込んでみた。

Python版 MuJoCo

ダウンロードしたexeアプリはMJCF形式のデータを表示させたりマウスで動かしたりできますが、プログラム制御などはできません。

Python版MuJoCo パッケージは pip install mujocoで導入します。

導入やPythonコードはChatGPTに教えてもらいながら実施しました。

MuJoCoで倒立振子

MuJoCoの練習のためにまずは倒立振子をやってみました。

まずはMJCFで倒立振子を記述 (ほとんどChatGPTにやってもらった)
棒や軸を記述してヒンジでジョイント

 

次にPythonでジョイント部にモータを仕込んでPD制御して倒立させます。
パラメータは手動で調整しました。

 

コードは以下のとおり

安定倒立させないためにdisturbanceとして乱数で外乱を付与しています。

リアクションホイール

MuJoCoの記載方法やシミュレーション方法もだいぶ見えてきましたので、いよいよ強化学習でSim2Realとしけこみたいのですが
いきなりロボットは厳しいと考えました。

そこでまずはブラシレスモータによる1軸のリアクションホイール姿勢制御モジュールを強化学習の題材とします。

モータは冒頭の2足歩行ロボットにも用いた5010 360KV ブラシレスモータの使用を想定。

この姿勢制御モジュールでSim2Realできるようになれば、2足歩行ロボットへの応用に耐えうる知識と良いモータモデルが手に入ってることを期待しています。

モデル作成

Fusion360でモジュールを設計し、筐体やモータのSTLファイルを生成

 

STLを取り込んでモジュールのMJCFを記述してMuJoCoアプリで表示させてみた。

筐体やモータの記述がうまくいっていることを確認できました。

 

モジュールの筐体やモータの質量や重心位置、慣性モーメントを記載することでより精度の高いシミュレーションが可能になるということでFusion360でマテリアル指定してデータを入手しました。

 

物理定数を追記することで動きが更にリアルになりました。
Fusion360とMuJoCoで単位が違うので変換して記載 (ChatGPTに一括変換してもらった)

手動倒立

モデルが生成できたので、実機と同様にフィードバックゲインを手動で調整して倒立させます。

フィードバックの式は以下のとおり
 モータトルク = Kp * 機体角度 + Kd * 機体角速度 + Kw * モータ回転速度

 

パラメータ調整することで倒立できることを確認できました!

 

Pythonコードは以下のとおり

 
STLファイルを読み込んでモジュールを組むように記述
さらに物理定数も記載

ブラシレスモータはMuJoCoのmotor エレメントでモデル化しています。
トルク比のgearやジョイント部の摩擦係数dampingの調整で実機を模擬しています。
モータのモデル化は今後精査が必要と考えとります。

おわりに

自分には一切関係ないと思っていた強化学習と衝撃的な出会いがあり、このたび向き合うこととなり本道を開設する運びとなりました。

また明確でないことも多いですが、一歩一歩着実に勉強したいと思います。
自分がどうすれば理解して応用まで持って行けるかは おじさんなので良く分かっております。

とりあえずリアクションホイールについてMoJuCoで実機のように古典制御のパラメータ手動調整で倒立させるところまではきました。

次回は強化学習に着手しつつSimモデルの精度向上を目指します。

 

人は変われる
ねぇそうでしょ?

コメントはこちらから

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.