Almond Axol SDK
Command-line interface and Python SDK for the Almond Axol dual-arm robot. CLI invoked as axol <command> [flags].
The browser front-ends live under web/: a VR teleoperation interface (WebXR, hosted at axol.almond.bot), a web control panel that drives the robot from a browser via axol serve, and a diagnostics dashboard for live motor telemetry and health. See web/README.md for the front-end details.
The full documentation is hosted at docs.almond.bot. The sources live under docs/, and the pages below link to them.
New here? See Teleoperation to go from installation to a live session, or the Web Control Panel guide to drive Axol from a browser.
Requirements
- Linux
- Python 3.13+
- (Optional) NVIDIA Jetson (e.g. a ZED Box) — required for the GMSL-attached ZED cameras (data collection / policy inference).
Installation
One-command install (recommended)
One command installs uv, the axol CLI (from PyPI, with every extra), and a root systemd service that keeps axol serve running at boot:
curl https://axol.almond.bot/install -fsS | bash
Then open axol.almond.bot and connect to the machine. The install tracks releases: when a newer release exists, the control panel shows an update banner, and pressing Update reinstalls at the new release and restarts the server once idle.
Development install
Install the package from a clone using uv — every dependency resolves from PyPI (kinematics comes through our published forks, almond-pyroki and almond-jaxls):
uv sync
Then activate the virtual environment so the axol CLI is on your path (or prefix every command with uv run):
source .venv/bin/activate
Install optional dependency groups as needed:
| Extra | Contents | When to use |
|---|---|---|
lerobot |
LeRobot (from PyPI, >= 0.6.1) | collect-data, run-policy |
sim |
viser | teleop --sim |
uv sync --extra lerobot --extra sim # everything
The ZED Python bindings (pyzed) are not on PyPI and must be installed separately after the ZED SDK is installed:
axol zed.install
Streaming the ZED cameras to the headset (teleop --cameras, collect-data) encodes on the Jetson's NVENC via GStreamer and sends over WebRTC with aiortc. The encode path needs the system GStreamer NVENC tools plus the patched ZED source plugins, so it isn't a dependency extra. Install it once (and, on a Jetson, pin the NVENC/VIC clocks for low-latency encode):
axol gst.install
axol gst.build-zed # build the patched ZED source plugins (needs the ZED SDK)
axol jetson.setup # Jetson only; no-op elsewhere
Before using any motor or robot commands, initialize the CAN hardware:
axol can.setup
To drive Axol from a browser instead of the terminal, build the web UI once (it's served by axol serve):
cd web
npm install
npm run build --workspace=packages/axol-vr-client # client package first
npm run build --workspace=app # → web/app/dist
See the installation guide for the full walkthrough.
Sitemap
Get Started
Operations
Each operation can be driven from the web control panel or the CLI:
- Teleoperation — drive the robot live from a VR headset (or in sim)
- Gravity Compensation — hold the arms weightless for hand-guiding
- Data Collection — record teleop episodes to a LeRobot dataset
- Replay Dataset — replay a recorded dataset episode on the robot, once or on a loop
- Run Policy — run a trained policy, local or remote inference
Remote Teleop
- Remote Teleop — drive over the internet by sideloading Tailscale on a Meta Quest
Web Interfaces
- Web Control Panel — drive the robot from a browser via
axol serve - Diagnostics Dashboard — live motor telemetry, health tiles, and diagnostics scripts, served by
axol serve - VR Interface — the in-repo WebXR teleop app (
web/) - Quest over USB — low-latency wired controller transport (poses over a USB
adbtunnel; camera stays on the LAN)
Advanced
- Development install — clone +
uv sync, optional extras, building the web UI
CLI Reference
- Command configuration — draccus config model for
teleop,gravity-comp,waypoints,collect-data,replay-dataset,run-policy,inference-server serve— web control panel + API servercan.setupcan.enablecan.drivermotor.infomotor.healthdiag.rom-enablediag.rom-disablediag.zed-cablemotor.set-can-idmotor.set-zero-posmotor.dump-configmotor.set-configmotor.restore-configmotor.flashteleopcollect-datareplay-datasetrun-policyinference-serverprovisionzed.driverzed.installgst.installgst.build-zedjetson.setuptune.pidtune.frictiontune.repeatabilitygravity-compwaypoints
Python API
- Core Concepts
almond_axol.robot—Axol,Sim, configuration, gravity compensationalmond_axol.kinematicsalmond_axol.teleopalmond_axol.vralmond_axol.zedalmond_axol.motoralmond_axol.lerobot
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file almond_axol-0.1.26.tar.gz.
File metadata
- Download URL: almond_axol-0.1.26.tar.gz
- Upload date:
- Size: 5.7 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f06760a98dce5ad266d1bd125a78d10597e60839c92c82c3e2f113148737c481
|
|
| MD5 |
d632ab90a849686186a749d5650dd617
|
|
| BLAKE2b-256 |
3121b4dfbe7dac95abdf29c9182ba1216c4e01c03f410493b61ffcb23c5577c8
|
Provenance
The following attestation bundles were made for almond_axol-0.1.26.tar.gz:
Publisher:
publish.yml on almond-bot/axol
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
almond_axol-0.1.26.tar.gz -
Subject digest:
f06760a98dce5ad266d1bd125a78d10597e60839c92c82c3e2f113148737c481 - Sigstore transparency entry: 2452547736
- Sigstore integration time:
-
Permalink:
almond-bot/axol@5b722dab2b960eb809e9a0312a59b25425cbf6a7 -
Branch / Tag:
refs/tags/v0.1.26 - Owner: https://github.com/almond-bot
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@5b722dab2b960eb809e9a0312a59b25425cbf6a7 -
Trigger Event:
release
-
Statement type:
File details
Details for the file almond_axol-0.1.26-py3-none-any.whl.
File metadata
- Download URL: almond_axol-0.1.26-py3-none-any.whl
- Upload date:
- Size: 634.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
de61d7a43d64de22a5cb7ec32373fa66116d3c9d07a8db12da6d2000728c33eb
|
|
| MD5 |
eacef997f9138797f4a5b93dac857669
|
|
| BLAKE2b-256 |
42857501f2372a629bc9840f222e418e24e8e20dbc4f560ec300e008bf4aada8
|
Provenance
The following attestation bundles were made for almond_axol-0.1.26-py3-none-any.whl:
Publisher:
publish.yml on almond-bot/axol
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
almond_axol-0.1.26-py3-none-any.whl -
Subject digest:
de61d7a43d64de22a5cb7ec32373fa66116d3c9d07a8db12da6d2000728c33eb - Sigstore transparency entry: 2452547913
- Sigstore integration time:
-
Permalink:
almond-bot/axol@5b722dab2b960eb809e9a0312a59b25425cbf6a7 -
Branch / Tag:
refs/tags/v0.1.26 - Owner: https://github.com/almond-bot
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@5b722dab2b960eb809e9a0312a59b25425cbf6a7 -
Trigger Event:
release
-
Statement type: