Simulating a Job-Shop in Omniverse

Build discrete-event simulation logic on top of physics-enabled USD scenes to model, visualize, and analyze complex job-shop workflows with real-time state transitions, resource contention, and dynamic task routing in a fully programmable environment.

simulating-a-job-shop-in-omniverse
Last updated:
June 14, 2025

A job-shop is a manufacturing system with jobs that visit multiple stations in a custom order. In a job-shop manufacturing system, no two jobs follow exactly the same path. Each product moves through a unique sequence of workstations, competing for shared machines, and creating complex scheduling challenges that are difficult to optimize without simulation.

Each:

  • 🔧 Station = physical workstation (e.g., welding, painting)
  • 🧱 Job = product type with unique routing
  • 🕒 Task = action at a specific station with a service time

We simulate jobs entering, queuing, being processed, and exiting using USD prims + Python + Omniverse’s simulation core.

💰 Where Does This Make Financial Sense?

Job-shop simulation pays off when variability is high and capacity is expensive. Industries include:

🔧 1. Aerospace & Defense

🚘 2. Automotive Prototyping / Tooling

💡 3. Industrial Machinery & Robotics

🛠 4. Precision Manufacturing (e.g., medical devices)

🧪 5. R&D and Custom Fabrication Labs

Grand View Research. (2024). Simulation software market size, share & trends analysis report. https://www.grandviewresearch.com/industry-analysis/simulation-software-market

Define Station Layout with USD

Each station is a Xform prim with metadata for machines and queues.

from pxr import Usd, UsdGeom

stage = Usd.Stage.CreateNew("jobshop.usda")

stations = ["Station_1", "Station_2", "Station_3", "Station_4", "Station_5"]
for i, name in enumerate(stations):
    path = f"/JobShop/{name}"
    xform = UsdGeom.Xform.Define(stage, path)
    xform.AddTranslateOp().Set((i * 5.0, 0, 0))
    xform.GetPrim().CreateAttribute("machines", Sdf.ValueTypeNames.Int).Set(2)

Each station could have a machines attribute for capacity and location in the scene graph.

Simulate Discrete Events with Python ⏱️

We mimic a discrete-event engine using a sorted list of (time, event_fn).

import heapq, random

event_queue = []
current_time = 0.0

def schedule(delay, fn): 
    heapq.heappush(event_queue, (current_time + delay, fn))

def run_sim():
    global current_time
    while event_queue:
        current_time, fn = heapq.heappop(event_queue)
        fn()

# Example: Arrival
def job_arrival():
    print(f"Job arrives at t={current_time:.2f}")
    schedule(random.expovariate(4), job_arrival)  # next arrival

schedule(0, job_arrival)
run_sim()

Add Intelligence: Routes, Queues, and Stats 📊

Each job has:

  • A route ([3,1,2,5])
  • A task pointer
  • A per-station queue system
stations = {i: {"queue": [], "busy": 0, "machines": 2} for i in range(1, 6)}

def serve_job(station_id, job):
    stations[station_id]["busy"] += 1
    delay = random.gammavariate(2, job["service"][job["task"]])
    print(f"Serving job at Station {station_id}, task {job['task']}")
    schedule(delay, lambda: job_depart(station_id, job))

def job_depart(station_id, job):
    stations[station_id]["busy"] -= 1
    job["task"] += 1
    if job["task"] < len(job["route"]):
        schedule(0, lambda: job_arrive(job))
    else:
        print(f"Job complete at t={current_time:.2f}")

You can visualize everything in Omniverse Kit or USDView. The next step is integrating Omniverse Isaac Sim to add physics, robotic arms, or automated decision logic.

🚀 Ready to accelerate your simulation flow?👉 Visit champion3d.io to see how AI + USD can transform your engineering workflows—turning custom job-shop models into intelligent, testable simulations that scale with your business.

Available Now

Book a demo and get early access. Free trial!

Email Address:
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
Email Address:
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
Join the Champion3D Insider List
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
What’s Your Biggest Outdoor Robotics Challenge?
Which factor causes you the most pain during mobile robot field testing?
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
10 Fun Facts About Git That You Didn't Know
Welcome to a deep dive into Git, a tool that’s critical not just for software development but also for 3D artists and game developers.
May 7, 2024
Read more
Why Git is the Artist's Best Friend
How Version Control Transforms the Artist's Workflow and Collaboration Experience.
April 26, 2024
Read more
How to Tame Your Data Tsunami!
Efficient Data Management and Versioning for Large-Scale Projects: An Introduction to LakeFS.
April 26, 2024
Read more
Branching for Dummies
A Simple Guide to Safe Experimentation in Project Development.
April 26, 2024
Read more