Skip to main content
Replays a reference motion through the production Rust-core motion_control path — impedance gains, gravity/friction/inertia feedforward, and host-side damping all come from the same AxolConfig production uses — and scores tracking accuracy and smoothness per joint. Because the motion is identical from run to run and robot to robot, this is the deterministic A/B loop that ad-hoc teleop testing can’t give you: override one gain with --gain, replay, and compare the numbers (and graphs, in the diagnostics dashboard). Every run persists a tuning-run artifact (full per-joint time series + metrics) under ~/.almond/diagnostics/tuning/ for charting and side-by-side comparison. The arm moves to the motion’s start and back to rest on collision-aware planned trajectories; a contact watchdog aborts playback if a sustained torque residual says the arm is pushing on something that isn’t in the plan.
With --noise, --filter, and/or --ik the run is still scored against the clean reference, and the artifact stores the stream actually sent alongside it — the dashboard charts overlay commanded (clean), sent, and actual per joint, so the filters’ cleanup (and their lag) — or the IK solver’s reconstruction of the Cartesian path — is directly visible on hardware. --ik re-solves the whole chain (warm-started, like teleop) before playback starts, so a slow solve can’t stretch the command pacing; solve-time stats land on the run artifact instead.

Reading the scorecard

Joints the motion never exercises (under 1° of commanded travel) show - in the tracking columns — a parked joint tracks meaninglessly well — but keep their row and are still scored for buzz and torque chatter, which is exactly where a hold-pose limit cycle shows up.