はじめに
ロボティクスは RL の最も重要なアプリケーションであり、シミュレーションでエージェントをトレーニングし、実際のロボットに展開します。 MuJoCo と NVIDIA Isaac Gym が物理シミュレータのトップ 2 です。
1. MuJoCo 環境
import gymnasium as gym
# Standard robotics environments
envs = [
"Ant-v4", # 4-legged locomotion
"Humanoid-v4", # Bipedal walking
"HalfCheetah-v4", # 2D running
"Hopper-v4", # 1-leg hopping
"Walker2d-v4", # 2D walking
]
for env_name in envs:
env = gym.make(env_name)
print(f"{env_name}: obs={env.observation_space.shape}, act={env.action_space.shape}")
env.close()
2. SAC を使用したトレーニング
from stable_baselines3 import SAC
env = gym.make("Ant-v4")
model = SAC(
"MlpPolicy", env,
learning_rate=3e-4,
buffer_size=1_000_000,
batch_size=256,
tau=0.005,
gamma=0.99,
verbose=1,
tensorboard_log="./ant_tensorboard/",
)
model.learn(total_timesteps=1_000_000)
model.save("sac_ant")
3. NVIDIA アイザック ジム
GPU アクセラレーションによる並列トレーニング — 1000 倍高速:
# Isaac Gym runs thousands of environments in parallel on GPU
from isaacgym import gymapi, gymtorch
gym = gymapi.acquire_gym()
sim = gym.create_sim(0, 0, gymapi.SIM_PHYSX)
# Create 4096 parallel environments
num_envs = 4096
envs = []
for i in range(num_envs):
env = gym.create_env(sim, lower, upper, num_per_row)
envs.append(env)
4. Sim から Real への転送
| テクニック | 説明 |
|---|---|
| ドメインのランダム化 | 物理パラメータ (質量、摩擦など) をランダム化する |
| システムの識別 | 実際のロボットに合わせてシミュレーションを調整 |
| カリキュラム学習 | 簡単なタスクから徐々に難しいタスクへ |
| 教師と生徒 | シムで教師を訓練し、生徒に蒸留 |
# Domain randomization example
def randomize_physics(env):
env.gravity = np.random.uniform(-10.5, -9.5)
env.friction = np.random.uniform(0.5, 1.5)
env.mass_scale = np.random.uniform(0.8, 1.2)
env.actuator_strength = np.random.uniform(0.9, 1.1)
概要
| シミュレーター | GPU アクセル | スピード | リアリズム | ライセンス |
|---|---|---|---|---|
| ムジョコ | ❌ CPU | 中 | 高 | 無料 |
| アイザックジム | ✅ GPU | 非常に速い | 高 | 無料 |
| ピバレット | ❌ CPU | 中 | 中 | オープンソース |
| ブラックス | ✅ ジャックス | 速い | 中 | オープンソース |