diff --git a/scripts/tutorials/05_controllers/run_diff_ik.py b/scripts/tutorials/05_controllers/run_diff_ik.py index 9f91b6596195..ded79b628ec6 100644 --- a/scripts/tutorials/05_controllers/run_diff_ik.py +++ b/scripts/tutorials/05_controllers/run_diff_ik.py @@ -53,7 +53,7 @@ ## # Pre-defined configs ## -from isaaclab_assets import FRANKA_PANDA_HIGH_PD_CFG, UR10_CFG # isort:skip +from isaaclab_assets import FRANKA_PANDA_LEGACY_HIGH_PD_CFG, UR10_CFG # isort:skip @configclass @@ -82,7 +82,7 @@ class TableTopSceneCfg(InteractiveSceneCfg): # articulation if args_cli.robot == "franka_panda": - robot = replace(FRANKA_PANDA_HIGH_PD_CFG, prim_path="{ENV_REGEX_NS}/Robot") + robot = replace(FRANKA_PANDA_LEGACY_HIGH_PD_CFG, prim_path="{ENV_REGEX_NS}/Robot") elif args_cli.robot == "ur10": robot = replace(UR10_CFG, prim_path="{ENV_REGEX_NS}/Robot") else: diff --git a/scripts/tutorials/05_controllers/run_osc.py b/scripts/tutorials/05_controllers/run_osc.py index f2dddf957364..d1769389c14a 100644 --- a/scripts/tutorials/05_controllers/run_osc.py +++ b/scripts/tutorials/05_controllers/run_osc.py @@ -57,7 +57,7 @@ ## # Pre-defined configs ## -from isaaclab_assets import FRANKA_PANDA_HIGH_PD_CFG # isort:skip +from isaaclab_assets import FRANKA_PANDA_LEGACY_HIGH_PD_CFG # isort:skip @configclass @@ -97,7 +97,7 @@ class SceneCfg(InteractiveSceneCfg): debug_vis=False, ) - robot = replace(FRANKA_PANDA_HIGH_PD_CFG, prim_path="{ENV_REGEX_NS}/Robot") + robot = replace(FRANKA_PANDA_LEGACY_HIGH_PD_CFG, prim_path="{ENV_REGEX_NS}/Robot") robot.actuators["panda_shoulder"].stiffness = 0.0 robot.actuators["panda_shoulder"].damping = 0.0 robot.actuators["panda_forearm"].stiffness = 0.0 diff --git a/source/isaaclab/changelog.d/maximiliank-direct-body-prim-resolution.skip b/source/isaaclab/changelog.d/maximiliank-direct-body-prim-resolution.skip new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/source/isaaclab/test/controllers/test_differential_ik.py b/source/isaaclab/test/controllers/test_differential_ik.py index 4b91b1158cff..2b2af9e3ba68 100644 --- a/source/isaaclab/test/controllers/test_differential_ik.py +++ b/source/isaaclab/test/controllers/test_differential_ik.py @@ -31,7 +31,7 @@ ## # Pre-defined configs ## -from isaaclab_assets import FRANKA_PANDA_HIGH_PD_CFG, UR10_CFG # isort:skip +from isaaclab_assets import FRANKA_PANDA_LEGACY_HIGH_PD_CFG, UR10_CFG # isort:skip pytestmark = pytest.mark.integration @@ -441,7 +441,7 @@ def test_franka_ik_pose_abs(sim): sim_context, num_envs, ee_pose_b_des_set = sim # Create robot instance - robot_cfg = replace(FRANKA_PANDA_HIGH_PD_CFG, prim_path="{ENV_REGEX_NS}/Robot") + robot_cfg = replace(FRANKA_PANDA_LEGACY_HIGH_PD_CFG, prim_path="{ENV_REGEX_NS}/Robot") robot = Articulation(cfg=robot_cfg) # Create IK controller diff --git a/source/isaaclab/test/controllers/test_operational_space.py b/source/isaaclab/test/controllers/test_operational_space.py index 2dd6e63e4028..2e7a3e4b09a9 100644 --- a/source/isaaclab/test/controllers/test_operational_space.py +++ b/source/isaaclab/test/controllers/test_operational_space.py @@ -50,7 +50,7 @@ subtract_frame_transforms, ) -from isaaclab_assets import FRANKA_PANDA_CFG, G1_29DOF_CFG # isort:skip +from isaaclab_assets import FRANKA_PANDA_LEGACY_CFG, G1_29DOF_CFG # isort:skip pytestmark = pytest.mark.integration @@ -95,7 +95,7 @@ def sim(): # clone the env xform cloner.usd_replicate(stage, [env_fmt.format(0)], [env_fmt], env_ids, positions=env_origins) - robot_cfg = replace(FRANKA_PANDA_CFG, prim_path="{ENV_REGEX_NS}/Robot") + robot_cfg = replace(FRANKA_PANDA_LEGACY_CFG, prim_path="{ENV_REGEX_NS}/Robot") # Explicit torque actuators enforce effort limits on the commands sent to the simulator. for actuator_name in ("panda_shoulder", "panda_forearm"): actuator_cfg = robot_cfg.actuators[actuator_name] diff --git a/source/isaaclab_assets/changelog.d/maximiliank-franka-flat-config.changed.rst b/source/isaaclab_assets/changelog.d/maximiliank-franka-flat-config.changed.rst new file mode 100644 index 000000000000..914acc9f2ee1 --- /dev/null +++ b/source/isaaclab_assets/changelog.d/maximiliank-franka-flat-config.changed.rst @@ -0,0 +1,8 @@ +* **Breaking:** changed ``FRANKA_PANDA_CFG`` and ``FRANKA_PANDA_HIGH_PD_CFG`` to use the shared + flat Franka asset with gripper-only collisions, a single ``panda_arm`` actuator group, + and a driven leader finger with a passive mimic follower. + Use ``FRANKA_PANDA_LEGACY_CFG`` and ``FRANKA_PANDA_LEGACY_HIGH_PD_CFG`` to retain the + original USD path, shoulder/forearm actuator groups, gains, and collision settings. + Select the ``Physics`` variant for the backend when using the main configs. +* **Breaking:** the published ``franka_panda.usda`` now contains the flat asset. Consumers + needing the former nested hierarchy can explicitly select ``franka_panda_nestedInstance.usda``. diff --git a/source/isaaclab_assets/changelog.d/maximiliank-franka-flat-config.major b/source/isaaclab_assets/changelog.d/maximiliank-franka-flat-config.major new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/source/isaaclab_assets/isaaclab_assets/__init__.pyi b/source/isaaclab_assets/isaaclab_assets/__init__.pyi index 2c491a499d7d..60581e12024f 100644 --- a/source/isaaclab_assets/isaaclab_assets/__init__.pyi +++ b/source/isaaclab_assets/isaaclab_assets/__init__.pyi @@ -22,6 +22,8 @@ __all__ = [ "GR1T2_CFG", "GR1T2_HIGH_PD_CFG", "FRANKA_PANDA_CFG", + "FRANKA_PANDA_LEGACY_CFG", + "FRANKA_PANDA_LEGACY_HIGH_PD_CFG", "FRANKA_PANDA_HIGH_PD_CFG", "FRANKA_PANDA_MENAGERIE_CFG", "FRANKA_ROBOTIQ_GRIPPER_CFG", @@ -89,6 +91,8 @@ from .robots import ( GR1T2_CFG, GR1T2_HIGH_PD_CFG, FRANKA_PANDA_CFG, + FRANKA_PANDA_LEGACY_CFG, + FRANKA_PANDA_LEGACY_HIGH_PD_CFG, FRANKA_PANDA_HIGH_PD_CFG, FRANKA_PANDA_MENAGERIE_CFG, FRANKA_ROBOTIQ_GRIPPER_CFG, diff --git a/source/isaaclab_assets/isaaclab_assets/robots/__init__.pyi b/source/isaaclab_assets/isaaclab_assets/robots/__init__.pyi index 023c8e801230..11b23110e810 100644 --- a/source/isaaclab_assets/isaaclab_assets/robots/__init__.pyi +++ b/source/isaaclab_assets/isaaclab_assets/robots/__init__.pyi @@ -22,6 +22,8 @@ __all__ = [ "GR1T2_CFG", "GR1T2_HIGH_PD_CFG", "FRANKA_PANDA_CFG", + "FRANKA_PANDA_LEGACY_CFG", + "FRANKA_PANDA_LEGACY_HIGH_PD_CFG", "FRANKA_PANDA_HIGH_PD_CFG", "FRANKA_PANDA_MENAGERIE_CFG", "FRANKA_ROBOTIQ_GRIPPER_CFG", @@ -82,6 +84,8 @@ from .cassie import CASSIE_CFG from .fourier import GR1T2_CFG, GR1T2_HIGH_PD_CFG from .franka import ( FRANKA_PANDA_CFG, + FRANKA_PANDA_LEGACY_CFG, + FRANKA_PANDA_LEGACY_HIGH_PD_CFG, FRANKA_PANDA_HIGH_PD_CFG, FRANKA_PANDA_MENAGERIE_CFG, FRANKA_ROBOTIQ_GRIPPER_CFG, diff --git a/source/isaaclab_assets/isaaclab_assets/robots/franka.py b/source/isaaclab_assets/isaaclab_assets/robots/franka.py index c8749fab4fdd..8084402b2eee 100644 --- a/source/isaaclab_assets/isaaclab_assets/robots/franka.py +++ b/source/isaaclab_assets/isaaclab_assets/robots/franka.py @@ -7,11 +7,18 @@ The following configurations are available: -* :obj:`FRANKA_PANDA_CFG`: Franka Emika Panda robot with Panda hand -* :obj:`FRANKA_PANDA_MENAGERIE_CFG`: Franka Emika Panda robot converted from MuJoCo Menagerie -* :obj:`FRANKA_PANDA_HIGH_PD_CFG`: Franka Emika Panda robot with Panda hand with stiffer PD control +* :obj:`FRANKA_PANDA_CFG`: Shared flat asset for maintained Franka tasks +* :obj:`FRANKA_PANDA_HIGH_PD_CFG`: Flat asset with stiffer PD control +* :obj:`FRANKA_PANDA_LEGACY_CFG`: Legacy asset and actuators +* :obj:`FRANKA_PANDA_LEGACY_HIGH_PD_CFG`: Legacy high-PD configuration +* :obj:`FRANKA_PANDA_MENAGERIE_CFG`: Menagerie actuator configuration * :obj:`FRANKA_ROBOTIQ_GRIPPER_CFG`: Franka robot with Robotiq_2f_85 gripper +Use ``FRANKA_PANDA_CFG`` for new code and select its ``Physics`` variant for the chosen backend. +Use the explicit ``LEGACY`` configurations to retain the original USD path and actuator groups. +The published ``franka_panda.usda`` is now the flat asset; the former nested-instance file remains +available as an explicit USD-path override. + Reference: https://github.com/frankaemika/franka_ros """ @@ -28,7 +35,7 @@ # Configuration ## -FRANKA_PANDA_CFG = ArticulationCfg( +FRANKA_PANDA_LEGACY_CFG = ArticulationCfg( spawn=sim_utils.UsdFileCfg( usd_path=f"{ISAACLAB_NUCLEUS_DIR}/Robots/FrankaEmika/Legacy/panda_instanceable.usd", activate_contact_sensors=False, @@ -77,10 +84,78 @@ }, soft_joint_pos_limit_factor=1.0, ) -"""Configuration of Franka Emika Panda robot.""" +"""Configuration of the legacy Franka Emika Panda robot asset.""" + +FRANKA_PANDA_LEGACY_HIGH_PD_CFG = clone(FRANKA_PANDA_LEGACY_CFG) +FRANKA_PANDA_LEGACY_HIGH_PD_CFG.spawn.rigid_props.disable_gravity = True +for actuator in ("panda_shoulder", "panda_forearm"): + FRANKA_PANDA_LEGACY_HIGH_PD_CFG.actuators[actuator].stiffness = 400.0 + FRANKA_PANDA_LEGACY_HIGH_PD_CFG.actuators[actuator].damping = 80.0 +"""Configuration of the legacy Franka Emika Panda robot with stiffer PD control.""" + + +FRANKA_PANDA_CFG = ArticulationCfg( + spawn=sim_utils.UsdFileCfg( + usd_path=f"{ISAACLAB_NUCLEUS_DIR}/Robots/FrankaEmika/franka_panda.usda", + variants={"Physics": "physx", "Colliders": "gripper_only"}, + activate_contact_sensors=False, + rigid_props=PhysxRigidBodyCfg(disable_gravity=False, max_depenetration_velocity=5.0), + articulation_props=[ + PhysxArticulationCfg( + enabled_self_collisions=False, solver_position_iteration_count=8, solver_velocity_iteration_count=0 + ), + NewtonArticulationCfg(self_collision_enabled=False), + ], + ), + init_state=clone(FRANKA_PANDA_LEGACY_CFG.init_state), + actuators={ + "panda_arm": ImplicitActuatorCfg( + joint_names_expr=["panda_joint[1-7]"], + joint_effort_limit={"panda_joint[1-4]": 87.0, "panda_joint[5-7]": 12.0}, + joint_velocity_limit={"panda_joint[1-4]": 20.0, "panda_joint[5-7]": 25.0}, + stiffness=None, + damping=None, + viscous_friction=0.0, + ), + "panda_hand": ImplicitActuatorCfg( + joint_names_expr=["panda_finger_joint1"], + joint_effort_limit=200.0, + stiffness=None, + damping=None, + viscous_friction=0.0, + ), + "panda_finger2_passive": ImplicitActuatorCfg( + joint_names_expr=["panda_finger_joint2"], + joint_effort_limit=200.0, + stiffness=0.0, + damping=0.0, + viscous_friction=0.0, + ), + }, + soft_joint_pos_limit_factor=1.0, +) +"""Configuration of the Franka Emika Panda robot. -FRANKA_PANDA_MENAGERIE_CFG = clone(FRANKA_PANDA_CFG) +The flat asset contains PhysX and MuJoCo physics variants and gripper-only, primitive, and convex-hull +collider variants. The gripper-only collider variant is the default. Explicit solver properties keep +the actuator contract consistent across physics payloads. Only the leading finger has an active drive; +the authored mimic constraint moves the passive follower. The standalone configuration selects the PhysX +payload by default; direct Newton consumers must select the ``mujoco`` physics variant explicitly. +""" + + +FRANKA_PANDA_HIGH_PD_CFG = clone(FRANKA_PANDA_CFG) +FRANKA_PANDA_HIGH_PD_CFG.spawn.rigid_props.disable_gravity = True +FRANKA_PANDA_HIGH_PD_CFG.actuators["panda_arm"].stiffness = 400.0 +FRANKA_PANDA_HIGH_PD_CFG.actuators["panda_arm"].damping = 80.0 +"""Configuration of Franka Emika Panda robot with stiffer PD control. + +This configuration is useful for task-space control using differential IK. +""" + + +FRANKA_PANDA_MENAGERIE_CFG = clone(FRANKA_PANDA_LEGACY_CFG) FRANKA_PANDA_MENAGERIE_CFG.spawn.usd_path = f"{ISAACLAB_NUCLEUS_DIR}/Robots/FrankaEmika/franka_panda.usda" FRANKA_PANDA_MENAGERIE_CFG.actuators = { "panda_arm": ImplicitActuatorCfg( @@ -95,27 +170,10 @@ damping=None, ), } -"""Configuration of the MuJoCo Menagerie-derived Franka Emika Panda robot. +"""Configuration of the Franka Emika Panda robot with Menagerie actuator settings.""" -The converted model has different inertial and drive authoring from the legacy asset used by -:attr:`FRANKA_PANDA_CFG`. The solver velocity limits provide consistent behavior across physics -backends, while the arm and hand retain their USD-authored drives. -""" - -FRANKA_PANDA_HIGH_PD_CFG = clone(FRANKA_PANDA_CFG) -FRANKA_PANDA_HIGH_PD_CFG.spawn.rigid_props.disable_gravity = True -FRANKA_PANDA_HIGH_PD_CFG.actuators["panda_shoulder"].stiffness = 400.0 -FRANKA_PANDA_HIGH_PD_CFG.actuators["panda_shoulder"].damping = 80.0 -FRANKA_PANDA_HIGH_PD_CFG.actuators["panda_forearm"].stiffness = 400.0 -FRANKA_PANDA_HIGH_PD_CFG.actuators["panda_forearm"].damping = 80.0 -"""Configuration of Franka Emika Panda robot with stiffer PD control. - -This configuration is useful for task-space control using differential IK. -""" - - -FRANKA_ROBOTIQ_GRIPPER_CFG = clone(FRANKA_PANDA_CFG) +FRANKA_ROBOTIQ_GRIPPER_CFG = clone(FRANKA_PANDA_LEGACY_CFG) FRANKA_ROBOTIQ_GRIPPER_CFG.spawn.usd_path = f"{ISAAC_NUCLEUS_DIR}/Robots/FrankaRobotics/FrankaPanda/franka.usd" FRANKA_ROBOTIQ_GRIPPER_CFG.spawn.variants = {"Gripper": "Robotiq_2F_85"} FRANKA_ROBOTIQ_GRIPPER_CFG.spawn.rigid_props.disable_gravity = True @@ -172,6 +230,4 @@ damping=0.0, ), } - - """Configuration of Franka Emika Panda robot with Robotiq_2f_85 gripper.""" diff --git a/source/isaaclab_newton/changelog.d/maximiliank-franka-flat-config.skip b/source/isaaclab_newton/changelog.d/maximiliank-franka-flat-config.skip new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/source/isaaclab_newton/test/assets/test_articulation.py b/source/isaaclab_newton/test/assets/test_articulation.py index 2bb728645b39..511de3ef2426 100644 --- a/source/isaaclab_newton/test/assets/test_articulation.py +++ b/source/isaaclab_newton/test/assets/test_articulation.py @@ -71,6 +71,11 @@ from isaaclab_assets import ANYMAL_C_CFG, FRANKA_PANDA_CFG, FRANKA_PANDA_HIGH_PD_CFG # isort:skip from isaaclab_assets.robots.shadow_hand import SHADOW_HAND_NEWTON_CFG +_FRANKA_PANDA_NEWTON_CFG = clone(FRANKA_PANDA_CFG) +_FRANKA_PANDA_NEWTON_CFG.spawn.variants = {"Physics": "mujoco", "Colliders": "gripper_only"} +_FRANKA_PANDA_HIGH_PD_NEWTON_CFG = clone(FRANKA_PANDA_HIGH_PD_CFG) +_FRANKA_PANDA_HIGH_PD_NEWTON_CFG.spawn.variants = {"Physics": "mujoco", "Colliders": "gripper_only"} + SIM_CFGs = { "humanoid": SimulationCfg( physics=NewtonCfg( @@ -229,7 +234,7 @@ def generate_articulation_cfg( actuators={"body": ImplicitActuatorCfg(joint_names_expr=[".*"], stiffness=stiffness, damping=damping)}, ) elif articulation_type == "panda": - articulation_cfg = FRANKA_PANDA_CFG + articulation_cfg = _FRANKA_PANDA_NEWTON_CFG elif articulation_type == "anymal": articulation_cfg = ANYMAL_C_CFG elif articulation_type == "shadow_hand": @@ -440,7 +445,7 @@ def generate_articulation( def _setup_franka_at_home_pose(sim, *, zero_actuator_pd: bool = False, disable_gravity: bool = True): """Build a Franka articulation at its configured home pose. - Constructs :data:`FRANKA_PANDA_HIGH_PD_CFG`, optionally zeroes the + Constructs :data:`_FRANKA_PANDA_HIGH_PD_NEWTON_CFG`, optionally zeroes the arm-actuator PD gains, resets the simulator, and teleports the arm joints to :attr:`default_joint_pos` (the env reset path that normally does this is not invoked for standalone tests, so the @@ -449,23 +454,21 @@ def _setup_franka_at_home_pose(sim, *, zero_actuator_pd: bool = False, disable_g Args: sim: The simulation context to use. - zero_actuator_pd: If True, sets the panda_shoulder/panda_forearm - actuator stiffness and damping to zero. Used by the OSC test + zero_actuator_pd: If True, sets the ``panda_arm`` actuator stiffness + and damping to zero. Used by the OSC test so OSC's joint-effort output is not opposed by the implicit-PD's residual ``kp·(target − q)``. disable_gravity: Per-body gravity flag written to the spawn config. - :data:`FRANKA_PANDA_HIGH_PD_CFG` ships with gravity disabled; + :data:`_FRANKA_PANDA_HIGH_PD_NEWTON_CFG` ships with gravity disabled; pass False for tests where the arm must feel scene gravity. Returns: Tuple of ``(robot, ee_frame_idx, ee_jacobi_idx, arm_joint_ids)``. """ - cfg = replace(clone(FRANKA_PANDA_HIGH_PD_CFG), prim_path="/World/Env_[^/]*/Robot") + cfg = replace(_FRANKA_PANDA_HIGH_PD_NEWTON_CFG, prim_path="/World/Env_[^/]*/Robot") if zero_actuator_pd: - cfg.actuators["panda_shoulder"].stiffness = 0.0 - cfg.actuators["panda_shoulder"].damping = 0.0 - cfg.actuators["panda_forearm"].stiffness = 0.0 - cfg.actuators["panda_forearm"].damping = 0.0 + cfg.actuators["panda_arm"].stiffness = 0.0 + cfg.actuators["panda_arm"].damping = 0.0 cfg.spawn.rigid_props.disable_gravity = disable_gravity sim_utils.create_prim("/World/Env_0", "Xform", translation=(0.0, 0.0, 0.0)) clone_plan_from_env_0(CloneCfg(clone_template="/World/Env_{}"), (cfg,), 1, 0.0) @@ -1752,7 +1755,6 @@ def test_out_of_range_default_joint_state(sim, device, articulation_type, state_ quantity = "positions" if state_field == "joint_pos" else "velocities" replicate(sim.get_clone_plan()) with pytest.raises(ValueError, match=f"default {quantity} out of the limits"): - replicate(sim.get_clone_plan()) sim.reset() @@ -2544,29 +2546,30 @@ def test_write_joint_viscous_friction_to_sim(sim, num_articulations, device, art Static joint friction writes also propagate directly to the Newton model. """ - articulation_cfg = generate_articulation_cfg(articulation_type) - articulation_cfg.actuators["panda_shoulder"].viscous_friction = 0.25 + articulation_cfg = clone(generate_articulation_cfg(articulation_type)) + articulation_cfg.actuators["panda_arm"].viscous_friction = 0.25 + articulation_cfg.actuators["panda_arm"].damping = 2.0 articulation, _ = generate_articulation(articulation_cfg, num_articulations, device) replicate(sim.get_clone_plan()) sim.reset() - shoulder_joint_ids = articulation.actuators["panda_shoulder"].joint_indices - expected_viscous_friction = torch.full((articulation.num_instances, 4), 0.25, device=device) + arm_joint_ids = articulation.actuators["panda_arm"].joint_indices + expected_viscous_friction = torch.full((articulation.num_instances, len(arm_joint_ids)), 0.25, device=device) torch.testing.assert_close( - articulation.data.joint_viscous_friction_coeff.torch[:, shoulder_joint_ids], expected_viscous_friction + articulation.data.joint_viscous_friction_coeff.torch[:, arm_joint_ids], expected_viscous_friction ) torch.testing.assert_close( wp.to_torch(articulation.root_view.get_attribute("joint_damping", SimulationManager.get_model()))[ - :, 0, shoulder_joint_ids + :, 0, arm_joint_ids ], expected_viscous_friction, ) - expected_pd_damping = torch.full_like(expected_viscous_friction, 4.0) - torch.testing.assert_close(articulation.data.joint_damping.torch[:, shoulder_joint_ids], expected_pd_damping) + expected_pd_damping = torch.full_like(expected_viscous_friction, 2.0) + torch.testing.assert_close(articulation.data.joint_damping.torch[:, arm_joint_ids], expected_pd_damping) torch.testing.assert_close( wp.to_torch(articulation.root_view.get_attribute("joint_target_kd", SimulationManager.get_model()))[ - :, 0, shoulder_joint_ids + :, 0, arm_joint_ids ], expected_pd_damping, ) @@ -2872,7 +2875,7 @@ def test_heterogeneous_scene_per_view_shapes(sim, device, add_ground_plane, arti # per-articulation shape gate without that pre-existing quirk. num_per_type = 1 - franka_cfg = replace(FRANKA_PANDA_CFG, prim_path="/World/Env_[^/]*/Franka") + franka_cfg = replace(_FRANKA_PANDA_NEWTON_CFG, prim_path="/World/Env_[^/]*/Franka") anymal_cfg = replace(ANYMAL_C_CFG, prim_path="/World/Env_[^/]*/Anymal") anymal_cfg.init_state.pos = (0.0, 5.0, anymal_cfg.init_state.pos[2]) diff --git a/source/isaaclab_ov/changelog.d/maximiliank-frame-transformer-nested-bodies.fixed.rst b/source/isaaclab_ov/changelog.d/maximiliank-frame-transformer-nested-bodies.fixed.rst new file mode 100644 index 000000000000..2b8ebda96109 --- /dev/null +++ b/source/isaaclab_ov/changelog.d/maximiliank-frame-transformer-nested-bodies.fixed.rst @@ -0,0 +1,2 @@ +* Fixed frame-transformer path expressions that directly match a rigid body from also selecting + nested rigid-body descendants. diff --git a/source/isaaclab_ov/isaaclab_ov/sensors/frame_transformer/frame_transformer.py b/source/isaaclab_ov/isaaclab_ov/sensors/frame_transformer/frame_transformer.py index 3c9d0c633135..2c8f583ad5a9 100644 --- a/source/isaaclab_ov/isaaclab_ov/sensors/frame_transformer/frame_transformer.py +++ b/source/isaaclab_ov/isaaclab_ov/sensors/frame_transformer/frame_transformer.py @@ -172,17 +172,21 @@ def _initialize_impl(self) -> None: for frame, prim_path, offset, frame_type in zip(frames, frame_prim_paths, frame_offsets, frame_types): # Resolve source-side env prims and destination expressions. This keeps discovery plan-aware when # the active clone plan has physics clones without authored USD prims for every environment. - def has_rigid_body_api(prim) -> bool: - return bool(prim.HasAPI(UsdPhysics.RigidBodyAPI)) - - matches = resolve_matching_prims_from_source( - prim_path, predicate=has_rigid_body_api, raise_if_no_matches=False - ) + matches = [ + (prim, destination) + for prim, destination in resolve_matching_prims_from_source(prim_path, raise_if_no_matches=False) + if prim.HasAPI(UsdPhysics.RigidBodyAPI) + ] if not matches: raise ValueError( f"Failed to create frame transformer for frame '{frame}' with path '{prim_path}'." " No matching rigid-body prims were found." ) + if frame_type == "source" and len(matches) != 1: + raise ValueError( + f"Expected one source rigid-body prim for frame '{frame}' with path '{prim_path}'," + f" found {len(matches)}." + ) for prim, matching_prim_path in matches: # Get the name of the body: use relative prim path for unique identification body_name = self._get_relative_body_path(matching_prim_path) @@ -296,8 +300,8 @@ def has_rigid_body_api(prim) -> bool: # -- target frames: use relative prim path for unique identification self._target_frame_body_names = [self._get_relative_body_path(prim_path) for prim_path in sorted_prim_paths] - # -- source frame: use relative prim path for unique identification - self._source_frame_body_name = self._get_relative_body_path(self.cfg.prim_path) + # -- source frame: retain the concrete body resolved from the configured expression + self._source_frame_body_name = tracked_body_names[0] source_frame_index = self._target_frame_body_names.index(self._source_frame_body_name) # Only remove source frame from tracked bodies if it is not also a target frame diff --git a/source/isaaclab_ov/test/assets/test_articulation.py b/source/isaaclab_ov/test/assets/test_articulation.py index ca62a9ca9d47..f116a632706e 100644 --- a/source/isaaclab_ov/test/assets/test_articulation.py +++ b/source/isaaclab_ov/test/assets/test_articulation.py @@ -2320,7 +2320,7 @@ def test_reset(sim, num_articulations, device): @pytest.mark.parametrize("device", test_devices()) @pytest.mark.parametrize("add_ground_plane", [True]) def test_apply_joint_command(sim, num_articulations, device, add_ground_plane): - """Test applying of joint position target functions correctly for a robotic arm.""" + """Arm targets track commands while the passive finger follows the driven finger.""" articulation_cfg = generate_articulation_cfg(articulation_type="panda") articulation, _ = generate_articulation( articulation_cfg=articulation_cfg, num_articulations=num_articulations, device=device @@ -2338,6 +2338,10 @@ def test_apply_joint_command(sim, num_articulations, device, add_ground_plane): # reset dof state joint_pos = articulation.data.default_joint_pos.torch.clone() joint_pos[:, 3] = 0.0 + leader_id = articulation.find_joints("panda_finger_joint1")[0][0] + follower_id = articulation.find_joints("panda_finger_joint2")[0][0] + initial_leader_pos = articulation.data.joint_pos.torch[:, leader_id].clone() + joint_pos[:, [leader_id, follower_id]] = 0.01 # apply action to the articulation articulation.set_joint_position_target_index(target=joint_pos) @@ -2354,6 +2358,11 @@ def test_apply_joint_command(sim, num_articulations, device, add_ground_plane): # every joint toward zero instead (the wrist ends near 0.3 rad instead of 3.0 rad). torch.testing.assert_close(articulation.data.joint_pos.torch[:, 3:], joint_pos[:, 3:], atol=0.1, rtol=0.0) + leader_pos = articulation.data.joint_pos.torch[:, leader_id] + follower_pos = articulation.data.joint_pos.torch[:, follower_id] + assert torch.all(torch.abs(leader_pos - initial_leader_pos) > 0.005) + torch.testing.assert_close(follower_pos, leader_pos, rtol=0.0, atol=5.0e-4) + @pytest.mark.parametrize("num_articulations", [2]) @pytest.mark.parametrize("device", test_devices()) diff --git a/source/isaaclab_ov/test/sensors/test_frame_transformer.py b/source/isaaclab_ov/test/sensors/test_frame_transformer.py index 4f520bd382b0..185fb16143ea 100644 --- a/source/isaaclab_ov/test/sensors/test_frame_transformer.py +++ b/source/isaaclab_ov/test/sensors/test_frame_transformer.py @@ -47,9 +47,11 @@ from isaaclab.sensors import BaseFrameTransformer, FrameTransformerCfg, OffsetCfg # noqa: E402 from isaaclab.sim import SimulationCfg, build_simulation_context # noqa: E402 from isaaclab.terrains import TerrainImporterCfg # noqa: E402 +from isaaclab.test.utils import DeviceScope, test_devices # noqa: E402 from isaaclab.utils import configclass, replace # noqa: E402 from isaaclab_assets.robots.anymal import ANYMAL_C_CFG # noqa: E402 +from isaaclab_assets.robots.franka import FRANKA_PANDA_CFG # noqa: E402 wp.init() @@ -668,3 +670,33 @@ class MultiRobotSceneCfg(InteractiveSceneCfg): assert any(torch.allclose(rf_pos, expected, atol=1e-5) for expected in expected_rf_positions), ( f"RF_SHANK position {rf_pos} doesn't match either configured body offset" ) + + +@pytest.mark.parametrize("device", test_devices(DeviceScope.DEFAULT_CUDA)) +def test_frame_transformer_nested_rigid_bodies(device): + """Test that a matched rigid body does not include nested rigid-body descendants.""" + with _ovphysx_sim_context(device=device) as sim: + sim._app_control_on_stop_handle = None + scene_cfg = _SceneCfg(num_envs=2, env_spacing=5.0, lazy_sensor_update=False) + scene_cfg.robot = replace(FRANKA_PANDA_CFG, prim_path="{ENV_REGEX_NS}/Robot") + scene_cfg.frame_transformer = FrameTransformerCfg( + prim_path="{ENV_REGEX_NS}/Robot/(Geometry/)?panda_link0", + target_frames=[ + FrameTransformerCfg.FrameCfg(prim_path="{ENV_REGEX_NS}/Robot/(Geometry/.*/)?panda_(hand|.*finger)"), + ], + ) + scene = InteractiveScene(scene_cfg) + + sim.reset() + scene.update(sim.get_physics_dt()) + + robot = scene.articulations["robot"] + source_id = robot.find_bodies("panda_link0")[0][0] + target_ids = robot.find_bodies(["panda_hand", "panda_leftfinger", "panda_rightfinger"])[0] + frame_data = scene.sensors["frame_transformer"].data + + assert frame_data.target_frame_names == ["panda_hand", "panda_leftfinger", "panda_rightfinger"] + torch.testing.assert_close(frame_data.source_pos_w.torch, robot.data.body_pos_w.torch[:, source_id]) + torch.testing.assert_close(frame_data.source_quat_w.torch, robot.data.body_quat_w.torch[:, source_id]) + torch.testing.assert_close(frame_data.target_pos_w.torch, robot.data.body_pos_w.torch[:, target_ids]) + torch.testing.assert_close(frame_data.target_quat_w.torch, robot.data.body_quat_w.torch[:, target_ids]) diff --git a/source/isaaclab_physx/changelog.d/maximiliank-frame-transformer-nested-bodies.fixed.rst b/source/isaaclab_physx/changelog.d/maximiliank-frame-transformer-nested-bodies.fixed.rst new file mode 100644 index 000000000000..2b8ebda96109 --- /dev/null +++ b/source/isaaclab_physx/changelog.d/maximiliank-frame-transformer-nested-bodies.fixed.rst @@ -0,0 +1,2 @@ +* Fixed frame-transformer path expressions that directly match a rigid body from also selecting + nested rigid-body descendants. diff --git a/source/isaaclab_physx/isaaclab_physx/sensors/frame_transformer/frame_transformer.py b/source/isaaclab_physx/isaaclab_physx/sensors/frame_transformer/frame_transformer.py index 0401ab53868d..fa72c6e63371 100644 --- a/source/isaaclab_physx/isaaclab_physx/sensors/frame_transformer/frame_transformer.py +++ b/source/isaaclab_physx/isaaclab_physx/sensors/frame_transformer/frame_transformer.py @@ -185,18 +185,21 @@ def _initialize_impl(self): frame_offsets = [None] + [target_frame.offset for target_frame in self.cfg.target_frames] frame_types = ["source"] + ["target"] * len(self.cfg.target_frames) for frame, prim_path, offset, frame_type in zip(frames, frame_prim_paths, frame_offsets, frame_types): - # Resolve the source-side env prims (filtered to rigid bodies) and their destination - # expressions. Plan-aware: with an active ``ClonePlan``, only env-0 representatives - # are walked and dest expressions are rebuilt against the plan's destination glob. - def has_rigid_body_api(prim) -> bool: - return bool(prim.HasAPI(UsdPhysics.RigidBodyAPI)) - - matches = resolve_matching_prims_from_source(prim_path, has_rigid_body_api, raise_if_no_matches=False) + matches = [ + (prim, destination) + for prim, destination in resolve_matching_prims_from_source(prim_path, raise_if_no_matches=False) + if prim.HasAPI(UsdPhysics.RigidBodyAPI) + ] if not matches: raise ValueError( f"Failed to create frame transformer for frame '{frame}' with path '{prim_path}'." " No matching rigid-body prims were found." ) + if frame_type == "source" and len(matches) != 1: + raise ValueError( + f"Expected one source rigid-body prim for frame '{frame}' with path '{prim_path}'," + f" found {len(matches)}." + ) for prim, matching_prim_path in matches: # Get the name of the body: use relative prim path for unique identification body_name = self._get_relative_body_path(matching_prim_path) @@ -298,8 +301,8 @@ def extract_env_num_and_prim_path(item: str) -> tuple[int, str]: # -- target frames: use relative prim path for unique identification self._target_frame_body_names = [self._get_relative_body_path(prim_path) for prim_path in sorted_prim_paths] - # -- source frame: use relative prim path for unique identification - self._source_frame_body_name = self._get_relative_body_path(self.cfg.prim_path) + # -- source frame: retain the concrete body resolved from the configured expression + self._source_frame_body_name = tracked_body_names[0] source_frame_index = self._target_frame_body_names.index(self._source_frame_body_name) # Only remove source frame from tracked bodies if it is not also a target frame diff --git a/source/isaaclab_physx/test/sensors/test_frame_transformer.py b/source/isaaclab_physx/test/sensors/test_frame_transformer.py index 7d0ffb0d918a..a61dc3804246 100644 --- a/source/isaaclab_physx/test/sensors/test_frame_transformer.py +++ b/source/isaaclab_physx/test/sensors/test_frame_transformer.py @@ -32,6 +32,7 @@ # Pre-defined configs ## from isaaclab_assets.robots.anymal import ANYMAL_C_CFG # isort:skip +from isaaclab_assets.robots.franka import FRANKA_PANDA_CFG # isort:skip def quat_from_euler_rpy(roll, pitch, yaw, degrees=False): @@ -720,3 +721,30 @@ def test_frame_transformer_invalidation_drops_cached_launch_state(monkeypatch): assert sensor._frame_physx_view is None assert sensor._raw_transforms is None assert sensor._update_cmd is None + + +def test_frame_transformer_nested_rigid_bodies(sim): + """Test that a matched rigid body does not include nested rigid-body descendants.""" + scene_cfg = MySceneCfg(num_envs=2, env_spacing=5.0, lazy_sensor_update=False) + scene_cfg.robot = replace(FRANKA_PANDA_CFG, prim_path="{ENV_REGEX_NS}/Robot") + scene_cfg.frame_transformer = FrameTransformerCfg( + prim_path="{ENV_REGEX_NS}/Robot/(Geometry/)?panda_link0", + target_frames=[ + FrameTransformerCfg.FrameCfg(prim_path="{ENV_REGEX_NS}/Robot/(Geometry/.*/)?panda_(hand|.*finger)"), + ], + ) + scene = InteractiveScene(scene_cfg) + + sim.reset() + scene.update(sim.get_physics_dt()) + + robot = scene.articulations["robot"] + source_id = robot.find_bodies("panda_link0")[0][0] + target_ids = robot.find_bodies(["panda_hand", "panda_leftfinger", "panda_rightfinger"])[0] + frame_data = scene.sensors["frame_transformer"].data + + assert frame_data.target_frame_names == ["panda_hand", "panda_leftfinger", "panda_rightfinger"] + torch.testing.assert_close(frame_data.source_pos_w.torch, robot.data.body_pos_w.torch[:, source_id]) + torch.testing.assert_close(frame_data.source_quat_w.torch, robot.data.body_quat_w.torch[:, source_id]) + torch.testing.assert_close(frame_data.target_pos_w.torch, robot.data.body_pos_w.torch[:, target_ids]) + torch.testing.assert_close(frame_data.target_quat_w.torch, robot.data.body_quat_w.torch[:, target_ids]) diff --git a/source/isaaclab_tasks/changelog.d/franka-pour-synced-mimic.fixed.rst b/source/isaaclab_tasks/changelog.d/franka-pour-synced-mimic.fixed.rst new file mode 100644 index 000000000000..f68ef8e4c47f --- /dev/null +++ b/source/isaaclab_tasks/changelog.d/franka-pour-synced-mimic.fixed.rst @@ -0,0 +1,2 @@ +* Fixed Franka Pour startup with the shared Franka asset by selecting its MuJoCo physics payload + and removing the obsolete duplicate-mimic workaround. diff --git a/source/isaaclab_tasks/isaaclab_tasks/benchmark/render_benchmark/render_benchmark_env_cfg.py b/source/isaaclab_tasks/isaaclab_tasks/benchmark/render_benchmark/render_benchmark_env_cfg.py index a09bdf673811..54250dde7ca9 100644 --- a/source/isaaclab_tasks/isaaclab_tasks/benchmark/render_benchmark/render_benchmark_env_cfg.py +++ b/source/isaaclab_tasks/isaaclab_tasks/benchmark/render_benchmark/render_benchmark_env_cfg.py @@ -28,7 +28,7 @@ from isaaclab_tasks.utils import PresetCfg from isaaclab_tasks.utils.presets import MultiBackendRendererCfg -from isaaclab_assets.robots.franka import FRANKA_PANDA_HIGH_PD_CFG +from isaaclab_assets.robots.franka import FRANKA_PANDA_LEGACY_HIGH_PD_CFG BenchmarkMode = Literal["render", "physics_render"] """Animation mode used by the render benchmark. @@ -144,9 +144,9 @@ class RenderBenchmarkSceneCfg(InteractiveSceneCfg): init_state=RigidObjectCfg.InitialStateCfg(pos=(0.0, 0.0, -0.05)), ) robot: ArticulationCfg = replace( - FRANKA_PANDA_HIGH_PD_CFG, + FRANKA_PANDA_LEGACY_HIGH_PD_CFG, prim_path="{ENV_REGEX_NS}/Robot", - init_state=replace(FRANKA_PANDA_HIGH_PD_CFG.init_state, pos=(1.0, 0.0, 0.0), rot=(0.0, 0.0, 1.0, 0.0)), + init_state=replace(FRANKA_PANDA_LEGACY_HIGH_PD_CFG.init_state, pos=(1.0, 0.0, 0.0), rot=(0.0, 0.0, 1.0, 0.0)), ) cabinet: ArticulationCfg = ArticulationCfg( prim_path="{ENV_REGEX_NS}/Cabinet", diff --git a/source/isaaclab_tasks/isaaclab_tasks/contrib/cabinet/config/franka/ik_abs_env_cfg.py b/source/isaaclab_tasks/isaaclab_tasks/contrib/cabinet/config/franka/ik_abs_env_cfg.py index 7707d97e8a7e..76000c041c8d 100644 --- a/source/isaaclab_tasks/isaaclab_tasks/contrib/cabinet/config/franka/ik_abs_env_cfg.py +++ b/source/isaaclab_tasks/isaaclab_tasks/contrib/cabinet/config/franka/ik_abs_env_cfg.py @@ -12,7 +12,7 @@ ## # Pre-defined configs ## -from isaaclab_assets.robots.franka import FRANKA_PANDA_HIGH_PD_CFG # isort: skip +from isaaclab_assets.robots.franka import FRANKA_PANDA_LEGACY_HIGH_PD_CFG # isort: skip @configclass @@ -23,7 +23,7 @@ def __post_init__(self): # Set Franka as robot # We switch here to a stiffer PD controller for IK tracking to be better. - self.scene.robot = replace(FRANKA_PANDA_HIGH_PD_CFG, prim_path="{ENV_REGEX_NS}/Robot") + self.scene.robot = replace(FRANKA_PANDA_LEGACY_HIGH_PD_CFG, prim_path="{ENV_REGEX_NS}/Robot") # Set actions for the specific robot type (franka) self.actions.arm_action = DifferentialInverseKinematicsActionCfg( diff --git a/source/isaaclab_tasks/isaaclab_tasks/contrib/cabinet/config/franka/ik_rel_env_cfg.py b/source/isaaclab_tasks/isaaclab_tasks/contrib/cabinet/config/franka/ik_rel_env_cfg.py index 7e2e96e9460e..e8da541c7b09 100644 --- a/source/isaaclab_tasks/isaaclab_tasks/contrib/cabinet/config/franka/ik_rel_env_cfg.py +++ b/source/isaaclab_tasks/isaaclab_tasks/contrib/cabinet/config/franka/ik_rel_env_cfg.py @@ -12,7 +12,7 @@ ## # Pre-defined configs ## -from isaaclab_assets.robots.franka import FRANKA_PANDA_HIGH_PD_CFG # isort: skip +from isaaclab_assets.robots.franka import FRANKA_PANDA_LEGACY_HIGH_PD_CFG # isort: skip @configclass @@ -23,7 +23,7 @@ def __post_init__(self): # Set Franka as robot # We switch here to a stiffer PD controller for IK tracking to be better. - self.scene.robot = replace(FRANKA_PANDA_HIGH_PD_CFG, prim_path="{ENV_REGEX_NS}/Robot") + self.scene.robot = replace(FRANKA_PANDA_LEGACY_HIGH_PD_CFG, prim_path="{ENV_REGEX_NS}/Robot") # Set actions for the specific robot type (franka) self.actions.arm_action = DifferentialInverseKinematicsActionCfg( diff --git a/source/isaaclab_tasks/isaaclab_tasks/contrib/franka_pour/pour_env_cfg.py b/source/isaaclab_tasks/isaaclab_tasks/contrib/franka_pour/pour_env_cfg.py index 1dc988351a67..a01d17f061d9 100644 --- a/source/isaaclab_tasks/isaaclab_tasks/contrib/franka_pour/pour_env_cfg.py +++ b/source/isaaclab_tasks/isaaclab_tasks/contrib/franka_pour/pour_env_cfg.py @@ -182,7 +182,7 @@ def spawn_franka_with_arm_collisions( orientation: tuple[float, float, float, float] | None = None, **kwargs, ): - """Spawn the canonical Franka with the intended mimic and arm-collision schemas.""" + """Spawn the canonical Franka with writable convex-hull arm colliders.""" from pxr import Usd, UsdPhysics # noqa: PLC0415 robot_prim = sim_utils.spawn_from_usd(prim_path, cfg, translation, orientation, **kwargs) @@ -191,29 +191,6 @@ def spawn_franka_with_arm_collisions( if not self_collision or not self_collision.Set(True): raise RuntimeError(f"Franka asset at {root_prim.GetPath()} has no writable Newton self-collision flag.") - finger_joints = { - prim.GetName(): prim - for prim in Usd.PrimRange(root_prim, Usd.TraverseInstanceProxies()) - if prim.GetName() in {"panda_finger_joint1", "panda_finger_joint2"} - } - if finger_joints.keys() != {"panda_finger_joint1", "panda_finger_joint2"}: - missing = sorted({"panda_finger_joint1", "panda_finger_joint2"}.difference(finger_joints)) - raise RuntimeError(f"Franka asset at {root_prim.GetPath()} is missing finger joints: {missing}.") - - leader_schemas = finger_joints["panda_finger_joint1"].GetMetadata("apiSchemas") - follower_schemas = finger_joints["panda_finger_joint2"].GetMetadata("apiSchemas") - leader_schema_names = [] if leader_schemas is None else list(leader_schemas.GetAppliedItems()) - follower_schema_names = [] if follower_schemas is None else list(follower_schemas.GetAppliedItems()) - if "NewtonMimicAPI" not in leader_schema_names or "PhysxMimicJointAPI:linear" not in follower_schema_names: - raise RuntimeError( - "The pinned Franka physics payload no longer has the expected duplicate finger-mimic schemas. " - "Update the asset hash and task-side override together." - ) - if not finger_joints["panda_finger_joint1"].RemoveAppliedSchema("NewtonMimicAPI"): - raise RuntimeError("Failed to remove the redundant Franka Newton finger-mimic schema.") - if finger_joints["panda_finger_joint1"].HasAPI("NewtonMimicAPI"): - raise RuntimeError("The redundant Franka Newton finger-mimic schema is still composed after removal.") - proxy_roots = { prim.GetName(): prim.GetParent().GetPath() for prim in Usd.PrimRange(root_prim, Usd.TraverseInstanceProxies()) @@ -339,7 +316,7 @@ class PourSceneCfg(InteractiveSceneCfg): ) robot = replace(FRANKA_PANDA_CFG, prim_path="{ENV_REGEX_NS}/Robot") robot.spawn.usd_path = FRANKA_POUR_ROBOT_USD_PATH - robot.spawn.variants = {"Colliders": "convex_hulls"} + robot.spawn.variants = {"Physics": "mujoco", "Colliders": "convex_hulls"} robot.spawn.func = spawn_franka_with_arm_collisions # The pouring asset relies on arm self-collision; author it in both namespaces so whichever # backend resolves the articulation sees the flag. @@ -349,22 +326,8 @@ class PourSceneCfg(InteractiveSceneCfg): next( frag for frag in robot.spawn.articulation_props if isinstance(frag, NewtonArticulationCfg) ).self_collision_enabled = True - robot.actuators = { - name: replace( - actuator_cfg, effort_limit_sim=None, velocity_limit_sim=None, stiffness=None, damping=None, armature=None - ) - for name, actuator_cfg in robot.actuators.items() - } - robot.actuators["panda_shoulder"].stiffness = { - key: FRANKA_POUR_ARM_DRIVE_STIFFNESS[key] for key in ("panda_joint[1-2]", "panda_joint[3-4]") - } - robot.actuators["panda_shoulder"].damping = { - key: FRANKA_POUR_ARM_DRIVE_DAMPING[key] for key in ("panda_joint[1-2]", "panda_joint[3-4]") - } - robot.actuators["panda_forearm"].stiffness = { - "panda_joint[5-7]": FRANKA_POUR_ARM_DRIVE_STIFFNESS["panda_joint[5-7]"] - } - robot.actuators["panda_forearm"].damping = {"panda_joint[5-7]": FRANKA_POUR_ARM_DRIVE_DAMPING["panda_joint[5-7]"]} + robot.actuators["panda_arm"].stiffness = dict(FRANKA_POUR_ARM_DRIVE_STIFFNESS) + robot.actuators["panda_arm"].damping = dict(FRANKA_POUR_ARM_DRIVE_DAMPING) robot.spawn.joint_drive_props = MujocoJointCfg(actuatorgravcomp=True) robot.init_state.joint_pos.update(dict(zip(_ARM_JOINT_NAMES, _ARM_HOME, strict=True))) robot.init_state.joint_pos["panda_finger_joint.*"] = _GRIPPER_OPEN_POSITION diff --git a/source/isaaclab_tasks/isaaclab_tasks/contrib/lift/config/franka/ik_abs_env_cfg.py b/source/isaaclab_tasks/isaaclab_tasks/contrib/lift/config/franka/ik_abs_env_cfg.py index 8bee40e4b2be..4c76b049a78c 100644 --- a/source/isaaclab_tasks/isaaclab_tasks/contrib/lift/config/franka/ik_abs_env_cfg.py +++ b/source/isaaclab_tasks/isaaclab_tasks/contrib/lift/config/franka/ik_abs_env_cfg.py @@ -12,7 +12,7 @@ ## # Pre-defined configs ## -from isaaclab_assets.robots.franka import FRANKA_PANDA_HIGH_PD_CFG # isort: skip +from isaaclab_assets.robots.franka import FRANKA_PANDA_LEGACY_HIGH_PD_CFG # isort: skip ## @@ -28,7 +28,7 @@ def __post_init__(self): # Set Franka as robot # We switch here to a stiffer PD controller for IK tracking to be better. - self.scene.robot = replace(FRANKA_PANDA_HIGH_PD_CFG, prim_path="{ENV_REGEX_NS}/Robot") + self.scene.robot = replace(FRANKA_PANDA_LEGACY_HIGH_PD_CFG, prim_path="{ENV_REGEX_NS}/Robot") # Set actions for the specific robot type (franka) self.actions.arm_action = DifferentialInverseKinematicsActionCfg( diff --git a/source/isaaclab_tasks/isaaclab_tasks/contrib/lift/config/franka/ik_rel_env_cfg.py b/source/isaaclab_tasks/isaaclab_tasks/contrib/lift/config/franka/ik_rel_env_cfg.py index 4869b30b8521..141125da0b23 100644 --- a/source/isaaclab_tasks/isaaclab_tasks/contrib/lift/config/franka/ik_rel_env_cfg.py +++ b/source/isaaclab_tasks/isaaclab_tasks/contrib/lift/config/franka/ik_rel_env_cfg.py @@ -12,7 +12,7 @@ ## # Pre-defined configs ## -from isaaclab_assets.robots.franka import FRANKA_PANDA_HIGH_PD_CFG # isort: skip +from isaaclab_assets.robots.franka import FRANKA_PANDA_LEGACY_HIGH_PD_CFG # isort: skip @configclass @@ -23,7 +23,7 @@ def __post_init__(self): # Set Franka as robot # We switch here to a stiffer PD controller for IK tracking to be better. - self.scene.robot = replace(FRANKA_PANDA_HIGH_PD_CFG, prim_path="{ENV_REGEX_NS}/Robot") + self.scene.robot = replace(FRANKA_PANDA_LEGACY_HIGH_PD_CFG, prim_path="{ENV_REGEX_NS}/Robot") # Set actions for the specific robot type (franka) self.actions.arm_action = DifferentialInverseKinematicsActionCfg( diff --git a/source/isaaclab_tasks/isaaclab_tasks/contrib/lift/config/franka/joint_pos_env_cfg.py b/source/isaaclab_tasks/isaaclab_tasks/contrib/lift/config/franka/joint_pos_env_cfg.py index 5935bb95c19c..8a1dd9feebc8 100644 --- a/source/isaaclab_tasks/isaaclab_tasks/contrib/lift/config/franka/joint_pos_env_cfg.py +++ b/source/isaaclab_tasks/isaaclab_tasks/contrib/lift/config/franka/joint_pos_env_cfg.py @@ -19,7 +19,7 @@ # Pre-defined configs ## from isaaclab.markers.config import FRAME_MARKER_CFG # isort: skip -from isaaclab_assets.robots.franka import FRANKA_PANDA_CFG # isort: skip +from isaaclab_assets.robots.franka import FRANKA_PANDA_LEGACY_CFG # isort: skip @configclass @@ -29,7 +29,7 @@ def __post_init__(self): super().__post_init__() # Set Franka as robot - self.scene.robot = replace(FRANKA_PANDA_CFG, prim_path="{ENV_REGEX_NS}/Robot") + self.scene.robot = replace(FRANKA_PANDA_LEGACY_CFG, prim_path="{ENV_REGEX_NS}/Robot") # Set actions for the specific robot type (franka) self.actions.arm_action = mdp.JointPositionActionCfg( diff --git a/source/isaaclab_tasks/isaaclab_tasks/contrib/stack/config/franka/bin_stack_ik_rel_env_cfg.py b/source/isaaclab_tasks/isaaclab_tasks/contrib/stack/config/franka/bin_stack_ik_rel_env_cfg.py index 858c095779aa..d93e3ee74cf4 100644 --- a/source/isaaclab_tasks/isaaclab_tasks/contrib/stack/config/franka/bin_stack_ik_rel_env_cfg.py +++ b/source/isaaclab_tasks/isaaclab_tasks/contrib/stack/config/franka/bin_stack_ik_rel_env_cfg.py @@ -12,7 +12,7 @@ ## # Pre-defined configs ## -from isaaclab_assets.robots.franka import FRANKA_PANDA_HIGH_PD_CFG # isort: skip +from isaaclab_assets.robots.franka import FRANKA_PANDA_LEGACY_HIGH_PD_CFG # isort: skip @configclass @@ -22,7 +22,7 @@ def __post_init__(self): super().__post_init__() # Set Franka as robot - self.scene.robot = replace(FRANKA_PANDA_HIGH_PD_CFG, prim_path="{ENV_REGEX_NS}/Robot") + self.scene.robot = replace(FRANKA_PANDA_LEGACY_HIGH_PD_CFG, prim_path="{ENV_REGEX_NS}/Robot") # Set actions for the specific robot type (franka) self.actions.arm_action = DifferentialInverseKinematicsActionCfg( diff --git a/source/isaaclab_tasks/isaaclab_tasks/contrib/stack/config/franka/bin_stack_joint_pos_env_cfg.py b/source/isaaclab_tasks/isaaclab_tasks/contrib/stack/config/franka/bin_stack_joint_pos_env_cfg.py index 5d4e533e98a0..a5795efc2bec 100644 --- a/source/isaaclab_tasks/isaaclab_tasks/contrib/stack/config/franka/bin_stack_joint_pos_env_cfg.py +++ b/source/isaaclab_tasks/isaaclab_tasks/contrib/stack/config/franka/bin_stack_joint_pos_env_cfg.py @@ -24,7 +24,7 @@ # Pre-defined configs ## from isaaclab.markers.config import FRAME_MARKER_CFG # isort: skip -from isaaclab_assets.robots.franka import FRANKA_PANDA_CFG # isort: skip +from isaaclab_assets.robots.franka import FRANKA_PANDA_LEGACY_CFG # isort: skip @configclass @@ -96,7 +96,7 @@ def __post_init__(self): self.events = EventCfg() # Set Franka as robot - self.scene.robot = replace(FRANKA_PANDA_CFG, prim_path="{ENV_REGEX_NS}/Robot") + self.scene.robot = replace(FRANKA_PANDA_LEGACY_CFG, prim_path="{ENV_REGEX_NS}/Robot") self.scene.robot.spawn.semantic_tags = [("class", "robot")] # Add semantics to table diff --git a/source/isaaclab_tasks/isaaclab_tasks/contrib/stack/config/franka/stack_ik_abs_env_cfg.py b/source/isaaclab_tasks/isaaclab_tasks/contrib/stack/config/franka/stack_ik_abs_env_cfg.py index 7024329b8e57..ab1c2b72ecc0 100644 --- a/source/isaaclab_tasks/isaaclab_tasks/contrib/stack/config/franka/stack_ik_abs_env_cfg.py +++ b/source/isaaclab_tasks/isaaclab_tasks/contrib/stack/config/franka/stack_ik_abs_env_cfg.py @@ -18,7 +18,7 @@ ## # Pre-defined configs ## -from isaaclab_assets.robots.franka import FRANKA_PANDA_HIGH_PD_CFG # isort: skip +from isaaclab_assets.robots.franka import FRANKA_PANDA_LEGACY_HIGH_PD_CFG # isort: skip def _build_franka_stack_pipeline(): @@ -114,7 +114,7 @@ def __post_init__(self): # Set Franka as robot # We switch here to a stiffer PD controller for IK tracking to be better. - self.scene.robot = replace(FRANKA_PANDA_HIGH_PD_CFG, prim_path="{ENV_REGEX_NS}/Robot") + self.scene.robot = replace(FRANKA_PANDA_LEGACY_HIGH_PD_CFG, prim_path="{ENV_REGEX_NS}/Robot") # Set actions for the specific robot type (franka) self.actions.arm_action = DifferentialInverseKinematicsActionCfg( diff --git a/source/isaaclab_tasks/isaaclab_tasks/contrib/stack/config/franka/stack_ik_rel_blueprint_env_cfg.py b/source/isaaclab_tasks/isaaclab_tasks/contrib/stack/config/franka/stack_ik_rel_blueprint_env_cfg.py index 2c74266768ff..a379eb0b5aba 100644 --- a/source/isaaclab_tasks/isaaclab_tasks/contrib/stack/config/franka/stack_ik_rel_blueprint_env_cfg.py +++ b/source/isaaclab_tasks/isaaclab_tasks/contrib/stack/config/franka/stack_ik_rel_blueprint_env_cfg.py @@ -31,7 +31,7 @@ ## # Pre-defined configs ## -from isaaclab_assets.robots.franka import FRANKA_PANDA_HIGH_PD_CFG # isort: skip +from isaaclab_assets.robots.franka import FRANKA_PANDA_LEGACY_HIGH_PD_CFG # isort: skip def image( @@ -217,7 +217,7 @@ def __post_init__(self): # Set Franka as robot # We switch here to a stiffer PD controller for IK tracking to be better. - self.scene.robot = replace(FRANKA_PANDA_HIGH_PD_CFG, prim_path="{ENV_REGEX_NS}/Robot") + self.scene.robot = replace(FRANKA_PANDA_LEGACY_HIGH_PD_CFG, prim_path="{ENV_REGEX_NS}/Robot") self.scene.robot.spawn.semantic_tags = [("class", "robot")] # Set actions for the specific robot type (franka) diff --git a/source/isaaclab_tasks/isaaclab_tasks/contrib/stack/config/franka/stack_ik_rel_env_cfg.py b/source/isaaclab_tasks/isaaclab_tasks/contrib/stack/config/franka/stack_ik_rel_env_cfg.py index 559058ab8673..515e69b18e18 100644 --- a/source/isaaclab_tasks/isaaclab_tasks/contrib/stack/config/franka/stack_ik_rel_env_cfg.py +++ b/source/isaaclab_tasks/isaaclab_tasks/contrib/stack/config/franka/stack_ik_rel_env_cfg.py @@ -22,7 +22,7 @@ # Pre-defined configs ## from isaaclab_assets.robots.franka import ( # isort: skip - FRANKA_PANDA_HIGH_PD_CFG, + FRANKA_PANDA_LEGACY_HIGH_PD_CFG, ) @@ -37,7 +37,7 @@ def __post_init__(self): robot_init_state = self.scene.robot.init_state robot_semantic_tags = self.scene.robot.spawn.semantic_tags self.scene.robot = replace( - FRANKA_PANDA_HIGH_PD_CFG, prim_path="{ENV_REGEX_NS}/Robot", init_state=robot_init_state + FRANKA_PANDA_LEGACY_HIGH_PD_CFG, prim_path="{ENV_REGEX_NS}/Robot", init_state=robot_init_state ) self.scene.robot.spawn.semantic_tags = robot_semantic_tags diff --git a/source/isaaclab_tasks/isaaclab_tasks/contrib/stack/config/franka/stack_ik_rel_env_cfg_skillgen.py b/source/isaaclab_tasks/isaaclab_tasks/contrib/stack/config/franka/stack_ik_rel_env_cfg_skillgen.py index 9563cdc4f2fc..8861d9a3a5b8 100644 --- a/source/isaaclab_tasks/isaaclab_tasks/contrib/stack/config/franka/stack_ik_rel_env_cfg_skillgen.py +++ b/source/isaaclab_tasks/isaaclab_tasks/contrib/stack/config/franka/stack_ik_rel_env_cfg_skillgen.py @@ -16,7 +16,7 @@ ## # Pre-defined configs ## -from isaaclab_assets.robots.franka import FRANKA_PANDA_HIGH_PD_CFG # isort: skip +from isaaclab_assets.robots.franka import FRANKA_PANDA_LEGACY_HIGH_PD_CFG # isort: skip @configclass @@ -107,7 +107,7 @@ def __post_init__(self): # Set Franka as robot # We switch here to a stiffer PD controller for IK tracking to be better. - self.scene.robot = replace(FRANKA_PANDA_HIGH_PD_CFG, prim_path="{ENV_REGEX_NS}/Robot") + self.scene.robot = replace(FRANKA_PANDA_LEGACY_HIGH_PD_CFG, prim_path="{ENV_REGEX_NS}/Robot") # Set actions for the specific robot type (franka) self.actions.arm_action = DifferentialInverseKinematicsActionCfg( diff --git a/source/isaaclab_tasks/isaaclab_tasks/contrib/stack/config/franka/stack_ik_rel_instance_randomize_env_cfg.py b/source/isaaclab_tasks/isaaclab_tasks/contrib/stack/config/franka/stack_ik_rel_instance_randomize_env_cfg.py index 3ab5af14e90c..3de75bb15a36 100644 --- a/source/isaaclab_tasks/isaaclab_tasks/contrib/stack/config/franka/stack_ik_rel_instance_randomize_env_cfg.py +++ b/source/isaaclab_tasks/isaaclab_tasks/contrib/stack/config/franka/stack_ik_rel_instance_randomize_env_cfg.py @@ -12,7 +12,7 @@ ## # Pre-defined configs ## -from isaaclab_assets.robots.franka import FRANKA_PANDA_HIGH_PD_CFG # isort: skip +from isaaclab_assets.robots.franka import FRANKA_PANDA_LEGACY_HIGH_PD_CFG # isort: skip @configclass @@ -25,7 +25,7 @@ def __post_init__(self): # Set Franka as robot # We switch here to a stiffer PD controller for IK tracking to be better. - self.scene.robot = replace(FRANKA_PANDA_HIGH_PD_CFG, prim_path="{ENV_REGEX_NS}/Robot") + self.scene.robot = replace(FRANKA_PANDA_LEGACY_HIGH_PD_CFG, prim_path="{ENV_REGEX_NS}/Robot") # Set actions for the specific robot type (franka) self.actions.arm_action = DifferentialInverseKinematicsActionCfg( diff --git a/source/isaaclab_tasks/isaaclab_tasks/contrib/stack/config/franka/stack_ik_rel_visuomotor_env_cfg.py b/source/isaaclab_tasks/isaaclab_tasks/contrib/stack/config/franka/stack_ik_rel_visuomotor_env_cfg.py index 3d5572611523..ebd249665e19 100644 --- a/source/isaaclab_tasks/isaaclab_tasks/contrib/stack/config/franka/stack_ik_rel_visuomotor_env_cfg.py +++ b/source/isaaclab_tasks/isaaclab_tasks/contrib/stack/config/franka/stack_ik_rel_visuomotor_env_cfg.py @@ -28,7 +28,7 @@ # Pre-defined configs ## from isaaclab.markers.config import FRAME_MARKER_CFG # isort: skip -from isaaclab_assets.robots.franka import FRANKA_PANDA_HIGH_PD_CFG # isort: skip +from isaaclab_assets.robots.franka import FRANKA_PANDA_LEGACY_HIGH_PD_CFG # isort: skip # Default arm + gripper joint pose _FRANKA_STACK_IK_REL_INIT_JOINT_POS: dict[str, float] = { @@ -221,7 +221,7 @@ def __post_init__(self): # Set Franka as robot # We switch here to a stiffer PD controller for IK tracking to be better. self.scene.robot = replace( - FRANKA_PANDA_HIGH_PD_CFG, + FRANKA_PANDA_LEGACY_HIGH_PD_CFG, prim_path="{ENV_REGEX_NS}/Robot", init_state=ArticulationCfg.InitialStateCfg(joint_pos=_FRANKA_STACK_IK_REL_INIT_JOINT_POS), ) diff --git a/source/isaaclab_tasks/isaaclab_tasks/contrib/stack/config/franka/stack_joint_pos_env_cfg.py b/source/isaaclab_tasks/isaaclab_tasks/contrib/stack/config/franka/stack_joint_pos_env_cfg.py index b384e71293b9..7f4517f4f8f3 100644 --- a/source/isaaclab_tasks/isaaclab_tasks/contrib/stack/config/franka/stack_joint_pos_env_cfg.py +++ b/source/isaaclab_tasks/isaaclab_tasks/contrib/stack/config/franka/stack_joint_pos_env_cfg.py @@ -17,7 +17,7 @@ ## # Pre-defined configs ## -from isaaclab_assets.robots.franka import FRANKA_PANDA_CFG # isort: skip +from isaaclab_assets.robots.franka import FRANKA_PANDA_LEGACY_CFG # isort: skip # Default arm + gripper joint pose _FRANKA_STACK_IK_REL_INIT_JOINT_POS: dict[str, float] = { @@ -51,7 +51,7 @@ def __post_init__(self): # Set Franka as robot self.scene.robot = replace( - FRANKA_PANDA_CFG, + FRANKA_PANDA_LEGACY_CFG, prim_path="{ENV_REGEX_NS}/Robot", init_state=ArticulationCfg.InitialStateCfg(joint_pos=_FRANKA_STACK_IK_REL_INIT_JOINT_POS), ) diff --git a/source/isaaclab_tasks/isaaclab_tasks/contrib/stack/config/franka/stack_joint_pos_instance_randomize_env_cfg.py b/source/isaaclab_tasks/isaaclab_tasks/contrib/stack/config/franka/stack_joint_pos_instance_randomize_env_cfg.py index c9700331c462..a48386cfd4c8 100644 --- a/source/isaaclab_tasks/isaaclab_tasks/contrib/stack/config/franka/stack_joint_pos_instance_randomize_env_cfg.py +++ b/source/isaaclab_tasks/isaaclab_tasks/contrib/stack/config/franka/stack_joint_pos_instance_randomize_env_cfg.py @@ -25,7 +25,7 @@ # Pre-defined configs ## from isaaclab.markers.config import FRAME_MARKER_CFG # isort: skip -from isaaclab_assets.robots.franka import FRANKA_PANDA_CFG # isort: skip +from isaaclab_assets.robots.franka import FRANKA_PANDA_LEGACY_CFG # isort: skip @configclass @@ -73,7 +73,7 @@ def __post_init__(self): self.events = EventCfg() # Set Franka as robot - self.scene.robot = replace(FRANKA_PANDA_CFG, prim_path="{ENV_REGEX_NS}/Robot") + self.scene.robot = replace(FRANKA_PANDA_LEGACY_CFG, prim_path="{ENV_REGEX_NS}/Robot") # Set actions for the specific robot type (franka) self.actions.arm_action = mdp.JointPositionActionCfg( diff --git a/source/isaaclab_tasks/isaaclab_tasks/core/cabinet/config/franka/cabinet_direct_env_cfg.py b/source/isaaclab_tasks/isaaclab_tasks/core/cabinet/config/franka/cabinet_direct_env_cfg.py index b6f5f3e16ef0..f8b746bd4fef 100644 --- a/source/isaaclab_tasks/isaaclab_tasks/core/cabinet/config/franka/cabinet_direct_env_cfg.py +++ b/source/isaaclab_tasks/isaaclab_tasks/core/cabinet/config/franka/cabinet_direct_env_cfg.py @@ -9,7 +9,7 @@ from isaaclab.utils import configclass, replace -from isaaclab_assets.robots.franka import FRANKA_PANDA_CFG +from isaaclab_assets.robots.franka import FRANKA_PANDA_LEGACY_CFG from ...cabinet_direct_env_cfg import CabinetDirectEnvCfg, CabinetDirectSceneCfg @@ -18,7 +18,7 @@ class FrankaCabinetDirectSceneCfg(CabinetDirectSceneCfg): """Direct-workflow cabinet scene configured for the Franka robot.""" - robot = replace(FRANKA_PANDA_CFG, prim_path="{ENV_REGEX_NS}/Robot") + robot = replace(FRANKA_PANDA_LEGACY_CFG, prim_path="{ENV_REGEX_NS}/Robot") @configclass diff --git a/source/isaaclab_tasks/isaaclab_tasks/core/cabinet/config/franka/joint_pos_env_cfg.py b/source/isaaclab_tasks/isaaclab_tasks/core/cabinet/config/franka/joint_pos_env_cfg.py index 11fb2caee420..6a15539219a4 100644 --- a/source/isaaclab_tasks/isaaclab_tasks/core/cabinet/config/franka/joint_pos_env_cfg.py +++ b/source/isaaclab_tasks/isaaclab_tasks/core/cabinet/config/franka/joint_pos_env_cfg.py @@ -9,7 +9,7 @@ from isaaclab.sensors.frame_transformer import OffsetCfg from isaaclab.utils import configclass, replace -from isaaclab_assets.robots.franka import FRANKA_PANDA_CFG +from isaaclab_assets.robots.franka import FRANKA_PANDA_LEGACY_CFG from ... import mdp from ...cabinet_env_cfg import FRAME_MARKER_SMALL_CFG, CabinetEnvCfg, CabinetSceneCfg @@ -19,7 +19,7 @@ class FrankaCabinetSceneCfg(CabinetSceneCfg): """Cabinet scene configured for the Franka robot.""" - robot = replace(FRANKA_PANDA_CFG, prim_path="{ENV_REGEX_NS}/Robot") + robot = replace(FRANKA_PANDA_LEGACY_CFG, prim_path="{ENV_REGEX_NS}/Robot") ee_frame = FrameTransformerCfg( prim_path="{ENV_REGEX_NS}/Robot/panda_link0", debug_vis=False, diff --git a/source/isaaclab_tasks/isaaclab_tasks/core/lift/config/franka/franka_env_cfg.py b/source/isaaclab_tasks/isaaclab_tasks/core/lift/config/franka/franka_env_cfg.py index 2d136cd8c31d..3fd5a0d2b251 100644 --- a/source/isaaclab_tasks/isaaclab_tasks/core/lift/config/franka/franka_env_cfg.py +++ b/source/isaaclab_tasks/isaaclab_tasks/core/lift/config/franka/franka_env_cfg.py @@ -16,7 +16,7 @@ from isaaclab.utils import clone, configclass, replace from isaaclab.utils.assets import ISAACLAB_NUCLEUS_DIR -from isaaclab_assets.robots import FRANKA_PANDA_CFG +from isaaclab_assets.robots import FRANKA_PANDA_LEGACY_CFG from ... import lift_env_cfg as lift from ... import mdp @@ -27,7 +27,7 @@ # The lift tasks run the menagerie-converted asset (identified inertials, authored finger coupling) with # actuators calibrated for it, while the other Franka tasks keep the stock asset. -FRANKA_PANDA_LIFT_CFG = clone(FRANKA_PANDA_CFG) +FRANKA_PANDA_LIFT_CFG = clone(FRANKA_PANDA_LEGACY_CFG) FRANKA_PANDA_LIFT_CFG.spawn.usd_path = f"{ISAACLAB_NUCLEUS_DIR}/Robots/FrankaEmika/franka_panda.usda" # Reset clearance was calibrated for these arm meshes; the asset's primitive colliders intersect the ground. FRANKA_PANDA_LIFT_CFG.spawn.variants = {"Colliders": "convex_hulls"} diff --git a/source/isaaclab_tasks/isaaclab_tasks/core/reach/config/franka/franka_reach_env_cfg.py b/source/isaaclab_tasks/isaaclab_tasks/core/reach/config/franka/franka_reach_env_cfg.py index 1fb5f4847ea5..16fad7b84776 100644 --- a/source/isaaclab_tasks/isaaclab_tasks/core/reach/config/franka/franka_reach_env_cfg.py +++ b/source/isaaclab_tasks/isaaclab_tasks/core/reach/config/franka/franka_reach_env_cfg.py @@ -28,7 +28,7 @@ from isaaclab_tasks.utils import PresetCfg, preset -from isaaclab_assets import FRANKA_PANDA_CFG, FRANKA_PANDA_MENAGERIE_CFG +from isaaclab_assets import FRANKA_PANDA_LEGACY_CFG, FRANKA_PANDA_MENAGERIE_CFG from ...reach_env_cfg import ReachEnvCfg @@ -100,9 +100,9 @@ def __post_init__(self): self.scene.robot = replace(FRANKA_PANDA_MENAGERIE_CFG, prim_path="{ENV_REGEX_NS}/Robot") self.scene.robot.spawn.usd_path = preset( default=self.scene.robot.spawn.usd_path, - isaacsim_physx=FRANKA_PANDA_CFG.spawn.usd_path, - physx=FRANKA_PANDA_CFG.spawn.usd_path, - ovphysx=FRANKA_PANDA_CFG.spawn.usd_path, + isaacsim_physx=FRANKA_PANDA_LEGACY_CFG.spawn.usd_path, + physx=FRANKA_PANDA_LEGACY_CFG.spawn.usd_path, + ovphysx=FRANKA_PANDA_LEGACY_CFG.spawn.usd_path, ) # IK targets need backend-native gravity control to hold steady between commands. self.scene.robot.spawn.rigid_props = [ diff --git a/source/isaaclab_tasks/test/contrib/test_franka_pour_env_cfg.py b/source/isaaclab_tasks/test/contrib/test_franka_pour_env_cfg.py index 4e80cafc5d71..1728396c2f9a 100644 --- a/source/isaaclab_tasks/test/contrib/test_franka_pour_env_cfg.py +++ b/source/isaaclab_tasks/test/contrib/test_franka_pour_env_cfg.py @@ -113,7 +113,7 @@ def test_reset_dataset_contract_stores_root_relative_robot_asset_path(): robot_asset = _reset_dataset_task_contract(cfg)["robot_asset"] assert robot_asset == "Robots/FrankaEmika/franka_panda.usda" assert f"{ISAACLAB_NUCLEUS_DIR}/{robot_asset}" == FRANKA_POUR_ROBOT_ASSET_ID - assert cfg.scene.robot.spawn.variants == {"Colliders": "convex_hulls"} + assert cfg.scene.robot.spawn.variants == {"Physics": "mujoco", "Colliders": "convex_hulls"} def test_capacity_resolution_only_updates_world_dependent_solver_limits():