Skip to main content
Run Policy lets a trained policy drive Axol’s arms. Axol sends the arm positions and camera frames to the policy, and the policy sends back chunks of actions. Run it on the same computer as data collection: the one wired to the robot with the ZED cameras attached. Start it from the web control panel or with axol run-policy. For LeRobot policies, inference runs on the robot’s computer by default. You can move it to a more powerful computer on the network instead. Custom policies connect to an endpoint you run, through the custom policy interface.
To run a model that isn’t a LeRobot checkpoint, choose policy type custom. You choose the model and instructions on your endpoint, so the robot needs no checkpoint path. See Run Your Own Policy.

Before you start

  • Install Axol with the one-command install. Bring up CAN and check the motors.
  • Connect at least one of the ZED cameras the policy was trained on, and have their serial numbers ready. See the Data Collection tip for how to list them.
  • Have a trained checkpoint and its policy type (act, smolvla, pi0 and so on). The checkpoint can be a local path or a HuggingFace repo.
  • Use the same cameras, camera resolution, stereo setting and recording rate the policy was trained on.
  • For GPU inference on the robot’s computer, you need a PyTorch build with CUDA. Otherwise, use a remote server (below) or pass --device cpu.
Load only checkpoints and datasets that you made or got from a source you trust. Model and dataset loading is not sandboxed.
On a Jetson, the hosted install comes with the CPU-only PyTorch build. For GPU inference, install a JetPack-compatible Torch and Torchvision yourself. Axol’s updater doesn’t replace a build you installed.

Run it

1

Connect the robot and assign cameras

Connect the Axol Host and Axol. Under Axol settings → Cameras, assign at least one of the cameras the policy was trained on. See Cameras.
2

Select Run policy and fill in the fields

Pick Run policy and fill in Policy path, Policy type and Task. The remote server’s host and port, and the chunk settings, are in the Inference tab of Settings.
3

Start and run episodes

Press Start, then use the Episode control box:To end the run, press Stop at the top of the card.

Episodes

  • --episode_time_s limits each episode, 120 s by default. When it runs out, you get the same save, discard or quit choice.
  • If you set a dataset repo ID, each saved episode is added to a LeRobot dataset.
  • Discard makes the arms go limp first, because a failed episode often leaves them in a bad spot. Move them clear by hand, then return to rest.

Contact stops

Between episodes, the arms return to the rest pose along a path that avoids collisions. The return is guarded. If an arm meets resistance, such as a held object or a person, the move stops and the arms go limp.
  1. Move the arms clear by hand.
  2. Press Enter in the terminal or Return to rest in the panel. Axol plans a new return from where the arms are.
Set the sensitivity with Return-to-rest contact stop in the panel, or --reset_torque_threshold (default 6.0 Nm, 0 turns it off). You can also stop an episode when the arms push hard while the policy drives them. This check is off by default, because a policy often pushes on the scene on purpose. Set Policy contact stop in the panel, or --policy_torque_threshold. The panel suggests 16 Nm. When it trips, the episode is dropped without saving and the arms go limp. Move them clear, then return to rest and start the next episode.

Smooth motion

Axol limits joint speed and acceleration on every command the policy sends. For LeRobot policies, Axol also blends overlapping chunks (--ensemble_blend_s, --align_fade_s). A custom policy’s server does any blending itself, and Axol runs its plan as sent. Smooth motion still needs consistent targets and fast enough inference. See run-policy and custom policy timing.

Offload LeRobot inference to a remote server (optional)

Use remote inference only on an isolated, trusted network or a VPN. Set the server’s firewall to accept only the robot’s IP address. The link is not encrypted or authenticated. Anyone on the network could load checkpoints on the server, or pose as the server and send actions to the robot.
1

Start the inference server on the GPU computer

Start the server from the CLI. The control panel doesn’t run it. Install the lerobot extra on the GPU computer, then run:
Replace the address with the GPU computer’s LAN IP. Leave out --host to listen on all interfaces (0.0.0.0). The server listens on port 8765 until you press Ctrl+C. See inference-server.
2

Point Run Policy at it

On the robot’s computer, run Run Policy as above with the server’s address:
In the Inference tab of Settings, set the server host to the GPU computer’s address, such as 192.168.1.99, and press Save. Then press Start in the Run policy panel.
The server downloads the policy, so it must be able to reach --policy_path. A HuggingFace Hub repo ID works.

Next steps

Config Parameters

Every setting for run policy, with its default.

Data Collection

Record more episodes to improve the policy.

run-policy reference

Every flag and aggregation strategy.

Run Your Own Policy

Drive the arms from a model that isn’t a LeRobot checkpoint.