Before you start
You need:- A calibrated Bimanual YAM
- Local configuration files for each arm (Servo hashes these into an immutable hardware fingerprint; placeholder files work for testing)
- A zero-argument function in your robot application that opens its calibrated YAM runtime (see the Robots guide for the complete interface and reference implementation)
- Your Servo control-plane URL
- Hosted access enabled for your Servo organization
Install and sign in
Install the client on the robot computer:servo login opens a browser for interactive authentication. On a headless robot computer (for
example, over an SSH session without a graphical browser), generate an API key on your development
machine and export it on the robot:
SERVO_API_KEY authenticates the Python process and CLI commands without requiring an interactive
browser login.
Register the robot
Use a stable name for the physical rig. Pass the left arm configuration file first and the right arm configuration file second:--config accepts the hardware configuration files that your robot runtime uses on disk
(generated during arm zeroing and motor calibration). If you are testing or running without
physical hardware, generate placeholder files with:
--region records the robot’s location using a familiar AWS region code. Choose the nearest
region, such as us-west-2, us-east-1, eu-west-1, or ap-northeast-1. Servo treats the code
as the robot’s location and chooses the underlying compute.
Setup returns a stable rob_* ID. The configuration files stay on the robot computer.
List the hosted models that work with this robot:
Run pi0.5
Export the zero-argument function your robot application already uses to open its calibrated YAMRobotEnv. Each call to robot.check() or robot.run() opens a fresh environment and closes it
when the call finishes:
timeout_s=900 allows the client to wait for up to 15 minutes. wait() returns as soon as the
endpoint is ready.
robot.check() makes two hosted inference requests without calling the runtime’s actuator method.
A completed report confirms that Servo received three camera frames and 14 joint values and that
the selected model returned valid actions.
robot.run opens the local devices, maintains the hosted session, applies validated joint targets,
and closes the devices at the end of the run.
Servo rejects malformed or expired action rows. When a measured action-jump limit exists for the
selected model and robot, Servo enforces it. The YAM controller remains responsible for motor
limits and emergency-stop behavior.
model.deploy() creates hosted capacity and returns a stable deployment.id. Save that ID and use
sv.deployments.get(deployment_id) on later runs. Review active deployments with
servo deployment list, and stop unused capacity with servo deployment stop <deployment-id>.
For several robots, share managed capacity through Robot fleets.