<angle brackets> vary.
Install and authentication
ValueError: No API key found!
ValueError: No API key found!
Cyberwave() was created without api_key= and CYBERWAVE_API_KEY is not set in this process. The SDK does not read the credentials that cyberwave login stores for the CLI.Fix. Create a token under Profile → Access (API tokens) and export it in the same shell that runs your script:Cyberwave(api_key=...), and keep it out of committed code.CyberwaveAPIError: Authentication failed (HTTP 401)
CyberwaveAPIError: Authentication failed (HTTP 401)
CYBERWAVE_BASE_URL points at a different server.Fix. Create a new token under Profile → Access and export it again. Check for stray quotes or spaces. Unset CYBERWAVE_BASE_URL unless you run your own instance.400 workspace_required
400 workspace_required
CyberwaveAPIError with (HTTP 400) whose response body contains workspace_required and lists the workspaces your token can reach.Cause. Your token is scoped to more than one workspace and the request doesn’t say which one it means. Tokens scoped to exactly one workspace never hit this.Fix. Pick a workspace UUID from the list in the error and set it once:Cyberwave(workspace_id="..."). You can also narrow the token’s scope to one workspace with Edit scope. See API tokens.ModuleNotFoundError: No module named 'cv2' (or other missing extras)
ModuleNotFoundError: No module named 'cv2' (or other missing extras)
pip install cyberwave installs the core SDK only. Cameras, video and local models need optional extras.Fix. Install the extra you need. Quote it, because zsh expands square brackets:camera extra installs opencv-python-headless, which has no GUI support. If your own code opens windows with cv2.imshow, install opencv-python as well.cyberwave: command not found
cyberwave: command not found
cyberwave command ships in a separate package. pip install cyberwave installs only the Python SDK.Fix.CyberwaveError: Asset '<key>' not found
CyberwaveError: Asset '<key>' not found
cw.twin("<vendor>/<model>") could not find that catalog entry.Fix. Check the exact identifier in the catalog, or search from Python with cw.assets.search("so101"). To open a twin that already exists, use cw.twins.get("<workspace>/twins/<name>") or its UUID instead.Simulation and runtime mode
WARNING: affect('mujoco') selected a MuJoCo simulation runtime, but no environment is set
WARNING: affect('mujoco') selected a MuJoCo simulation runtime, but no environment is set
cw.affect("simulation") (or "sim", "mujoco") was called before the client knew its environment. Usually affect() ran before the first cw.twin(...), which is what picks or creates the environment. The runtime mode is still set, but no simulation is running.Fix. Create the twin first, then call affect():environment_id= to affect(), or set CYBERWAVE_ENVIRONMENT_ID. If you only need to move joints, use cw.affect("playground"): it is free and needs no simulation instance. MuJoCo simulations use credits.SimulationNotRunningError: No running simulation for environment <id>
SimulationNotRunningError: No running simulation for environment <id>
(currently 'loading' — not ready yet; wait for it with sim.wait_until_active()).Cause. You are in a simulation runtime ("playground" counts) and called a method that needs a running MuJoCo simulation: camera frames (get_frame, get_frames, get_video, streaming), depth, or point clouds. The Playground does not render sensors. Getters never start a simulation on their own.Fix. Pick one:- Start MuJoCo (billable):
cw.affect("simulation")after creating your twins, orcw.environments.simulations.start(...). If it reportsloading, callsim.wait_until_active(). - Read a real camera instead:
cw.affect("live")with a paired camera, or OpenCV on a local webcam as in Your first AI loop.
get_frame(mock=True) does not avoid this error in simulation mode, because the check runs first.If a Playground simulation is running instead of MuJoCo, you get SimulationLevelError: <method> requires a MuJoCo simulation; the running backend is 'playground'. The fix is the same.NotSimulatedError: <method> is not supported in simulation mode.
NotSimulatedError: <method> is not supported in simulation mode.
twin.commands.<name>()) that neither the SDK nor the twin’s controller marks as Playground-capable.Fix. Run that part against the real robot with cw.affect("live") and a paired edge device. Keep simulation for joints, motion and camera frames.ValueError: Frame source 'local' is not available in simulation runtime mode
ValueError: Frame source 'local' is not available in simulation runtime mode
get_frame() only reads frames from the cloud (the running simulation). local, zenoh and remote_edge are live-only sources.Fix. Drop the source= argument in simulation, or switch to cw.affect("live") to read a local or edge camera.Controlling robots
WARNING: controller policy was just attached. This command may have been lost
WARNING: controller policy was just attached. This command may have been lost
CyberwaveError: Cannot send motion commands without an attached teleop controller policy.
CyberwaveError: Cannot send motion commands without an attached teleop controller policy.
CYBERWAVE_SDK_AUTO_ATTACH_CONTROLLER=0), or the workspace has no suitable policy. In the second case you first see:CYBERWAVE_SDK_AUTO_ATTACH_CONTROLLER if you did not mean to disable auto-attach. See Controllers.Commands succeed but nothing moves
Commands succeed but nothing moves
- You are in live mode with no robot connected. Live is the default when you never call
cw.affect(...). Commands go out to the real robot’s edge device. If nothing is paired, nothing receives them. The SDK doesn’t check for a paired edge before sending live commands, so it won’t tell you. - Wrong units. Joint positions are radians by default.
joints.set("shoulder_pan", 30)asks for 30 rad. Passdegrees=Truefor degrees. - You are watching another environment. With no environment set,
cw.twin(...)uses the “Quickstart Environment” and prints its link. Open that link.
cw.affect("playground") after cw.twin(...). For hardware, pair the robot first (sudo cyberwave pair, see Connect hardware) and check the twin shows as connected in the environment editor.ValueError: Unknown joint name(s)
ValueError: Unknown joint name(s)
Controllable list, or print them with robot.joints.list().DeprecationWarning: joints.get_all() / capture_frame() is deprecated
DeprecationWarning: joints.get_all() / capture_frame() is deprecated
robot.joints.get(), which returns a live dict of joint positions in radians. Use camera.get_frame() or get_frames(). Only twins with a camera have these methods.CLI and edge devices
This command requires root privileges (cyberwave pair on Linux)
This command requires root privileges (cyberwave pair on Linux)
cyberwave pair (an alias for cyberwave edge install) installs the edge runtime and registers a systemd service, which needs root.Fix.Still stuck?
Ask in the community or open an issue from the Support page. Include the full error, your SDK version (pip show cyberwave), and the smallest script that reproduces it. Remove your API key first.