NVIDIA Isaac Labを試してみる その3(ヒューマノイドの歩行に関する強化学習のサンプル実行、Unitree G1)
はじめに
今回はIsaac Labでヒューマノイドの歩行に関するサンプルを実行してみました。
ヒューマノイドについてニュースでもよく見かけるようになりましたが、実機に触れる機会は無いので、せめてシミュレーションだけでも触れておきたいなと思っています。
なお私のノートPCでは一応実行できるものの処理が重かったのですが、デスクトップPCでは問題なく実行できました。
▼PCは10万円ぐらいで購入したゲーミングノートPCを利用しています。Windows 11の環境です。
▼Isaac Labの環境は以下の記事で構築しました。
▼以前の記事はこちら
モデルの確認
強化学習を実行する前に、モデルを確認するスクリプトがあったので試してみました。
▼以下のページに書かれていました。
https://isaac-sim.github.io/IsaacLab/main/source/overview/showroom.html
ロボットアームのモデルを確認してみました。
.\isaaclab.bat -p scripts\demos\arms.py▼以下のように表示されました。以前の記事で試していたFrankaもありますね。
この中だとUniversal Robotsのアームには触ったことがあります。
▼ペンダントでブロック型のプログラムを組めたりして、操作しやすかったです。

二足歩行ロボットのモデルも確認してみました。
.\isaaclab.bat -p scripts\demos\bipeds.py▼着地してから、Unitree G1が前に倒れる様子が見られます。重心が少し前寄りなのでしょうか。
こう並べて見ると、Unitree G1は小柄ですね。
▼Unitree H1は身長180cmのようです。
Available Environmentsには二脚のロボットは無かったのですが、Cassieというロボットかと思われます。アーマードコアに出てきそうな見た目でかっこいいですね。
▼このロボットがIsaac Labで高速で走っているところを見たいですね。
https://robotsguide.com/robots/cassie
今回はUnitree G1を対象に強化学習を行います。
平面での歩行学習
以前の記事と同様に、モデル名を指定して強化学習を行いました。まずGUIで学習環境を確認するのですが、モデルが多いと処理が重くなるので10体で確認してみます。
python .\scripts\reinforcement_learning\rsl_rl\train.py --task Isaac-Velocity-Flat-G1-v0 --num_envs 10▼以下のように表示されました。
平面上でロボットのモデルがスポーンしました。環境は分かったので、ヘッドレスに変更して学習を進めてみました。
▼最終的な結果はこちら。Iterationは1500です。

学習結果を確認してみました。
python .\scripts\reinforcement_learning\rsl_rl\play.py --task Isaac-Velocity-Flat-G1-v0 --num_envs 1▼全然直立できていないという感じです。
次に、数を指定せずにデフォルト値で学習を進めました。
python .\scripts\reinforcement_learning\rsl_rl\train.py --task Isaac-Velocity-Flat-G1-v0 --headless▼デフォルト値は4096体のようです。

▼最終的な学習結果はこちら

▼倒れずに歩行することができています!
歩行に必要なIterationとモデルの数の目安が分かりました。
凹凸路での歩行学習
次に凹凸路での歩行について試してみました。先程と同様に、まずは10体のモデルで環境を確認してみました。
python .\scripts\reinforcement_learning\rsl_rl\train.py --task Isaac-Velocity-Rough-G1-v0 --num_envs 10▼階段や不整地の中心にロボットがスポーンしています。
環境は分かったので、ヘッドレスで学習を行いました。
python .\scripts\reinforcement_learning\rsl_rl\train.py --task Isaac-Velocity-Rough-G1-v0 --headless▼こちらも4096体のようです。

処理が25時間ぐらいかかりそうで長かったのですが、中断しても途中から学習を行うオプションが用意されていました。
▼--resumeというオプションをつければ、途中から始まりました。


なおptファイルの保存が行われたところから始まるようです。中途半端な回数で終了しても、保存された試行回数からになります。
▼今回は50回ごとに保存されているようでした。

また、--max_iterations 2400 のように、すでに終了している試行回数を差し引いて最大のIteration数を指定しないと、試行回数が加算されているようでした。
▼--max_iterationsを指定せずに1100回から始めた状態。デフォルト値である3000が加算されて、4100になっているようでした。

途中で学習状況が気になったので、play.pyを実行してみました。
▼Iterationが1100のとき
まだ歩行自体が難しそうです。先程はIterationが1500だったので、まだ試行が足りて無さそうです。
▼Iterationが2100のとき
ちょっと引っかかっていたりしますが、歩行自体はできているようです。倒れずに復帰していました。
Iterationのデフォルト値である3000まで進めました。
▼最終的な学習結果はこちら

▼動作はこんな感じ。
多少段差に引っかかっていますが、倒れずに歩くことができていました。2200回のときよりも足を上げているような?気がします。
デスクトップPCでの実行
私のノートPCではさすがに処理が重そうだったので、デスクトップPCで実行してみました。
少し古いものですが、CPUはCore i9-12900K、GPUはRTX3080 Ti、メモリは32GBです。
▼同じ型番のものは販売されていないようでしたが、こちらのPCのスペックとほとんど同じです。
▼デスクトップPCにはGoogleのリモートデスクトップでノートPCから接続しています。
どのくらい処理速度に違いがあるのか気になっていたのですが、明らかに私のノートPCよりも速かったです。
▼YOLOの学習も体感的に3倍ぐらい速かったのですが、それ以上に速くなっています。

▼最終的な学習結果はこちら

4096体でplay.pyを実行してみました。
▼数が多くても問題なく動作を確認できました。
▼これだけ大量にロボットがあると壮観ですね。

▼Unreal Engineでエージェントを動かしていたときよりも多いのに、意外と処理できるものなんですね。
全体的に、倒れずに進めているという感じでした。
▼道によっては、引っかかって足踏みを続けたままになっているものもありました。

▼リセット時点では初期位置に大量に集まっていました。

GPUにはまだ余裕があるようでした。今後はデスクトップPCで学習を行おうかなと思っています。
最後に
動作は確認できたので、今回の結果をもとにコードなどを見ると理解しやすいかなと思っています。実機は無いので、本当に同じような動きをするのかどうかは謎ですね。床との摩擦が変わったりしても大丈夫なのでしょうか。私は研究で農業ロボットに取り組んでいるのですが、農地でも歩けるのか気になります。
ニュースで見るようなアクロバティックな動きは人間の動きに倣っているのかもしれませんが、姿勢を保つ必要はあるはずです。そもそも強化学習とは違うのかもしれませんが、どのように制御しているのかも気になっています。
なお、ヒューマノイド系のモデルには遠隔操作と模倣学習のサンプルも用意されていました。
▼VRでも操作できるようなのですが、今のところApple Vision ProかつLinux環境でサポートされているようです。Meta Quest 3Sなら持っているのですが...
https://isaac-sim.github.io/IsaacLab/main/source/overview/imitation-learning/teleop_imitation.html

