Fix runtime site pose updates after default initialization#3251
Open
cvan20191 wants to merge 1 commit intogoogle-deepmind:mainfrom
Open
Fix runtime site pose updates after default initialization#3251cvan20191 wants to merge 1 commit intogoogle-deepmind:mainfrom
cvan20191 wants to merge 1 commit intogoogle-deepmind:mainfrom
Conversation
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 #3029.
Summary
This fixes runtime updates to site poses when a site was initialized with a default position and/or identity quaternion.
Problem
Sites initialized with default pose values can be compiled with
site_sameframeshortcuts such asmjSAMEFRAME_BODYormjSAMEFRAME_BODYROT.After users mutate
model->site_posormodel->site_quatat runtime and callmj_forward, those compiled shortcuts can remain active. As a result,mj_local2Globalmay skip the current local site position or quaternion, causingdata->site_xpos/data->site_xmatnot to reflect the mutated model fields.This made behavior depend on the site's initial XML pose: non-default-initialized sites updated as expected, while default-initialized sites could appear static.
Fix
mj_kinematics2now revalidates site same-frame shortcuts against the current site pose before callingmj_local2Global.The change is limited to site transform computation and preserves valid shortcuts where possible, including downgrading shortcuts when only part of the shortcut remains valid.
Tests
Added C++ regression coverage:
CoreSmoothTest.SitePositionMutationUpdatesDefaultSiteXposCoreSmoothTest.SiteQuatMutationUpdatesDefaultSiteXmatThese tests failed before the fix and pass after it.
Locally run: