axol serve). To calibrate every joint at once, use tune.factory.
Friction model: τ = Fc·tanh(0.1·k·v) + Fv·v + Fo
Friction differs from motor to motor, and the built-in defaults are only a starting point. Pass --save to store the fit in this computer’s calibration file, ~/.almond/calibration.json. Every operation on the robot then uses it. Values you set explicitly in the config still take priority.
Profiles
The slow profile sweeps the speeds under 8°/s twice: once where the joint carries the least load, and once where it carries the most. With
--save it stores the friction fit and the stribeck_* fields.
On shoulder_1, shoulder_2 and elbow, a saved slow-profile fit also switches the joint to stiffer slow-motion gains. A joint without one keeps the standard gains. The standard profile doesn’t switch them.
Sweep safety
The tool poses the other joints so the arm stays clear of the robot:shoulder_2sweeps only outboard of rest, because inboard travel swings into the base.wrist_2sweeps with the elbow raised to its midpoint, which keeps the gripper clear of the base over its full range.shoulder_3andwrist_1sweep withshoulder_2held 10° outboard, clear of the chest cameras.
tune.gravity uses the same poses, plus extra poses that load the test joint with gravity. The friction fit doesn’t depend on the pose, so it works in either.
Calibration gains
The calibration tools (tune.factory, tune.friction, tune.gravity, tune.breakaway) move the arm under impedance control at these fixed gains, with gravity fed forward. They never use the motors’ firmware position loops or the production gains. Every joint is held before anything moves.
