Skip to content

Commit 273abfb

Browse files
authored
Fix agentic asset defaults (#847)
## Summary Fix agentic asset defaults ## Detailed description - Switched agent embodiment preference from `ik` to `default`. - Moved the DROID default tag to `droid_abs_joint_pos`. - Removed redundant object-library initializers so instance names propagate. - Added prompt guidance for identifier-safe generated node ids. --------- Signed-off-by: Qian Lin <qianl@nvidia.com>
1 parent 8a74e79 commit 273abfb

11 files changed

Lines changed: 21 additions & 192 deletions

File tree

isaaclab_arena/agentic_environment_generation/asset_matcher.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ def match_asset(
6666
6767
required_tags: Tags every candidate must carry (e.g. ``["object"]``).
6868
preferred_tags: Additional tags that narrow the first-pass pool
69-
(e.g. item ``category_tags`` or ``["ik"]`` for embodiments).
69+
(e.g. item ``category_tags`` or ``["default"]`` for embodiments).
7070
When ``None`` or empty, stage 2 is skipped and matching falls
7171
through directly to the required-tag pool.
7272

isaaclab_arena/agentic_environment_generation/environment_generation_agent.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -330,6 +330,8 @@ def _system_prompt(self) -> str:
330330
- params values are node ids or the background name, not registry asset names.
331331
- NODE IDS: an item's id is its instance_name if set, else its query. For multiple
332332
items of the same kind, give each a unique instance_name and use those exact ids everywhere.
333+
- Use underscore_connected identifiers for every query and instance_name (e.g.
334+
'bbq_sauce_bottle', not 'bbq sauce bottle') so node ids are valid Python identifiers.
333335
- Every relation subject/reference and object task param must name one node id — never
334336
a bare query that maps to several instances. Each must name exactly one;
335337
if the prompt doesn't say which, pick any.

isaaclab_arena/agentic_environment_generation/environment_intent_spec.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ class EnvironmentIntentSpec(BaseModel):
8787
description=(
8888
"Robot embodiment to control. Use a bare family name ('franka', "
8989
"'droid', 'g1', 'gr1') when the prompt does not specify a "
90-
"control mode — the resolver defaults each to its IK variant. "
90+
"control mode — the resolver defaults each to its default-tagged variant. "
9191
"Use a full registered name (e.g. 'franka_joint_pos') only when "
9292
"the prompt explicitly requests joint control."
9393
),

isaaclab_arena/agentic_environment_generation/intent_compiler.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ def compile(
8989
trace_prefix="embodiment",
9090
node_type=ArenaEnvGraphNodeType.EMBODIMENT,
9191
required_tags=["embodiment"],
92-
preferred_tags=["ik"],
92+
preferred_tags=["default"],
9393
)
9494
if embodiment_node is not None:
9595
nodes.append(embodiment_node)

isaaclab_arena/assets/object_library.py

Lines changed: 0 additions & 173 deletions
Original file line numberDiff line numberDiff line change
@@ -79,15 +79,6 @@ class CrackerBox(LibraryObject):
7979
tags = ["object"]
8080
usd_path = f"{ISAAC_NUCLEUS_DIR}/Props/YCB/Axis_Aligned_Physics/003_cracker_box.usd"
8181

82-
def __init__(
83-
self,
84-
instance_name: str | None = None,
85-
prim_path: str | None = None,
86-
initial_pose: Pose | None = None,
87-
scale: tuple[float, float, float] | None = None,
88-
):
89-
super().__init__(instance_name=instance_name, prim_path=prim_path, initial_pose=initial_pose, scale=scale)
90-
9182

9283
@register_asset
9384
class MustardBottle(LibraryObject):
@@ -99,15 +90,6 @@ class MustardBottle(LibraryObject):
9990
tags = ["object"]
10091
usd_path = f"{ISAAC_NUCLEUS_DIR}/Props/YCB/Axis_Aligned_Physics/006_mustard_bottle.usd"
10192

102-
def __init__(
103-
self,
104-
instance_name: str | None = None,
105-
prim_path: str | None = None,
106-
initial_pose: Pose | None = None,
107-
scale: tuple[float, float, float] | None = None,
108-
):
109-
super().__init__(instance_name=instance_name, prim_path=prim_path, initial_pose=initial_pose, scale=scale)
110-
11193

11294
@register_asset
11395
class SugarBox(LibraryObject):
@@ -119,15 +101,6 @@ class SugarBox(LibraryObject):
119101
tags = ["object"]
120102
usd_path = f"{ISAAC_NUCLEUS_DIR}/Props/YCB/Axis_Aligned_Physics/004_sugar_box.usd"
121103

122-
def __init__(
123-
self,
124-
instance_name: str | None = None,
125-
prim_path: str | None = None,
126-
initial_pose: Pose | None = None,
127-
scale: tuple[float, float, float] | None = None,
128-
):
129-
super().__init__(instance_name=instance_name, prim_path=prim_path, initial_pose=initial_pose, scale=scale)
130-
131104

132105
@register_asset
133106
class TomatoSoupCan(LibraryObject):
@@ -139,15 +112,6 @@ class TomatoSoupCan(LibraryObject):
139112
tags = ["object"]
140113
usd_path = f"{ISAAC_NUCLEUS_DIR}/Props/YCB/Axis_Aligned_Physics/005_tomato_soup_can.usd"
141114

142-
def __init__(
143-
self,
144-
instance_name: str | None = None,
145-
prim_path: str | None = None,
146-
initial_pose: Pose | None = None,
147-
scale: tuple[float, float, float] | None = None,
148-
):
149-
super().__init__(instance_name=instance_name, prim_path=prim_path, initial_pose=initial_pose, scale=scale)
150-
151115

152116
@register_asset
153117
class PowerDrill(LibraryObject):
@@ -159,15 +123,6 @@ class PowerDrill(LibraryObject):
159123
tags = ["object"]
160124
usd_path = f"{ISAACLAB_NUCLEUS_DIR}/Arena/assets/object_library/power_drill_physics/power_drill_physics.usd"
161125

162-
def __init__(
163-
self,
164-
instance_name: str | None = None,
165-
prim_path: str | None = None,
166-
initial_pose: Pose | None = None,
167-
scale: tuple[float, float, float] | None = None,
168-
):
169-
super().__init__(instance_name=instance_name, prim_path=prim_path, initial_pose=initial_pose, scale=scale)
170-
171126

172127
@register_asset
173128
class Microwave(LibraryObject, Openable):
@@ -266,15 +221,6 @@ class OfficeTable(LibraryObject):
266221
usd_path = f"{ISAACLAB_NUCLEUS_DIR}/Mimic/nut_pour_task/nut_pour_assets/table.usd"
267222
scale = (1.0, 1.0, 0.7)
268223

269-
def __init__(
270-
self,
271-
instance_name: str | None = None,
272-
prim_path: str | None = None,
273-
initial_pose: Pose | None = None,
274-
scale: tuple[float, float, float] | None = None,
275-
):
276-
super().__init__(instance_name=instance_name, prim_path=prim_path, initial_pose=initial_pose, scale=scale)
277-
278224

279225
@register_asset
280226
class BlueSortingBin(LibraryObject):
@@ -287,15 +233,6 @@ class BlueSortingBin(LibraryObject):
287233
usd_path = f"{ISAACLAB_NUCLEUS_DIR}/Mimic/exhaust_pipe_task/exhaust_pipe_assets/blue_sorting_bin.usd"
288234
scale = (4.0, 2.0, 1.0)
289235

290-
def __init__(
291-
self,
292-
instance_name: str | None = None,
293-
prim_path: str | None = None,
294-
initial_pose: Pose | None = None,
295-
scale: tuple[float, float, float] | None = None,
296-
):
297-
super().__init__(instance_name=instance_name, prim_path=prim_path, initial_pose=initial_pose, scale=scale)
298-
299236

300237
@register_asset
301238
class BlueExhaustPipe(LibraryObject):
@@ -308,15 +245,6 @@ class BlueExhaustPipe(LibraryObject):
308245
usd_path = f"{ISAACLAB_NUCLEUS_DIR}/Mimic/exhaust_pipe_task/exhaust_pipe_assets/blue_exhaust_pipe.usd"
309246
scale = (0.55, 0.55, 1.4)
310247

311-
def __init__(
312-
self,
313-
instance_name: str | None = None,
314-
prim_path: str | None = None,
315-
initial_pose: Pose | None = None,
316-
scale: tuple[float, float, float] | None = None,
317-
):
318-
super().__init__(instance_name=instance_name, prim_path=prim_path, initial_pose=initial_pose, scale=scale)
319-
320248

321249
@register_asset
322250
class BrownBox(LibraryObject):
@@ -329,15 +257,6 @@ class BrownBox(LibraryObject):
329257
usd_path = f"{ISAACLAB_NUCLEUS_DIR}/Arena/assets/object_library/brown_box/brown_box.usd"
330258
scale = (1.0, 1.0, 1.0)
331259

332-
def __init__(
333-
self,
334-
instance_name: str | None = None,
335-
prim_path: str | None = None,
336-
initial_pose: Pose | None = None,
337-
scale: tuple[float, float, float] | None = None,
338-
):
339-
super().__init__(instance_name=instance_name, prim_path=prim_path, initial_pose=initial_pose, scale=scale)
340-
341260

342261
@register_asset
343262
class Mug(LibraryObject, Placeable):
@@ -348,7 +267,6 @@ class Mug(LibraryObject, Placeable):
348267
name = "mug"
349268
tags = ["object"]
350269
usd_path = f"{ISAACLAB_NUCLEUS_DIR}/Objects/Mug/mug.usd"
351-
object_type = ObjectType.RIGID
352270
scale = (1.0, 1.0, 1.0)
353271

354272
# Placeable affordance parameters
@@ -415,7 +333,6 @@ class Sphere(LibraryObject):
415333

416334
name = "sphere"
417335
tags = ["object"]
418-
object_type = ObjectType.RIGID
419336
scale = (1.0, 1.0, 1.0)
420337
default_spawner_cfg = sim_utils.SphereCfg(
421338
radius=0.1,
@@ -533,16 +450,6 @@ class DexCube(LibraryObject):
533450
tags = ["object"]
534451
usd_path = f"{ISAAC_NUCLEUS_DIR}/Props/Blocks/DexCube/dex_cube_instanceable.usd"
535452
scale = (0.8, 0.8, 0.8)
536-
object_type = ObjectType.RIGID
537-
538-
def __init__(
539-
self,
540-
instance_name: str | None = None,
541-
prim_path: str | None = None,
542-
initial_pose: Pose | None = None,
543-
scale: tuple[float, float, float] | None = None,
544-
):
545-
super().__init__(instance_name=instance_name, prim_path=prim_path, initial_pose=initial_pose, scale=scale)
546453

547454

548455
@register_asset
@@ -680,16 +587,6 @@ class Broccoli(LibraryObject):
680587
name = "broccoli"
681588
tags = ["object", "vegetable", "graspable"]
682589
usd_path = LightwheelLazyPath(registry_type="objects", registry_name=["broccoli"], file_type="USD")
683-
object_type = ObjectType.RIGID
684-
685-
def __init__(
686-
self,
687-
instance_name: str | None = None,
688-
prim_path: str | None = None,
689-
initial_pose: Pose | None = None,
690-
scale: tuple[float, float, float] | None = None,
691-
):
692-
super().__init__(instance_name=instance_name, prim_path=prim_path, initial_pose=initial_pose, scale=scale)
693590

694591

695592
@register_asset
@@ -701,18 +598,8 @@ class SweetPotato(LibraryObject):
701598
name = "sweet_potato"
702599
tags = ["object", "vegetable", "graspable"]
703600
usd_path = LightwheelLazyPath(registry_type="objects", file_name="SweetPotato005", file_type="USD")
704-
object_type = ObjectType.RIGID
705601
scale = (1.5, 1.5, 1.5)
706602

707-
def __init__(
708-
self,
709-
instance_name: str | None = None,
710-
prim_path: str | None = None,
711-
initial_pose: Pose | None = None,
712-
scale: tuple[float, float, float] | None = None,
713-
):
714-
super().__init__(instance_name=instance_name, prim_path=prim_path, initial_pose=initial_pose, scale=scale)
715-
716603

717604
@register_asset
718605
class Jug(LibraryObject):
@@ -723,18 +610,8 @@ class Jug(LibraryObject):
723610
name = "jug"
724611
tags = ["object", "graspable"]
725612
usd_path = LightwheelLazyPath(registry_type="objects", file_name="Jug005", file_type="USD")
726-
object_type = ObjectType.RIGID
727613
scale = (2.0, 2.0, 2.0)
728614

729-
def __init__(
730-
self,
731-
instance_name: str | None = None,
732-
prim_path: str | None = None,
733-
initial_pose: Pose | None = None,
734-
scale: tuple[float, float, float] | None = None,
735-
):
736-
super().__init__(instance_name=instance_name, prim_path=prim_path, initial_pose=initial_pose, scale=scale)
737-
738615

739616
@register_asset
740617
class BeerBottle(LibraryObject):
@@ -745,18 +622,8 @@ class BeerBottle(LibraryObject):
745622
name = "beer_bottle"
746623
tags = ["object", "graspable"]
747624
usd_path = LightwheelLazyPath(registry_type="objects", file_name="beer016", file_type="USD")
748-
object_type = ObjectType.RIGID
749625
scale = (1.2, 1.2, 1.2)
750626

751-
def __init__(
752-
self,
753-
instance_name: str | None = None,
754-
prim_path: str | None = None,
755-
initial_pose: Pose | None = None,
756-
scale: tuple[float, float, float] | None = None,
757-
):
758-
super().__init__(instance_name=instance_name, prim_path=prim_path, initial_pose=initial_pose, scale=scale)
759-
760627

761628
@register_asset
762629
class RedCube(LibraryObject):
@@ -769,18 +636,8 @@ class RedCube(LibraryObject):
769636

770637
usd_path = f"{ISAAC_NUCLEUS_DIR}/Props/Blocks/red_block.usd"
771638

772-
object_type = ObjectType.RIGID
773-
default_prim_path = "{ENV_REGEX_NS}/RedCube"
774639
scale = (0.02, 0.02, 0.02)
775640

776-
def __init__(
777-
self,
778-
prim_path: str | None = None,
779-
initial_pose: Pose | None = None,
780-
scale: tuple[float, float, float] | None = None,
781-
):
782-
super().__init__(prim_path=prim_path, initial_pose=initial_pose, scale=scale)
783-
784641

785642
@register_asset
786643
class GreenCube(LibraryObject):
@@ -792,18 +649,8 @@ class GreenCube(LibraryObject):
792649
tags = ["object"]
793650

794651
usd_path = f"{ISAAC_NUCLEUS_DIR}/Props/Blocks/green_block.usd"
795-
object_type = ObjectType.RIGID
796-
default_prim_path = "{ENV_REGEX_NS}/GreenCube"
797652
scale = (0.02, 0.02, 0.02)
798653

799-
def __init__(
800-
self,
801-
prim_path: str | None = None,
802-
initial_pose: Pose | None = None,
803-
scale: tuple[float, float, float] | None = None,
804-
):
805-
super().__init__(prim_path=prim_path, initial_pose=initial_pose, scale=scale)
806-
807654

808655
@register_asset
809656
class RedContainer(LibraryObject):
@@ -814,18 +661,8 @@ class RedContainer(LibraryObject):
814661
name = "red_container"
815662
tags = ["object"]
816663
usd_path = f"{ISAACLAB_NUCLEUS_DIR}/Arena/assets/object_library/isaac_container/container_h20_red.usd"
817-
object_type = ObjectType.RIGID
818-
default_prim_path = "{ENV_REGEX_NS}/red_container"
819664
scale = (0.5, 0.5, 0.5)
820665

821-
def __init__(
822-
self,
823-
prim_path: str | None = None,
824-
initial_pose: Pose | None = None,
825-
scale: tuple[float, float, float] | None = None,
826-
):
827-
super().__init__(prim_path=prim_path, initial_pose=initial_pose, scale=scale)
828-
829666

830667
@register_asset
831668
class GreenContainer(LibraryObject):
@@ -836,18 +673,8 @@ class GreenContainer(LibraryObject):
836673
name = "green_container"
837674
tags = ["object"]
838675
usd_path = f"{ISAACLAB_NUCLEUS_DIR}/Arena/assets/object_library/isaac_container/container_h20_green.usd"
839-
object_type = ObjectType.RIGID
840-
default_prim_path = "{ENV_REGEX_NS}/green_container"
841676
scale = (0.5, 0.5, 0.5)
842677

843-
def __init__(
844-
self,
845-
prim_path: str | None = None,
846-
initial_pose: Pose | None = None,
847-
scale: tuple[float, float, float] | None = None,
848-
):
849-
super().__init__(prim_path=prim_path, initial_pose=initial_pose, scale=scale)
850-
851678

852679
@register_asset
853680
class BlueBlockBasicRobolab(LibraryObject):

isaaclab_arena/embodiments/droid/droid.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,6 @@ class DroidDifferentialIKEmbodiment(DroidEmbodimentBase):
100100
"""Embodiment for the DROID setup with differential inverse kinematics action controller."""
101101

102102
name = "droid_differential_ik"
103-
tags = ["embodiment", "ik"]
104103
default_arm_mode = ArmMode.SINGLE_ARM
105104

106105
def __init__(
@@ -139,6 +138,7 @@ class DroidAbsoluteJointPositionEmbodiment(DroidEmbodimentBase):
139138
"""Embodiment for the DROID setup with absolute joint position actions."""
140139

141140
name = "droid_abs_joint_pos"
141+
tags = ["embodiment", "default"]
142142
default_arm_mode = ArmMode.SINGLE_ARM
143143

144144
def __init__(

isaaclab_arena/embodiments/franka/franka.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ class FrankaIKEmbodiment(FrankaEmbodimentBase):
101101
"""Franka with differential IK (relative) arm control and high-PD defaults."""
102102

103103
name = "franka_ik"
104-
tags = ["embodiment", "ik"]
104+
tags = ["embodiment", "default"]
105105

106106
def __init__(
107107
self,

isaaclab_arena/embodiments/g1/g1.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ class G1WBCPinkEmbodiment(G1EmbodimentBase):
142142
"""
143143

144144
name = "g1_wbc_pink"
145-
tags = ["embodiment", "ik"]
145+
tags = ["embodiment", "default"]
146146

147147
def __init__(
148148
self,

0 commit comments

Comments
 (0)