← Lab bench
EXP-098In test

A robotics lab in the browser that marks students from what the robot actually did

100/100

Lab 3 score for a Python solution, marked from simulation measurements (2 of 2 runs, Edge on a desktop)

Browser robotics workbench: a white six-axis cobot on a bench with a red part, a Python program below; after the run the part sits on the green target and an assessment table shows every criterion passed with its measurement (Marked: 100 / 100)Browser robotics workbench: a white six-axis cobot on a bench with a red part, a Python program below; after the run the part sits on the green target and an assessment table shows every criterion passed with its measurement (The task and the program)
◂▸
The task and the programMarked: 100 / 100

A free robotics lab for universities that runs in a web browser with nothing to install. Students jog a six-axis cobot, program it in real Python and complete an assessed pick-and-place task, and the simulation marks it out of 100 from what it measured: grip, placement accuracy, release height and limits. It comes with PDF worksheets that take each lab from Level 4 to Level 7.

What we tried

  • We built the lab as a plugin on the open-source realvirtual WEB engine, with no changes to the engine itself.
  • We ran student Python in the browser with Pyodide in a background worker, so a slow or broken program cannot freeze the 3D view.
  • We marked the assessed lab from what the simulation records (grip offset, placement error, release height, refused commands) rather than from the code, so any correct approach scores, whether jogged or programmed.
  • We loaded a second robot brand, the open-source SO-101 arm, from its URDF description, and added import of other robots from a URDF folder.

What we measured

MeasureRun 1Run 2Note
Lab 3 score100 / 100100 / 100
Grip offset from part centre0.5 mm0.5 mm15 marks within 6 mm
Placement error0.0 mm0.0 mm40 marks within 15 mm
Release height above the benchn/a0.0 mm15 marks at 25 mm or lower; run 1 passed, value not logged
Simulated cycle time6.7 s7.0 s
Run pressed to program finished6.3 s6.2 swall-clock, Edge on a desktop, preview build

What went wrong

  • The SO-101's joints came out of its URDF in file order, not along the arm, so sliders moved the wrong links until we sorted them by depth along the kinematic chain.
  • The community edition has no physics engine, so a released part could not simply fall. We set it down on the bench and measure the release height instead, which is why that criterion is a measurement rather than a simulated drop.
  • Adding the URDF loader stalled the development server's dependency pre-bundling until we listed it for pre-bundling explicitly.

What happens next

  • A machine-vision lab: a simulated camera and part detection in Python.
  • A ROS 2 lab driving the same simulated robot through rosbridge.
  • Python and marking on robots imported from URDF, not only the FANUC.
  • Test the VR mode on a Quest headset.

Built with

  • realvirtual WEB 6.4.1 (community) AGPL-3.0
  • three.js MIT
  • React and MUI MIT
  • Pyodide MPL-2.0
  • urdf-loader 0.13.1 Apache-2.0
  • SO-101 arm model (TheRobotStudio SO-ARM100) Apache-2.0
  • FANUC CRX-10iA/L model (realvirtual WEB library) To be confirmed with realvirtual
Cover of the book Gaussian Splatting in 2026
The book behind the lab

Get the book today: learn Gaussian splatting and apply it to real projects.

People keep asking how we build what you see here. The book walks students, educators and practitioners from a drone clip to a measured 3D in the browser, with hands-on labs and the code.

Launch price until 3 December.

Teaching a course (Level 5, Level 6 and up)? Email junaid.malik@simamdigital.com about a class discount.