axol run-policy).
Before you start
- Axol installed (one-command install), CAN up, and motors verified.
- The ZED cameras the policy was trained on connected (at least one), with their serials on hand — see the Data Collection tip for listing them.
- A trained checkpoint (local path or HuggingFace repo) and its policy type (
act,smolvla,pi0, …). Assign the same cameras, and use the same camera resolution, stereo setting, and fps the policy was trained on. - For local GPU inference, a CUDA-capable PyTorch install — or offload to a remote server (below).
Run it
- Control Panel
- CLI
1
Connect the robot and assign cameras
Connect the Axol Host and Axol, then assign the cameras the policy was trained on in the Cameras settings tab (at least one). See Cameras.
2
Select Run Policy and fill the fields
Pick Run Policy. Set the policy path, policy type, and task description — the per-run inputs. Remote inference (server host/port), aggregation, and chunking now live in the Settings Inference tab.
3
Start and control rollouts
Press Start, then use the Episode control box that appears:
To end the run, press Stop in the card header.
--episode_time_s is a safety cap (default 120 s) that falls back to the same save / discard / quit prompt if no key is pressed. If a dataset repo is supplied, each saved episode is appended to a LeRobot-format dataset. Between episodes the arms return to the rest pose via a collision-aware IK trajectory — guarded: if a joint’s torque strays from the gravity model for a sustained window (something still grasped, or a person grabbing an arm) the move stops where it is and the arms drop into a limp gravity-compensation hold. Free them by hand, then continue (Enter on the terminal, Return to rest on the control panel) to replan from wherever they were left. Tune with --reset_torque_threshold (default 4.0 Nm; 0 disables the watchdog) or the control panel’s Reset contact threshold.
You can also arm a watchdog for the rollout itself — while the policy is driving the arms. It’s off by default (a policy pushes on the scene on purpose): set --policy_torque_threshold (the control panel’s Policy contact stop; suggested 16 Nm) and a sustained torque past the threshold aborts the episode — nothing is saved — and drops the arms limp. Clear them by hand, then continue (Enter / Return to rest) to return to rest and start the next attempt.
Discarding an episode uses that same limp hold up front: because a bad rollout usually leaves the arms somewhere they shouldn’t be, they go slack for hand-repositioning first, so you untangle them by hand rather than dragging them home from a failed pose — then return to rest replans from where you left them.
Rollout execution stays smooth on any inference hardware. Every command the policy produces is shaped by the same velocity/acceleration profile teleop and all training data go through, so a slow or bursty inference platform decelerates the arms to a brief hold and ramps back out instead of jerking at chunk boundaries. The shaping knobs (
--exec_max_vel, --ensemble_blend_s, --align_fade_s) are in the run-policy reference.Offload inference to a remote server (optional)
1
Start the inference server on the GPU machine
The inference server runs on the GPU machine from the CLI — it isn’t one of the control panel’s operations. With the Listens on
lerobot extra installed there:0.0.0.0:8765 until Ctrl+C. See inference-server.2
Point Run Policy at it
On the robot machine, run Run Policy exactly as above but pointed at the server’s address:The server downloads the policy itself, so
- Control Panel
- CLI
In the Settings Inference tab, set the server host to the GPU machine’s address (e.g.
192.168.1.99) and Save, then press Start in the Run Policy panel.--policy_path must be reachable from it (e.g. a HuggingFace Hub repo ID).Next steps
Data Collection
Record more episodes to improve the policy.
run-policy reference
Every flag, aggregation strategy, and threading detail.
