Extend gyroscopic stabilization to free rigid subtrees - #3554
Draft
ruziniuuuuu wants to merge 1 commit into
Draft
Conversation
|
Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA). View this failed invocation of the CLA check for more information. For the most up to date status, view the checks section at the bottom of the pull request. |
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.
Fixes #3553.
A free rigid object can diverge under
implicitfastsimply because its inertia is represented on a fixed child body. In the issue's contact-free reproduction, a massless free root with one inertial child emits BADQACC at step 4294; moving the same inertial element to the root, or usingimplicit, completes 10,000 steps.This extends the existing local gyroscopic solve to free rigid subtrees. The six-DOF tree check remains, and the bias derivative sums each body's contribution about the free joint's origin and orientation.
mjd_freeMhatreuses that aggregate derivative. Fluid geoms on fixed descendants retain the asymmetric derivatives required by the local solve. The shared helper also extends the existingdiscretetreatment to eligible rigid subtrees.The implementation continues using the global Cholesky solve and a local 6-by-6 LU solve; descendant aggregation adds work proportional to the number of bodies in each eligible rigid subtree. No model rewriting, inertia regularization, new settings, or integrator fallback is introduced. Trees with articulated descendants remain excluded.
Validation
Built against upstream
707f4735e248872a38c5040a21b510a5bd386459using GCC 11.5.0, Linux x86_64, CMake Release, double precision.implicitcomparison checks fail.engine_forward_test: 129 tests pass.engine_derivative_test: 34 tests pass.discreteenergy stability, and rejection of articulated descendants.git diff --checkpasses.Build and test commands (run test binaries from the source
test/directory so fixtures resolve):This is a draft for maintainer feedback on extending the documented standalone-body eligibility rule. Validation is limited to the two complete test binaries above and the synthetic reproduction; other platforms, single precision, the full repository suite, and application workloads have not been tested.