Ajay Ummadi › Projects › SO-101 Teleoperation Studio: Web Dashboard & 3D Digital Twin for LeRobot

Featured project

SO-101 Teleoperation Studio

A local web app that runs, monitors and visualizes teleoperation of two SO-101 robot arms: a hand-held leader arm controls a follower arm in real time. It sits on top of the open-source LeRobot library, talks to real hardware, and includes a 3D digital twin of both arms built from the official CAD.

Python (stdlib only)LeRobotFeetech STS3215Three.jsVanilla JS

Screenshots from the app running in its idle simulation mode, with no hardware connected. Tap one to enlarge.

~3,500lines across 5 files
11backend endpoints
5app pages
16mesh files (~18 MB)
🎮

Live teleoperation

Start and stop the 60 Hz leader-to-follower loop from the browser, with an emergency stop on Esc.

📊

Live telemetry

Loop time, rate, uptime and tracking error, with per-joint bars and history graphs for leader, commanded and actual positions.

⏺️

Recording and calibration

One-click CSV capture at about 30 Hz, plus a calibration manager that never overwrites a working calibration by accident.

🛡️

Safety

A per-frame step limit for gentler starts, and hardware errors shown in the UI.

🧊

3D digital twin

Teal leader and white follower arms driven by live joint data, with soft shadows, glossy servos, animated wires, split and ghost-overlay views and camera presets.

📷

Modelled from my setup

Red C-clamps, the driver board and the handwritten port labels were placed from measurements of the loaded meshes, not guessed.

Engineering highlights

Mirrored-arm bug

Leader and follower CAD used different base orientations, so the same joint reading turned them in opposite directions. I found it by measuring joint positions in the running 3D scene, then aligned both arms to a shared frame and added an automatic joint-direction check.

Realistic rendering

STL files only carry flat normals, so the loader smooths shallow edges and keeps sharp creases, and lighting comes from a procedural studio environment map.

Real-hardware debugging

Resolved a missing motor SDK, a calibration mismatch, and two programs competing for one serial port.

My role: I set the product direction, supplied the real arms and photos, tested everything on my own hardware, and designed and expanded the front-end UI (the "Teleoperation Cockpit" redesign).

Credits: LeRobot by Hugging Face (Apache-2.0); this project is a separate add-on, not part of or endorsed by LeRobot. SO-101 design, URDFs and STL meshes from TheRobotStudio/SO-ARM100 (Apache-2.0). Three.js (MIT).

Demo video

Dashboard for LeRobot with 3D view

The dashboard running with the 3D digital twin of the SO-101 arm. Watch on YouTube →

FAQ

Questions

What is the SO-101 Teleoperation Studio?

A local web app that runs, monitors and visualizes teleoperation of two SO-101 robot arms. A hand-held leader arm controls a follower arm in real time, and a 3D digital twin mirrors both arms from live joint data.

What does it run on?

The backend is Python standard library only and uses LeRobot's SO101Follower and SO101Leader classes for Feetech STS3215 bus servos. The frontend is plain JavaScript with Three.js for the 3D twin.

Is it part of LeRobot?

No. It is a separate add-on built on the open-source LeRobot library and is not endorsed by LeRobot or Hugging Face.

Who built it?

Ajay Ummadi of MakerWorks Lab set the product direction, tested on real hardware and designed the front-end UI.