None of these paths depends on the others. The same twin, code and workflows carry across all three.
Write the code yourself
Control a simulated SO-101 arm with the Python SDK in the free Playground. No hardware is involved.1
Install the SDK
pip install cyberwave-cli when you need pairing, drivers or edge commands. It is not needed here.2
Set your API key
Create a key under Profile → Access, scoped to one workspace. See Account and API keys.If the key covers more than one workspace, also set
CYBERWAVE_WORKSPACE_ID. Otherwise requests fail with 400 workspace_required.3
Move a joint
Save as The SDK prints a link to the environment. Open it to watch the arm move.
quickstart.py and run python quickstart.py:You see the joint names and their positions. A one-time warning that a command “may have been lost” is expected while the controller attaches; the
sleep(2) covers it.What each line does
What each line does
Cyberwave()authenticates and opens the REST and MQTT connections.cw.twin("vendor/model")resolves the catalog asset and returns a twin. Without an environment, the SDK creates a Quickstart Environment and prints its URL. Create the twin beforecw.affect(...).cw.affect("playground")sends commands to the free browser simulation."simulation"starts MuJoCo, which is billable (credits) and needed for physics and camera frames."live"sends the same commands to a paired robot.policy.ensure_attached()attaches a controller. Exactly one controller drives a twin at a time.joints.set(..., degrees=True)sends a real-time joint target. Positions default to radians.
Try a few more things
Try a few more things
get_frame() raises SimulationNotRunningError.Troubleshooting
Troubleshooting
- No API key found: export
CYBERWAVE_API_KEYin the same terminal that runs the script. 400 workspace_required: setCYBERWAVE_WORKSPACE_ID, or passCyberwave(workspace_id=...).- Asset not found: check the
vendor/modelID in the catalog, or runcw.assets.search("so101"). - Python errors: the SDK needs Python 3.10+. Use a virtual environment:
python -m venv .venv && source .venv/bin/activate.
Try a real robot
Control a physical SO-101 arm in the Cyberwave lab from your browser, with its wrist camera streaming live. On the dashboard, select Try a Real Robot.Remote lab
The walkthrough, what’s connected and what you can do with it.
Connect your own robot
Pair your robot through an edge computer running Cyberwave Edge Core. Your twin, code and workflows stay the same; only the affect mode changes, fromcw.affect("simulation") to cw.affect("live").
How hardware works
One twin model for arms, quadrupeds, drones and cameras.
Supported hardware
Find your robot, then follow its setup guide.