Fix agentic asset defaults - #847
Conversation
Signed-off-by: Qian Lin <qianl@nvidia.com>
Signed-off-by: Qian Lin <qianl@nvidia.com>
Signed-off-by: Qian Lin <qianl@nvidia.com>
There was a problem hiding this comment.
🤖 Isaac Lab-Arena Review Bot
Summary
Focused cleanup + fix for the agentic environment-generation defaults. Most of the diff is safe reduction: the removed __init__ overrides that only forwarded to super() are genuinely redundant, the removed object_type = ObjectType.RIGID lines match the LibraryObject base default, and the removed default_prim_path class attributes are dead (never read — prim paths come from the prim_path arg or the name-based default in ObjectBase.__init__). The real behavioral fix is that RedCube/GreenCube/RedContainer/GreenContainer no longer shadow the base __init__ (their old override dropped instance_name), so instance names now propagate. Two things worth a look: the DROID default control mode now diverges from the other families, and the propagation fix ships without a regression test.
Findings
🟡 Warning: isaaclab_arena/embodiments/droid/droid.py:141 — see inline comment (DROID default now diverges from the other families).
Test Coverage
The tag rename is well covered — test_asset_matcher.py updates the embodiment cases to the ["embodiment", "default"] pool and still asserts franka_joint_pos resolves by exact match ahead of the narrowed pool.
What's missing: the object-library fix (RedCube/GreenCube/RedContainer/GreenContainer now accepting instance_name) has no regression test. Before this PR those classes' __init__ signatures omitted instance_name, so RedCube(instance_name="foo") would have raised TypeError; now it should propagate. A one-liner would guard against the override creeping back — e.g. assert RedCube(instance_name="my_cube").name == "my_cube". Could we add that for at least one of the four?
Verdict
Minor fixes needed
Greptile SummaryThis PR replaces the
Confidence Score: 4/5Safe to merge; all changes are internally consistent and the tag rename is applied uniformly across every robot family. The DROID default is silently flipped from IK control to absolute joint-position control, which is a meaningful behavior change for any agent that queries "droid" by bare family name. The existing test suite only exercises the "franka" bare-family path; there is no test pinning "droid" → "droid_abs_joint_pos", so a future regression could go undetected. The object_library.py cleanups are safe (parent defaults are identical), and the prompt-guidance addition is low-risk. isaaclab_arena/embodiments/droid/droid.py (tag ownership change) and isaaclab_arena/tests/test_asset_matcher.py (missing DROID resolution test). Important Files Changed
Flowchart%%{init: {'theme': 'neutral'}}%%
flowchart TD
A["Agent emits bare family name\n(e.g. 'franka', 'droid', 'g1', 'gr1')"] --> B["IntentCompiler._resolve_asset_node\nrequired_tags=['embodiment']\npreferred_tags=['default']"]
B --> C{"Exact match\nin registry?"}
C -- Yes --> D["Return exact asset\n(e.g. 'franka_joint_pos')"]
C -- No --> E["Filter by required_tags=['embodiment']\nAND preferred_tags=['default']"]
E --> F{"Substring / fuzzy match\nin preferred pool?"}
F -- Yes --> G["Return default-tagged variant"]
F -- No --> H["Fall back to required-tag pool\nfuzzy match"]
H --> I{"Match found?"}
I -- Yes --> J["Return match"]
I -- No --> K["Record miss trace"]
G --> G1["franka → franka_ik\n(tags: embodiment, default)"]
G --> G2["droid → droid_abs_joint_pos\n(tags: embodiment, default)\nWAS: droid_differential_ik"]
G --> G3["g1 → g1_wbc_pink\n(tags: embodiment, default)"]
G --> G4["gr1 → gr1_pink\n(tags: embodiment, default)"]
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
flowchart TD
A["Agent emits bare family name\n(e.g. 'franka', 'droid', 'g1', 'gr1')"] --> B["IntentCompiler._resolve_asset_node\nrequired_tags=['embodiment']\npreferred_tags=['default']"]
B --> C{"Exact match\nin registry?"}
C -- Yes --> D["Return exact asset\n(e.g. 'franka_joint_pos')"]
C -- No --> E["Filter by required_tags=['embodiment']\nAND preferred_tags=['default']"]
E --> F{"Substring / fuzzy match\nin preferred pool?"}
F -- Yes --> G["Return default-tagged variant"]
F -- No --> H["Fall back to required-tag pool\nfuzzy match"]
H --> I{"Match found?"}
I -- Yes --> J["Return match"]
I -- No --> K["Record miss trace"]
G --> G1["franka → franka_ik\n(tags: embodiment, default)"]
G --> G2["droid → droid_abs_joint_pos\n(tags: embodiment, default)\nWAS: droid_differential_ik"]
G --> G3["g1 → g1_wbc_pink\n(tags: embodiment, default)"]
G --> G4["gr1 → gr1_pink\n(tags: embodiment, default)"]
|
Summary
Fix agentic asset defaults
Detailed description
iktodefault.droid_abs_joint_pos.