.local) and local IP address are printed — enter either of these in the VR app at axol.almond.bot to connect.
Runs on the real robot by default; pass --sim for the browser visualizer. The full robot config is exposed via draccus, so every gain, stiffness, and gripper limit is reachable from the CLI or a config file — see Command configuration.
Network tip: If VR tracking feels jittery or packets arrive in bursts, configure the following on your router/access point:
- DTIM interval →
1 - Beacon interval →
100ms - WMM APSD (U-APSD) → disabled
| Flag | Description |
|---|---|
--sim | Use the software visualizer instead of the real robot. Bare --sim works (or --sim true). Omit to run on real hardware (the default). |
--left_channel <ch|null> | CAN channel for the left arm; null disables it. Default: CAN_LEFT. |
--right_channel <ch|null> | CAN channel for the right arm; null disables it. Default: CAN_RIGHT. |
--axol.left_stiffness S | Compliance↔stiffness blend for the left arm in [0, 1]. Scalar (0.8) or a 7-element list ([0.8,0.8,0.5,0.5,0.2,0.2,0.0], one per arm joint in Joint enum order). 0 = fully compliant; 1 = pre-tuning industrial gains; 0.5 (default) is the geometric mean. See AxolConfig.left_stiffness. |
--axol.right_stiffness S | Same, for the right arm. |
--axol.left.gripper.torque_limit FLOAT | Max torque (Nm) for the left gripper in POSITION_FORCE mode (default: 0.5). Use right for the right gripper. |
--axol.<side>.<joint>.<gain> VALUE | Override any per-joint gain, e.g. --axol.left.elbow.kp 60. <side> is left/right; <joint> is shoulder_1…wrist_3; <gain> is kp/kd/etc. |
--teleop.position_multiplier FLOAT | Scale factor on hand position (not orientation): the end-effector target moves this many times as far as your hand. 1.0 (default) is 1:1; 2.0 moves the arm twice as far, helping cover the robot’s full reach when the arm is longer than the operator’s. |
--teleop.rotation_multiplier FLOAT | Scale factor on hand orientation (not position): the end-effector rotates this many times as far as your wrist. 1.0 (default) is 1:1; 2.0 rotates the arm twice as far. |
--zed_host IP | ZED box address. When set, teleop also relays its camera streams to the headset over WebRTC (overhead + wrist views, switched with the right thumbstick). The cameras must already be streaming (zed.stream or a connected ZED box in the control panel) and the video extra installed locally. Default: null (no headset video). |
--zed_cameras [a,b,c] | Which camera slots to receive from the ZED box: any of overhead, left_arm, right_arm (default: all three). Slots that aren’t streaming are skipped. |
--overhead_stereo | The overhead is a stereo ZED X: both eyes are relayed as overhead_left / overhead_right and rendered per-lens in the headset for true stereo. Match the --overhead-stereo flag passed to zed.stream. |
--log_level {DEBUG,INFO,WARNING,ERROR} | Default: INFO |
--config_path PATH | Load a whole-config JSON/YAML file; CLI overrides layer on top. See Command configuration. |
Camera streaming to the headset
With--zed_host set, teleop connects to the ZED box’s camera streams and relays them to the headset over WebRTC, so the operator sees the robot’s cameras instead of (or alongside) passthrough. The right thumbstick switches views — see the VR Interface guide for the view system and controls. Requires the video extra (uv sync --extra video) on the teleop host.
This command takes its config via draccus, not fixed
argparse flags. Field names use underscores, nested fields are dot-separated, None is null, and lists use [a,b,c] — see Command configuration for the full model.