axol serve.
From top to bottom, the page has:
- Connection tiles for the robot’s computer, Axol, Mantis and Jelly.
- The Settings card.
- The operation panel, where you pick an operation and press Start.
- The Logs console.
Open the control panel
With the one-command install, the server already runs on the robot’s computer (the one wired to the arms, with the ZED cameras attached). It starts at boot and restarts if it stops. Open axol.almond.bot and connect to the host. On a development install, start the server yourself:/control, and it works on a phone or tablet too.
On a development install, build the local UI once (
cd web && npm install, then npm run build for the axol-vr-client and app workspaces). Or skip the build and use the hosted UI at axol.almond.bot, which connects to your axol serve. See Development install.Connections
The top of the page has four tiles: Axol Host, Axol, Mantis and Jelly. Each has a status dot. Click a tile’s title to open its settings. The Axol Host tile opens the general settings. Choose the device. Every operation runs on either Axol or Mantis. The chosen tile shows selected, and the other shows Select.- With Mantis selected, only Teleoperation and Collect data are offered.
- The choice is saved on the host, so every browser sees the same one.
- You can’t change it while an operation is running.
- If only one of Axol or Mantis is plugged in, the panel selects it for you.
Axol Host
The Axol Host is the computer runningaxol serve. Press Connect on its tile and enter the host’s IP address (port 8001 is assumed). Click the field to pick from the last five hosts this browser connected to. If the host doesn’t answer within a few seconds, the dialog says it can’t reach the host.
Once connected, the tile shows the host’s name and its installed version (for example axol v0.1.2). Teleoperation and gravity compensation need nothing else.
The connected tile has three buttons:
Restart and Shut down wait until no operation is running and no update is installing. On a development install they need passwordless
sudo, or the host reports that it couldn’t restart and stays up.
Updates
When a newer release is available, a banner above the tiles shows the version change and links to the release notes. Nothing updates until you press Update.- Stop any running operation. Update is disabled while one runs.
- Press Update. The button shows each step:
Upgrading…,Installing packages…,Restarting…orRebooting host…. - Wait for the panel to reconnect on the new release. Some updates reboot the host.
/var/log/almond-axol/ on the host.
The banner also warns when the panel and the host run different versions. This happens with an old browser tab or an outdated local UI build. Update the host, or rebuild the local UI.
Axol version
Axol comes in several versions with the same arms. The version tells Axol where its mount is, so the arms don’t hit it, and sets the joint limits. When Jelly is attached, Axol uses Axol on Jelly automatically. This applies while Jelly’s wheel or lift adapter is plugged in and not switched off under Jelly settings → Wheels & lift. Otherwise, pick what Axol is mounted on under Mount at the top of Axol settings → Robot, then press Save:
You can preview any card by hovering it. You can pick one only while Axol is connected.
Until a version is saved, the main page shows a What is Axol mounted on? card, and runs that drive the arms list Choose what Axol is mounted on under Before you can start. Sim runs and runs with the arms off don’t need it.
On Axol on Jelly with the parcel gripper (Gripper in Axol settings → Robot), the panel uses the parcel gripper’s model. To force a version, set
kinematics.robot_model under General settings → Advanced → Kinematics, or pass --kinematics.robot_model on the CLI.
Axol and Mantis
The panel finds the CAN adapters plugged into the host and connects the selected device automatically. On a new hub, it first identifies each adapter (Axol arm, Mantis rig, Jelly wheels or Jelly lift) and names it, the same wayaxol can.setup does.
If the automatic connection fails twice, press Connect on the tile. After you press Disconnect, the panel doesn’t reconnect that hardware automatically until you press Connect or change the selection.
If an adapter isn’t identified. This happens when the hardware was off while the server started. Power on the hardware, then press Connect or Retry CAN identification. If that still fails, run axol can.setup in a terminal.
To change which CAN interface each side uses, go to Axol settings → Robot or Mantis settings → CAN.
Motor status. While no operation runs, the panel checks every motor once a second: all 16 Axol motors, or the two Mantis grippers. Each motor is a square on the tile. Hover a square to see its status and temperature.
If motor power is cut. If you cut motor power during a run, for example at the power supply, the run stops with
motor power lost. Usually the panel then releases the robot without any action from you. If a motor still answers with torque on, the panel shows Re-check motors. Cut motor power, then press it.
Mantis. Press Select on the Mantis tile. See Mantis Hardware for the rigs and hub.
- Teleoperation drives the grippers from the rig triggers. It needs only CAN, with no tracking.
- Collect data uses the pose source set under Mantis settings → Tracking. See Mantis Tracking.
- Mantis can’t run Run policy or Collect DAgger.
Jelly
The Jelly tile has a row each for the wheels and the lift, each with a connect button. Jelly is driven together with Axol, so it isn’t part of the device choice. While the lift is connected, the tile shows the battery charge and pack voltage. The icon is green above 25%, amber at 25% and below, red at 10% and below, and blue while charging.- A reading with
~(for example~40%) was measured while Jelly was moving, so it reads low. - While an operation uses the bus, the last reading stays dimmed. Hover it to see its age.
- The figure is a rough range, not an exact gauge. For an exact charge, use the batteries’ LiTime Bluetooth app.
Jelly.battery returns the same estimate.
Settings
Settings that apply to every run live in the Settings card below the tiles. Switch between Axol, Mantis, Jelly and General in the card header, or click a tile’s title. Axol settings
Contact stops. The Return-to-rest contact stop is always on: it stops a return to rest that runs into something and leaves the arms limp. The Teleop contact stop and Policy contact stop are off by default. Turn one on to stop the arms and leave them limp when they push on something during teleop or a policy run. Raise a threshold if normal motion trips it.
Axol arms. Turn it off to drive only Jelly from the headset. Axol doesn’t need to be connected then.
Mantis settings
Jelly settings
General settings
Recording fps above 60 raises the cameras’ capture rate to match. The ZED X supports rates above 60 only at
SVGA.
Saving. Changes stay in your browser until you press Save (or Discard). Settings are saved on the host in ~/.almond/settings.json, so every operation and every browser uses the same values. The axol CLI and the SDK read the same file. A field you haven’t set shows its default in grey, and a changed field has a reset button.
Export and Import at the bottom of the card save the whole settings file as JSON, or load one. Use them for backups or to copy settings to another robot. The Settings File page describes the file. Each operation’s Config Parameters page, such as Teleoperation, lists every setting with its default.
Cameras
Data collection and policies need ZED cameras on the host. Assign Axol’s cameras under Axol settings → Cameras (overhead, left arm, right arm). Assign Mantis cameras under Mantis settings → Cameras (Head, Left Mantis, Right Mantis). The two layouts are saved separately. Each panel lists the cameras plugged into the host, with serial number, type (stereo ZED X or mono ZED X One), model and a preview frame. Use the preview to tell which camera is which.- Press Refresh to list the cameras again and update the previews.
- Press Restart camera service after you plug in or unplug a GMSL camera.
- Previews aren’t available while an operation is using the cameras.
Each output has a resolution setting (
SVGA, HD1080 or HD1200) or Off. Each camera has separate Stream and Record switches. A stereo camera has L and R checkboxes for each eye instead. This lets you, for example, stream both eyes of the overhead camera for depth and record only one.
A stereo overhead camera with both eyes recorded is saved as two cameras, overhead_left and overhead_right. A single eye is saved under the slot name, like a mono camera.
What each operation needs.
- Collect data, Run policy and Collect DAgger need at least one camera with Record on. A camera set to stream only doesn’t count.
- They also check that every assigned camera is plugged in, and name any missing serial. Reconnect it, then press Refresh (or Restart camera service).
- Teleoperation streams whatever is set up and is never blocked by cameras.
Quest USB
The Quest tab under General settings runs the optional Quest over USB link. It sends the controller poses over a USB cable for lower latency. Camera video still uses the network.- Plug the Quest into the robot’s computer with a USB-C cable.
- The first time, put the headset on and accept Allow USB debugging?.
- The link connects automatically and shows Controller over USB. Press Connect to retry if it doesn’t.
Operations
Pick an operation from the selector, fill in its fields, and press Start. The panel asks only for values that change between runs, such as a dataset name or a policy path. Everything else is in Settings.- Hover the ⓘ next to a field for its description.
- Some fields offer a list to pick from, such as the datasets on the host. You can still type your own value.
- A few fields accept only values from their list. Start stays disabled with Pick <field> from the list until you pick one.
- Your browser remembers these values for next time.
Recordings go to the Dataset root setting. By default this is
~/.cache/huggingface/lerobot of the account that ran the installer, so the panel and the CLI see the same datasets.Waypoints
- Start Waypoints. The arms go into gravity compensation.
- Move the arms by hand and press Record waypoint at each pose. Use Undo last, Clear all and the gripper buttons as needed.
- Once you have two or more waypoints, press Play to replay the path as straight-line moves. Stop playback stops it.
waypoints.
Before you can start
Start stays disabled until the operation has what it needs. A Before you can start list says what is missing, for example:- Connect Axol
- Choose what Axol is mounted on (see Axol version)
- Fix motor fault, followed by the motor and the fault
- Assign a camera and enable Record in Axol settings → Cameras
- Identify left + right Lighthouse trackers
Logs and stopping
The Logs console at the bottom shows the running operation’s output, including messages from the ZED SDK, GStreamer and CUDA. When a camera fails, the reason appears here.- The console follows new lines while you are scrolled to the bottom. Scroll up to read, and press the arrow button to jump back.
- The download button saves the console to a
.logfile to attach to a bug report.
Operator view
During Teleoperation, Collect data and Collect DAgger, the panel shows the same camera feeds as the headset. You can watch the robot’s view without wearing the headset. The camera layout decides what streams. Sim runs and runs with Axol arms off show no feeds. Press the fullscreen button on the camera feeds to fill the screen. Press Esc or Exit fullscreen to leave. If the feeds never connect, press Authorize to accept the stream’s self-signed certificate, the same one-time step as in the VR app.Episode controls
While Collect data, Run policy or Collect DAgger runs, an Episode control box appears in the operation card. It shows the phase (Ready, Recording, Saving, Resetting and so on), the episode number and the number saved. Every connected browser sees the same state. To end the whole session, press Stop. Some operations also show a setup card with an instruction, a list of items and a layout grid, for example the scene to set up next. Hide setup and Show setup fold it away. Run policy and Collect DAgger
These match the
s and r keys and the Enter prompts of run-policy. To correct a policy from VR in Collect DAgger, see Intervening.
Collect data
If a take ends without being saved, the box shows the reason in red until the next take starts.
With Axol or Mantis on Quest, the VR controllers also work, and whichever input comes first wins. With Mantis on Lighthouse or Ultimate, no headset is needed:
- Squeeze and release both rig triggers together to engage tracking and start a take. Start recording works only after the rig is engaged.
- While recording, press either trigger three times to save, or four times to discard.
Dataset preview
The Dataset preview card appears below the operation panel for Collect data, Collect DAgger and Run policy. Press Show, then pick a dataset and an episode. All of the episode’s cameras play side by side with one play button and scrub bar. The menu next to the scrub bar sets the playback rate: 15 fps (the default), 30 fps or the full recorded rate. Full rate with four cameras needs about 85 Mbps, more than most Wi-Fi or Tailscale links carry. Nothing downloads until you press play. Rename a task. Type the new task text, or pick one of the dataset’s tasks, and press Save task. The change is written into the dataset, so replay and training see the new text. During a recording session, the card follows the dataset being recorded and selects each take once it is saved. You can review earlier takes and fix a mistyped task without stopping the session.Next steps
Diagnostics dashboard
Live motor telemetry, health tiles and diagnostic scripts on the
/diagnostics page.serve reference
Flags, TLS, and what the server exposes.
VR interface
The WebXR app that drives teleop and recording.
