axol CLI and starts the web control panel as a background service — so once it finishes you can drive the robot from a browser, no terminal needed.
Working on Axol itself, or running without the install script? See Development install in the Advanced section for the clone +
uv sync path.Requirements
- Linux with systemd (the installer registers a service).
- (Optional) NVIDIA Jetson (e.g. a ZED Box) — required for the GMSL-attached ZED cameras used in data collection and policy inference. The installer runs on any Linux host; the Jetson-specific tuning steps simply no-op elsewhere.
ZED Box login
If you’re setting up a ZED Box from Almond, log in with the default credentials.Install
Run this on the robot machine:- Installs
uvif it isn’t already present. - Installs the
axolCLI from PyPI, pinned to the latest release (Python 3.13 bundled), with thelerobot,sim, andtrackerextras. The reverse-engineered pyvut runtime remains a separate explicit VIVE Ultimate setup step. - Provisions the headset-video stack — the pyzed bindings, GStreamer/PyGObject, and the patched ZED source plugins — via
axol provision. Each step self-gates and no-ops if the ZED SDK isn’t present. - Installs
adband the Quest udev rule (also viaaxol provision) for the optional Quest-over-USB controller link — no extra setup needed on the robot to use it. - On a factory-flashed ZED Box (Duo or Mini), upgrades an outdated GMSL camera driver to the release pinned for the ZED SDK (
zed.driver, also viaaxol provision). The new driver only loads at boot, so the installer prints a reboot-required notice in its summary when it upgrades — reboot when convenient. A no-op on any other machine. - On a Jetson, pins the real-time clocks (
jetson.setup) for low-latency camera encode and a steady IK loop. - Registers a root systemd service (
axol.service) that runsaxol serveat boot and restarts it automatically if it ever goes down. The service is pointed at the installing user’s home for dataset storage (HF_LEROBOT_HOME=~<user>/.cache/huggingface/lerobot), socollect-datadatasets land in that account rather than/rooteven though the service runs as root. The recording commands also hand each dataset back to that user after every episode save, so you never needsudoto read, copy, or upload your own recordings.
The service runs as root, so privileged steps (CAN bring-up, ZED daemon restarts) need no
sudo password.Both the hosted panel and direct CLI runs store datasets under
~/.cache/huggingface/lerobot (or the panel’s Dataset root setting), so recordings made from either are visible in both.Staying up to date
Installs track GitHub releases, not individual commits. The server checks for a newer release in the background; when one exists, the control panel shows an update banner with the installed and latest versions (e.g.v0.1.2 → v0.1.3). Press Update to apply it — the server reinstalls at the new release tag, re-provisions, and restarts once idle. Nothing updates without that button press. Re-running the install command also upgrades to the latest release.
First connection
Open axol.almond.bot on any machine on the same network and enter the robot machine’s IP address. The very first time, your browser will warn about the self-signed certificate — accept it once (the certificate is shared between the control panel and the VR teleop link). See the Web Control Panel guide for the full connect flow. The control panel runscan.setup for you on first connect, so there’s no manual hardware setup on the install path.
Next steps
Teleoperation
Drive the robot from a VR headset.
Web Control Panel
The browser UI that drives every operation.
