Calibration is regression through physics. The inverse dynamics τ = RNEA(q, q̇, q̈; θ) predicts joint torques from motion, given parameters θ, masses, centers of mass, inertias, friction coefficients. A recording gives you thousands of (motion, torque) pairs, so fitting θ is least squares: minimize the squared error between predicted and measured torque. The classical trick notes that rigid-body dynamics is LINEAR in the inertial parameters, which solves part of the problem in one shot, but it cannot absorb nonlinear friction models, actuator effects, or chosen subsets of parameters. The gradient route can: run the dynamics on a scalar type that carries derivatives (a dual number), and every partial ∂τ/∂θ comes out exact to machine precision, no hand-derived derivative code, no finite-difference truncation. Three details make it robust. Masses, inertias, and friction coefficients must stay positive, so we optimize their logarithms, positivity by construction, and the chain rule of that reparameterization rides along in the dual seed. Coulomb friction has a sign() discontinuity at rest, so we smooth it with tanh(q̇/w) and the model stays differentiable through every zero crossing. And not every parameter is identifiable from every recording: a joint spinning about a vertical axis gives gravity no leverage on its link's mass, so the fit reports a per-parameter sensitivity, near zero means this data does not constrain that parameter, and its fitted value is not physical truth. This is why the field settled here: gradient-based system identification beats black-box search by one to two orders of magnitude, and it is the working role of differentiable simulation in 2026 practice, calibrate the model, then trust everything you build on it. One more step, and it is where calibration usually goes wrong. You have a fitted model; now you want a policy that survives the gap between it and the real robot, so you randomise the parameters during training. The obvious move is to widen the directions the fit left undetermined, on the reasoning that those are the ones the data could not pin down. That reasoning was written into this library and then measured, and it is wrong. For inertial identification the undetermined directions are STRUCTURAL: no trajectory can see them, at any speed. Perturb the estimate by a norm of thirty-eight point six six five inside that subspace and the worst joint-torque change anywhere - training set, held out, ten times faster, a hundred times faster - stays below one millionth of a newton-metre. That is the bound the test enforces. There is nothing there for a policy to become robust to, so randomising it costs compute and returns a feeling of coverage. Two things are worth randomising instead. The first is the estimation uncertainty on the directions the data DID resolve, which is a quantity the fit reports rather than one you invent. The second is the effects your model does not contain at all - joint friction, backlash, an unknown payload - which you have to declare explicitly, because no amount of staring at the regressor will reveal a term that is not in it. Note which fit this is. The bench on this page calibrates by gradients through the dynamics. The identifiability split comes from the linear inertial regressor instead, a sibling route in the same crate, and it is the one that hands you a rank and a covariance to build the spread from.