SO101-Nexus: full-stack robot learning for the SO-101 arm
Beta: APIs may change between releases. Feedback and bug reports are welcome.
Full-stack robot learning for the SO-101 arm: teleoperation, imitation learning, and RL in MuJoCo. One installable library that takes a robot from demonstrations to a trained policy, built on LeRobot and Gymnasium.
pip install so101-nexus
Full documentation: so101-nexus.com/docs.
The workflow
Record, then clone, then reinforce. Each stage hands one artifact to the next.
1. Record. Drive a simulated follower with a physical SO-100 or SO-101 leader arm and save LeRobot v3 datasets.
uvx --from "so101-nexus[teleop]" so101-nexus teleop --leader-port /dev/ttyACM0
2. Clone. Bootstrap a policy from those demonstrations with behavior cloning.
3. Reinforce. Fine-tune with PPO on the GPU-parallel Warp backend, anchored to the demos.
Stages 2 and 3 are one command. No leader arm? It defaults to a published dataset, so this runs end to end on its own:
uv run --extra warp --extra train python examples/bc_ppo_warp.py
See the workflow walkthrough for the full path.
Run an environment
import gymnasium as gym
import so101_nexus.mujoco # registers the MuJoCo env ids
env = gym.make("MuJoCoPickLift-v1", render_mode="rgb_array")
obs, info = env.reset()
for _ in range(256):
obs, reward, terminated, truncated, info = env.step(env.action_space.sample())
if terminated or truncated:
obs, info = env.reset()
env.close()
Six SO-101 manipulation tasks ship on MuJoCo: PickLift, PickAndPlace, StackCube, Touch,
LookAt, and Move. The optional MuJoCo Warp backend (so101-nexus[warp]) registers the same
six as GPU-parallel batched vector environments for large-scale RL. See the
environment reference.
The same environments are published as a
LeRobot EnvHub package, so a LeRobot user
reaches them with one call and no import of their own. The Hub files are shims over this
library, so pip install so101-nexus is still the prerequisite:
from lerobot.envs.factory import make_env
envs = make_env(
"johnsutor/so101-nexus-envs:envs/MuJoCoPickLift-v1.py",
n_envs=4,
trust_remote_code=True,
)
env = envs["MuJoCoPickLift-v1"][0]
Why
Plenty of SO-101 tooling exists, but little of it connects teleoperation, LeRobot datasets, simulated environments, and training loops into one workflow. SO101-Nexus is that connection: collect demonstrations, replay and evaluate them in matching SO-101 environments, bootstrap with imitation learning, then fine-tune with RL.
- Teleoperation recorder with a Gradio UI, writing LeRobot v3 datasets with SO follower state and action units plus wrist and overhead camera fields.
- Gymnasium environments with configurable objects, distractors, colors, spawn regions, rewards, and observation components.
- Training baselines for behavior cloning and PPO, plus LeRobot processors and policy adapters for evaluating real policies.
- Optional GPU-parallel Warp backend (experimental, NVIDIA and CUDA only) for batched RL, and an optional ROCm extra for training on AMD hardware.
Recorded MuJoCo teleoperation datasets are published on Hugging Face: MuJoCoPickLift-v1 (viewer), MuJoCoPickAndPlace-v1 (viewer).
Roadmap
- MuJoCo environments for the SO-101 arm
- SO-101 tasks: Touch, LookAt, Move, PickLift, PickAndPlace, StackCube
- Physical leader-arm teleop recorder for LeRobot datasets
- MuJoCo Warp backend for GPU-parallel throughput
- Stronger training baselines and exemplars for every environment
- Integration with the LeRobot Hub
Development
git clone https://github.com/johnsutor/so101-nexus.git
cd so101-nexus
uv sync
make test # run all tests
make format # format code
make lint # lint code
See CONTRIBUTING.md, and Stability and versioning for the public-API and release policy.
License
This repository's source code is available under the Apache-2.0 License.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file so101_nexus-0.5.1.tar.gz.
File metadata
- Download URL: so101_nexus-0.5.1.tar.gz
- Upload date:
- Size: 16.3 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b39bdb1aac904a5dd671bab13a80e584af51a57c13d5a6d88f6329f194e16b82
|
|
| MD5 |
db4181845f7b8ad2d384fb4a24638300
|
|
| BLAKE2b-256 |
f98d70f265067e4def45408bf16a82735ddf91e6a90078eb7870a0ab327fb1db
|
Provenance
The following attestation bundles were made for so101_nexus-0.5.1.tar.gz:
Publisher:
publish.yml on johnsutor/so101-nexus
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
so101_nexus-0.5.1.tar.gz -
Subject digest:
b39bdb1aac904a5dd671bab13a80e584af51a57c13d5a6d88f6329f194e16b82 - Sigstore transparency entry: 2332910118
- Sigstore integration time:
-
Permalink:
johnsutor/so101-nexus@2ccdc2938ca386a010d2acf362498277f468945a -
Branch / Tag:
refs/tags/0.5.1 - Owner: https://github.com/johnsutor
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@2ccdc2938ca386a010d2acf362498277f468945a -
Trigger Event:
release
-
Statement type:
File details
Details for the file so101_nexus-0.5.1-py3-none-any.whl.
File metadata
- Download URL: so101_nexus-0.5.1-py3-none-any.whl
- Upload date:
- Size: 13.0 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8293b229e8ba716a4ddbbd15bf5426c658a039af89b214821aef546f395dbaa3
|
|
| MD5 |
38f93c5169a66552638cf9333594a46f
|
|
| BLAKE2b-256 |
242fe24f4c9c69cd975dea0fc3a42e7858bcba6cdccd7731e0c29b6a477bd9d6
|
Provenance
The following attestation bundles were made for so101_nexus-0.5.1-py3-none-any.whl:
Publisher:
publish.yml on johnsutor/so101-nexus
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
so101_nexus-0.5.1-py3-none-any.whl -
Subject digest:
8293b229e8ba716a4ddbbd15bf5426c658a039af89b214821aef546f395dbaa3 - Sigstore transparency entry: 2332910133
- Sigstore integration time:
-
Permalink:
johnsutor/so101-nexus@2ccdc2938ca386a010d2acf362498277f468945a -
Branch / Tag:
refs/tags/0.5.1 - Owner: https://github.com/johnsutor
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@2ccdc2938ca386a010d2acf362498277f468945a -
Trigger Event:
release
-
Statement type: