Skip to main content

zeroruntime-teleops

Drive any robot over the internet, and know exactly what the operator was looking at when they moved it.

A WebRTC transport for robot teleoperation, with frame-accurate observation/action correlation, a safety envelope that cannot be bypassed, and a recorder that turns every session into training data.

Torq architecture: physical robots behind follower adapters, a VideoSDK room carrying synced action and video, and leader adapters in front of a human operator, VR headset, simulation or AI agent


Install

pip install zeroruntime-teleops               # transport + cameras, ready to run
pip install "zeroruntime-teleops[lerobot]"    # + the lerobot adapters

Your robot, in three methods

Everything else is inherited: lease negotiation, clamping, the watchdog, the e-stop latch, correlation, recording.

from zeroruntime.teleops import Follower, SafetyConfig, single_group_descriptor

class MyArm(Follower):
    def descriptor(self):            return single_group_descriptor(...)
    def read_joints(self):           return {"shoulder": 12.4, "elbow": -3.1}
    def write_joints(self, joints):  ...        # RAISE on failure

MyArm("abcd-efgh-ijkl", safety=SafetyConfig(slew=0.75)).run(hz=200)

Already on lerobot? Wrap the device instead of subclassing:

from zeroruntime.teleops.adapters.lerobot import (SO101FollowerAdapter,
                                              SO101LeaderAdapter)

follower = SO101FollowerAdapter("abcd-efgh-ijkl", robot=arm, token=TOKEN)

Run it locally, no robot needed

Runnable examples live in zrt-teleops-examples:

git clone https://github.com/ZeroRuntimeAI/zrt-teleops-examples
cd zrt-teleops-examples

python quickstart/remote_teleop.py --ticks 100   # full chain, in-process
python quickstart/my_arm.py                      # port your own arm
python quickstart/protocol_demo.py               # the correlation model, live

remote_teleop.py runs a real follower against a real leader: real gates, real clamps, real correlation. Only the network is swapped for a loopback.

Safety

SafetyConfig(
    slew=0.75,                          # max change per joint per TICK:
                                        # at the default 200 Hz that is
                                        # 150 units/s, a full sweep in ~1.3 s
    watchdog_timeout_s=0.5,             # silence for this long -> failsafe
    max_staleness_ms=100.0,             # older commands are dropped
    require_deadman=True,
    on_starvation=FailsafeAction.HOLD,
    resume_requires_reclaim=False)

Every command is checked before it reaches the motors: who sent it, whether it arrived too late, and how far it moves the arm. If the operator stops sending, the arm holds where it is.

Recording

follower.start_recording("./sessions")
follower.start_episode("pick up the cube")
...                                          # your loop runs
follower.end_episode(success=True)
follower.stop_recording()

On the follower this captures pixels before an encoder or a network touched them. Episodes open and close on the deadman by default.

VideoSDK can also record the session in the cloud:

follower = MyArm("abcd-efgh-ijkl", cloud_recording=True)

follower.cloud_recording_state    # idle / requested / starting / ready / failed

If the cloud recorder never comes up, recording carries on locally and the state says so.


Documentation

Full documentation at docs.zeroruntime.ai.


Apache-2.0 · docs.zeroruntime.ai · examples

Release files for zeroruntime-teleops 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distributions (wheels)

Table of built distributions (wheels) for zeroruntime-teleops 0.1.1
File Interpreter ABI Platform
zeroruntime_teleops-0.1.1-py3-none-manylinux_2_34_x86_64.whl Python 3 none Linux glibc 2.34+ x86-64 Details
zeroruntime_teleops-0.1.1-py3-none-manylinux_2_34_aarch64.whl Python 3 none Linux glibc 2.34+ ARM64 Details
zeroruntime_teleops-0.1.1-py3-none-macosx_11_0_arm64.whl Python 3 none macOS 11.0+ ARM64 Details

Total release size: 24.9 MB

Release files / zeroruntime_teleops-0.1.1-py3-none-manylinux_2_34_x86_64.whl

Download URL zeroruntime_teleops-0.1.1-py3-none-manylinux_2_34_x86_64.whl
Size 9.7 MB
Tags Linux glibc 2.34+ x86-64 Python 3
SHA-256 checksum
How to use checksums
c79f5a470e392f47da0157c03ecc4734511f2d300c09eee70da693cb0f313e31
BLAKE2b-256 checksum
How to use checksums
296229efec95aef41ece0fa13b6f6bb872074cbe912e14e6fdbf5bd71655014f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.12

Release files / zeroruntime_teleops-0.1.1-py3-none-manylinux_2_34_aarch64.whl

Download URL zeroruntime_teleops-0.1.1-py3-none-manylinux_2_34_aarch64.whl
Size 9.4 MB
Tags Linux glibc 2.34+ ARM64 Python 3
SHA-256 checksum
How to use checksums
91587a9b907bd8527c590c423b5c51fb2794085d79d46a46202ceace32a13cb1
BLAKE2b-256 checksum
How to use checksums
a77d8a31d1b0beba90aad0318d2c6c4a23602b402cc86246d799cd24722fc4ea
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.12

Release files / zeroruntime_teleops-0.1.1-py3-none-macosx_11_0_arm64.whl

Download URL zeroruntime_teleops-0.1.1-py3-none-macosx_11_0_arm64.whl
Size 5.8 MB
Tags Python 3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
68f8e7aeac5ad2674fa79375477151838cbb4ce8a900aaeeb5b8a358c451125c
BLAKE2b-256 checksum
How to use checksums
572ea10c071b6e13602a063964047e8b42a7ed8129b3ee07cebbbb3af63f16f7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.12

Release history Release notifications | RSS feed

This release

0.1.1 This release

3 release files

0.1.0

3 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page