2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ここでは、Windows11に、NVIDIA Isaac Labを導入し、PhysicalAIを目指したロボットシミュレーションの検証結果を報告します。

最近では Physical AIが注目されており、自分もロボットシミュレーションを試したいと思いました。ここでは、Windows11にNVIDIA Isaac Sim 6.0.1 + Isaac Lab 3.0.0 を導入し活用する手順を記録しておきます。
いろいろな資料があるのですが、結局はNVIDIAの公式ウエブの資料が、必須の基本情報でした。

まず、NVIDIAのIsaac Lab の情報は、以下の公式ドキュメント「Isaac Lab Documentation」が基本です。

この解説では、Window11に、以下のNVIDIA Isaac Lab 3.0.0を導入した状態を前提としています。

以下のデモスクリプトの動作環境は、「Isaac Sim 6.0.1 + Isaac Lab 3.0.0-beta2」を、用いて著者のQiita資料の手順をで用意されたものを想定しています。

例題スクリプトの構成

本解説では、Isaac Lab 3.0.0-beta2を、C:\NvidiaIsaac\Lab300に導入してあります。
この中のフォルダで、例題スクリプトの実行に関する部分は、以下の内容です。

Lab300
├─ _isaac_sim(Isaac Sim本体への接続)
├─ source(Isaac Labのライブラリ本体)
├─ 【scripts】(ユーザーが実行するサンプルや学習プログラム【ここを利用します】)
├─ apps(Isaac Simの起動設定)
├─ tools(インストールや開発を補助する内部ツール)
└─ isaaclab.bat(WindowsでIsaac Labを起動するバッチファイル)

この中で、デモや例題のスクリプトは、「scripts」フォルダにあり、この中に以下のフォルダがあります。

【scripts】(ユーザーが実行するサンプルや学習プログラム【ここを利用します】)
├─ benchmarks(GPU・物理演算・カメラ・強化学習などの性能測定)
├─ demos(ロボット・地形・センサなどの完成デモ)
├─ environments(登録済み環境の確認・実行・遠隔操作)
├─ imitation_learning(模倣学習・デモデータの収集と再生)
├─ 【reinforcement_learning】(強化学習の学習・評価・学習済みモデルの実行)
├─ sim2sim_transfer(学習済み方策を別のシミュレータへ移行・検証)
├─ tools(URDF・MJCF・メッシュ変換、デモデータ処理など)
└─ tutorials(Isaac Labの基本APIを段階的に学ぶチュートリアル)

ここでは、「reinforcement_learning」にあるファイルを使って、Isaac Labによる強化学習の検証を行います。

強化学習例題の確認

この中で、「reinforcement_learning」フォルダにあるスクリプトを確認してみます。以下の内容です。

【reinforcement_learning】(各種強化学習ライブラリを使って、方策の学習・評価を行うスクリプト)
├─ ray(Ray RLlibを利用した分散強化学習)
├─ rl_games(RL-Gamesを利用した高速なGPU強化学習)
├─ rlinf(RLinfを利用した大規模・分散型強化学習)
├─ 【rsl_rl】(RSL-RLを利用した脚型ロボット向け強化学習)
├─ sb3(Stable-Baselines3を利用した標準的な強化学習)
└─ skrl(skrlを利用したPyTorch/JAX対応の強化学習)

ここでは、「rsl_rl」フォルダを使って、二足歩行ロボット(Unitree G1)の脚型ロボット向け強化学習の例題を検討してみます。なお「Unitree G1」の形状は、以下のQiita記事で紹介した、デモスクリプト「demos\bipeds.py」の実行によって確認できます。

なお、「RSL-RL(Robotic Systems Lab Reinforcement Learning)」とは、スイス連邦工科大学チューリッヒ校(ETH Zurich)のRobotic Systems Lab(RSL) が開発した、脚型ロボットの制御に特化して、歩行制御を効率よく学習するために開発された、高速なPyTorchベースの強化学習ライブラリだそうです。
https://github.com/leggedrobotics/rsl_rl

強化学習例題の実行

それでは、実際に二足歩行ロボット(Unitree G1)の強化学習の例題を検証してみます。

スクリプトの実行方法

実行する場所は、isaaclab.batがある「Lab300フォルダ」です。
NVIDIAの説明では、スクリプト名を呼んでいますが、ここでの手順では、パスを設定していないので、「.\isaaclab.bat」とします。
また動作検証と同様に、このrsl_rlでもGUIの表示には「--viz kit」が必要です。ただし、学習の計算のみを少しでも早く進めるためGUIを用いず、結果の検証においてGUIを利用する方法もあります。
終了は、起動したPowerShellで、「Ctrl+C」を入力し、「バッチ ジョブを終了しますか (Y/N)? y」とします。

10体での強化学習の実行

まず最初に、ロボット「10体」を用いて、強化学習を以下のコマンドで実行します。

PS C:\NvidiaIsaac\Lab300> .\isaaclab.bat -p .\scripts\reinforcement_learning\rsl_rl\train.py --task Isaac-Velocity-Flat-G1-v0 --num_envs 10 --viz kit

image.png

学習が進む間、GUIの表示で10体のロボットが、歩くための制御を学習しています。
最初は、歩くどころかすぐに転んでいますが、学習が進むと、少しずつ立てる時間が長くなります。

コマンドを実行したPowerShellには、学習のログが表示され、1500回まで行う設定になっています。

################################################################################
                          Learning iteration 1499/1500

                            Total steps: 360000
                       Steps per second: 128
                        Collection time: 1.784s
                          Learning time: 0.087s
                        Mean value loss: 0.0039
                    Mean surrogate loss: -0.0835
                      Mean entropy loss: 52.4032
                            Mean reward: -5.27
                    Mean episode length: 43.75
                        Mean action std: 1.02
    Episode_Reward/track_lin_vel_xy_exp: 0.0144
     Episode_Reward/track_ang_vel_z_exp: 0.0029
            Episode_Reward/lin_vel_z_l2: -0.0072
           Episode_Reward/ang_vel_xy_l2: -0.0210
          Episode_Reward/dof_torques_l2: -0.0016
              Episode_Reward/dof_acc_l2: -0.0037
          Episode_Reward/action_rate_l2: -0.0201
           Episode_Reward/feet_air_time: 0.0005
     Episode_Reward/flat_orientation_l2: -0.0074
          Episode_Reward/dof_pos_limits: -0.0005
     Episode_Reward/termination_penalty: -0.2000
              Episode_Reward/feet_slide: -0.0068
     Episode_Reward/joint_deviation_hip: -0.0027
    Episode_Reward/joint_deviation_arms: -0.0048
 Episode_Reward/joint_deviation_fingers: -0.0030
   Episode_Reward/joint_deviation_torso: -0.0008
                   Metrics/success_rate: 0.0000
     Metrics/base_velocity/error_vel_xy: 0.9177
    Metrics/base_velocity/error_vel_yaw: 4.8207
           Episode_Termination/time_out: 0.0000
       Episode_Termination/base_contact: 1.0000
--------------------------------------------------------------------------------
                         Iteration time: 1.87s
                           Time elapsed: 00:47:12
                                    ETA: 00:00:00
                                    
Training time: 2857.29 seconds
[INFO]: SimulationContext cleared
[2867.903s] Simulation App Shutting Down

以上の学習結果を用いて、1体のロボットを歩かせてみます。

PS C:\NvidiaIsaac\Lab300> .\isaaclab.bat -p .\scripts\reinforcement_learning\rsl_rl\play.py --task Isaac-Velocity-Flat-G1-v0 --num_envs 1 --viz kit

image.png

歩くどころか、立っていることもできません。学習結果は十分でないのが、わかります。

ここで、スクリプトrsl_rl¥play.pyで学習した結果は、どのように保存されるのか、確認します。フォルダC:\NvidiaIsaac\Lab300を見ると、以下のように保存されています。

logs
└─ rsl_rl
    └─ g1_flat
        └─ 2026-07-28_14-52-13
            ├─ model_0.pt
            ├─ model_100.pt
            ├─ model_150.pt
            ├─ …
            ├─ exported
            ├─ git
            ├─ params
            └─ events.out.tfevents...

この検証用スクリプトplay.pyは通常、複数回学習した場合には、最新の実験ディレクトリlogs¥rsl_rlの最新チェックポイントを自動的に選択します。

100体での強化学習の実行

続いてより良い学習を目指して、ロボット「100体」を用いて、強化学習を以下のコマンドで実行します。

PS C:\NvidiaIsaac\Lab300> .\isaaclab.bat -p .\scripts\reinforcement_learning\rsl_rl\train.py --task Isaac-Velocity-Flat-G1-v0 --num_envs 100 --viz kit

image.png

学習が進む間、GUIの表示で100体のロボットが、歩くための制御を学習しています。結構、100体が頑張っている姿は壮観な感じです。
仲間が100体もあるので、学習の成果が蓄積してくると立てる時間が長くなり、多少前に進めるようになります。

################################################################################
                          Learning iteration 1499/1500

                            Total steps: 3600000
                       Steps per second: 1218
                        Collection time: 1.882s
                          Learning time: 0.088s
                        Mean value loss: 0.0210
                    Mean surrogate loss: -0.0243
                      Mean entropy loss: 49.4520
                            Mean reward: -14.02
                    Mean episode length: 670.13
                        Mean action std: 0.99
    Episode_Reward/track_lin_vel_xy_exp: 0.2563
     Episode_Reward/track_ang_vel_z_exp: 0.0890
            Episode_Reward/lin_vel_z_l2: -0.0325
           Episode_Reward/ang_vel_xy_l2: -0.1628
          Episode_Reward/dof_torques_l2: -0.0285
              Episode_Reward/dof_acc_l2: -0.0517
          Episode_Reward/action_rate_l2: -0.4405
           Episode_Reward/feet_air_time: 0.0219
     Episode_Reward/flat_orientation_l2: -0.0326
          Episode_Reward/dof_pos_limits: -0.0350
     Episode_Reward/termination_penalty: -0.0083
              Episode_Reward/feet_slide: -0.1457
     Episode_Reward/joint_deviation_hip: -0.0585
    Episode_Reward/joint_deviation_arms: -0.1322
 Episode_Reward/joint_deviation_fingers: -0.0655
   Episode_Reward/joint_deviation_torso: -0.0208
                   Metrics/success_rate: 0.0000
     Metrics/base_velocity/error_vel_xy: 0.7205
    Metrics/base_velocity/error_vel_yaw: 3.2957
           Episode_Termination/time_out: 0.3204
       Episode_Termination/base_contact: 0.6796
--------------------------------------------------------------------------------
                         Iteration time: 1.97s
                           Time elapsed: 00:51:54
                                    ETA: 00:00:00

Training time: 3140.17 seconds
[INFO]: SimulationContext cleared
[3174.099s] Simulation App Shutting Down

以上の学習結果を用いて、1体のロボットを歩かせてみます。

PS C:\NvidiaIsaac\Lab300> .\isaaclab.bat -p .\scripts\reinforcement_learning\rsl_rl\play.py --task Isaac-Velocity-Flat-G1-v0 --num_envs 1 --viz kit

image.png

頑張って歩けるようになりました!

1000体での強化学習の実行

それでは、安定して歩行できるような学習を進めるために、ロボット「1000体」を用いて、強化学習を以下のコマンドで実行します。

PS C:\NvidiaIsaac\Lab300> .\isaaclab.bat -p .\scripts\reinforcement_learning\rsl_rl\train.py --task Isaac-Velocity-Flat-G1-v0 --num_envs 1000 --viz kit

image.png

学習が進む間、GUIの表示で1000体のロボットが、歩くための制御を学習しています。様子をみると、転倒することは少なくなり、それなりに歩行しています。
仲間が1000体もあるので、学習の成果が蓄積してくると、それなりに歩行できるようになってきました。よちよち歩きなので、応援したくなります。

################################################################################
                          Learning iteration 1499/1500

                            Total steps: 36000000
                       Steps per second: 9439
                        Collection time: 2.443s
                          Learning time: 0.099s
                        Mean value loss: 0.0053
                    Mean surrogate loss: -0.0069
                      Mean entropy loss: 31.6989
                            Mean reward: 18.21
                    Mean episode length: 998.20
                        Mean action std: 0.85
    Episode_Reward/track_lin_vel_xy_exp: 0.8959
     Episode_Reward/track_ang_vel_z_exp: 0.5528
            Episode_Reward/lin_vel_z_l2: -0.0071
           Episode_Reward/ang_vel_xy_l2: -0.0209
          Episode_Reward/dof_torques_l2: -0.0079
              Episode_Reward/dof_acc_l2: -0.0129
          Episode_Reward/action_rate_l2: -0.3021
           Episode_Reward/feet_air_time: 0.0462
     Episode_Reward/flat_orientation_l2: -0.0084
          Episode_Reward/dof_pos_limits: -0.0071
     Episode_Reward/termination_penalty: 0.0000
              Episode_Reward/feet_slide: -0.0381
     Episode_Reward/joint_deviation_hip: -0.0242
    Episode_Reward/joint_deviation_arms: -0.0871
 Episode_Reward/joint_deviation_fingers: -0.0592
   Episode_Reward/joint_deviation_torso: -0.0065
                   Metrics/success_rate: 1.0000
     Metrics/base_velocity/error_vel_xy: 0.1499
    Metrics/base_velocity/error_vel_yaw: 0.4327
           Episode_Termination/time_out: 0.9760
       Episode_Termination/base_contact: 0.0240
--------------------------------------------------------------------------------
                         Iteration time: 2.54s
                           Time elapsed: 01:05:56
                                    ETA: 00:00:00

Training time: 3983.04 seconds
[INFO]: SimulationContext cleared
[4022.734s] Simulation App Shutting Down

以上の学習結果を用いて、1体のロボットを歩かせてみます。

PS C:\NvidiaIsaac\Lab300> .\isaaclab.bat -p .\scripts\reinforcement_learning\rsl_rl\play.py --task Isaac-Velocity-Flat-G1-v0 --num_envs 1 --viz kit

image.png

それなりに、安定して歩けるようになりました。

最後に、学習時間を比較してみます。この処理は「NVIDIA RTX A4500 (20GB)」で、1500ステップの学習を行っています。

ロボット数 10 100 1000 1000-NoGUI
学習時間(秒) 2867.90 3174.10 4022.73 1629.32
反復時間(秒) 1.87 1.97 2.54 1.06

ロボット数に比例して、処理時間が増加するわけではないようです。ちなみに、1000体の場合でGUI表示をしない、学習処理の場合は2倍以上に高速できそうです。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?