Skip to main content
You have built a scene and moved a robot with an agent. Pick what you want to do next. 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

Add the CLI with 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 quickstart.py and run python quickstart.py:
The SDK prints a link to the environment. Open it to watch the arm move.
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.
  • 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 before cw.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.
Camera frames need a running MuJoCo simulation or a paired camera. In the Playground, get_frame() raises SimulationNotRunningError.
  • No API key found: export CYBERWAVE_API_KEY in the same terminal that runs the script.
  • 400 workspace_required: set CYBERWAVE_WORKSPACE_ID, or pass Cyberwave(workspace_id=...).
  • Asset not found: check the vendor/model ID in the catalog, or run cw.assets.search("so101").
  • Python errors: the SDK needs Python 3.10+. Use a virtual environment: python -m venv .venv && source .venv/bin/activate.
More errors with exact messages: Troubleshooting.
Next: Your first AI loop adds a perception model. A laptop webcam spots a cup or a bottle, and the SO-101 twin picks and sorts it. Full API: Python SDK reference.

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, from cw.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.