Repository navigation
material: torch twin of the bicycle material rollout; parity with libcvc; trainer on the bicycle - #118
Merged
Conversation
…cvc; trainer on the bicycle libcvc P8b moves the material trainer off the point mass: integrate_bicycle_material keeps the surrogate's force law and drives the deployed kinematic bicycle (transfix/libcvc#642). - grl_snam/material_bike.py: integrate_bicycle_material in torch, the same controller with every branch a torch.where. Autograd follows the branch each step took, as the C++ adjoint does. Guarded sqrt/norm keep an unselected zero from producing NaN gradients. - nav_native: integrate_bicycle_material / _vjp wrappers over the new pycvc entry points, gated by HAS_BICYCLE_MATERIAL_ROLLOUT. - MaterialTrainer(bicycle=BicycleParams(...)) takes the loss through the bicycle, gated by HAS_MATERIAL_TRAINER_BICYCLE; .integrator reports which. The module still imports without torch. - tests/test_material_bike_parity.py: - forward (rtol 1e-4) and gradient (rtol 1e-3) parity against libcvc; - a pure-torch check that the twin drives to its goal. Measured against a local libcvc build: forward within 5e-7 relative, gradient within 3e-6, so two independent derivations agree. - tests/test_material_train_native.py: the trainer descends on the bicycle, and a zero wheelbase is refused. The native tests skip until a pycvc with the bindings is installed.
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.
The Python side of libcvc P8b (transfix/libcvc#642): training the material model (CoefEnergyNetMaterial) through the deployed kinematic bicycle instead of the point-mass surrogate.
What
grl_snam/material_bike.py:integrate_bicycle_materialin torch, with the material surrogate's force law driven throughdrive.cpp's controller:(F_rep + F_mat)steering bias;d_capand the kinematic update.Every branch is a
torch.where, so autograd follows the branch each step took, as libcvc's hand-written adjoint does. Guardedsqrt/norms keep an unselected zero from producing NaN gradients.nav_native:integrate_bicycle_material/integrate_bicycle_material_vjpover the new pycvc entry points, behindHAS_BICYCLE_MATERIAL_ROLLOUT.MaterialTrainer(bicycle=BicycleParams(...)): takes the loss through the bicycle, behindHAS_MATERIAL_TRAINER_BICYCLE;.integratorreports which rollout is in use. The module still imports without torch.Tests
tests/test_material_bike_parity.py:tests/test_material_train_native.py: the trainer descends on the bicycle, and a zero wheelbase is refused.Measured locally against a pycvc built from transfix/libcvc#642: forward within 5e-7 relative and gradient within 3e-6. Two independent derivations (hand-written reverse mode and autograd) agree to float precision. The GRL-SNAM material suites pass (42 passed; the 4 skips are a missing CUDA device and the pure-mode tests).
The native tests skip in CI until a pycvc with the bindings is installed; the pure-torch test runs now.