Skip to content

Robot Simulators

Simulation platforms for training and testing robotics algorithms.

Overview

Simulators are essential for robotics development, providing:

  • Safe testing without risking real hardware
  • Parallel training for faster RL
  • Reproducible experiments
  • Cost-effective development
  • Rapid iteration on algorithms

Supported Simulators

NVIDIA's comprehensive robotics simulation platform built on Omniverse.

Key Features: - PhotorealisticGraphics - Accurate physics simulation - ROS/ROS2 integration - Synthetic data generation

Learn more →

Unified framework for robot learning built on IsaacSim.

Key Features: - GPU-accelerated RL training - Pre-built robot environments - Parallel simulation - Tight PyTorch integration

Learn more →

New physics engine optimized for machine learning and robotics.

Key Features: - Fast contact dynamics - Differentiable physics - Large-scale parallelization - Simple Python API

Learn more →

Quick Comparison

Feature IsaacSim IsaacLab Newton
Graphics Photorealistic Good Basic
Physics Excellent Excellent Excellent
Speed Medium Very Fast Very Fast
GPU Accel Yes Yes Yes
Parallel Envs 100s 10,000s 10,000s
Learning Curve Steep Medium Easy
Best For Perception, Visualization RL Training Fast RL

Choosing a Simulator

Use IsaacSim if you need:

  • Photorealistic rendering for vision systems
  • Complex sensor simulation (cameras, LiDAR)
  • Integration with other NVIDIA tools
  • Asset creation and scene composition

Use IsaacLab if you need:

  • Fast RL training with GPU acceleration
  • Pre-built robot environments
  • Large-scale parallel training
  • Sim-to-real transfer

Use Newton if you need:

  • Maximum simulation speed
  • Minimal setup complexity
  • Differentiable physics
  • Custom environments

Installation

Prerequisites

# NVIDIA GPU required
# CUDA 11.8 or later
# Ubuntu 20.04/22.04 or Windows

# Check CUDA
nvidia-smi

Quick Start

# Download from NVIDIA Omniverse Launcher
# Or use Docker
docker pull nvcr.io/nvidia/isaac-sim:2023.1.1

docker run --name=isaac-sim --entrypoint bash -it --gpus all \
    -e "ACCEPT_EULA=Y" --rm --network=host \
    nvcr.io/nvidia/isaac-sim:2023.1.1
# Clone repository
git clone https://github.com/isaac-sim/IsaacLab.git
cd IsaacLab

# Install
./isaaclab.sh --install

# Verify
./isaaclab.sh -p source/standalone/demos/quadrupeds.py
# Install via pip
pip install newton-sim

# Verify
python -c "import newton; print(newton.__version__)"

Basic Example

IsaacSim

from isaacsim import SimulationApp

simulation_app = SimulationApp({"headless": False})

from omni.isaac.core import World
from omni.isaac.core.robots import Robot

# Create world
world = World()

# Add robot
robot = world.scene.add(Robot(prim_path="/World/robot", name="franka"))

# Simulation loop
world.reset()
while simulation_app.is_running():
    world.step(render=True)

IsaacLab

import isaaclab

from isaaclab.envs import ManagerBasedRLEnv
import gymnasium as gym

# Create environment
env = gym.make("Isaac-Reach-Franka-v0", num_envs=4096)

# Reset
obs, _ = env.reset()

# Step
for _ in range(1000):
    actions = env.action_space.sample()
    obs, rewards, dones, truncated, info = env.step(actions)

Newton

import newton

# Create environment
env = newton.make("FrankaReach-v0", num_envs=4096)

# Training loop
obs = env.reset()
for step in range(1000):
    actions = policy(obs)
    obs, rewards, dones, info = env.step(actions)

Common Workflows

RL Training Workflow

graph TD
    A[Create Environment] --> B[Configure Domain Randomization]
    B --> C[Train in Parallel]
    C --> D[Monitor Performance]
    D --> E{Good Performance?}
    E -->|No| F[Adjust Hyperparameters]
    F --> C
    E -->|Yes| G[Test in Diverse Scenarios]
    G --> H[Deploy to Real Robot]

Sim-to-Real Transfer

  1. Train in simulation with domain randomization
  2. Validate in diverse simulated scenarios
  3. Fine-tune on real robot (optional)
  4. Deploy to production

Domain Randomization

# Example: Randomize physics parameters
class RandomizedEnv:
    def reset(self):
        # Randomize object properties
        self.mass = np.random.uniform(0.5, 2.0)
        self.friction = np.random.uniform(0.3, 1.2)

        # Randomize visual properties
        self.light_intensity = np.random.uniform(0.5, 1.5)
        self.object_color = np.random.rand(3)

        # Randomize camera pose
        self.camera_noise = np.random.normal(0, 0.05, 3)

        return super().reset()

Performance Tips

Maximize Parallelization

# Use maximum number of parallel environments
num_envs = 4096  # Limited by GPU memory

# Batch operations
actions = policy(observations)  # Batch inference
next_obs, rewards, dones, info = env.step(actions)  # Parallel step

Optimize Rendering

# Disable rendering during training
env = gym.make("Isaac-Reach-Franka-v0", headless=True)

# Enable only for visualization
if visualize:
    env.render()

Next Steps

Resources