Simulation and robotics

RobotOps Twin

A deterministic simulator for a warehouse robot cell, built to rehearse what happens when the robot and the software disagree.

See the demo

When
Oct 2026
Status
Acceptance criteria met at an audited revision
Source
Public source (link on request)
Stack
  • Python
  • FastAPI
  • PostgreSQL
  • RabbitMQ
  • OPC UA
  • Blender

Problem and idea

When a robot finishes a pick but its confirmation is lost, the warehouse system cannot tell whether the order is done. Cases like this are rare, and expensive to reproduce on real hardware.

The idea: simulate the cell deterministically, inject faults on purpose, and make the operator confirm the outcome with fresh evidence before the workflow moves on.

How it works

  1. New testChoose the cell, product and fault scenario
  2. Durable workflowPlans the pick, sends commands, records every step
  3. Simulated cellBlender scene with six tools and injected faults
  4. VerificationFresh observation checks the result
  5. InvestigationThe operator reconciles before the next pick

Demo

Simulator workspace showing a scenario panel next to a 3D view of the robot cell.
Running a pick. The left panel explains the selected scenario; the replay shows the cell in 3D.
Investigation panel for an uncertain result, showing the original command record and the sensor report section.
Investigating an uncertain result. The command record alone does not confirm the order, so the next pick is paused until it is reconciled.

What I built

  • A FastAPI and WebSocket backend over a durable workflow in PostgreSQL and RabbitMQ.
  • An OPC UA interface to the simulated cell.
  • A synthetic robot cell in Blender with six product families, six tools and three camera views, replayed read-only in the browser.
  • The investigation flow: what happened, the evidence, and manual inspection, kept separate from possible explanations.
  • A Windows desktop app for the same workspace.

Stack

  • Python 3.13
  • FastAPI
  • Pydantic
  • psycopg
  • PostgreSQL
  • RabbitMQ
  • asyncua (OPC UA)
  • WebSockets
  • Blender
  • Playwright
  • uv

Quality evidence

  • Two clean 831-case test runs on Linux and all 169 required acceptance criteria met at the audited revision.
  • About 11,000 lines of tests, including runs against real Blender, PostgreSQL and RabbitMQ.
  • Linux and Windows CI with ruff, mypy, bandit and pip-audit.

Current limits

  • The cell is synthetic and based on public sources. It is not connected to real robot hardware.
  • Only one robot cell can be selected today, although the registry supports more.