Teleop and hardware
Drive and record a real arm from Studio, locally or remotely, and run hardware diagnostics.
The teleop bridge is a small program you run on the computer a robot arm is plugged into. It connects the arm to the Studio Teleop panel, records demonstration episodes as LeRobot datasets, and runs hardware checks. Supported arms:
- SO-100 / SO-101 (with a leader arm, or a synthetic or web-driven leader)
- myCobot 280 (driven by manual jog from Studio, a synthetic sweep, or an SO-100 leader)
You can also run the bridge against a simulated arm (--robot without a --follower) to try
Studio without hardware.
Install
pip install "botmanifold[bridge]"This installs the bridge with MuJoCo, LeRobot and the arm drivers. Setup guides for each arm
(serial ports, permissions, calibration) are in the repository under docs/guides:
bridge-so100-setup.md and bridge-mycobot280-setup.md.
Drive an arm from Studio
botmanifold bridge serve --robot mycobot_280 --follower mycobot280 --leader webserve prints a pairing token. In Studio, open Teleop, choose local and paste the
token. A few things work differently from a normal web app, on purpose, because the browser is
an untrusted surface for something that moves metal:
- Taking control needs a confirmation at the bridge terminal (
cthen Enter). A valid token alone is not enough to move the arm. - Manual jog (
--leader web) needs a second local confirmation (jthen Enter). - Pairing tokens start new connections for 15 minutes. A browser that already paired
reconnects by itself. Press
pthen Enter in the bridge terminal, or runbotmanifold bridge pair <session-dir>, for a fresh token.
E-stop
The e-stop is latched. Any connected browser, the panel button or a driver fault trips it and
torque stays off until someone resumes locally (r then Enter in the bridge terminal, or
botmanifold bridge resume <session-dir>). Resume is never a command from the browser. Clear
the workspace before resuming.
Remote use
To let someone on another network operate the arm without opening a port on your machine, start the bridge with the relay:
export BOTMANIFOLD_API_KEY=bm_...
botmanifold bridge serve --robot mycobot_280 --follower mycobot280 --relayThe bridge prints a remote id next to the pairing token. The remote user opens Studio → Teleop, chooses remote, and enters the remote id and the token (they must be signed in to BotManifold). Someone still has to be at the arm for the local confirmations above. Your API key is exchanged at the API for a short-lived relay token and never reaches the relay. The relay carries the traffic, including the pairing token, between your bridge and the browser.
Record episodes
botmanifold bridge teleop records a headless episode; recording from Studio saves into the
session folder. Upload a session to your datasets with botmanifold bridge upload <session-dir>,
and see it under Datasets.
To record cameras with every frame, add --camera name=device (for example --camera front=0)
to teleop or serve; the frames are stored as video in the dataset.
Hardware diagnostics (myCobot 280)
The Teleop panel has a Diagnostics tab that checks a myCobot 280 the way the manufacturer's
production test does, from the browser: servo communication and voltage, firmware versions, servo
parameters, button and LED, end and base I/O loopback, the gripper, and motion tests with
per-joint target-versus-actual results. Checks that only read run straight away. Checks that
move the arm, write servo settings or run long tests need the session to be armed once
locally (d then Enter, or botmanifold bridge confirm-diagnostics <session-dir>). A report can
be downloaded as CSV or JSON.
Some checks need a person (LED colors, visual checklists) and take a pass or fail click. Checks for the Raspberry Pi and Jetson variants and firmware flashing are not available yet.