A tutorial project demonstrating synthetic data generation for robotics using NVIDIA Isaac Sim. This workshop provides tools and examples for generating randomized scenes with a UR10e robot, camera pose randomization, and automated data capture for computer vision and machine learning applications.
- Docker and Docker Compose (latest versions recommended)
- NVIDIA GPU with compatible drivers (for Isaac Sim)
- Nvidia Container Toolkit to get access to the GPU from the containerized tool
- Python 3.10+ for local development
- Sufficient disk space for Isaac Sim Docker image (~10GB)
-
Clone the repository:
git clone https://github.com/Ekumen-OS/icar_2025_tutorial.git cd icar_2025_tutorial -
Source the workspace and build the Docker image:
source setup.bash icar_sim build
Run a simple data generation session:
icar_sim run --count 10 -o ./outputThis will generate 10 randomized scenes and save the captured data to the ./output directory.
Run with custom configuration and additional features:
icar_sim run \
--count 100 \
--output-path ./dataset \
--config sample_config \
--headlessThe icar_sim command provides a convenient interface for building and running simulations.
icar_sim buildBuilds the Docker image with all necessary dependencies.
icar_sim run [OPTIONS]Required Arguments:
--count,-c<NUMBER>: Number of scenes/captures to generate--output-path,-o<PATH>: Directory path for captured data
Optional Arguments:
--headless: Run without GUI (faster, recommended for large datasets)--build: Build Docker image before running--keepalive: Keep simulation running after completion (useful for debugging)--cosmos: Enable CosmosWriter for additional data output formats--config <NAME>: Use a specific configuration file fromconfig/directory (without.yamlextension)- Default:
sample_config
- Default:
Configuration files are YAML-based and located in the config/ directory. They control scene randomization parameters.
Example configuration (config/sample_config.yaml):
camera:
position: [0, 0, 3.5]
rotation: [0, 0, 0]
resolution: [1024, 768]
pose_constraints:
look_at: [0, 0, 0]
x_min: -4.0
x_max: 4.0
y_min: -4.0
y_max: 4.0
z_min: 0.0
z_max: 2.0
camera_distance: [1.0, 4.5]
camera_altitude: [0.0, 60.0]
camera_azimuth: [0.0, 360.0]
props:
num_props: 8
position_range:
x: [-0.75, 0.75]
y: [-0.75, 0.75]
z: [0.0, 0.0]
rotation_range:
z: [0.0, 360.0]To use a custom configuration:
icar_sim run --count 50 -o ./output --config my_custom_configicar_2025_tutorial/
βββ assets/ # USD assets and 3D models
βββ config/ # YAML configuration files
βββ docker/ # Docker configuration
βββ icar_sim_sdg/ # Main Python package
β βββ randomizers/ # Scene randomization modules
β βββ writers/ # Data output writers
β βββ entrypoint.py # Simulation entry point
βββ docs/ # Documentation
βββ icar_sim # Main CLI script
βββ setup.bash # Environment setup script
βββ CONTRIBUTING.md # Contribution guidelines
βββ LICENSE # BSD 3-Clause License
-
Install pre-commit hooks:
pip install pre-commit pre-commit install
-
Run code quality checks:
pre-commit run --all-files
This project uses:
- ruff for linting and formatting
- mypy for type checking
- pre-commit hooks for automated checks
All code must pass these checks before being committed.
To create a custom randomizer:
- Create a new file in
icar_sim_sdg/randomizers/ - Inherit from the base randomizer pattern
- Implement the
randomize()method - Register it in
entrypoint.py
We welcome contributions! Please see CONTRIBUTING.md for guidelines.
This project is licensed under the BSD 3-Clause License - see the LICENSE file for details.
- Issues: GitHub Issues
- Discussions: GitHub Discussions