Skip to content
Merged
Show file tree
Hide file tree
Changes from 21 commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
2a5f45a
Fix fragment writers to reach nested rigid-body and mass prims
vidurv-nvidia Jul 20, 2026
b082790
Add trailing recursive token to prim path expressions
vidurv-nvidia Jul 20, 2026
f49ea9c
Route rigid-body fragment writer through prim path expressions
vidurv-nvidia Jul 21, 2026
234eb08
Create rigid body explicitly in mesh converter
vidurv-nvidia Jul 21, 2026
0cae9d1
Route mass fragment writer through prim path expressions
vidurv-nvidia Jul 21, 2026
a1158e0
Route articulation-root fragment writer through prim path expressions
vidurv-nvidia Jul 21, 2026
6bd2b1b
Route joint-drive fragment writer through prim path expressions
vidurv-nvidia Jul 21, 2026
2589fdc
Merge branch 'vidurv/frag-artic' into vidurv/schema-frag-regex-targeting
vidurv-nvidia Jul 21, 2026
33bc9a8
Merge branch 'vidurv/frag-jointdrive' into vidurv/schema-frag-regex-t…
vidurv-nvidia Jul 21, 2026
9380020
Route collision fragment writer through prim path expressions
vidurv-nvidia Jul 21, 2026
573be92
Route tendon fragment writers through prim path expressions
vidurv-nvidia Jul 21, 2026
9d6b260
Merge branch 'vidurv/frag-collision' into vidurv/schema-frag-regex-ta…
vidurv-nvidia Jul 21, 2026
7fa44ce
Merge branch 'vidurv/frag-tendon' into vidurv/schema-frag-regex-targe…
vidurv-nvidia Jul 21, 2026
fae8290
Drop traversal helper superseded by expression matching
vidurv-nvidia Jul 21, 2026
e7c0e9c
Add per-family target patterns to spawner configs
vidurv-nvidia Jul 21, 2026
56e3004
Add changelog for expression-driven fragment writers
vidurv-nvidia Jul 21, 2026
70069d7
Share the spawner target-pattern join helper
vidurv-nvidia Jul 21, 2026
983165b
Rename creation candidates for clarity in fragment writers
vidurv-nvidia Jul 21, 2026
cffb317
Clarify single-candidate mass creation comment
vidurv-nvidia Jul 21, 2026
1c1371a
Create mass on every matched prim without a body gate
vidurv-nvidia Jul 21, 2026
c1e172a
Tighten mass writer docstrings
vidurv-nvidia Jul 21, 2026
aa9252b
Trust the expression in fragment writer creation
vidurv-nvidia Jul 21, 2026
f69a3d4
Align recursive matching and joint-drive skip reporting
vidurv-nvidia Jul 21, 2026
189c2c4
Key fragment spawner configs by target pattern
vidurv-nvidia Jul 22, 2026
a15edb5
Pin ungated creation coverage and consolidate changelog
vidurv-nvidia Jul 22, 2026
a935eaa
Document schema fragment targeting
vidurv-nvidia Jul 22, 2026
de878d2
Merge branch 'vidurv/frag-docs' into vidurv/schema-frag-regex-targeting
vidurv-nvidia Jul 22, 2026
590d9ee
Merge remote-tracking branch 'origin/develop' into vidurv/schema-frag…
vidurv-nvidia Aug 14, 2026
042dcdb
Replace the recursive token with plain regex targeting
vidurv-nvidia Aug 14, 2026
2509ba0
Mark backend root API relocation gap as expected failure
vidurv-nvidia Aug 14, 2026
c51848c
Point writer docstrings at the shared matcher grammar
vidurv-nvidia Aug 17, 2026
7bd1ac6
Accept collision fragment mappings on deformable meshes
vidurv-nvidia Aug 17, 2026
f325324
Merge branch 'develop' into vidurv/schema-frag-regex-targeting
ooctipus Aug 17, 2026
198639d
Document descendants-only as the whole-subtree idiom
vidurv-nvidia Aug 17, 2026
52e2c29
Merge remote-tracking branch 'vidur/vidurv/schema-frag-regex-targetin…
vidurv-nvidia Aug 17, 2026
aff9ab9
Accept a bare fragment as a spawner field shorthand
vidurv-nvidia Aug 19, 2026
b3a704f
Use the shorthand form in fragment documentation examples
vidurv-nvidia Aug 19, 2026
bcc4b5c
Read the normalized mapping when flattening fragment values
vidurv-nvidia Aug 20, 2026
29caa26
Carry backend root schemas through articulation relocation
vidurv-nvidia Aug 20, 2026
beffe52
Treat an empty fragment sequence as no mapping entries
vidurv-nvidia Aug 24, 2026
03eb6e0
Keep the bare fragment form reaching nested schema carriers
vidurv-nvidia Aug 25, 2026
9e394c2
Keep schema-free assets a single body on the bare-fragment form
vidurv-nvidia Aug 26, 2026
0fbe420
Re-trigger CI
vidurv-nvidia Aug 27, 2026
01d86ae
Merge branch 'develop' into vidurv/schema-frag-regex-targeting
kellyguo11 Aug 29, 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
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
Fixed
^^^^^

* Fixed :func:`~isaaclab.sim.schemas.apply_rigid_body_properties` and
:func:`~isaaclab.sim.schemas.apply_mass_properties` stopping at the outermost schema-bearing
prim on each branch. On assets with nested rigid-body hierarchies (child links authored under
their parent link prims, as produced by the URDF importer in Isaac Sim 6.0 and later), only
the outermost link received the fragment properties. The writers now modify every carrier in
the subtree, matching the legacy writers' full-subtree traversal.
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
Added
^^^^^

* Added a trailing ``**`` token to prim path expressions in
:func:`~isaaclab.sim.utils.find_matching_prims`, matching a prim and all of its
descendants at any depth (instance proxies included).
* Added per-family target-pattern fields to spawner configurations
(e.g. :attr:`~isaaclab.sim.spawners.RigidObjectSpawnerCfg.rigid_props_prim_path`,
:attr:`~isaaclab.sim.spawners.from_files.FileCfg.articulation_props_prim_path`),
selecting which prims of a spawned asset receive schema fragments. Patterns are
relative to the spawn prim; ``None`` keeps the previous behavior.
* Added ``create_if_missing`` to the fragment schema writers and matching spawner
configuration flags (``mass_props_create_if_missing``,
``articulation_props_create_if_missing``, ``joint_drive_props_create_if_missing``)
to apply a defining USD API to matched prims that do not carry it.

Changed
^^^^^^^

* **Breaking:** Changed the fragment schema writers (e.g.
:func:`~isaaclab.sim.schemas.apply_rigid_body_properties`) to take a prim path
expression instead of traversing the subtree of the input prim. A bare prim path now
matches only that prim; pass ``f"{prim_path}/**"`` to recover the previous
subtree-wide behavior. Zero matched targets now log a warning and return ``False``
instead of raising ``ValueError`` on an invalid path.
* **Breaking:** Changed the fragment schema writers to no longer apply their defining
USD API implicitly on bare prims; pass ``create_if_missing=True`` instead. For
articulation roots, anchoring on the spawn prim now requires setting
``articulation_props_prim_path=""`` together with
``articulation_props_create_if_missing=True`` on the spawner configuration.
* **Breaking:** Changed :func:`~isaaclab.sim.schemas.apply_articulation_root_properties`
to raise ``ValueError`` when the expression matches nested articulation roots,
instead of silently pruning them; author a single root per articulation.
12 changes: 9 additions & 3 deletions source/isaaclab/isaaclab/sim/converters/mesh_converter.py
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,9 @@ def _convert_asset(self, cfg: MeshConverterCfg):
cfg.collision_props if isinstance(cfg.collision_props, (list, tuple)) else [cfg.collision_props]
)
if coll_frags and all(isinstance(f, SchemaFragment) for f in coll_frags):
schemas.apply_collision_properties(str(child_mesh_prim.GetPath()), coll_frags, stage=stage)
schemas.apply_collision_properties(
str(child_mesh_prim.GetPath()), coll_frags, create_if_missing=True, stage=stage
)
else:
schemas.define_collision_properties(
prim_path=child_mesh_prim.GetPath(), cfg=cfg.collision_props, stage=stage
Expand Down Expand Up @@ -208,14 +210,18 @@ def _convert_asset(self, cfg: MeshConverterCfg):
# normalize a single fragment to a list so the convenience form routes like a list
mass_frags = [cfg.mass_props] if isinstance(cfg.mass_props, SchemaFragment) else cfg.mass_props
if isinstance(mass_frags, (list, tuple)) and all(isinstance(f, SchemaFragment) for f in mass_frags):
schemas.apply_mass_properties(str(xform_prim.GetPath()), mass_frags, stage=stage)
schemas.apply_mass_properties(
str(xform_prim.GetPath()), mass_frags, create_if_missing=True, stage=stage
)
else:
schemas.define_mass_properties(prim_path=xform_prim.GetPath(), cfg=cfg.mass_props, stage=stage)
# apply rigid body properties (transition shim, remove later: fragment list -> apply_*; legacy cfg -> define_*)
if cfg.rigid_props is not None:
rigid_frags = cfg.rigid_props if isinstance(cfg.rigid_props, (list, tuple)) else [cfg.rigid_props]
if rigid_frags and all(isinstance(f, SchemaFragment) for f in rigid_frags):
schemas.apply_rigid_body_properties(str(xform_prim.GetPath()), rigid_frags, stage=stage)
schemas.apply_rigid_body_properties(
str(xform_prim.GetPath()), rigid_frags, create_if_missing=True, stage=stage
)
else:
schemas.define_rigid_body_properties(prim_path=xform_prim.GetPath(), cfg=cfg.rigid_props, stage=stage)

Expand Down
Loading
Loading