ここでは、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
学習が進む間、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
歩くどころか、立っていることもできません。学習結果は十分でないのが、わかります。
ここで、スクリプト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
学習が進む間、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
頑張って歩けるようになりました!
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
学習が進む間、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
それなりに、安定して歩けるようになりました。
最後に、学習時間を比較してみます。この処理は「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倍以上に高速できそうです。





