Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
0d21518
Add flat Franka asset and backend body-resolution support
maxkra15 Sep 29, 2026
c40b2ad
Preserve Franka compatibility and fix direct clone matching
maxkra15 Sep 29, 2026
69031a3
Align Reach preset test with preserved Menagerie asset
maxkra15 Sep 29, 2026
6f4affd
Keep published Menagerie URL during Franka migration
maxkra15 Sep 29, 2026
b78c6f0
Preserve mixed body matches and correct Franka migration defaults
maxkra15 Sep 30, 2026
f73ea42
Merge remote-tracking branch 'origin/develop' into maximiliank/franka…
maxkra15 Sep 30, 2026
691c593
Declare the canonical Franka configuration independently
maxkra15 Sep 30, 2026
2840585
Merge remote-tracking branch 'origin/develop' into maximiliank/franka…
maxkra15 Sep 30, 2026
2b64e78
Migrate Franka changelog fragments to Towncrier
maxkra15 Sep 30, 2026
be3f19e
Fix Franka Pour startup with the synced asset
StafaH Oct 1, 2026
d875614
Consolidate Franka regression coverage
StafaH Oct 1, 2026
dc7415d
Simplify Franka config names and Pour overrides
StafaH Oct 1, 2026
a1b4b84
Make flat Franka the main config and name legacy configs explicitly
StafaH Oct 1, 2026
304c728
Group Franka config variants and fix docstring spacing
StafaH Oct 1, 2026
5f10fde
Merge branch 'develop' into maximiliank/franka-flat-backend-upstream
StafaH Oct 1, 2026
6a36528
Match frame bodies without implicit descendant discovery
ooctipus Oct 1, 2026
d648b0a
Trim Franka regression tests to backend behavior
ooctipus Oct 1, 2026
af1a1af
Merge develop and retain upstream Newton shape selection
ooctipus Oct 1, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions scripts/tutorials/05_controllers/run_diff_ik.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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:
Expand Down
4 changes: 2 additions & 2 deletions scripts/tutorials/05_controllers/run_osc.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
Empty file.
4 changes: 2 additions & 2 deletions source/isaaclab/test/controllers/test_differential_ik.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions source/isaaclab/test/controllers/test_operational_space.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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]
Expand Down
Original file line number Diff line number Diff line change
@@ -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``.
Empty file.
4 changes: 4 additions & 0 deletions source/isaaclab_assets/isaaclab_assets/__init__.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down Expand Up @@ -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,
Expand Down
4 changes: 4 additions & 0 deletions source/isaaclab_assets/isaaclab_assets/robots/__init__.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down Expand Up @@ -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,
Expand Down
110 changes: 83 additions & 27 deletions source/isaaclab_assets/isaaclab_assets/robots/franka.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
"""

Expand All @@ -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,
Expand Down Expand Up @@ -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(
Expand All @@ -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
Expand Down Expand Up @@ -172,6 +230,4 @@
damping=0.0,
),
}


"""Configuration of Franka Emika Panda robot with Robotiq_2f_85 gripper."""
Empty file.
45 changes: 24 additions & 21 deletions source/isaaclab_newton/test/assets/test_articulation.py
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down Expand Up @@ -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":
Expand Down Expand Up @@ -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
Expand All @@ -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)
Expand Down Expand Up @@ -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()


Expand Down Expand Up @@ -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,
)
Expand Down Expand Up @@ -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])

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
* Fixed frame-transformer path expressions that directly match a rigid body from also selecting
nested rigid-body descendants.
Loading
Loading