Smart Factory Digital Twin.
Connecting factory geometry to production context
- ROLE
- Workflow direction & simulation validation
- TOOLS
- OpenUSD · Omniverse Kit · Python · OPC UA · MQTT
- DISCIPLINES
- CAD integration · Simulated telemetry · Custom interfaces
- YEAR
- 2026
All telemetry is simulated. No real PLC, MES integration or real-world deployment is claimed.

A factory layout.
Its operational context.
I directed an AI-assisted digital-twin demonstrator for furniture-panel production, combining CAD-derived equipment, reusable OpenUSD assets and simulated station data in a custom USD Composer application.
Equipment selection links geometry to telemetry. The work focused on asset scale, coherent station records and clear reporting of stale or incomplete data.
SAVED M9 ACCEPTANCE / SIMULATED BATCH
- Simulated stations
- 4
CNC, Assembly, QC and Packaging
- Scenario ticks
- 120
One-second ticks; scripted batch
- Received messages
- 480
120 saved records per station
- QC yield
- 66.7%
2 accepted / 3 inspected
Saved M9 simulation results; no measured transport latency, throughput benchmark or real-factory performance is claimed.
Reusable assets.
Separate placement decisions.
Separate layers organize geometry, equipment identity and corrections.
OpenUSD factory structure
Nine sublayers separate facility, zones, openings and placement in a metre-scale, Z-up stage. References separate assets from placement; a stronger layer adds receiving/shipping openings over the original south wall.
Four zones cover storage, CNC, assembly and QC, and packaging and shipping. Four stations supply telemetry; the extra assembly bench, racks and pallets stay static.
CAD-to-USD asset integration
NVIDIA’s HOOPS converter retained the OLSK CNC STEP assembly’s hierarchy, instances and materials. A reference wrapper corrects its orientation with +90° X rotation, millimetre-to-metre scaling and centred floor alignment; a separate parent controls placement.
Assembly, QC and packaging assets complement NVIDIA racks and pallets, scaled from centimetres. Layered material overrides preserve vendor originals. Third-party CAD and models are not distributed.
Python → OPC UA → MQTT.
Then into Omniverse.
A deterministic Python model supplies a simulated OPC UA server. A gateway publishes JSON through Mosquitto MQTT; a Kit extension updates Station Telemetry and Factory Operations.
USD paths identify equipment. Telemetry neither comes from meshes nor drives machine motion.
A coherent station snapshot
Four OPC UA station records carry completed-tick markers. The gateway publishes only when all markers agree before and after the read, rejecting partial updates.
Network reception and UI updates
Polling runs at about 5 Hz; each new tick produces one message per station per second. MQTT receives in the background; Kit’s main thread updates the UI. Connection, gateway presence and record age are tracked separately. Localhost transport uses QoS 0, without authentication or encryption.
Diagram wording reflects M9: “NO CONNECTION” became “DISCONNECTED” later. It describes architecture, not the current UI.
Three units.
One deliberate rejection.
Three units pass through CNC, assembly, QC and packaging. Assembly takes 20 simulated seconds per unit, QC 8 and packaging 15, with one-second handovers. Unit 2 is deliberately rejected; only units 1 and 3 are packaged.
The run has 120 one-second ticks; packaging ends at tick 110. A CNC fault at ticks 45–59 follows all CNC completions and does not interrupt downstream work. Transfers are logical, with no physical animation.
Select the equipment.
Read the station state.
Factory Operations shows four stations’ state, record age and active unit. Selecting a station selects its USD prim and links Station Telemetry, which supports MQTT values and stepping through recorded JSONL.
Cycle resets are tracked. Mid-cycle joins show current counters and flag missing earlier alarms and events.

Keep transforms correct.
Keep the data meaningful.
Preserving CAD transforms
separating the orientation and scale wrapper from placement prevented transform overrides.
Valid USD hierarchy
corrected model kinds while retaining geometry and references.
Consistent protocol data
sequence checks and explicit null conversion preserved data consistency between OPC UA and JSON.
Trustworthy state reporting
reset, mid-cycle and stale-data handling corrected misleading counters and freshness indicators.
The recorded batch.
The acceptance boundary.
Saved M9 evidence contains 480 MQTT messages: 120 per station. The audit matched server, gateway and subscriber records to the dashboard totals.
| Measurement | Simulated outcome |
|---|---|
| CNC parts | 3 |
| Assembled | 3 |
| Inspected | 3 |
| QC accepted | 2 |
| QC rejected | 1 |
| Packaged | 2 |
| QC yield | 66.7% |
Source: saved M9 server, gateway, subscriber and dashboard records.
Reviewed screenshots show later simulated sessions, separate from M9 acceptance. Factory validation retains 2 failures and 1,188 warnings; no clean validation or SimReady certification is claimed.
Scene organization.
Protocol integration.
Evidence-based validation.
I defined the factory composition, asset workflow and simulation requirements, directed debugging, and validated results. Codex and Claude Code assisted with implementation, scripting and repeatable checks; I reviewed outputs and accepted major changes.
Core tools: OpenUSD, Kit/USD Composer, HOOPS CAD converter, Python/asyncua, Mosquitto, MQTT, omni.ui, PowerShell and NVIDIA asset-validation tools.
- Project direction
- Marko Bokan — workflow direction, integration decisions and validation.
- CNC design
- OLSK Large CNC — Open Lab Starter Kit ↗
Design: Daniele Ingrassia / InMachines Ingrassia GmbH. Copyright Daniele Ingrassia and Tobias Redlich / Helmut-Schmidt-Universität. CAD commit e7081c49c582b732ea6ab3c160bf557609754cfc: CERN-OHL-W-2.0. Integration: STEP-to-USD conversion and orientation, scale and placement corrections. Third-party CAD design. - Library equipment
- NVIDIA Industrial Assets Pack (Industrial_NVD@10012), rack/pallet models. NVIDIA retains ownership; models and textures are not distributed.
- Figures
- Project dashboard captures and original architecture diagram. Telemetry is SIMULATED; no third-party source assets are distributed.
A local demonstrator.
A defined scope.
All telemetry and production events are simulated. There is no real PLC, MES, physical product flow or real-world deployment. QC is illustrative and does not measure geometry.
Outage records are lost; event history is not persistent. Local transport lacks production security. Validation findings remain; no SimReady certification or compliance is claimed. Future third-party imagery requires separate rights review.