@@ -271,6 +271,76 @@ def test_multi_instance_schema_detection_on_tendon_joints(setup_simulation):
271271 assert result is False , "Prim without tendon root schema should return False"
272272
273273
274+ @pytest .mark .isaacsim_ci
275+ def test_mujoco_gravity_compensation_scale_on_rigid_body (setup_simulation ):
276+ """Test that gravity_compensation_scale is written as mjc:gravcomp on rigid body prims."""
277+ sim , _ , _ , _ , _ , _ = setup_simulation
278+ stage = sim_utils .get_current_stage ()
279+
280+ sim_utils .create_prim ("/World/cube" , prim_type = "Cube" , translation = (0.0 , 0.0 , 0.62 ))
281+ rigid_cfg = schemas .MujocoRigidBodyPropertiesCfg (gravity_compensation_scale = 0.5 )
282+ schemas .define_rigid_body_properties ("/World/cube" , rigid_cfg )
283+
284+ prim = stage .GetPrimAtPath ("/World/cube" )
285+ attr = prim .GetAttribute ("mjc:gravcomp" )
286+ assert attr .IsValid (), "mjc:gravcomp attribute not found on rigid body prim"
287+ assert attr .Get () == pytest .approx (0.5 )
288+
289+
290+ @pytest .mark .isaacsim_ci
291+ def test_mujoco_gravity_compensation_scale_not_set_when_none (setup_simulation ):
292+ """Test that mjc:gravcomp is not written when gravity_compensation_scale is None."""
293+ sim , _ , _ , _ , _ , _ = setup_simulation
294+ stage = sim_utils .get_current_stage ()
295+
296+ sim_utils .create_prim ("/World/cube2" , prim_type = "Cube" , translation = (1.0 , 0.0 , 0.62 ))
297+ rigid_cfg = schemas .MujocoRigidBodyPropertiesCfg ()
298+ schemas .define_rigid_body_properties ("/World/cube2" , rigid_cfg )
299+
300+ prim = stage .GetPrimAtPath ("/World/cube2" )
301+ attr = prim .GetAttribute ("mjc:gravcomp" )
302+ assert not attr .IsValid (), "mjc:gravcomp should not be set when gravity_compensation_scale is None"
303+
304+
305+ @pytest .mark .isaacsim_ci
306+ def test_mujoco_joint_gravity_compensation_written (setup_simulation ):
307+ """Test that gravity_compensation is written as mjc:actuatorgravcomp on joint prims."""
308+ sim , _ , _ , _ , _ , _ = setup_simulation
309+ stage = sim_utils .get_current_stage ()
310+
311+ sim_utils .create_prim ("/World/jgc_test" , prim_type = "Xform" )
312+ sim_utils .create_prim ("/World/jgc_test/body0" , prim_type = "Cube" )
313+ sim_utils .create_prim ("/World/jgc_test/body1" , prim_type = "Cube" )
314+ UsdPhysics .RevoluteJoint .Define (stage , "/World/jgc_test/body1/joint0" )
315+
316+ joint_cfg = schemas .MujocoJointDrivePropertiesCfg (gravity_compensation = True )
317+ schemas .modify_joint_drive_properties ("/World/jgc_test" , joint_cfg )
318+
319+ joint_prim = stage .GetPrimAtPath ("/World/jgc_test/body1/joint0" )
320+ attr = joint_prim .GetAttribute ("mjc:actuatorgravcomp" )
321+ assert attr .IsValid (), "mjc:actuatorgravcomp not set on joint prim"
322+ assert attr .Get () is True
323+
324+
325+ @pytest .mark .isaacsim_ci
326+ def test_mujoco_joint_gravity_compensation_not_set_when_none (setup_simulation ):
327+ """Test that mjc:actuatorgravcomp is not written when gravity_compensation is None."""
328+ sim , _ , _ , _ , _ , _ = setup_simulation
329+ stage = sim_utils .get_current_stage ()
330+
331+ sim_utils .create_prim ("/World/jgc_test2" , prim_type = "Xform" )
332+ sim_utils .create_prim ("/World/jgc_test2/body0" , prim_type = "Cube" )
333+ sim_utils .create_prim ("/World/jgc_test2/body1" , prim_type = "Cube" )
334+ UsdPhysics .RevoluteJoint .Define (stage , "/World/jgc_test2/body1/joint0" )
335+
336+ joint_cfg = schemas .MujocoJointDrivePropertiesCfg ()
337+ schemas .modify_joint_drive_properties ("/World/jgc_test2" , joint_cfg )
338+
339+ joint_prim = stage .GetPrimAtPath ("/World/jgc_test2/body1/joint0" )
340+ attr = joint_prim .GetAttribute ("mjc:actuatorgravcomp" )
341+ assert not attr .IsValid (), "mjc:actuatorgravcomp should not be set when gravity_compensation is None"
342+
343+
274344"""
275345Helper functions.
276346"""
0 commit comments