Lesson 1: Isaac Sim Basics and Setup
Learning Objectives
By the end of this lesson, students will be able to:
- Install and configure NVIDIA Isaac Sim
- Understand the Omniverse platform and USD format
- Create basic simulation environments
- Load and control robots in Isaac Sim
Introduction to NVIDIA Isaac Sim
NVIDIA Isaac Sim is a high-fidelity simulation application built on NVIDIA Omniverse, designed for developing, testing, and validating AI-based robotic applications. It provides photorealistic rendering, accurate physics simulation, and seamless integration with the Isaac ecosystem.
Key Features of Isaac Sim
- Photorealistic Rendering: RTX-accelerated rendering for synthetic data generation
- Accurate Physics: PhysX engine for realistic physical interactions
- USD Support: Universal Scene Description for complex 3D scenes
- Synthetic Data Generation: Tools for creating labeled datasets
- ROS 2 Integration: Seamless integration with ROS 2 workflows
- AI Training Environment: Framework for reinforcement learning and imitation learning
System Requirements
Isaac Sim has significant hardware requirements due to its photorealistic rendering:
Minimum Requirements
- GPU: NVIDIA RTX 4070 Ti (12GB VRAM) or higher
- CPU: Intel Core i7 (13th Gen) or AMD Ryzen 9
- RAM: 32 GB (64 GB recommended)
- OS: Ubuntu 22.04 LTS or Windows 10/11
Recommended Requirements
- GPU: NVIDIA RTX 4090 (24GB VRAM) or RTX A6000
- CPU: Intel Core i9 or AMD Threadripper
- RAM: 64 GB or more
- Storage: Fast NVMe SSD for scene loading
Installing Isaac Sim
Prerequisites
- Install NVIDIA GPU drivers (535 or later)
- Install CUDA Toolkit (12.0 or later)
- Ensure RTX-capable GPU is available
Installation Steps
-
Download Isaac Sim from NVIDIA Developer website
-
Extract the package:
tar -xzf isaac-sim-2023.1.0.tar.gz -
Set up environment:
cd isaac-sim
export ISAACSIM_PATH=$(pwd) -
Install dependencies:
python -m pip install -e .
Alternative: Docker Installation
For easier setup, you can use the Isaac Sim Docker container:
docker run --gpus all -it --rm \
--env "ACCEPT_EULA=Y" \
--env "ISAACSIM_USERNAME=your_username" \
--env "ISAACSIM_PASSWORD=your_password" \
--volume $HOME/isaac-sim-cache:/isaac-sim/cache/Kit \
--volume $HOME/isaac-sim-logs:/isaac-sim/logs \
--volume $HOME/isaac-sim-data:/isaac-sim/data \
--net=host \
--privileged \
--pid=host \
-e "DISPLAY" \
-v /tmp/.X11-unix:/tmp/.X11-unix:rw \
-v /tmp/.docker.xauth:/tmp/.docker.xauth:rw \
-e XAUTHORITY=/tmp/.docker.xauth \
nvcr.io/nvidia/isaac-sim:2023.1.0
Understanding Omniverse and USD
Universal Scene Description (USD)
USD is Pixar's scene description format that Isaac Sim uses for representing 3D scenes:
# Example USD file (scene.usda)
def Xform "Robot" (
prepend references = @./franka_panda.usd@
)
{
def Xform "base"
{
def Xform "link0"
{
def Xform "joint0"
{
# Joint properties
}
}
}
}
USD Key Concepts
- Prims (Primitives): Basic objects in the scene
- Properties: Attributes of prims (position, color, etc.)
- Relationships: Connections between prims
- Variants: Different configurations of the same object
- Payloads: Deferred loading of heavy assets
Getting Started with Isaac Sim
Launch Isaac Sim
# Direct launch
./isaac-sim/python.sh
# Or via Omniverse Launcher (recommended)
Basic Interface Overview
When Isaac Sim launches, you'll see:
- Viewport: 3D scene rendering window
- Stage Panel: Scene hierarchy and object management
- Property Panel: Selected object properties
- Timeline: Animation and simulation controls
- Console: Scripting and logging output
Creating Your First Scene
Using the Isaac Sim Assets
Isaac Sim comes with a rich library of assets:
- Robots: Franka Panda, UR5, ABB, etc.
- Environments: Warehouse, office, home scenes
- Objects: Household items, tools, furniture
- Sensors: Cameras, LiDAR, IMU models
Loading a Robot
- Open Isaac Sim
- Go to Window → Isaac Examples → 1a - Robot Bridge → Franka Cube Pick
- This loads a Franka robot with a cube in a simple environment
Basic Scene Setup Script
Here's a Python script to programmatically create a simple scene:
import omni
from omni.isaac.core import World
from omni.isaac.core.utils.stage import add_reference_to_stage
from omni.isaac.core.utils.nucleus import get_assets_root_path
from omni.isaac.franka import Franka
from omni.isaac.core.utils.prims import get_prim_at_path
import numpy as np
# Create a world object
my_world = World(stage_units_in_meters=1.0)
# Get the assets root path
assets_root_path = get_assets_root_path()
# Add a robot to the stage
if assets_root_path is not None:
# Load a Franka robot
my_franka = my_world.scene.add(
Franka(
prim_path="/World/Franka",
name="my_franka",
position=np.array([0, 0, 0]),
orientation=np.array([0, 0, 0, 1])
)
)
# Add a ground plane
my_world.scene.add_ground_plane("/World/GroundPlane")
# Play the simulation
my_world.reset()
USD Scene Structure
Basic USD Scene Example
#usda 1.0
(
metersPerUnit = 1
upAxis = "Y"
)
def Xform "World"
{
def Xform "GroundPlane"
{
def PhysicsGroundPlane "GroundPlane"
{
prepend references = </Isaac/Props/Prismarine/ground_plane.usd>
}
}
def Xform "Robot"
{
def Xform "Franka"
{
prepend references = </Isaac/Robots/Franka/franka_alt_fingers.usd>
}
}
def Xform "Light"
{
def DistantLight "DistantLight"
{
float intensity = 500
color color = (0.9, 0.9, 0.9)
}
}
}
Isaac Sim Extensions
Isaac Sim uses extensions to provide functionality:
Key Extensions
- Isaac Sim Robotics: Core robotics functionality
- Isaac Sim Sensors: Camera, LiDAR, IMU simulation
- Isaac Sim Navigation: Path planning and navigation
- Isaac Sim Manipulation: Grasping and manipulation
- Isaac Sim Gym: Reinforcement learning environments
Enabling Extensions
Extensions can be managed through:
- Window → Extensions menu
- Programmatically in scripts
- Through configuration files
Practical Exercise: Basic Robot Setup
Create a simple scene with a robot and basic environment:
- Launch Isaac Sim
- Create a new stage (File → New Stage)
- Add a ground plane using the Create menu
- Add a robot (e.g., Franka Panda) from the Isaac assets
- Add a light source for proper illumination
- Run the simulation to see the robot in the environment
Python Script for the Exercise
import omni
from omni.isaac.core import World
from omni.isaac.core.utils.stage import add_reference_to_stage
from omni.isaac.core.utils.nucleus import get_assets_root_path
from omni.isaac.franka import Franka
from omni.isaac.core.utils.prims import get_prim_at_path
import numpy as np
# Initialize the world
my_world = World(stage_units_in_meters=1.0)
# Get assets root path
assets_root_path = get_assets_root_path()
if assets_root_path is not None:
# Add ground plane
my_world.scene.add_ground_plane("/World/GroundPlane", size=10.0)
# Add a Franka robot
franka_robot = my_world.scene.add(
Franka(
prim_path="/World/Franka",
name="franka",
position=np.array([0.0, 0.0, 0.0]),
)
)
# Reset the world to apply changes
my_world.reset()
# Print robot information
print("Robot added successfully!")
print(f"Robot position: {franka_robot.get_world_pose()[0]}")
# To run simulation continuously
while simulation_app.is_running():
my_world.step(render=True)
if my_world.is_playing():
if my_world.current_time_step_index == 0:
my_world.reset()
Troubleshooting Common Issues
Rendering Issues
- Ensure GPU drivers are up to date
- Check VRAM availability (minimum 8GB recommended)
- Verify RTX-capable GPU is being used
Performance Issues
- Reduce scene complexity
- Lower rendering quality settings
- Use simpler physics models during development
Asset Loading Problems
- Verify Omniverse connection
- Check assets root path
- Ensure proper permissions for asset directories
Summary
This lesson introduced NVIDIA Isaac Sim, its installation, and basic scene creation. Isaac Sim provides a powerful platform for robotics simulation with photorealistic rendering and accurate physics.
Next Steps
In the next lesson, we'll explore synthetic data generation and how to create training datasets for AI models using Isaac Sim.