Repository navigation
dyn4: the torch twin of libcvc's four-wheel plant, with float64 parity against its golden - #123
Merged
Merged
Conversation
…y against its golden grl_snam.dyn4.dyn4_plant is libcvc's diff::dyn4_plant (P8d, transfix/libcvc#731): four contact patches with Ackermann front wheels, a ground callable (wx, wy) -> (mu, height) per wheel, spring-damper corners floored by softplus, four tires in the implicit (vy, r) solve, and heave, roll and pitch by an implicit 3x3 step. The corners' rates follow libcvc's float arithmetic. tests/test_dyn4_parity.py holds it to libcvc's dyn4_golden.json (Dyn4.Golden, libcvc@368c0e4a): the sprung and rigid Humvee on a mu split with a bump, eleven cases. Measured worst relative error: next state 4.2e-17, VJP 1.7e-15 (the gate is 1e-9). Also a batch, the Ackermann relation, and stopping from 20 m/s within 10% of v^2 / (2 mu g).
transfix
added a commit
to transfix/libcvc
that referenced
this pull request
Oct 21, 2026
… (P8d) (#731) diff::dyn4_plant (nav/detail/dyn_4w.h): P8a's single-track vehicle on its four wheels, with load transfer through per-corner springs and dampers, per-wheel friction and Ackermann steering, written over a scalar type with dyn4_plant_vjp on forward-mode duals. nav_plant::dyn4_si_of / dyn4_params_at derive it from a vehicle_desc on dyn_bike_si_of's Jolt-fitted defaults (#753). nav_dyn_4w_test gates the single-track limit, load transfer, mu-split braking, a bump, the VJP, the controller step, the envelopes against Jolt's Humvee, Ackermann, and dyn4_golden.json for the torch twin (CVC-Lab/GRL-SNAM#123, golden in #135).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This is the torch twin of libcvc's four-wheel plant:
diff::dyn4_plant, P8d of the vehicle-physics roadmap, in transfix/libcvc#731. The trainers and cvcdbg get a body that rolls, pitches and loads each wheel from its own ground, differentiable in torch.grl_snam/dyn4.pydyn4_plant(p, lim, state, delta_cmd, a_cmd, ground)steps a(..., 14)state: (x, y, psi, vx, vy, r, z, zd, phi, phid, th, thd, delta, a). It is batched and runs on any device.groundis a callable(wx, wy) -> (mu, height)on world positions, called once per wheel. Its gradients flow through autograd, as libcvc's sampler's flow through its duals.FlatGround(mu)is the default.ackermann);dyn_bike.py:_sat,_lateral,_secant_w,_clampandPlantLimits.Parity (
tests/test_dyn4_parity.py)The fixture
tests/fixtures/dyn4_golden.jsonis libcvc'sDyn4.Goldenat libcvc@368c0e4a, on #731's branch. It covers the Humvee with its springs and again with rigid corners, on a mu split with a round bump. The eleven cases are:Each case records the next state and the VJP of a fixed output gradient.
The tests ran locally with the cvcpkg Python's torch (CPU), and black and ruff are clean. The CUDA rows come from a one-off script run once with the DBG session's CUDA torch 2.8.0+cu128, which has no pytest.
The fixture tracks libcvc#731. If review there changes the plant, the golden is regenerated with
CVC_DYN4_GOLDEN_WRITE=1and copied here.