Add missing gravity attribute authoring to Mjcf SdfFileFormat plugin.

PiperOrigin-RevId: 779239797
Change-Id: I039b1089e5b436498d14df384c1aee830fd4b48a
This commit is contained in:
Sam Haves
2025-07-04 11:24:58 -07:00
committed by Copybara-Service
parent 45d4cacc45
commit be3c3ef8a9
2 changed files with 42 additions and 0 deletions
@@ -554,6 +554,16 @@ class ModelWriter {
break;
}
pxr::GfVec3f gravity(spec_->option.gravity[0], spec_->option.gravity[1],
spec_->option.gravity[2]);
// Normalize will normalize gravity in place and return the magnitude before normalization.
float gravity_magnitude = gravity.Normalize();
WriteUniformAttribute(physics_scene_path, pxr::SdfValueTypeNames->Float,
pxr::UsdPhysicsTokens->physicsGravityMagnitude, gravity_magnitude);
WriteUniformAttribute(physics_scene_path, pxr::SdfValueTypeNames->Vector3f,
pxr::UsdPhysicsTokens->physicsGravityDirection, gravity);
pxr::GfVec3d wind(spec_->option.wind[0], spec_->option.wind[1],
spec_->option.wind[2]);
WriteUniformAttribute(physics_scene_path, pxr::SdfValueTypeNames->Double3,
@@ -976,6 +976,38 @@ TEST_F(MjcfSdfFileFormatPluginTest, TestPhysicsScenePrimSDFIterations) {
60);
}
TEST_F(MjcfSdfFileFormatPluginTest, TestPhysicsScenePrimGravity) {
auto stage = pxr::UsdStage::Open(LoadLayer(R"(
<mujoco model="test">
<option gravity="-123 0 0"> </option>
</mujoco>
)"));
ExpectAttributeEqual(stage,
kPhysicsScenePrimPath.AppendProperty(
pxr::UsdPhysicsTokens->physicsGravityMagnitude),
123.0f);
ExpectAttributeEqual(stage,
kPhysicsScenePrimPath.AppendProperty(
pxr::UsdPhysicsTokens->physicsGravityDirection),
pxr::GfVec3f(-1.0f, 0.0f, 0.0f));
stage = pxr::UsdStage::Open(LoadLayer(R"(
<mujoco model="test">
<option gravity="2 3 6"> </option>
</mujoco>
)"));
ExpectAttributeEqual(stage,
kPhysicsScenePrimPath.AppendProperty(
pxr::UsdPhysicsTokens->physicsGravityMagnitude),
7.0f);
ExpectAttributeEqual(stage,
kPhysicsScenePrimPath.AppendProperty(
pxr::UsdPhysicsTokens->physicsGravityDirection),
pxr::GfVec3f(0.2857143f, 0.42857143f, 0.85714287f));
}
TEST_F(MjcfSdfFileFormatPluginTest, TestPhysicsScenePrimDisableFlags) {
auto stage = pxr::UsdStage::Open(LoadLayer(R"(
<mujoco model="test">