Inspection & Sorting Cell.
A decision becomes a physical action.
- ROLE
- Workflow direction & simulation validation
- TOOLS
- Isaac Sim · OpenUSD · Replicator · Python
- DISCIPLINES
- Synthetic data · RGB inspection · Robot sorting
- YEAR
- 2026

Inspect a part.
Act on the result.
Connect a synthetic-data workflow to an actual sorting task in Isaac Sim. The cell inspects a part, moves it along a conveyor and uses the predicted verdict to choose the robot’s drop path.
The final evidence contains one GOOD block cycle and one REJECT block cycle. Each keeps the same dynamic part through transport, contact grasp, carry and release into the correct bin.
VERIFIED AT SEPARATE PIPELINE & TASK MILESTONES
- Dataset checks
- 400/400
- Held-out decisions
- 48/48
- Conveyor speed
- 0.15m/s
- Final lift
- 110.1mm
24 seeded frames · M4 validation
24 GOOD · 24 REJECT · M6
Physical surface-velocity transport
Measured in both M8 block cycles
Sources: M4_validation.json, M6_INSPECTION_RESULTS.json and M8 GOOD / REJECT run records. These are controlled simulation checks, not a production inspection benchmark.
One scene.
Several forms of evidence.
Three procedural shapes—block, cylinder and wedge—each have GOOD and REJECT variants. A near-black geometric patch represents the defect.
Build the workcell
A 1.20 × 0.36 m conveyor, a fixed inspection camera and two passive bins form the cell. The UR3e and integrated official Robotiq 2F-85 are referenced from the validated robot workflow.
Capture controlled variation
Replicator BasicWriter exports RGB, depth, semantic and instance segmentation, tight 2D boxes and camera parameters. Seed 4242 controls position, yaw, object mix, part appearance and lighting; the camera stays fixed.
Resolve annotations per frame
UsdSemantics.LabelsAPI carries class and quality labels. Segmentation colours, instance ids and box indices have separate mappings and can change between runs. Validation resolves those mappings instead of assuming stable ids.
Data capture places parts at planned poses without stepping physics. Conveyor transport and robot sorting are validated separately in the physical task.

03 / THE INSPECTION STEP
RGB in.
Verdict out.
The rule-based inspector measures dark pixels inside an eroded rendered part mask. A pixel is dark below 0.25 × the object’s median luminance; a dark fraction of at least 0.062 produces REJECT.
One threshold was calibrated on 22 objects, then checked on 48 held-out objects: 24 GOOD and 24 REJECT, with no false positives or false negatives in that dataset. The quality label is read for scoring after prediction, never to select the route.
Scope: a near-black patch and ground-truth mask localisation. No learned detector or real-camera defect benchmark is claimed.

The verdict selects the destination.
Inspection happens before physics and belt motion start. The conveyor then carries the block to PICK at 0.15 m/s, stops ahead of the target and allows a 1.5-second settling interval before the robot approaches.
Joint drives execute the planned poses. The Robotiq fingers close through physical contact; friction supports the carry. Opening the gripper releases the part. No attachment, kinematic hold or direct part-pose update carries it after Play.

Validate the behaviour.
Then connect the stages.
Geometry changed the belt speed
A non-uniform scale on the conveyor cube changed the effective surface speed from 0.15 to 0.18 m/s. Replacing it with an unscaled box mesh of the same dimensions restored the intended transport behaviour.
Visible RGB did not prove valid labels
Hiding labelled parts between captures produced correct RGB with empty segmentation and box outputs. Keeping labelled prims active and parking unused parts outside the camera view repaired the annotation pipeline.
Separate grasp tests passed three trials per shape—9/9 for block, cylinder and wedge. The final integrated conveyor-to-bin cycles below are block-only.
06 / FINAL VALIDATED CYCLES
Two verdicts.
Two physical outcomes.
The M8 captures repeat the verified task with a rendering-only recorder. Each video is one continuous block cycle.

GOOD sequence description
The unmarked yellow block is classified GOOD, transported to PICK and allowed to settle. The robot grasps it, lifts it and releases it into the green bin. The block rests inside the bin as the arm retreats. No audio.

REJECT sequence description
The dark patch produces a REJECT verdict. After the same conveyor handoff and physical grasp, the robot follows the REJECT drop path. The block is released and rests inside the red bin. No audio.
| Measurement | GOOD | REJECT |
|---|---|---|
| Dark-pixel fraction | 0.0000 | 0.1737 |
| Handoff XY error | 2.58 mm | 2.58 mm |
| Slip during carry | 0.002 mm | 0.002 mm |
| Final bin-centre offset (X, Y) | +2.8, −0.2 mm | +2.0, +0.7 mm |
| Correct bin / robot-cell contact | Yes / none | Yes / none |
Source: media/m8/good_run.json and reject_run.json. Both record PASS over 33.0 seconds of simulation.

GOOD
The block has settled inside the prediction-selected bin.

REJECT
The block has settled inside the prediction-selected bin.
The pipeline connects.
The scope stays explicit.
The project connects labelled synthetic data, a testable RGB decision rule, physical conveyor transport and robot sorting. Both final block runs reach the correct bin without robot-cell contact.
Integrated cylinder and wedge sorting, moving-part inspection, repeated-cycle reliability and a continuous multi-part stream remain outside the validated scope. The small datasets verify the pipeline; they are not production training sets.
- Project direction
- Marko Bokan — workflow definition, technical judgement, QA and acceptance.
- Robot & gripper
- Referenced UR3e simulation asset with the official third-party Robotiq 2F-85. The Robotiq model was integrated, not authored by Marko.
- Evidence
- Dataset Card, Milestone Manifest, M6 inspection results, staged grasp / handoff reports and final M8 GOOD / REJECT run records.